From: Imagination Technologies/TI Date: Mon, 11 Feb 2013 01:36:11 +0000 (+0200) Subject: 1.7.17.783851/4.06.00.01 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7d4c97774f226e804382d57866a6e9d3dfba040b;p=sgx.git 1.7.17.783851/4.06.00.01 --- diff --git a/Makefile b/Makefile index b8e2299..2daf6a9 100644 --- a/Makefile +++ b/Makefile @@ -122,8 +122,12 @@ OMAP_NON_FLIP_DISPLAY = 1 endif #endif - - +PVR_NO_FULL_CACHE_OPS := 1 +SGX_DYNAMIC_TIMING_INFO := 1 +SYS_CUSTOM_POWERLOCK_WRAP := 1 +PVR_LDM_PLATFORM_PRE_REGISTERED := 0 +PVR_SECURE_HANDLES :=1 +DEBUGLINK :=1 PVRSRV_MODNAME ?= pvrsrvkm SYS_CFLAGS += -DPVRSRV_MODNAME="\"$(PVRSRV_MODNAME)"\" @@ -249,6 +253,12 @@ endif SUPPORT_SGX_NEW_STATUS_VALS ?= 1 +PVR_LINUX_USING_WORKQUEUES := 1 +PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE := 1 +PVR_LINUX_TIMERS_USING_WORKQUEUES := 1 +SYS_CUSTOM_POWERLOCK_WRAP := 1 + + DC_NOHW_WIDTH ?= 640 DC_NOHW_HEIGHT ?= 480 @@ -264,6 +274,9 @@ USE_GCC__thread_KEYWORD ?= 0 OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP ?= 0 DISABLE_THREADS ?= 0 +#PVRSRV_USSE_EDM_STATUS_DEBUG := 1 +#PVRSRV_DUMP_MK_TRACE := 1 + # Automatically define C compiler macros for features possible (or not) in use. SYS_CFLAGS.$(SUPPORT_SRVINIT) += -DSUPPORT_SRVINIT diff --git a/eurasiacon/build/linux/exports/egl.txt b/eurasiacon/build/linux/exports/egl.txt deleted file mode 100644 index 53f97fb..0000000 --- a/eurasiacon/build/linux/exports/egl.txt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * EGL 1.0 FUNCTIONS - */ -eglChooseConfig -eglCopyBuffers -eglCreateContext -eglCreatePbufferSurface -eglCreatePixmapSurface -eglCreateWindowSurface -eglDestroyContext -eglDestroySurface -eglGetConfigAttrib -eglGetConfigs -eglGetCurrentContext -eglGetCurrentDisplay -eglGetCurrentSurface -eglGetDisplay -eglGetError -eglGetProcAddress -eglInitialize -eglMakeCurrent -eglQueryContext -eglQueryString -eglQuerySurface -eglSwapBuffers -eglTerminate -eglWaitGL -eglWaitNative - -/* - * EGL 1.1 FUNCTIONS - */ -eglBindTexImage -eglSwapInterval -eglReleaseTexImage -eglSurfaceAttrib diff --git a/eurasiacon/build/linux/exports/ignored_symbols.txt b/eurasiacon/build/linux/exports/ignored_symbols.txt deleted file mode 100644 index 538ad12..0000000 --- a/eurasiacon/build/linux/exports/ignored_symbols.txt +++ /dev/null @@ -1,4 +0,0 @@ -^_init -^_fini -^__data_start -^__aeabi_f2ulz diff --git a/eurasiacon/build/linux/exports/libEGL.so.txt b/eurasiacon/build/linux/exports/libEGL.so.txt deleted file mode 100644 index bff89e1..0000000 --- a/eurasiacon/build/linux/exports/libEGL.so.txt +++ /dev/null @@ -1,10 +0,0 @@ -#include "egl.txt" - -/* - * EGL 1.2/1.3 FUNCTIONS - */ -eglCreatePbufferFromClientBuffer -eglBindAPI -eglQueryAPI -eglWaitClient -eglReleaseThread diff --git a/eurasiacon/build/linux/exports/libGLES_CM.so.txt b/eurasiacon/build/linux/exports/libGLES_CM.so.txt deleted file mode 100644 index 0b55307..0000000 --- a/eurasiacon/build/linux/exports/libGLES_CM.so.txt +++ /dev/null @@ -1,2 +0,0 @@ -#include "egl.txt" -#include "libGLESv1_CM.so.txt" diff --git a/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt b/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt deleted file mode 100644 index f29d2c2..0000000 --- a/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt +++ /dev/null @@ -1,113 +0,0 @@ -/* - * OPENGLES 1.0 COMMON LITE FUNCTIONS - */ -glActiveTexture -glAlphaFuncx -glBindTexture -glBlendFunc -glClear -glClearColorx -glClearDepthx -glClearStencil -glClientActiveTexture -glColor4x -glColorMask -glColorPointer -glCompressedTexImage2D -glCompressedTexSubImage2D -glCopyTexImage2D -glCopyTexSubImage2D -glCullFace -glDeleteTextures -glDepthFunc -glDepthMask -glDepthRangex -glDisable -glDisableClientState -glDrawArrays -glDrawElements -glEnable -glEnableClientState -glFinish -glFlush -glFogx -glFogxv -glFrontFace -glFrustumx -glGenTextures -glGetError -glGetIntegerv -glGetString -glHint -glLightModelx -glLightModelxv -glLightx -glLightxv -glLineWidthx -glLoadIdentity -glLoadMatrixx -glLogicOp -glMaterialx -glMaterialxv -glMatrixMode -glMultMatrixx -glMultiTexCoord4x -glNormal3x -glNormalPointer -glOrthox -glPixelStorei -glPointSizex -glPolygonOffsetx -glPopMatrix -glPushMatrix -glReadPixels -glRotatex -glSampleCoveragex -glScalex -glScissor -glShadeModel -glStencilFunc -glStencilMask -glStencilOp -glTexCoordPointer -glTexEnvx -glTexEnvxv -glTexImage2D -glTexParameterx -glTexSubImage2D -glTranslatex -glVertexPointer -glViewport - -/* - * OPENGLES 1.1 COMMON LITE FUNCTIONS - */ -glBindBuffer -glBufferData -glBufferSubData -glClipPlanex -glColor4ub -glDeleteBuffers -glGetBooleanv -glGetBufferParameteriv -glGetClipPlanex -glGenBuffers -glGetFixedv -glGetLightxv -glGetMaterialxv -glGetPointerv -glGetTexEnviv -glGetTexEnvxv -glGetTexParameteriv -glGetTexParameterxv -glIsBuffer -glIsEnabled -glIsTexture -glPointParameterx -glPointParameterxv -glPointSizePointerOES -glTexEnvi -glTexParameteri -glTexParameteriv -glTexParameterxv -glTexEnviv diff --git a/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt b/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt deleted file mode 100644 index 5c7f919..0000000 --- a/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt +++ /dev/null @@ -1,48 +0,0 @@ -#include "libGLESv1_CL.so.txt" - -/* - * OPENGLES 1.0 COMMON FUNCTIONS - */ -glAlphaFunc -glClearColor -glClearDepthf -glColor4f -glDepthRangef -glFogf -glFogfv -glFrustumf -glLightModelf -glLightModelfv -glLightf -glLightfv -glLineWidth -glLoadMatrixf -glMaterialf -glMaterialfv -glMultMatrixf -glMultiTexCoord4f -glNormal3f -glOrthof -glPointSize -glPolygonOffset -glRotatef -glSampleCoverage -glScalef -glTexEnvf -glTexEnvfv -glTexParameterf -glTranslatef - -/* - * OPENGLES 1.1 COMMON FUNCTIONS - */ -glClipPlanef -glGetClipPlanef -glGetFloatv -glGetLightfv -glGetMaterialfv -glGetTexEnvfv -glGetTexParameterfv -glPointParameterf -glPointParameterfv -glTexParameterfv diff --git a/eurasiacon/build/linux/exports/libGLESv2.so.txt b/eurasiacon/build/linux/exports/libGLESv2.so.txt deleted file mode 100644 index 0ab65be..0000000 --- a/eurasiacon/build/linux/exports/libGLESv2.so.txt +++ /dev/null @@ -1,145 +0,0 @@ -/* - * OGLES 2.0 core functions - */ -glActiveTexture -glAttachShader -glBindAttribLocation -glBindBuffer -glBindFramebuffer -glBindRenderbuffer -glBindTexture -glBlendColor -glBlendEquation -glBlendEquationSeparate -glBlendFunc -glBlendFuncSeparate -glBufferData -glBufferSubData -glCheckFramebufferStatus -glClear -glClearColor -glClearDepthf -glClearStencil -glColorMask -glCompileShader -glCompressedTexImage2D -glCompressedTexSubImage2D -glCopyTexImage2D -glCopyTexSubImage2D -glCreateProgram -glCreateShader -glCullFace -glDeleteBuffers -glDeleteTextures -glDeleteProgram -glDeleteFramebuffers -glDeleteRenderbuffers -glDeleteShader -glDetachShader -glDepthFunc -glDepthMask -glDepthRangef -glDisable -glDisableVertexAttribArray -glDrawArrays -glDrawElements -glEnable -glEnableVertexAttribArray -glFinish -glFlush -glFramebufferTexture2D -glFramebufferRenderbuffer -glFrontFace -glGetActiveAttrib -glGetActiveUniform -glGetAttachedShaders -glGetAttribLocation -glGetBooleanv -glGetBufferParameteriv -glGenBuffers -glGenerateMipmap -glGenFramebuffers -glGenRenderbuffers -glGenTextures -glGetError -glGetFloatv -glGetFramebufferAttachmentParameteriv -glGetIntegerv -glGetProgramiv -glGetProgramInfoLog -glGetRenderbufferParameteriv -glGetShaderiv -glGetShaderInfoLog -glGetShaderPrecisionFormat -glGetShaderSource -glGetString -glGetTexParameteriv -glGetTexParameterfv -glGetUniformfv -glGetUniformiv -glGetUniformLocation -glGetVertexAttribfv -glGetVertexAttribiv -glGetVertexAttribPointerv -glHint -glIsBuffer -glIsEnabled -glIsFramebuffer -glIsProgram -glIsRenderbuffer -glIsShader -glIsTexture -glLineWidth -glLinkProgram -glPixelStorei -glPolygonOffset -glReadPixels -glReleaseShaderCompiler -glRenderbufferStorage -glSampleCoverage -glScissor -glShaderBinary -glShaderSource -glStencilFunc -glStencilFuncSeparate -glStencilMask -glStencilMaskSeparate -glStencilOp -glStencilOpSeparate -glTexImage2D -glTexParameteri -glTexParameterf -glTexParameteriv -glTexParameterfv -glTexSubImage2D -glUniform1i -glUniform2i -glUniform3i -glUniform4i -glUniform1f -glUniform2f -glUniform3f -glUniform4f -glUniform1iv -glUniform2iv -glUniform3iv -glUniform4iv -glUniform1fv -glUniform2fv -glUniform3fv -glUniform4fv -glUniformMatrix2fv -glUniformMatrix3fv -glUniformMatrix4fv -glUseProgram -glValidateProgram -glVertexAttrib1f -glVertexAttrib2f -glVertexAttrib3f -glVertexAttrib4f -glVertexAttrib1fv -glVertexAttrib2fv -glVertexAttrib3fv -glVertexAttrib4fv -glVertexAttribPointer -glViewport diff --git a/eurasiacon/build/linux/exports/libIMGegl.so.txt b/eurasiacon/build/linux/exports/libIMGegl.so.txt deleted file mode 100644 index d089eab..0000000 --- a/eurasiacon/build/linux/exports/libIMGegl.so.txt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * IMGEGL FUNCTIONS - */ -IMGeglBindAPI -IMGeglBindTexImage -IMGeglChooseConfig -IMGeglCopyBuffers -IMGeglCreateContext -IMGeglCreatePbufferFromClientBuffer -IMGeglCreatePbufferSurface -IMGeglCreatePixmapSurface -IMGeglCreateWindowSurface -IMGeglDestroyContext -IMGeglDestroySurface -IMGeglGetConfigAttrib -IMGeglGetConfigs -IMGeglGetCurrentContext -IMGeglGetCurrentDisplay -IMGeglGetCurrentSurface -IMGeglGetDisplay -IMGeglGetError -IMGeglGetProcAddress -IMGeglInitialize -IMGeglMakeCurrent -IMGeglQueryAPI -IMGeglQueryContext -IMGeglQueryString -IMGeglQuerySurface -IMGeglReleaseTexImage -IMGeglReleaseThread -IMGeglSurfaceAttrib -IMGeglSwapBuffers -IMGeglSwapInterval -IMGeglTerminate -IMGeglWaitClient -IMGeglWaitGL -IMGeglWaitNative - -KEGLBindImage -KEGLCreateRenderSurface -KEGLDestroyRenderSurface -KEGLGetDrawableParameters -KEGLGetImageSource -KEGLResizeRenderSurface -KEGLSurfaceBind -KEGLSurfaceUnbind -KEGLUnbindImage - -#if defined(DEBUG) -KEGLAllocDeviceMemTrack -KEGLFreeDeviceMemTrack -#endif /* defined(DEBUG) */ - diff --git a/eurasiacon/build/linux/exports/libOpenVG.so.txt b/eurasiacon/build/linux/exports/libOpenVG.so.txt deleted file mode 100644 index dad4187..0000000 --- a/eurasiacon/build/linux/exports/libOpenVG.so.txt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * OpenVG core functions - */ -vgAppendPath -vgAppendPathData -vgChildImage -vgClear -vgClearGlyph -vgClearImage -vgClearPath -vgColorMatrix -vgConvolve -vgCopyImage -vgCopyMask -vgCopyPixels -vgCreateFont -vgCreateImage -vgCreateMaskLayer -vgCreatePaint -vgCreatePath -vgDestroyFont -vgDestroyImage -vgDestroyMaskLayer -vgDestroyPaint -vgDestroyPath -vgDrawGlyph -vgDrawGlyphs -vgDrawImage -vgDrawPath -vgFillMaskLayer -vgFinish -vgFlush -vgGaussianBlur -vgGetColor -vgGetError -vgGetImageSubData -vgGetMatrix -vgGetPaint -vgGetParameterVectorSize -vgGetParameterf -vgGetParameterfv -vgGetParameteri -vgGetParameteriv -vgGetParent -vgGetPathCapabilities -vgGetPixels -vgGetString -vgGetVectorSize -vgGetf -vgGetfv -vgGeti -vgGetiv -vgHardwareQuery -vgImageSubData -vgInterpolatePath -vgLoadIdentity -vgLoadMatrix -vgLookup -vgLookupSingle -vgMask -vgModifyPathCoords -vgMultMatrix -vgPaintPattern -vgPathBounds -vgPathLength -vgPathTransformedBounds -vgPointAlongPath -vgReadPixels -vgRemovePathCapabilities -vgRenderToMask -vgRotate -vgScale -vgSeparableConvolve -vgSetColor -vgSetGlyphToImage -vgSetGlyphToPath -vgSetPaint -vgSetParameterf -vgSetParameterfv -vgSetParameteri -vgSetParameteriv -vgSetPixels -vgSetf -vgSetfv -vgSeti -vgSetiv -vgShear -vgTransformPath -vgTranslate -vgWritePixels diff --git a/eurasiacon/build/linux/exports/libOpenVGU.so.txt b/eurasiacon/build/linux/exports/libOpenVGU.so.txt deleted file mode 100644 index a894d89..0000000 --- a/eurasiacon/build/linux/exports/libOpenVGU.so.txt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * OpenVG utility functions - */ -vguArc -vguComputeWarpQuadToQuad -vguComputeWarpQuadToSquare -vguComputeWarpSquareToQuad -vguEllipse -vguLine -vguPolygon -vguRect -vguRoundRect diff --git a/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt b/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt deleted file mode 100644 index dc5878c..0000000 --- a/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt +++ /dev/null @@ -1,4 +0,0 @@ -/* - * PVRSCOPESERVICES FUNCTIONS - */ -pvrssGetProcAddress diff --git a/eurasiacon/build/linux/exports/libews.so.txt b/eurasiacon/build/linux/exports/libews.so.txt deleted file mode 100644 index b0c5ba3..0000000 --- a/eurasiacon/build/linux/exports/libews.so.txt +++ /dev/null @@ -1,50 +0,0 @@ -/* $Revision: 1.5 $ */ -EWSAtomName -EWSBlitWindow -EWSClearEventQueue -EWSCloseDisplay -EWSCreateWindow -EWSDefaultErrorHandler -EWSDestroyWindow -EWSEventsQueued -EWSFrameComplete -EWSGetProperty -EWSGetPropertyEx -EWSGetRestrictedProperty -EWSGetSurfaceInfo -EWSInternAtom -EWSListProperties -EWSListPropertiesEx -EWSListRestrictedProperties -EWSListWindows -EWSLockBuffer -EWSNextEvent -EWSNextEventIfAvailable -EWSNextQueuedEvent -EWSNoOp -EWSOpenDisplay -EWSPackCoord -EWSPackPixelFormat -EWSPackSize -EWSPackZOrder -EWSPeekEvent -EWSPeekEventIfAvailable -EWSPropertyLength -EWSPropertyLengthEx -EWSRegisterEventHandler -EWSRestrictedPropertyLength -EWSServerRunning -EWSSetErrorHandler -EWSSetProperty -EWSSetPropertyEx -EWSSetRestrictedProperty -EWSUnlockBuffer -EWSUnpackCoord -EWSUnpackPixelFormat -EWSUnpackSize -EWSUnpackZOrder -EWSUnregisterEventHandler -EWSValidDisplay -EWSWriteProperty -EWSWritePropertyEx -EWSWriteRestrictedProperty diff --git a/eurasiacon/build/linux/exports/libglslcompiler.so.txt b/eurasiacon/build/linux/exports/libglslcompiler.so.txt deleted file mode 100644 index e35ac5a..0000000 --- a/eurasiacon/build/linux/exports/libglslcompiler.so.txt +++ /dev/null @@ -1,9 +0,0 @@ -/* - * GLSL compiler functions - */ -GLSLCompileToUniflex -GLSLFreeCompiledUniflexProgram -GLSLInitCompiler -GLSLDisplayMetrics -GLSLShutDownCompiler -SGXBS_CreateBinaryProgram diff --git a/eurasiacon/build/linux/exports/libpvr2d.so.txt b/eurasiacon/build/linux/exports/libpvr2d.so.txt deleted file mode 100644 index ec59a81..0000000 --- a/eurasiacon/build/linux/exports/libpvr2d.so.txt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * PVR2D FUNCTIONS - */ -PVR2DBlt -PVR2DBlt3D -PVR2DBlt3DExt -PVR2DBltClipped -PVR2DCreateDeviceContext -PVR2DCreateFlipChain -PVR2DDestroyDeviceContext -PVR2DDestroyFlipChain -PVR2DEnumerateDevices -PVR2DFreeUseCode -PVR2DGetAPIRev -PVR2DGetDeviceInfo -PVR2DGetFlipChainBuffers -PVR2DGetFrameBuffer -PVR2DGetScreenMode -PVR2DLoadUseCode -PVR2DMemAlloc -PVR2DMemFree -PVR2DMemWrap -PVR2DMemExport -PVR2DPresentBlt -PVR2DPresentFlip -PVR2DQueryBlitsComplete -PVR2DSetPresentBltProperties -PVR2DSetPresentFlipProperties -PVR2DMemMap -PVR2DSet1555Alpha -PVR2DGetMiscDisplayInfo diff --git a/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt deleted file mode 100644 index 08e9e0c..0000000 --- a/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt +++ /dev/null @@ -1,2 +0,0 @@ -/* $Revision: 1.1 $ */ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt deleted file mode 100644 index beb7704..0000000 --- a/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt +++ /dev/null @@ -1 +0,0 @@ -#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libsrv_init.so.txt b/eurasiacon/build/linux/exports/libsrv_init.so.txt deleted file mode 100644 index 23b1612..0000000 --- a/eurasiacon/build/linux/exports/libsrv_init.so.txt +++ /dev/null @@ -1 +0,0 @@ -SrvInit diff --git a/eurasiacon/build/linux/exports/libsrv_um.so.txt b/eurasiacon/build/linux/exports/libsrv_um.so.txt deleted file mode 100644 index d5fad42..0000000 --- a/eurasiacon/build/linux/exports/libsrv_um.so.txt +++ /dev/null @@ -1,215 +0,0 @@ -/* - * SERVICES_UM FUNCTIONS - */ -PVRSRVAcquireDeviceData -PVRSRVAllocDeviceMem -PVRSRVAllocUserModeMem -PVRSRVCallocUserModeMem -PVRSRVClientEvent -PVRSRVClockus -PVRSRVCloseBCDevice -PVRSRVCloseDCDevice -PVRSRVConnect -PVRSRVCreateAppHintState -PVRSRVCreateDCSwapChain -PVRSRVCreateDeviceMemContext -PVRSRVCreateMutex -PVRSRVDestroyDCSwapChain -PVRSRVDestroyDeviceMemContext -PVRSRVDestroyMutex -PVRSRVDisconnect -PVRSRVEnumDCDims -PVRSRVEnumDCFormats -PVRSRVEnumerateDeviceClass -PVRSRVEnumerateDevices -PVRSRVEventObjectWait -PVRSRVFreeAppHintState -PVRSRVFreeDeviceMem -PVRSRVFreeUserModeMem -PVRSRVGetAppHint -PVRSRVGetBCBuffer -PVRSRVGetBCBufferInfo -PVRSRVGetDCBuffers -PVRSRVGetDCInfo -PVRSRVGetDCSystemBuffer -PVRSRVGetLibFuncAddr -PVRSRVGetMiscInfo -PVRSRVInitSrvConnect -PVRSRVInitSrvDisconnect -PVRSRVLoadLibrary -PVRSRVLockMutex -PVRSRVMapDeviceClassMemory -PVRSRVMapPhysToUserSpace -PVRSRVMemCopy -PVRSRVMemSet -PVRSRVCreateSyncInfoModObj -PVRSRVDestroySyncInfoModObj -PVRSRVModifyCompleteSyncOps -PVRSRVModifyPendingSyncOps -PVRSRVSyncOpsFlushToModObj -PVRSRVSyncOpsFlushToDelta -PVRSRVAllocSyncInfo -PVRSRVFreeSyncInfo -PVRSRVOpenBCDevice -PVRSRVOpenDCDevice -PVRSRVReallocUserModeMem -PVRSRVReleaseMiscInfo -PVRSRVReleaseThreadQuanta -PVRSRVSetDCDstColourKey -PVRSRVSetDCDstRect -PVRSRVSetDCSrcColourKey -PVRSRVSetDCSrcRect -PVRSRVSwapToDCBuffer -PVRSRVSwapToDCSystem -PVRSRVUnloadLibrary -PVRSRVUnlockMutex -PVRSRVUnmapDeviceClassMemory -PVRSRVUnmapPhysToUserSpace -PVRSRVUnwrapExtMemory -PVRSRVWaitus -PVRSRVWrapExtMemory -PVRSRVPollForValue -PVRSRVGetErrorString -PVRSRVGetCurrentProcessID -PVRSRVMapDeviceMemory -PVRSRVUnmapDeviceMemory -PVRSRVExportDeviceMem -PVRSRVSetLocale - -#if defined(PDUMP) - -PVRSRVPDumpBitmap -PVRSRVPDumpComment -PVRSRVPDumpCommentf -PVRSRVPDumpCommentWithFlagsf -PVRSRVPDumpCycleCountRegRead -PVRSRVPDumpDriverInfo -PVRSRVPDumpInit -PVRSRVPDumpIsCapturing -PVRSRVPDumpIsCapturingTest -PVRSRVPDumpMem -PVRSRVPDumpMemPol -PVRSRVPDumpPDDevPAddr -PVRSRVPDumpReg -PVRSRVPDumpRegPol -PVRSRVPDumpRegPolWithFlags -PVRSRVPDumpRegRead -PVRSRVPDumpSetFrame -PVRSRVPDumpStartInitPhase -PVRSRVPDumpStopInitPhase -PVRSRVPDumpSync -PVRSRVPDumpSyncPol - -#if !defined(SUPPORT_VGX) -PVRSRVPDumpBufferArray -#endif - -#endif /* PDUMP */ - -#if defined(DEBUG) -PVRSRVAllocUserModeMemTracking -PVRSRVCallocUserModeMemTracking -PVRSRVReallocUserModeMemTracking -PVRSRVFreeUserModeMemTracking -#endif - -#if defined(DEBUG) || defined(TIMING) -PVRSRVInitProfileOutput -PVRSRVDeInitProfileOutput -PVRSRVMetricsGetCPUFreq -PVRSRVMetricsTimeNow -PVRSRVProfileOutput -PVRSRVGetTimerRegister -PVRSRVReleaseTimerRegister -#endif - -#if defined(SUPPORT_SGX) - -SGX2DQueryBlitsComplete -SGXAddRenderTarget -SGXCreateRenderContext -SGXCreateTransferContext -SGXDestroyRenderContext -SGXDestroyTransferContext -SGXDevInitPart2 -SGXGetClientInfo -SGXGetInfoForSrvInit -SGXGetMiscInfo -SGXKickTA -SGXQueueTransfer -SGXReleaseClientInfo -SGXRemoveRenderTarget -SGXScheduleProcessQueues -SGXSetContextPriority - -SGXReadHWPerfCB - -#endif /* SUPPORT_SGX */ - -#if defined(SUPPORT_VGX) - -VGXActivateFrameContext -VGXCreateRenderContext -VGXDestroyRenderContext -VGXDevInitPart2 -VGXDMAUnitDelete -#if defined(PDUMP) && defined(VGX_PDUMP_FROM_FIRMWARE) -VGXDMAUnitDequeueItem -#endif -VGXDMAUnitDiscardScene -VGXDMAUnitEndOfPath -VGXDMAUnitEndOfScene -VGXDMAUnitFlush -VGXDMAUnitNew -VGXDMAUnitQueueItem -VGXDMAUnitQueueRawItem -VGXGetClientInfo -VGXGetInfoForSrvInit -VGXGetMiscInfo -VGXReleaseClientInfo -VGXCreateRenderTarget -VGXDestroyRenderTarget -VGXScheduleProcessQueues - -#endif /* SUPPORT_VGX */ - -#if defined(SUPPORT_DRI_DRM_NO_LIBDRM) -drmClose -drmCommandNone -drmCommandWrite -drmDropMaster -drmIoctl -drmModeAddFB -drmModeSetCrtc -drmOpen -#endif - -/* Policy copied from pvr_debug.h - * - * Horrible to have this here but we can't use the header - * because it has some non-preprocessor stuff in it. - */ - -#if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) -#define PVRSRV_NEED_PVR_ASSERT -#endif - -#if defined(PVRSRV_NEED_PVR_ASSERT) && !defined(PVRSRV_NEED_PVR_DPF) -#define PVRSRV_NEED_PVR_DPF -#endif - -#if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG) || defined(TIMING)) -#define PVRSRV_NEED_PVR_TRACE -#endif - -#if defined(PVRSRV_NEED_PVR_ASSERT) -PVRSRVDebugAssertFail -#endif - -#if defined(PVRSRV_NEED_PVR_DPF) -PVRSRVDebugPrintf -#endif - -#if defined(PVRSRV_NEED_PVR_TRACE) -PVRSRVTrace -#endif diff --git a/eurasiacon/build/linux/exports/libusc.so.txt b/eurasiacon/build/linux/exports/libusc.so.txt deleted file mode 100644 index 000d261..0000000 --- a/eurasiacon/build/linux/exports/libusc.so.txt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * USC functions - */ -PVRUniFlexCreateContext -PVRUniFlexInitInst - -#if defined(OUTPUT_USCHW) -#if !defined(GPGPU) -PVRUniFlexCompileToHw -PVRCleanupUniflexHw -#else -GpgpuPVRUniFlexCompileToHw -#endif /* #if !defined(GPGPU) */ -#endif /* #if defined(OUTPUT_USCHW) */ - -#if defined(OUTPUT_USPBIN) -PVRUniFlexCompileToUspBin -PVRUniFlexDestroyUspBin -#endif /* #if defined(OUTPUT_USPBIN) */ - -PVRUniFlexDestroyContext - -#if defined(UF_TESTBENCH) || defined(DEBUG) || defined(PDUMP) -PVRUniFlexDecodeInputInst -PVRUniFlexDecodeIteration -#endif /* #if defined(UF_TESTBENCH) || defined(DEBUG) || defined(PDUMP) */ - -PVRUniFlexGetInputInstDesc diff --git a/eurasiacon/build/linux/exports/wsegl.txt b/eurasiacon/build/linux/exports/wsegl.txt deleted file mode 100644 index 095c187..0000000 --- a/eurasiacon/build/linux/exports/wsegl.txt +++ /dev/null @@ -1 +0,0 @@ -WSEGL_GetFunctionTablePointer diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild b/eurasiacon/build/linux/kbuild/Makefile.kbuild deleted file mode 100644 index 28a3377..0000000 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild +++ /dev/null @@ -1,90 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -export EURASIAROOT ?= $(shell cd ../../../../../;echo $$PWD) - -# Determine PVR_BUILD_DIR automatically from the directory from which we're -# invoked. The use of $(notdir ..) here actually strips away the leading -# components of the current directory here. We export this so it's passed to -# sub-makes automatically. -# -export PVR_BUILD_DIR = $(notdir $(shell cd ../; echo $$PWD)) - - -# Include target specific variables. -# -include $(EURASIAROOT)/eurasiacon/build/linux/$(PVR_BUILD_DIR)/makefile.shared_conf - -# Include target core specific variables here - this expands on the above settings. -# -include $(EURASIAROOT)/eurasiacon/build/linux/$(PVR_BUILD_DIR)/makefile.core - -# Include and setup generic build variables. -# -include $(EURASIAROOT)/eurasiacon/build/linux/makefile.shared_conf - -KBUILD_SUBDIRS = - -ifeq ($(SUPPORT_DRI_DRM_NOT_PCI),1) -KBUILD_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/linux_drm -endif - -ifeq ($(PDUMP),1) -ifneq ($(SUPPORT_DRI_DRM),1) -KBUILD_SUBDIRS += $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux -endif -endif - -KBUILD_SUBDIRS += \ - $(EURASIAROOT)/services4/srvkm/env/linux \ - $(EXTRA_SUBDIRS) - -ifeq ($(SILENT),) -all %: - set -x; \ - for dir in $(KBUILD_SUBDIRS); \ - do \ - if test -e $$dir;\ - then \ - $(MAKE) $(MAKE_OPT) -C $$dir/kbuild \ - -f $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir $@ || \ - exit 1; \ - fi \ - done -else -all %: - $(SILENT)for dir in $(KBUILD_SUBDIRS); \ - do \ - if test -e $$dir;\ - then \ - echo +$$dir; \ - $(MAKE) $(MAKE_OPT) -C $$dir/kbuild \ - -f $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir $@ || \ - exit 1; \ - fi \ - done -endif - diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir b/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir deleted file mode 100644 index 1bf255d..0000000 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -PVR_KBUILD_IN_KERNEL ?= 0 -PVR_KBUILD_MODULE_MAKEFILE ?= Makefile - -ifeq ($(PVR_KBUILD_IN_KERNEL),1) -# If cross compile is not set, then set it to null to prevent it being -# set by the platform specific make files. -CROSS_COMPILE ?= -endif - -# Include target specific variables. -# -include $(EURASIAROOT)/eurasiacon/build/linux/$(PVR_BUILD_DIR)/makefile.shared_conf - -# Include target core specific variables here - this expands on the above settings. -# -include $(EURASIAROOT)/eurasiacon/build/linux/$(PVR_BUILD_DIR)/makefile.core - -# Include and setup generic build variables. -# -include $(EURASIAROOT)/eurasiacon/build/linux/makefile.shared_conf - -# Include the local module settings. -# -include $(PVR_KBUILD_MODULE_MAKEFILE) - -ifneq ($(PVR_KBUILD_IN_KERNEL),1) -# Include the build rules for kbuild modules -# -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_rules -endif - diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_rules b/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_rules deleted file mode 100644 index a2af203..0000000 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_rules +++ /dev/null @@ -1,117 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -PWD := $(shell pwd) - -export - -KBUILD_MODULE := $(MODULE).$(KM_SUFFIX) -KBUILD_SYSBIN := $(SYSBIN) - -KBUILD_DIRS := $(dir $(SOURCES)) - -ifneq ("$(SYM_VERS_DEPS)", "") -KBUILD_SYM_VERS := $(SYM_VERS_DEPS)/kbuild/Module.symvers -KBUILD_COPY_SYM_VERS := symvers -endif - -# The version file is useful. It should only be created when it doesn't -# exist. We use the .INTERMEDIATE rule here to signify we want to rebuild -# PVRVERSION_H if EURASIACON_PJ changes but not to worry about EURASIACON_PJ -# if it's not there. -# -# DON'T CHANGE THIS unless you REALLY do know what you're doing! -# -.INTERMEDIATE: $(EURASIACON_PJ) - -$(PVRVERSION_H): $(EURASIACON_PJ) - @if [ ! -f "$(EURASIACON_PJ)" ]; then \ - echo; \ - echo "** Both $$EURASIAROOT/include/pvrversion.h and eurasiacon.pj missing."; \ - echo "** Your tree is not intact. Cannot continue."; \ - echo; \ - exit 1; \ - fi - $(SILENT)$(RM) $@ - $(SILENT)$(PERL) $(EURASIAROOT)/eurasiacon/build/scripts/create_pvrversion.pl \ - -i $(EURASIACON_PJ) $@ - $(ECHO) " Updated pvrversion.h" - -.PHONY: symvers -symvers: - @if [ -f "$(KBUILD_SYM_VERS)" ]; then \ - cp -f $(KBUILD_SYM_VERS) $(PWD) ;\ - fi - -.PHONY: modules -modules: $(PVRVERSION_H) $(KBUILD_COPY_SYM_VERS) - $(SILENT)$(MAKE) -C $(KERNELDIR) M=$(PWD) modules - -.PHONY: install -install: - $(SILENT)$(MAKE) INSTALL_MOD_PATH=$(DISCIMAGE) INSTALL_MOD_DIR=kernel/drivers/char -C $(KERNELDIR) M=$(PWD) modules_install - -.PHONY: clean -clean: - $(SILENT)$(MAKE) -C $(KERNELDIR) M=$(PWD) clean - $(SILENT)$(RM) $(KBUILD_SYSBIN)/$(KBUILD_MODULE) - $(SILENT)$(RM) $(SOURCES:.c=.o) - $(SILENT)$(RM) $(addsuffix .*.o.cmd, $(dir $(SOURCES))) - $(SILENT)$(RM) $(PWD)/Module.symvers - -.PHONY: clobber -clobber: clean - $(SILENT)$(RM) -r $(KBUILD_SYSBIN) - -.PHONY: help -help: - $(SILENT)$(MAKE) -C $(KERNELDIR) M=$(PWD) help - -.PHONY: all -all: $(KBUILD_SYSBIN)/$(KBUILD_MODULE) - -$(KBUILD_SYSBIN)/$(KBUILD_MODULE): modules $(KBUILD_SYSBIN) - $(ECHO) " Copying $(KBUILD_MODULE) to $(KBUILD_SYSBIN)" - $(SILENT)$(CP) $(KBUILD_MODULE) $(KBUILD_SYSBIN) - -$(KBUILD_SYSBIN): - $(SILENT)$(MKDIR) $(KBUILD_SYSBIN) - -.PHONY: package -package: all -ifeq ("$(BUILD)", "release") - $(ECHO) " DDK-packaging $(MODULE) " - $(SILENT)$(STRIP) --strip-unneeded $(KBUILD_MODULE) - $(SILENT)$(STRIP) --strip-unneeded $(KBUILD_SYSBIN)/$(KBUILD_MODULE) -endif #ifeq ("$(BUILD)", "release") - -.PHONY: symbolpackage -symbolpackage: package - - - - - diff --git a/eurasiacon/build/linux/makefile.shared_conf b/eurasiacon/build/linux/makefile.shared_conf deleted file mode 100644 index 04a4faf..0000000 --- a/eurasiacon/build/linux/makefile.shared_conf +++ /dev/null @@ -1,538 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# -# --- Revision Logs Removed --- -# -################################################################################## - -# ENV is used in a few other makefiles instead of the literal 'linux', for -# reasons of portability, presumably. It's common to all of the linux makeconf -# files (usually build/*/makeconf.build) so now lives. -# -ENV ?= linux - -# Compilers and other such tools -# -AR = $(CROSS_COMPILE)ar -AS = $(CROSS_COMPILE)as -#CC = $(CROSS_COMPILE)gcc -CPP = $(CROSS_COMPILE)g++ -LD = $(CROSS_COMPILE)ld -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump -RANLIB = $(CROSS_COMPILE)ranlib -STRIP = $(CROSS_COMPILE)strip -SIZE = $(CROSS_COMPILE)size - -CC= $(CROSS_COMPILE)gcc -ifdef QAC_ANALYSE -export QAC_SYS_INC_PATH ?= $(shell $(CROSS_COMPILE)gcc -print-file-name=include) - -#ifneq ("$(CROSS_COMPILE)","") -#CC= perl "$(ANALROOT)/wrapper.pl -wcf $(ANALROOT)/eurasia_linux.cfg $(CROSS_COMPILE)gcc" -#endif -endif - -CAT ?= cat -CP ?= cp -CHMOD ?= chmod -CUT ?= cut -DIFF ?= diff -ECHO ?= -@echo -ENV ?= env -FIND ?= find -GREP ?= grep -LN ?= ln -s -NM ?= nm -MKDIR ?= mkdir -p -MV ?= mv -RM ?= rm -f -SED ?= sed -M4 ?= m4 -TOUCH ?= touch -PERL ?= perl -SORT ?= sort -UNIQ ?= uniq -FLEX ?= flex -BISON ?= bison -MD5SUM ?= md5sum -GAWK ?= gawk - -# The `dos2unix' package is missing from Ubuntu 10.04. Additionally, -# the tofrodos package no longer provides the dos2unix symlink. -# -DOS2UNIX ?= \ - $(shell if [ -z `which fromdos` ]; then echo dos2unix; else echo fromdos -p; fi) - -# SILENT=@ causes command text to be omitted during the process. If you want -# to see what's really happening then use "make SILENT= ..." -# -SILENT = @ - -# V=1 is equivalent to SILENT= -# (Noteably it is the same variable used by the Linux kbuild scripts, so hopfully -# intuative to those familiar with kbuild) -ifeq ($(V),1) -SILENT = -endif - -# BUILD=release sets the default release. -# -BUILD ?= release - -# Services module name -PVRSRV_MODNAME ?= pvrsrvkm - -SYS_CFLAGS += -DPVRSRV_MODNAME="\"$(PVRSRV_MODNAME)"\" - -# Services version. -# -SERVICES ?= 4 -export SERVICES - -# Minor convenience variables -# -DO_MKDIR = $(SILENT)$(MKDIR) $@ -DO_LN_S = $(SILENT)$(LN) -s $< $@ - -# MAKE_OPT defaults to --no-print-directory to declutter the build output. -# -MAKE_OPT ?= --no-print-directory - -# Useful (important) directories for the build. -# -BIN = bin_$(PVR_BUILD_DIR)_$(BUILD)_$(MODULE) -TMP = tmp_$(PVR_BUILD_DIR)_$(BUILD)_$(MODULE) -_SYSBIN = $(EURASIAROOT)/eurasiacon/binary -SYSBIN = $(_SYSBIN)_$(PVR_BUILD_DIR)_$(BUILD) - -# Work out our origins. eurasiacon.pj is not supplied to end-users -# so instead we supply pvrversion.h. We produce pvrversion.h if -# if doesn't exist. -# -DATE := $(shell date +%Y-%m-%d) -EURASIACON_PJ = $(EURASIAROOT)/eurasiacon.pj -PVRVERSION_H = $(EURASIAROOT)/include$(SERVICES)/pvrversion.h -PVRVERSION = $(shell if [ -f $(EURASIACON_PJ) ]; then \ - $(GREP) "\$Revision" $(EURASIACON_PJ) |\ - $(SED) "s,.* \([0-9.]*\) .*,\1,"; \ - else \ - $(GREP) "PVRVERSION_STRING" < $(PVRVERSION_H) | $(SED) "s,.*\"\([0-9.]*\)\".*,\1,"; \ - fi) -PVRVERSION_MAJ = $(shell echo $(PVRVERSION) | $(CUT) -d '.' -f1) -PVRVERSION_MIN = $(shell echo $(PVRVERSION) | $(CUT) -d '.' -f2) -PVRVERSION_BRANCH = $(shell echo $(PVRVERSION) | $(CUT) -d '.' -f3) -PVRVERSION_BUILD = $(shell echo $(PVRVERSION) | $(CUT) -d '.' -f4,5,6) - -# Linux kernel defines -# -ifneq ($(NO_KERNEL_MODULES),1) -KERNEL_VER = $(shell grep "^VERSION = " \ - $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') -KERNEL_REL = $(shell grep "^PATCHLEVEL = " \ - $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') -KERNEL_SUBREL = $(shell grep "^SUBLEVEL = " \ - $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') - -KERNEL_EXTRAVER = $(shell grep "^EXTRAVERSION = " \ - $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') - -KERNELVERSION = $(KERNEL_VER).$(KERNEL_REL).$(KERNEL_SUBREL) - -KERNEL_ID ?= $(shell grep -h '\#define UTS_RELEASE' $(KERNELDIR)/include/linux/* | \ - $(CUT) -f3 -d' ' | \ - $(SED) s/\"//g) - -KM_SUFFIX = ko - -ifeq ("$(KERNEL_ID)", "") -# For Linux 2.6.33, the above method of finding the KERNEL ID no longer -# works, as UTS_RELEASE is no longer defined anywhere. -KERNEL_ID := $(KERNELVERSION)$(KERNEL_EXTRAVER) -endif -endif # !NO_KERNEL_MODULES - -# Get checksum from env variables -# -ENV_CHECKSUM = $(shell echo $(ALL_CFLAGS_$(MODSUFFIX)) | $(MD5SUM) - | $(CUT) -d' ' -f 1) - -# The standard CFLAGS macro can be overridden on the 'make' command line. We -# put CBUILD in a separate macro so its setting doesn't get lost when a user -# *does* override CFLAGS. -# - -CBUILD = -DPVR_BUILD_DIR="\"$(PVR_BUILD_DIR)\"" \ - -DPVR_BUILD_DATE="\"$(DATE)\"" \ - -DPVR_BUILD_TYPE="\"$(BUILD)\"" - -# Don't support HW recovery on debug builds -CBUILD.debug = -DDEBUG -CBUILD.timing = -DTIMING -CBUILD.release = -DRELEASE -CFLAGS.debug = -g -O0 -DDLL_METRIC=1 -CFLAGS.timing = $(OPTIM) -g -DDLL_METRIC=1 -DTIMING -CFLAGS.release = $(OPTIM) -g - -# If either EXTRA_WARNINGS or EXTRA_EXTRA_WARNINGS are enabled, -# modify the base flags (CCFLAGS_KERNEL). -# -ifeq ($(EXTRA_EXTRA_WARNINGS),1) -EXTRA_WARNINGS=1 -endif -ifeq ($(EXTRA_WARNINGS),1) -CCFLAGS_KERNEL += -ifeq ($(EXTRA_EXTRA_WARNINGS),1) -CCFLAGS_KERNEL += -Wwrite-strings -endif -endif - -# These flags are enabled unconditionally for both UM/KM parts. -# -CCFLAGS_KERNEL += -Wall -Wdeclaration-after-statement -Wpointer-arith -CCFLAGS_KERNEL += -Wmissing-format-attribute -Wno-format-zero-length -CCFLAGS_KERNEL += -Wmissing-prototypes -Wstrict-prototypes - -# These are just for UM builds. -# -CCFLAGS := $(CCFLAGS_KERNEL) -Wunused-parameter - -# Snapshot host flags without -W -Wno-missing-field-initializers -# FIXME: Temporary workaround for ancient centos4 toolchain.. -# -CCFLAGS_HOST := $(CCFLAGS) - -# Our platform guides require the use of either GCC 4.2 for x86, -# or GCC 4.3 for ARM. Both of these compilers support "-W -# -Wno-missing-field-initializers", and support switching off each -# of the warnings -W enables. -# -# Because earlier GCCs don't support these flags, or don't support -# them properly, we can't enable them for kernel builds because -# there may be bugs in kernel headers which we can't work around. -# -CCFLAGS += -W -Wno-missing-field-initializers - -# These flags are used to work around kernel header bugs. -# -CCFLAGS_KERNEL += -Wno-unused-parameter -Wno-sign-compare - -# We have no control over errors in external sources, so no -# additional error checking if SUPPORT_DRI_DRM_EXT is set. -# -ifneq ($(SUPPORT_DRI_DRM_EXT),1) -# If EXTRA_WARNINGS are enabled, we don't want any -Werror -# to cause the build to fail, so turn it back off again. -# -# Otherwise, turn Werror on for all kernel module builds. -# -ifeq ($(EXTRA_WARNINGS),1) -SYS_CFLAGS += -Wno-error -else -CCFLAGS_KERNEL += -Werror -endif -endif - -# CPPFLAGS are default compiler flags for C++ (subset of C flags) -# -CPPFLAGS = -W -Wall -Wmissing-format-attribute -Wpointer-arith -CPPFLAGS += -Wno-missing-field-initializers - -# Defaults for useful things. -# - -ifeq ("$(BUILD)", "debug") -DEBUG_LINUX_MEMORY_ALLOCATIONS ?= 1 -DEBUG_LINUX_MEM_AREAS ?= 1 -DEBUG_LINUX_MMAP_AREAS ?= 1 -DEBUG_LINUX_XML_PROC_FILES ?= 0 -DEBUG_LINUX_SLAB_ALLOCATIONS ?= 0 -DEBUG_BRIDGE_KM ?= 1 -DEBUG_TRACE_BRIDGE_KM ?= 0 -DEBUG_BRIDGE_KM_DISPATCH_TABLE ?= 0 -PVRSRV_LOG_MEMORY_ALLOCS ?= 0 -PVRSRV_DEBUG_OS_MEMORY ?= 0 -endif - -SUPPORT_XORG ?= 0 -ifneq ($(SUPPORT_XORG),1) -SUPPORT_XWS ?= 1 -XWS_SERVER_ONLY ?= 0 -else -SUPPORT_XWS = 0 -XWS_SERVER_ONLY = 0 -SUPPORT_EWS = 0 -endif - -SUPPORT_DRI_DRM ?= $(SUPPORT_XORG) -SUPPORT_DRI_DRM_EXT ?= 0 -SUPPORT_DRI_DRM_NOT_PCI ?= 0 -SUPPORT_DRI_DRM_NO_DROPMASTER ?= 0 -SUPPORT_SECURE_DRM_AUTH_EXPORT ?= $(SUPPORT_XORG) - -ifeq ($(SUPPORT_EWS),1) -SUPPORT_SECURE_FD_EXPORT ?= 1 -else -SUPPORT_SECURE_FD_EXPORT ?= 0 -endif - -SUPPORT_DRI_DRM_NO_LIBDRM ?= 0 -ifneq ($(SUPPORT_XORG),1) -ifeq ($(SUPPORT_DRI_DRM),1) -SUPPORT_DRI_DRM_NO_LIBDRM = 1 -endif -endif - -TRANSFER_QUEUE ?= 1 -SUPPORT_SGX_EVENT_OBJECT ?=1 -SUPPORT_SECURE_HANDLES = 1 -SUPPORT_SRVINIT = 1 -SUPPORT_PERCONTEXT_PB = 1 -DISABLE_SGX_PB_GROW_SHRINK ?= 1 -SUPPORT_LINUX_X86_PAT ?=1 -SUPPORT_LINUX_X86_WRITECOMBINE ?=1 -SUPPORT_SGX_LOW_LATENCY_SCHEDULING ?=1 - -ifeq ($(SUPPORT_XORG),1) -SUPPORT_PDUMP_MULTI_PROCESS = 1 -endif - -SUPPORT_OMAP3430_SGXFCLK_96M ?= 0 - -SUPPORT_MEMINFO_IDS ?= 0 - -SUPPORT_PVR_PDP_LINUX_FB ?= $(SUPPORT_XWS) - -SUPPORT_LINUX_USING_WORKQUEUES ?= 0 -SUPPORT_LINUX_USING_SHARED_WORKQUEUES ?= 0 -ifeq ($(SUPPORT_LINUX_USING_WORKQUEUES),1) -SUPPORT_LINUX_USING_SHARED_WORKQUEUES = 0 -endif - -SUPPORT_SGX_NEW_STATUS_VALS ?= 1 - -DC_NOHW_WIDTH ?= 640 -DC_NOHW_HEIGHT ?= 480 - -DISPLAY_CONTROLLER ?= - -SUPPORT_DYNAMIC_GTF_TIMING ?= 0 - -SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309 -DPVR2D_VALIDATE_INPUT_PARAMS - -# Thread support -USE_PTHREADS ?= 1 -USE_GCC__thread_KEYWORD ?= 0 -OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP ?= 0 -DISABLE_THREADS ?= 0 - -# Automatically define C compiler macros for features possible (or not) in use. - -SYS_CFLAGS.$(SUPPORT_SRVINIT) += -DSUPPORT_SRVINIT - -SYS_CFLAGS.$(SUPPORT_SGX) += -DSUPPORT_SGX -SYS_CFLAGS.$(SUPPORT_VGX) += -DSUPPORT_VGX -SYS_CFLAGS.$(SUPPORT_XWS) += -DSUPPORT_XWS -SYS_CFLAGS.$(SUPPORT_EWS) += -DSUPPORT_EWS -SYS_CFLAGS.$(PDUMP) += -DPDUMP -SYS_CFLAGS.$(VGX_PDUMP_FROM_FIRMWARE) += -DVGX_PDUMP_FROM_FIRMWARE -SYS_CFLAGS.$(OVG_ALWAYS_CONVERT_DATA) += -DOVG_ALWAYS_CONVERT_DATA -SYS_CFLAGS.$(SUPPORT_POWER_MANAGEMENT) += -DSUPPORT_POWER_MANAGEMENT -SYS_CFLAGS.$(SUPPORT_BUFFER_CLASS) += -DSUPPORT_BUFFER_CLASS - -SYS_CFLAGS.$(SUPPORT_PERCONTEXT_PB) += -DSUPPORT_PERCONTEXT_PB -SYS_CFLAGS.$(DISABLE_SGX_PB_GROW_SHRINK) += -DDISABLE_SGX_PB_GROW_SHRINK - -SYS_CFLAGS.$(USE_FBDEV) += -DUSE_FBDEV -SYS_CFLAGS.$(USE_FBDEV) += -DFBDEV_NAME="\"$(FBDEV_NAME)\"" -SYS_CFLAGS.$(SUPPORT_DYNAMIC_3DCLOCKGATING) += -DSUPPORT_DYNAMIC_3DCLOCKGATING -SYS_CFLAGS.$(REENTRANCY_PROTECTION) += -DREENTRANCY_PROTECTION -SYS_CFLAGS.$(SCHEDULER_CONTROL_SUPPORT) += -DSCHEDULER_CONTROL_SUPPORT -SYS_CFLAGS.$(USE_IMG_POWER_DOMAIN_FUNCTION) += -DUSE_IMG_POWER_DOMAIN_FUNCTION - -SYS_CFLAGS.$(USE_DMALLOC) += -DDMALLOC - -SYS_CFLAGS.$(DEBUG_LINUX_MEMORY_ALLOCATIONS) += -DDEBUG_LINUX_MEMORY_ALLOCATIONS -SYS_CFLAGS.$(DEBUG_LINUX_MEM_AREAS) += -DDEBUG_LINUX_MEM_AREAS -SYS_CFLAGS.$(DEBUG_LINUX_MMAP_AREAS) += -DDEBUG_LINUX_MMAP_AREAS -SYS_CFLAGS.$(DEBUG_LINUX_XML_PROC_FILES) += -DDEBUG_LINUX_XML_PROC_FILES -SYS_CFLAGS.$(DEBUG_LINUX_SLAB_ALLOCATIONS) += -DDEBUG_LINUX_SLAB_ALLOCATIONS -SYS_CFLAGS.$(DEBUG_BRIDGE_KM) += -DDEBUG_BRIDGE_KM -SYS_CFLAGS.$(DEBUG_TRACE_BRIDGE_KM) += -DDEBUG_TRACE_BRIDGE_KM -SYS_CFLAGS.$(DEBUG_BRIDGE_KM_DISPATCH_TABLE) += -DDEBUG_BRIDGE_KM_DISPATCH_TABLE -SYS_CFLAGS.$(PVRSRV_LOG_MEMORY_ALLOCS) += -DPVRSRV_LOG_MEMORY_ALLOCS -SYS_CFLAGS.$(PVRSRV_DEBUG_OS_MEMORY) += -DPVRSRV_DEBUG_OS_MEMORY -SYS_CFLAGS.$(DEBUG_MESA_OGL_TRACE) += -DDEBUG_MESA_OGL_TRACE - -SYS_CFLAGS.$(SUPPORT_LINUX_X86_WRITECOMBINE) += -DSUPPORT_LINUX_X86_WRITECOMBINE - -SYS_CFLAGS.$(SGX_PDS_EVENTS_DISABLED) += -DSGX_PDS_EVENTS_DISABLED -SYS_CFLAGS.$(USE_SUPPORT_NO_TA3D_OVERLAP) += -DUSE_SUPPORT_NO_TA3D_OVERLAP -SYS_CFLAGS.$(SUPPORT_SGX_TILING) += -DSUPPORT_SGX_TILING -SYS_CFLAGS.$(TRANSFER_QUEUE) += -DTRANSFER_QUEUE - -SYS_CFLAGS.$(SUPPORT_SGX_MMU_DUMMY_PAGE) += -DSUPPORT_SGX_MMU_DUMMY_PAGE -SYS_CFLAGS.$(PVRSRV_DUMP_MK_TRACE) += -DPVRSRV_DUMP_MK_TRACE -SYS_CFLAGS.$(PVRSRV_DUMP_KERNEL_CCB) += -DPVRSRV_DUMP_KERNEL_CCB -SYS_CFLAGS.$(EDM_USSE_HWDEBUG) += -DEDM_USSE_HWDEBUG - -SYS_CFLAGS.$(PVRSRV_USSE_EDM_STATUS_DEBUG) += -DPVRSRV_USSE_EDM_STATUS_DEBUG -SYS_CFLAGS.$(USE_SUPPORT_STATUSVALS_DEBUG) += -DUSE_SUPPORT_STATUSVALS_DEBUG -SYS_CFLAGS.$(SGX_FAST_DPM_INIT) += -DSGX_FAST_DPM_INIT -SYS_CFLAGS.$(SGX_DISABLE_UKERNEL_SECONDARY_STATE) += -DSGX_DISABLE_UKERNEL_SECONDARY_STATE -SYS_CFLAGS.$(DBGBREAK_ON_SPM) += -DDBGBREAK_ON_SPM -SYS_CFLAGS.$(PVR_DBG_BREAK_ASSERT_FAIL) += -DPVR_DBG_BREAK_ASSERT_FAIL - -SYS_CFLAGS.$(PVRSRV_RESET_ON_HWTIMEOUT) += -DPVRSRV_RESET_ON_HWTIMEOUT -SYS_CFLAGS.$(PVRSRV_CLIENT_RESET_ON_HWTIMEOUT) += -DPVRSRV_CLIENT_RESET_ON_HWTIMEOUT -SYS_CFLAGS.$(NO_HARDWARE) += -DNO_HARDWARE - -SYS_CFLAGS.$(SUPPORT_DRI_DRM) += -DSUPPORT_DRI_DRM -SYS_CFLAGS.$(SUPPORT_DRI_DRM_EXT) += -DSUPPORT_DRI_DRM_EXT -SYS_CFLAGS.$(SUPPORT_DRI_DRM_NOT_PCI) += -DPVR_DRI_DRM_NOT_PCI -SYS_CFLAGS.$(SUPPORT_DRI_DRM_NO_DROPMASTER) += -DSUPPORT_DRI_DRM_NO_DROPMASTER -SYS_CFLAGS.$(SUPPORT_DRI_DRM_NO_LIBDRM) += -DSUPPORT_DRI_DRM_NO_LIBDRM -SYS_CFLAGS.$(DRM_PVR_RESERVED_INTEL_ORDER) += -DDRM_PVR_RESERVED_INTEL_ORDER -SYS_CFLAGS.$(DRM_PVR_USE_INTEL_FB) += -DDRM_PVR_USE_INTEL_FB - - -SYS_CFLAGS.$(USE_PRIMARY_SURFACE_IN_FLIP_CHAIN) += -DUSE_PRIMARY_SURFACE_IN_FLIP_CHAIN - -ifneq ("$(NO_HARDWARE)", "1") -SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS -SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY -SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT -endif - -ifeq ("$(PDUMP)", "1") -SUPPORT_DBGDRV_EVENT_OBJECTS ?=1 -SYS_CFLAGS.$(SUPPORT_DBGDRV_EVENT_OBJECTS) += -DSUPPORT_DBGDRV_EVENT_OBJECTS -SYS_CFLAGS.$(PDUMP_DEBUG_OUTFILES) += -DPDUMP_DEBUG_OUTFILES -SYS_CFLAGS.$(SUPPORT_PDUMP_MULTI_PROCESS) += -DSUPPORT_PDUMP_MULTI_PROCESS -endif - -SYS_CFLAGS.$(SUPPORT_SECURE_HANDLES) += -DPVR_SECURE_HANDLES -SYS_CFLAGS.$(SUPPORT_SECURE_FD_EXPORT) += -DPVR_SECURE_FD_EXPORT -SYS_CFLAGS.$(SUPPORT_SECURE_DRM_AUTH_EXPORT) += -DPVR_SECURE_DRM_AUTH_EXPORT - -SYS_CFLAGS.$(USE_PTHREADS) += -DUSE_PTHREADS -SYS_CFLAGS.$(USE_GCC__thread_KEYWORD) += -DUSE_GCC__thread_KEYWORD -SYS_CFLAGS.$(OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP) += -DOPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP -SYS_CFLAGS.$(DISABLE_THREADS) += -DDISABLE_THREADS -SYS_CFLAGS.$(SUPPORT_SGX_EVENT_OBJECT) += -DSUPPORT_SGX_EVENT_OBJECT -SYS_CFLAGS.$(LDM_PLATFORM) += -DLDM_PLATFORM -SYS_CFLAGS.$(LDM_PCI) += -DLDM_PCI -SYS_CFLAGS.$(PVR_MANUAL_POWER_CONTROL) += -DPVR_MANUAL_POWER_CONTROL - -SYS_CFLAGS.$(PVR2D_ALT_2DHW) += -DPVR2D_ALT_2DHW - -SYS_CFLAGS.$(SUPPORT_SGX_HWPERF) += -DSUPPORT_SGX_HWPERF - -SYS_CFLAGS.$(SUPPORT_SLC) += -DSGX_FEATURE_SYSTEM_CACHE -SYS_CFLAGS.$(BYPASS_SLC) += -DSGX_BYPASS_SYSTEM_CACHE -SYS_CFLAGS.$(BYPASS_DCU) += -DSGX_BYPASS_DCU -SYS_CFLAGS.$(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) += -DSUPPORT_SGX_LOW_LATENCY_SCHEDULING -SYS_CFLAGS.$(SGX_SUPPORT_VDM_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_VDM_TIMER_BASED_SWITCHING -SYS_CFLAGS.$(SGX_SUPPORT_ISP_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_ISP_TIMER_BASED_SWITCHING - -SYS_CFLAGS.$(SUPPORT_LINUX_X86_PAT) += -DSUPPORT_LINUX_X86_PAT - -SYS_CFLAGS.$(SUPPORT_OMAP3430_SGXFCLK_96M) += -DSUPPORT_OMAP3430_SGXFCLK_96M -SYS_CFLAGS.$(SUPPORT_CACHEFLUSH_ON_ALLOC) += -DSUPPORT_CACHEFLUSH_ON_ALLOC -SYS_CFLAGS.$(SUPPORT_MEMINFO_IDS) += -DSUPPORT_MEMINFO_IDS - -SYS_CFLAGS.$(SUPPORT_SGX_EDM_MEMORY_DEBUG) += -DSUPPORT_SGX_EDM_MEMORY_DEBUG - -SYS_CFLAGS.$(SUPPORT_ANDROID_PLATFORM) += -DSUPPORT_ANDROID_PLATFORM -SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DSUPPORT_GRAPHICS_HAL -SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DGRALLOC_VARIANT="\"$(GRALLOC_VARIANT)\"" - -SYS_CFLAGS.$(SUPPORT_EGL_IMAGE_SYNC_DEPENDENCY) += -DSUPPORT_EGL_IMAGE_SYNC_DEPENDENCY - -SYS_CFLAGS.$(SUPPORT_PVR_PDP_LINUX_FB) += -DPVR_PDP_LINUX_FB - -SYS_CFLAGS.$(SUPPORT_LINUX_USING_WORKQUEUES) += \ - -DPVR_LINUX_USING_WORKQUEUES \ - -DPVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE \ - -DPVR_LINUX_TIMERS_USING_WORKQUEUES \ - -DSYS_CUSTOM_POWERLOCK_WRAP - -SYS_CFLAGS.$(SUPPORT_LINUX_USING_SHARED_WORKQUEUES) += \ - -DPVR_LINUX_USING_WORKQUEUES \ - -DPVR_LINUX_MISR_USING_WORKQUEUE \ - -DPVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE \ - -DSYS_CUSTOM_POWERLOCK_WRAP - -SYS_CFLAGS.$(SUPPORT_SGX_NEW_STATUS_VALS) += -DSUPPORT_SGX_NEW_STATUS_VALS - -ifneq ("$(DISPLAY_CONTROLLER)", "") -SYS_CFLAGS += -DDISPLAY_CONTROLLER=$(DISPLAY_CONTROLLER) -endif - -ifeq ("$(PVR_SYSTEM)", "sgx_nohw") -ifndef RTSIM -SYS_CFLAGS += -DNO_HARDWARE -endif -SYS_CFLAGS += -DDC_NOHW_BUFFER_WIDTH=$(DC_NOHW_WIDTH) -DDC_NOHW_BUFFER_HEIGHT=$(DC_NOHW_HEIGHT) -endif - -ifeq ("$(PVR_SYSTEM)", "vgx_nohw") -SYS_CFLAGS += -DNO_HARDWARE -DDC_NOHW_BUFFER_WIDTH=$(DC_NOHW_WIDTH) -DDC_NOHW_BUFFER_HEIGHT=$(DC_NOHW_HEIGHT) -endif - -SYS_CFLAGS += -DDEBUG_LOG_PATH_TRUNCATE=\"$(EURASIAROOT)\" - -SYS_INCLUDES = -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/eurasiacon/includeext \ - -I$(SYSBIN) -ifneq ($(NO_KERNEL_MODULES),1) -SYS_INCLUDES += -isystem $(KERNELDIR)/include -endif - - -ALL_CFLAGS_kbuild = $(CCFLAGS_KERNEL) -DLINUX \ - $(CBUILD) $(CBUILD.$(BUILD)) \ - $(MODULE_CFLAGS) $(MODULE_CFLAGS.$(BUILD)) \ - $(SYS_CFLAGS) $(SYS_CFLAGS.1) \ - $(CORE) -fno-strict-aliasing -Wno-pointer-arith \ - $(CFLAGS.$(BUILD)) - -ifdef SUPPORT_DRI_DRM_NO_TTM -export SUPPORT_DRI_DRM_NO_TTM -endif - -ifdef SUPPORT_XORG_SENSOR_FRAMEWORK -export SUPPORT_XORG_SENSOR_FRAMEWORK -endif - -# If we do not specify direst path to external 3pdd sources, use tarball -EXTERNAL_3PDD_TARBALL_PATH := -ifeq ($(MRST_DRIVER_SOURCE),) -ifneq ($(EXTERNAL_3PDD_TARBALL),) -EXTERNAL_3PDD_TARBALL_PATH := $(EURASIAROOT)/eurasiacon/external/$(EXTERNAL_3PDD_TARBALL) -export EXTERNAL_3PDD_TARBALL_PATH -endif -endif - - diff --git a/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt b/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt deleted file mode 100644 index e35602f..0000000 --- a/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt +++ /dev/null @@ -1,5 +0,0 @@ -^__aeabi_ -^__exidx_ -^__data_start -^_init -^_fini diff --git a/eurasiacon/build/linux/omap3430_linux/kbuild/build_gfx_kernelmodules b/eurasiacon/build/linux/omap3430_linux/kbuild/build_gfx_kernelmodules deleted file mode 100644 index 04f32f1..0000000 --- a/eurasiacon/build/linux/omap3430_linux/kbuild/build_gfx_kernelmodules +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -#set home path -#HOME=/home/ - -#set environment variables -export DISCIMAGE=/home/prabu/gfx10/ -#export KERNELDIR=/home/prabu/AM35x-OMAP35x-PSP-SDK-03.00.00.04/src/kernel/linux-03.00.00.04 - -export KERNELDIR=/home/prabu/linux-omap3 - -export PATH=$PATH:/opt/cslite/arm-2009q1/bin -export CROSS_COMPILE=arm-none-linux-gnueabi- - -#clean the build -make clean - -#uncomment this to perform debug build -#make BUILD=debug - -#Perform Release Build -make - diff --git a/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf b/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf deleted file mode 100644 index 86f53dc..0000000 --- a/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# - -# Tool chain and cross-compile settings. gcc must be in the path. -# -CROSS_COMPILE ?= arm-none-linux-gnueabi- -TOOLCHAIN ?= $(shell dirname $(shell which $(CROSS_COMPILE)gcc))/../ -OBJCOPYFORMAT = elf32-littlearm - -CROSSPLATFORM_PATHS = -CROSSPLATFORM_LIBS =-ldl - -SYS_EXE_LDFLAGS = -Xlinker -rpath-link=$(TOOLCHAIN)/arm-none-linux-gnueabi/lib - -# Cross-compile extra settings. -# -PVR_SYSTEM = omap3 -DISPLAY_CONTROLLER = omaplfb - -ARCH_CFLAGS = -march=armv7-a - -# SYS_FLAGS contains any flags specific to this system -SYS_CFLAGS = -DSGX_DYNAMIC_TIMING_INFO \ - -DSYS_CUSTOM_POWERLOCK_WRAP - -# The version of the kernel that is required for compilation -REQUIREDKERNELVERSION = 2.6.34 - -LDM_PLATFORM ?= 1 - -# Only enable active power management if passive power management is -# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP, -# the system can suspend in the case where active power management is -# enabled in the SGX driver, but passive power management isn't. As -# passive power management isn't enabled, the driver won't see the -# system suspend/resume events, and so won't take appropriate action. -ifeq ($(LDM_PLATFORM),1) -SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1 -else -SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 -endif - -OMAP_KERNEL_VER := $(shell grep "^VERSION = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') -OMAP_KERNEL_REL := $(shell grep "^PATCHLEVEL = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') -OMAP_KERNEL_SUBREL := $(shell grep "^SUBLEVEL = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') - -OMAP_KERNEL_AT_LEAST_2_6_29 := $(shell test $(OMAP_KERNEL_VER) -ge 2 -a \ - $(OMAP_KERNEL_REL) -ge 6 -a \ - $(OMAP_KERNEL_SUBREL) -ge 29 && echo 1 || echo 0) - -ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_29),1) -SUPPORT_OMAP3430_OMAPFB3 = 1 -SUPPORT_LINUX_USING_WORKQUEUES = 1 -SYS_CFLAGS += -DPVR_HAS_BROKEN_OMAPFB_H -endif - -# -# OPTIM contains the optimisation level in timing and release builds -OPTIM = -Os - -SGXCORE = 530 -SUPPORT_SGX = 1 - -SUPPORT_HW_RECOVERY = 1 -SUPPORT_SGX_HWPERF = 1 -SYS_USING_INTERRUPTS = 1 - -PVR2D_ALT_2DHW = 1 diff --git a/eurasiacon/build/linux/omap3630_linux/kbuild/build_gfx_kernelmodules b/eurasiacon/build/linux/omap3630_linux/kbuild/build_gfx_kernelmodules deleted file mode 100644 index 04f32f1..0000000 --- a/eurasiacon/build/linux/omap3630_linux/kbuild/build_gfx_kernelmodules +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -#set home path -#HOME=/home/ - -#set environment variables -export DISCIMAGE=/home/prabu/gfx10/ -#export KERNELDIR=/home/prabu/AM35x-OMAP35x-PSP-SDK-03.00.00.04/src/kernel/linux-03.00.00.04 - -export KERNELDIR=/home/prabu/linux-omap3 - -export PATH=$PATH:/opt/cslite/arm-2009q1/bin -export CROSS_COMPILE=arm-none-linux-gnueabi- - -#clean the build -make clean - -#uncomment this to perform debug build -#make BUILD=debug - -#Perform Release Build -make - diff --git a/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf b/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf deleted file mode 100644 index 8d150d9..0000000 --- a/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# - -# Tool chain and cross-compile settings. gcc must be in the path. -# -CROSS_COMPILE ?= arm-none-linux-gnueabi- -TOOLCHAIN ?= $(shell dirname $(shell which $(CROSS_COMPILE)gcc))/../ -OBJCOPYFORMAT = elf32-littlearm - -CROSSPLATFORM_PATHS = -CROSSPLATFORM_LIBS =-ldl - -SYS_EXE_LDFLAGS = -Xlinker -rpath-link=$(TOOLCHAIN)/arm-none-linux-gnueabi/lib - -# Cross-compile extra settings. -# -PVR_SYSTEM = omap3630 -DISPLAY_CONTROLLER = omaplfb - -ARCH_CFLAGS = -march=armv7-a - -# SYS_FLAGS contains any flags specific to this system -SYS_CFLAGS = -DSGX_DYNAMIC_TIMING_INFO \ - -DSYS_CUSTOM_POWERLOCK_WRAP - -# The version of the kernel that is required for compilation -REQUIREDKERNELVERSION = 2.6.37 - -LDM_PLATFORM ?= 1 - -# Only enable active power management if passive power management is -# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP, -# the system can suspend in the case where active power management is -# enabled in the SGX driver, but passive power management isn't. As -# passive power management isn't enabled, the driver won't see the -# system suspend/resume events, and so won't take appropriate action. -ifeq ($(LDM_PLATFORM),1) -SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 0 -else -SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 -endif - -OMAP_KERNEL_VER := $(shell grep "^VERSION = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') -OMAP_KERNEL_REL := $(shell grep "^PATCHLEVEL = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') -OMAP_KERNEL_SUBREL := $(shell grep "^SUBLEVEL = " \ - $(KERNELDIR)/Makefile | cut -f3 -d' ') - -OMAP_KERNEL_AT_LEAST_2_6_29 := $(shell test $(OMAP_KERNEL_VER) -ge 2 -a \ - $(OMAP_KERNEL_REL) -ge 6 -a \ - $(OMAP_KERNEL_SUBREL) -ge 29 && echo 1 || echo 0) - -ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_29),1) -SUPPORT_OMAP3430_OMAPFB3 = 1 -SUPPORT_LINUX_USING_WORKQUEUES = 1 -SYS_CFLAGS += -DPVR_HAS_BROKEN_OMAPFB_H -endif - -# -# OPTIM contains the optimisation level in timing and release builds -OPTIM = -Os - -SGXCORE = 530 -SUPPORT_SGX = 1 - -SUPPORT_HW_RECOVERY = 1 -SUPPORT_SGX_HWPERF = 1 -SYS_USING_INTERRUPTS = 1 - -PVR2D_ALT_2DHW = 1 diff --git a/eurasiacon/build/linux/omap4430_linux/makefile.shared_conf b/eurasiacon/build/linux/omap4430_linux/makefile.shared_conf deleted file mode 100644 index 539a723..0000000 --- a/eurasiacon/build/linux/omap4430_linux/makefile.shared_conf +++ /dev/null @@ -1,90 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# - -# Tool chain and cross-compile settings. gcc must be in the path. -# -CROSS_COMPILE ?= arm-none-linux-gnueabi- -TOOLCHAIN ?= $(shell dirname $(shell which $(CROSS_COMPILE)gcc))/../ -OBJCOPYFORMAT = elf32-littlearm - -CROSSPLATFORM_PATHS = -CROSSPLATFORM_LIBS =-ldl - -SYS_EXE_LDFLAGS = -Xlinker -rpath-link=$(TOOLCHAIN)/arm-none-linux-gnueabi/lib - -# Cross-compile extra settings. -# -PVR_SYSTEM = omap4 - -ARCH_CFLAGS = -march=armv7-a - -# SYS_FLAGS contains any flags specific to this system -SYS_CFLAGS = -DSGX_DYNAMIC_TIMING_INFO \ - -DSYS_CUSTOM_POWERLOCK_WRAP \ - -DPVR_NO_FULL_CACHE_OPS \ - -DSGX_CLK_CORE_DIV5 - -# The version of the kernel that is required for compilation -REQUIREDKERNELVERSION = 2.6.33 - -LDM_PLATFORM ?= 1 - -# Only enable active power management if passive power management is -# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP, -# the system can suspend in the case where active power management is -# enabled in the SGX driver, but passive power management isn't. As -# passive power management isn't enabled, the driver won't see the -# system suspend/resume events, and so won't take appropriate action. -ifeq ($(LDM_PLATFORM),1) -SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1 -SUPPORT_LINUX_USING_WORKQUEUES = 1 -DISPLAY_CONTROLLER = omaplfb -DISPLAY_CONTROLLER_DIR = 3rdparty/dc_omapfb3_linux -OMAP_NON_FLIP_DISPLAY = 0 -else -SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 -SUPPORT_LINUX_USING_SHARED_WORKQUEUES = 1 -DISPLAY_CONTROLLER = pvrlfb -DISPLAY_CONTROLLER_DIR = 3rdparty/linux_framebuffer -OMAP_NON_FLIP_DISPLAY = 1 -endif - -# -# OPTIM contains the optimisation level in timing and release builds -OPTIM = -Os - -SGXCORE = 540 -SUPPORT_SGX = 1 - -SUPPORT_HW_RECOVERY = 1 -SUPPORT_SGX_HWPERF = 1 -SYS_USING_INTERRUPTS = 1 - -PVR2D_ALT_2DHW = 1 - -ifeq ($(SUPPORT_XORG),1) -SUPPORT_DRI_DRM = 1 -SUPPORT_DRI_DRM_NOT_PCI = 1 -endif diff --git a/eurasiacon/build/linux2/bits.mk b/eurasiacon/build/linux2/bits.mk new file mode 100644 index 0000000..173e1ef --- /dev/null +++ b/eurasiacon/build/linux2/bits.mk @@ -0,0 +1,87 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +# Useful special targets which don't build anything + +ifneq ($(filter dumpvar-%,$(MAKECMDGOALS)),) +dumpvar-%: ; +$(foreach _var_to_dump,$(patsubst dumpvar-%,%,$(filter dumpvar-%,$(MAKECMDGOALS))),$(info $(if $(filter undefined,$(origin $(_var_to_dump))),# $$($(_var_to_dump)) is not set,$(_var_to_dump) := $($(_var_to_dump))))) +endif + +ifneq ($(filter whereis-%,$(MAKECMDGOALS)),) +whereis-%: ; +$(foreach _module_to_find,$(patsubst whereis-%,%,$(filter whereis-%,$(MAKECMDGOALS))),$(info $(if $(INTERNAL_MAKEFILE_FOR_MODULE_$(_module_to_find)),$(INTERNAL_MAKEFILE_FOR_MODULE_$(_module_to_find)),# No module $(_module_to_find)))) +endif + +ifneq ($(filter whatis-%,$(MAKECMDGOALS)),) +whatis-$(RELATIVE_OUT)/target/%: ; +whatis-$(RELATIVE_OUT)/host/%: ; +$(foreach _file_to_find,$(patsubst whatis-%,%,$(filter whatis-%,$(MAKECMDGOALS))),$(info $(strip $(foreach _m,$(ALL_MODULES),$(if $(filter $(_file_to_find),$(INTERNAL_TARGETS_FOR_$(_m))),$(_file_to_find) is in $(_m) which is defined in $(INTERNAL_MAKEFILE_FOR_MODULE_$(_m)),))))) +endif + +.PHONY: ls-modules ls-modules-v +ls-modules: + @: $(foreach _m,$(ALL_MODULES),$(info $(_m))) +ls-modules-v: + @: $(foreach _m,$(ALL_MODULES),$(info $($(_m)_type) $(_m) $(patsubst $(TOP)/%,%,$(INTERNAL_MAKEFILE_FOR_MODULE_$(_m))))) + +ifeq ($(strip $(MAKECMDGOALS)),visualise) +FORMAT ?= xlib +GRAPHVIZ ?= neato +visualise: $(OUT)/MAKE_RULES.dot + $(GRAPHVIZ) -T$(FORMAT) -o $(OUT)/MAKE_RULES.$(FORMAT) $< +$(OUT)/MAKE_RULES.dot: $(OUT)/MAKE_RULES + perl $(MAKE_TOP)/tools/depgraph.pl -t $(TOP) -g $(firstword $(GRAPHVIZ)) $(OUT)/MAKE_RULES >$(OUT)/MAKE_RULES.dot +$(OUT)/MAKE_RULES: $(ALL_MAKEFILES) + -$(MAKE) -C $(TOP) -f $(MAKE_TOP)/toplevel.mk TOP=$(TOP) OUT=$(OUT) ls-modules -qp >$(OUT)/MAKE_RULES 2>&1 +else +visualise: + @: $(error visualise specified along with other goals. This is not supported) +endif + +.PHONY: help +help: + @echo 'Build targets' + @echo ' make, make build Build the UM/KM components of the build and scripts' + @echo ' make components Build only the UM components' + @echo ' make kbuild Build only the KM components' + @echo ' make scripts Build only the scripts (rc.pvr and install.sh)' + @echo ' make MODULE Build the module MODULE and all its dependencies' + @echo ' make eurasiacon/binary2_.../target/libsomething.so' + @echo ' Build a particular file (including intermediates)' + @echo 'Variables' + @echo ' make V=1 ... Print the commands that are executed' + @echo ' make OUT=dir ... Place output+intermediates in specified directory' + @echo ' make SOMEOPTION=1 ... Set configuration options (see Makefile.config)' + @echo '' + @echo 'Clean targets' + @echo ' make clean Remove only intermediates for the current build' + @echo ' make clobber As "make clean", but remove output files too' + @echo ' make clean-MODULE Clean (or clobber) only files for MODULE' + @echo '' + @echo 'Special targets' + @echo ' make whereis-MODULE Show the path to the Linux.mk defining MODULE' + @echo ' make whatis-FILE Show which module builds an output FILE' + @echo ' make ls-modules[-v] List all modules [with type+makefile]' diff --git a/eurasiacon/build/linux2/buildvars.mk b/eurasiacon/build/linux2/buildvars.mk new file mode 100644 index 0000000..5026fdf --- /dev/null +++ b/eurasiacon/build/linux2/buildvars.mk @@ -0,0 +1,131 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +# +# This file is read once at the start of the build, after reading in +# config.mk. It should define the non-MODULE_* variables used in commands, +# like ALL_CFLAGS +# + +ifeq ($(BUILD),debug) +COMMON_FLAGS := -O0 +else +OPTIM ?= -O2 +COMMON_FLAGS := $(OPTIM) +endif + +# FIXME: We should probably audit the driver for aliasing +# +COMMON_FLAGS += -fno-strict-aliasing + +# We always enable debugging. Either the release binaries are stripped +# and the symbols put in the symbolpackage, or we're building debug. +# +COMMON_FLAGS += -g + +# These flags are used for kernel, User C and User C++ +# +COMMON_FLAGS += \ + -W -Wall -Wno-missing-field-initializers -Wmissing-format-attribute + +# Some GCC warnings are C only, so we must mask them from C++ +# +COMMON_CFLAGS := $(COMMON_FLAGS) \ + -Wdeclaration-after-statement -Wno-format-zero-length \ + -Wmissing-prototypes -Wstrict-prototypes + +# If we saw W=1, turn on some extra warnings. +# Most of these flags are new, so cc-option check them. +# +ifeq ($(W),1) +COMMON_CFLAGS += \ + $(call cc-option,-Wbad-function-cast) \ + $(call cc-option,-Wcast-qual) \ + $(call cc-option,-Wcast-align) \ + $(call cc-option,-Wconversion) \ + $(call cc-option,-Wdisabled-optimization) \ + $(call cc-option,-Wlogical-op) \ + $(call cc-option,-Wmissing-declarations) \ + $(call cc-option,-Wmissing-include-dirs) \ + $(call cc-option,-Wnested-externs) \ + $(call cc-option,-Wold-style-definition) \ + $(call cc-option,-Woverlength-strings) \ + $(call cc-option,-Wpacked) \ + $(call cc-option,-Wpacked-bitfield-compat) \ + $(call cc-option,-Wpadded) \ + $(call cc-option,-Wredundant-decls) \ + $(call cc-option,-Wshadow) \ + $(call cc-option,-Wswitch-default) \ + $(call cc-option,-Wvla) \ + $(call cc-option,-Wwrite-strings) +endif + +# User C only +# +ALL_CFLAGS := \ + $(COMMON_CFLAGS) -Wpointer-arith -Wunused-parameter $(SYS_CFLAGS) +ALL_HOST_CFLAGS := \ + $(COMMON_CFLAGS) -Wpointer-arith -Wunused-parameter + +# User C++ only +# +ALL_CXXFLAGS := \ + $(COMMON_FLAGS) -fno-rtti -fno-exceptions \ + -Wpointer-arith -Wunused-parameter $(SYS_CXXFLAGS) + +# User C and C++ +# +# NOTE: ALL_HOST_LDFLAGS should probably be using -rpath-link too, and if we +# ever need to support building host shared libraries, it's required. +# +# We can't use it right now because we want to support non-GNU-compatible +# linkers like the Darwin 'ld' which doesn't support -rpath-link. +# +ALL_HOST_LDFLAGS := -L$(HOST_OUT) +ALL_LDFLAGS := -L$(TARGET_OUT) -Xlinker -rpath-link=$(TARGET_OUT) + +ifneq ($(strip $(TOOLCHAIN)),) +ALL_LDFLAGS += -L$(TOOLCHAIN)/lib -Xlinker -rpath-link=$(TOOLCHAIN)/lib +endif + +ifneq ($(strip $(LINKER_RPATH)),) +ALL_LDFLAGS += $(addprefix -Xlinker -rpath=,$(LINKER_RPATH)) +endif + +ALL_LDFLAGS += $(SYS_LDFLAGS) + +# Kernel C only +# +ALL_KBUILD_CFLAGS := $(COMMON_CFLAGS) -Wno-unused-parameter -Wno-sign-compare \ + $(call cc-option,-Wno-type-limits) + +# This variable contains a list of all modules built by kbuild +ALL_KBUILD_MODULES := + +# This variable contains a list of all modules which contain C++ source files +ALL_CXX_MODULES := + +# Toolchain triple for cross environment +CROSS_TRIPLE := $(patsubst %-,%,$(CROSS_COMPILE)) diff --git a/eurasiacon/build/linux2/commands.mk b/eurasiacon/build/linux2/commands.mk new file mode 100644 index 0000000..35d1988 --- /dev/null +++ b/eurasiacon/build/linux2/commands.mk @@ -0,0 +1,205 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + +# from-one-* recipes make a thing from one source file, so they use $<. Others +# use $(MODULE_something) instead of $^ + +# We expect that MODULE_*FLAGS contains all the flags we need, including the +# flags for all modules (like $(ALL_CFLAGS) and $(ALL_HOST_CFLAGS)), and +# excluding flags for include search dirs or for linking libraries. The +# exceptions are ALL_EXE_LDFLAGS and ALL_LIB_LDFLAGS, since they depend on the +# type of thing being linked, so they appear in the commands below + +define host-o-from-one-c +$(if $(V),,@echo " HOST_CC " $(call relative-to-top,$<)) +$(HOST_CC) -MD -c $(MODULE_HOST_CFLAGS) $(MODULE_INCLUDE_FLAGS) \ + -include $(CONFIG_H) $< -o $@ +endef + +define target-o-from-one-c +$(if $(V),,@echo " CC " $(call relative-to-top,$<)) +$(CC) -MD -c $(MODULE_CFLAGS) $(MODULE_INCLUDE_FLAGS) \ + -include $(CONFIG_H) $< -o $@ +endef + +# We use $(CC) to compile C++ files, and expect it to detect that it's +# compiling C++ +define host-o-from-one-cxx +$(if $(V),,@echo " HOST_CC " $(call relative-to-top,$<)) +$(HOST_CC) -MD -c $(MODULE_HOST_CXXFLAGS) $(MODULE_INCLUDE_FLAGS) \ + -include $(CONFIG_H) $< -o $@ +endef + +define target-o-from-one-cxx +$(if $(V),,@echo " CC " $(call relative-to-top,$<)) +$(CC) -MD -c $(MODULE_CXXFLAGS) $(MODULE_INCLUDE_FLAGS) \ + -include $(CONFIG_H) $< -o $@ +endef + +define host-executable-from-o +$(if $(V),,@echo " HOST_LD " $(call relative-to-top,$@)) +$(HOST_CC) $(MODULE_HOST_LDFLAGS) \ + -o $@ $(sort $(MODULE_ALL_OBJECTS)) $(MODULE_LIBRARY_DIR_FLAGS) \ + $(MODULE_LIBRARY_FLAGS) +endef + +define host-executable-cxx-from-o +$(if $(V),,@echo " HOST_LD " $(call relative-to-top,$@)) +$(HOST_CXX) $(MODULE_HOST_LDFLAGS) \ + -o $@ $(sort $(MODULE_ALL_OBJECTS)) $(MODULE_LIBRARY_DIR_FLAGS) \ + $(MODULE_LIBRARY_FLAGS) +endef + +define target-executable-from-o +$(if $(V),,@echo " LD " $(call relative-to-top,$@)) +$(CC) \ + $(SYS_EXE_LDFLAGS) $(MODULE_LDFLAGS) -o $@ \ + $(SYS_EXE_CRTBEGIN) $(sort $(MODULE_ALL_OBJECTS)) $(SYS_EXE_CRTEND) \ + $(MODULE_LIBRARY_DIR_FLAGS) $(MODULE_LIBRARY_FLAGS) $(LIBGCC) +endef + +define target-executable-cxx-from-o +$(if $(V),,@echo " LD " $(call relative-to-top,$@)) +$(CXX) \ + $(SYS_EXE_LDFLAGS) $(MODULE_LDFLAGS) -o $@ \ + $(SYS_EXE_CRTBEGIN) $(sort $(MODULE_ALL_OBJECTS)) $(SYS_EXE_CRTEND) \ + $(MODULE_LIBRARY_DIR_FLAGS) $(MODULE_LIBRARY_FLAGS) $(LIBGCC) +endef + +define target-shared-library-from-o +$(if $(V),,@echo " LD " $(call relative-to-top,$@)) +$(CC) -shared -Wl,-Bsymbolic \ + $(SYS_LIB_LDFLAGS) $(MODULE_LDFLAGS) -o $@ \ + $(SYS_LIB_CRTBEGIN) $(sort $(MODULE_ALL_OBJECTS)) $(SYS_LIB_CRTEND) \ + $(MODULE_LIBRARY_DIR_FLAGS) $(MODULE_LIBRARY_FLAGS) $(LIBGCC) +endef + +# If there were any C++ source files in a shared library, we use this recipe, +# which runs the C++ compiler to link the final library +define target-shared-library-cxx-from-o +$(if $(V),,@echo " LD " $(call relative-to-top,$@)) +$(CXX) -shared -Wl,-Bsymbolic \ + $(SYS_LIB_LDFLAGS) $(MODULE_LDFLAGS) -o $@ \ + $(SYS_LIB_CRTBEGIN) $(sort $(MODULE_ALL_OBJECTS)) $(SYS_LIB_CRTEND) \ + $(MODULE_LIBRARY_DIR_FLAGS) $(MODULE_LIBRARY_FLAGS) $(LIBGCC) +endef + +define target-copy-debug-information +$(OBJCOPY) --only-keep-debug $@ $(basename $@).dbg +endef + +define host-strip-debug-information +$(HOST_STRIP) --strip-unneeded $@ +endef + +define target-strip-debug-information +$(STRIP) --strip-unneeded $@ +endef + +define target-add-debuglink +$(if $(V),,@echo " DBGLINK " $(call relative-to-top,$(basename $@).dbg)) +$(OBJCOPY) --add-gnu-debuglink=$(basename $@).dbg $@ +endef + +define host-static-library-from-o +$(if $(V),,@echo " HOST_AR " $(call relative-to-top,$@)) +$(HOST_AR) cru $@ $(sort $(MODULE_ALL_OBJECTS)) +endef + +define target-static-library-from-o +$(if $(V),,@echo " AR " $(call relative-to-top,$@)) +$(AR) cru $@ $(sort $(MODULE_ALL_OBJECTS)) +endef + +define tab-c-from-y +$(if $(V),,@echo " BISON " $(call relative-to-top,$<)) +$(BISON) $(MODULE_BISON_FLAGS) -o $@ -d $< +endef + +define l-c-from-l +$(if $(V),,@echo " FLEX " $(call relative-to-top,$<)) +$(FLEX) $(MODULE_FLEX_FLAGS) -o$@ $< +endef + +define clean-dirs +$(if $(V),,@echo " RM " $(call relative-to-top,$(MODULE_DIRS_TO_REMOVE))) +$(RM) -rf $(MODULE_DIRS_TO_REMOVE) +endef + +define make-directory +$(MKDIR) -p $@ +endef + +define check-exports +endef + +# Programs used in recipes + +BISON ?= bison +CC ?= gcc +CXX ?= g++ +HOST_CC ?= gcc +HOST_CXX ?= g++ +JAR ?= jar +JAVA ?= java +JAVAC ?= javac +ZIP ?= zip + +override AR := $(if $(V),,@)$(CROSS_COMPILE)ar +override BISON := $(if $(V),,@)$(BISON) +override BZIP2 := $(if $(V),,@)bzip2 -9 +override CC := $(if $(V),,@)$(CROSS_COMPILE)$(CC) +override CC_CHECK := $(if $(V),,@)$(MAKE_TOP)/tools/cc-check.sh +override CXX := $(if $(V),,@)$(CROSS_COMPILE)$(CXX) +override CHMOD := $(if $(V),,@)chmod +override CP := $(if $(V),,@)cp +override DOS2UNIX := $(if $(V),,@)\ + $(shell if [ -z `which fromdos` ]; then echo dos2unix -f -q; else echo fromdos -f -p; fi) +override ECHO := $(if $(V),,@)echo +override FLEX := $(if $(V),,@)flex +override GAWK := $(if $(V),,@)gawk +override GREP := $(if $(V),,@)grep +override HOST_AR := $(if $(V),,@)ar +override HOST_CC := $(if $(V),,@)$(HOST_CC) +override HOST_CXX := $(if $(V),,@)$(HOST_CXX) +override HOST_STRIP := $(if $(V),,@)strip +override INSTALL := $(if $(V),,@)install +override JAR := $(if $(V),,@)$(JAR) +override JAVA := $(if $(V),,@)$(JAVA) +override JAVAC := $(if $(V),,@)$(JAVAC) +override M4 := $(if $(V),,@)m4 +override MKDIR := $(if $(V),,@)mkdir +override MV := $(if $(V),,@)mv +override OBJCOPY := $(if $(V),,@)$(CROSS_COMPILE)objcopy +override PDSASM := $(if $(V),,@)$(HOST_OUT)/pdsasm +override RANLIB := $(if $(V),,@)$(CROSS_COMPILE)ranlib +override RM := $(if $(V),,@)rm -f +override SED := $(if $(V),,@)sed +override STRIP := $(if $(V),,@)$(CROSS_COMPILE)strip +override TAR := $(if $(V),,@)tar +override TOUCH := $(if $(V),,@)touch +override USEASM := $(if $(V),,@)$(HOST_OUT)/useasm +override USELINK := $(if $(V),,@)$(HOST_OUT)/uselink +override VHD2INC := $(if $(V),,@)$(HOST_OUT)/vhd2inc +override ZIP := $(if $(V),,@)$(ZIP) diff --git a/eurasiacon/build/linux/omap4430_linux/makefile.core b/eurasiacon/build/linux2/common/apis/xorg.mk similarity index 76% rename from eurasiacon/build/linux/omap4430_linux/makefile.core rename to eurasiacon/build/linux2/common/apis/xorg.mk index 1bfa10e..f0a8ef0 100644 --- a/eurasiacon/build/linux/omap4430_linux/makefile.core +++ b/eurasiacon/build/linux2/common/apis/xorg.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -23,15 +23,7 @@ # # -CORE = -DSGX$(SGXCORE) -DSUPPORT_SGX$(SGXCORE) - -ifeq ("$(SGXCOREREV)","") -ifeq ("$(SGXCORE)","540") -CORE += -DSGX_CORE_REV=110 -else -CORE += -DUSE_SGX_CORE_REV_HEAD -endif -else -CORE += -DSGX_CORE_REV=$(SGXCOREREV) +ifeq ($(filter xorg,$(EXCLUDED_APIS)),) + COMPONENTS += xorg pvr_conf pvr_video wsegl_dri2_linux + -include ../common/apis/xorg_opengl.mk endif - diff --git a/tools/intern/debug/dbgdriv/linux/makefile.linux.common b/eurasiacon/build/linux2/common/dridrm.mk similarity index 60% rename from tools/intern/debug/dbgdriv/linux/makefile.linux.common rename to eurasiacon/build/linux2/common/dridrm.mk index 16a2892..5979012 100644 --- a/tools/intern/debug/dbgdriv/linux/makefile.linux.common +++ b/eurasiacon/build/linux2/common/dridrm.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -22,22 +22,24 @@ # Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK # # -# + +$(eval $(call TunableBothConfigC,SUPPORT_DRI_DRM,)) +$(eval $(call TunableBothConfigC,SUPPORT_DRI_DRM_EXT,)) + + +$(eval $(call TunableBothConfigMake,SUPPORT_DRI_DRM,)) ifeq ($(SUPPORT_DRI_DRM),1) -DBGDRV_SOURCES_ROOT = $(KBUILDROOT)/../tools/intern/debug/dbgdriv -else -DBGDRV_SOURCES_ROOT = ../.. +ifeq ($(SUPPORT_DRI_DRM_NO_LIBDRM),1) endif +$(eval $(call TunableKernelConfigC,PVR_SECURE_DRM_AUTH_EXPORT,)) +endif + +$(eval $(call TunableKernelConfigC,PVR_DISPLAY_CONTROLLER_DRM_IOCTL,)) + +$(eval $(call TunableBothConfigC,PVR_DRI_DRM_NOT_PCI)) +$(eval $(call TunableBothConfigMake,PVR_DRI_DRM_NOT_PCI)) + +$(eval $(call TunableKernelConfigC,PVR_DRI_DRM_PLATFORM_DEV,)) -INCLUDES += -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/tools/intern/debug \ - -I$(EURASIAROOT)/tools/intern/debug/dbgdriv/common \ - -I$(EURASIAROOT)/tools/intern/debug/client - -SOURCES += $(DBGDRV_SOURCES_ROOT)/linux/main.c \ - $(DBGDRV_SOURCES_ROOT)/common/dbgdriv.c \ - $(DBGDRV_SOURCES_ROOT)/common/ioctl.c \ - $(DBGDRV_SOURCES_ROOT)/common/handle.c \ - $(DBGDRV_SOURCES_ROOT)/linux/hostfunc.c \ - $(DBGDRV_SOURCES_ROOT)/common/hotkey.c +export EXTERNAL_3PDD_TARBALL diff --git a/eurasiacon/build/linux2/common/omap4.mk b/eurasiacon/build/linux2/common/omap4.mk new file mode 100644 index 0000000..8c0a172 --- /dev/null +++ b/eurasiacon/build/linux2/common/omap4.mk @@ -0,0 +1,27 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +$(eval $(call TunableBothConfigC,PVR_NO_FULL_CACHE_OPS,)) +$(eval $(call TunableKernelConfigC,PVR_NO_OMAP_TIMER,)) diff --git a/eurasiacon/build/linux2/common/opencl.mk b/eurasiacon/build/linux2/common/opencl.mk new file mode 100644 index 0000000..42c0ed0 --- /dev/null +++ b/eurasiacon/build/linux2/common/opencl.mk @@ -0,0 +1,24 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + diff --git a/eurasiacon/build/linux2/common/xorg.mk b/eurasiacon/build/linux2/common/xorg.mk new file mode 100644 index 0000000..f503460 --- /dev/null +++ b/eurasiacon/build/linux2/common/xorg.mk @@ -0,0 +1,28 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + +PVR_SECURE_DRM_AUTH_EXPORT := 1 + +$(eval $(call TunableKernelConfigC,XPROC_WORKAROUND_NUM_SHAREABLES,4095)) + diff --git a/eurasiacon/build/linux/omap3630_linux/makefile.core b/eurasiacon/build/linux2/common/xorg_test.mk similarity index 77% rename from eurasiacon/build/linux/omap3630_linux/makefile.core rename to eurasiacon/build/linux2/common/xorg_test.mk index b16d3ef..6e7552f 100644 --- a/eurasiacon/build/linux/omap3630_linux/makefile.core +++ b/eurasiacon/build/linux2/common/xorg_test.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -23,15 +23,11 @@ # # -CORE = -DSGX$(SGXCORE) -DSUPPORT_SGX$(SGXCORE) +# FIXME: Will go away when SUPPORT_DRI_DRM is untangled from +# the old meaning of SUPPORT_XORG=1. -ifeq ("$(SGXCOREREV)","") -ifeq ("$(SGXCORE)","530") -CORE += -DSGX_CORE_REV=125 -else -CORE += -DUSE_SGX_CORE_REV_HEAD +ifeq ($(filter xorg,$(EXCLUDED_APIS)),) +ifneq ($(wildcard ../common/apis/xorg.mk),) +want_xorg := 1 endif -else -CORE += -DSGX_CORE_REV=$(SGXCOREREV) endif - diff --git a/eurasiacon/build/linux2/config/core.mk b/eurasiacon/build/linux2/config/core.mk new file mode 100644 index 0000000..f68cb98 --- /dev/null +++ b/eurasiacon/build/linux2/config/core.mk @@ -0,0 +1,497 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +# Configuration wrapper for new build system. This file deals with +# configuration of the build. Add to this file anything that deals +# with switching driver options on/off and altering the defines or +# objects the build uses. +# +# At the end of this file is an exhaustive list of all variables +# that are passed between the platform/config stage and the generic +# build. PLEASE refrain from adding more variables than necessary +# to this stage -- almost all options can go through config.h. +# + +################################# MACROS #################################### + +# Write out a kernel GNU make option. +# +define KernelConfigMake +$$(shell echo "override $(1) := $(2)" >>$(CONFIG_KERNEL_MK).new) +endef + +# Write out a GNU make option for both user & kernel +# +define BothConfigMake +$$(eval $$(call KernelConfigMake,$(1),$(2))) +endef + +# Conditionally write out a kernel GNU make option +# +define TunableKernelConfigMake +ifneq ($$($(1)),) +ifneq ($$($(1)),0) +$$(eval $$(call KernelConfigMake,$(1),$$($(1)))) +endif +else +ifneq ($(2),) +$$(eval $$(call KernelConfigMake,$(1),$(2))) +endif +endif +endef + +# Conditionally write out a GNU make option for both user & kernel +# +define TunableBothConfigMake +$$(eval $$(call TunableKernelConfigMake,$(1),$(2))) +endef + +# Write out a kernel-only option +# +define KernelConfigC +$$(shell echo "#define $(1) $(2)" >>$(CONFIG_KERNEL_H).new) +endef + +# Write out an option for both user & kernel +# +define BothConfigC +$$(eval $$(call KernelConfigC,$(1),$(2))) +endef + +# Conditionally write out a kernel-only option +# +define TunableKernelConfigC +ifneq ($$($(1)),) +ifneq ($$($(1)),0) +ifeq ($$($(1)),1) +$$(eval $$(call KernelConfigC,$(1),)) +else +$$(eval $$(call KernelConfigC,$(1),$$($(1)))) +endif +endif +else +ifneq ($(2),) +ifeq ($(2),1) +$$(eval $$(call KernelConfigC,$(1),)) +else +$$(eval $$(call KernelConfigC,$(1),$(2))) +endif +endif +endif +endef + +# Conditionally write out an option for both user & kernel +# +define TunableBothConfigC +$$(eval $$(call TunableKernelConfigC,$(1),$(2))) +endef + +############################### END MACROS ################################## + +DOS2UNIX := $(shell \ + if [ -z `which fromdos` ]; then echo dos2unix -f -q; else echo fromdos -f -p; fi \ +) + +# Check we have a new enough version of GNU make. +# +need := 3.81 +ifeq ($(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))),) +$(error A version of GNU make >= $(need) is required - this is version $(MAKE_VERSION)) +endif + +# Try to guess EURASIAROOT if it wasn't set. Check this location. +# +_GUESSED_EURASIAROOT := $(abspath ../../../..) +ifneq ($(strip $(EURASIAROOT)),) +# We don't want to warn about EURASIAROOT if it's empty: this might mean that +# it's not set at all anywhere, but it could also mean that it's set like +# "export EURASIAROOT=" or "make EURASIAROOT= sometarget". If it is set but +# empty, we'll act as if it's unset and not warn. +ifneq ($(strip $(EURASIAROOT)),$(_GUESSED_EURASIAROOT)) +nothing := +space := $(nothing) $(nothing) +$(warning EURASIAROOT is set (via: $(origin EURASIAROOT)), but its value does not) +$(warning match the root of this source tree, so it is being ignored) +$(warning EURASIAROOT is set to: $(EURASIAROOT)) +$(warning $(space)The detected root is: $(_GUESSED_EURASIAROOT)) +$(warning To suppress this message, unset EURASIAROOT or set it empty) +endif +# else, EURASIAROOT matched the actual root of the source tree: don't warn +endif +override EURASIAROOT := $(_GUESSED_EURASIAROOT) +TOP := $(EURASIAROOT) +$(call directory-must-exist,$(TOP)) + +include ../defs.mk + +# Infer PVR_BUILD_DIR from the directory configuration is launched from. +# Check anyway that such a directory exists. +# +PVR_BUILD_DIR := $(notdir $(abspath .)) +$(call directory-must-exist,$(TOP)/eurasiacon/build/linux2/$(PVR_BUILD_DIR)) + +# Output directory for configuration, object code, +# final programs/libraries, and install/rc scripts. +# +BUILD ?= release +OUT ?= $(TOP)/eurasiacon/binary2_$(PVR_BUILD_DIR)_$(BUILD) + +CONFIG_MK := $(OUT)/config.mk +CONFIG_H := $(OUT)/config.h +CONFIG_KERNEL_MK := $(OUT)/config_kernel.mk +CONFIG_KERNEL_H := $(OUT)/config_kernel.h + +# Create the OUT directory and delete any previous intermediary files +# +$(shell mkdir -p $(OUT)) +$(shell \ + for file in $(CONFIG_MK).new $(CONFIG_H).new \ + $(CONFIG_KERNEL_MK).new $(CONFIG_KERNEL_H).new; do \ + rm -f $$file; \ + done) + +# Some targets don't need information about any modules. If we only specify +# these targets on the make command line, set INTERNAL_CLOBBER_ONLY to +# indicate that toplevel.mk shouldn't read any makefiles +CLOBBER_ONLY_TARGETS := clean clobber help install +INTERNAL_CLOBBER_ONLY := +ifneq ($(strip $(MAKECMDGOALS)),) +INTERNAL_CLOBBER_ONLY := \ +$(if \ + $(strip $(foreach _cmdgoal,$(MAKECMDGOALS),\ + $(if $(filter $(_cmdgoal),$(CLOBBER_ONLY_TARGETS)),,x))),,true) +endif + +# For a clobber-only build, we shouldn't regenerate any config files, or +# require things like SGXCORE to be set +ifneq ($(INTERNAL_CLOBBER_ONLY),true) + +-include ../config/user-defs.mk + +# FIXME: Backwards compatibility remaps. +# +ifeq ($(SUPPORT_SLC),1) +SGX_FEATURE_SYSTEM_CACHE := 1 +endif +ifeq ($(BYPASS_SLC),1) +SGX_BYPASS_SYSTEM_CACHE := 1 +endif +ifeq ($(BYPASS_DCU),1) +SGX_BYPASS_DCU := 1 +endif +ifneq ($(SGXCOREREV),) +SGX_CORE_REV := $(SGXCOREREV) +endif + +# Core handling +# +ifeq ($(SGXCORE),) +$(error Must specify SGXCORE) +endif +ifeq ($(SGX_CORE_REV),) +override USE_SGX_CORE_REV_HEAD := 1 +else ifeq ($(SGX_CORE_REV),000) +override USE_SGX_CORE_REV_HEAD := 1 +override SGX_CORE_REV := +else +override USE_SGX_CORE_REV_HEAD := 0 +endif + +# Enforced dependencies. Move this to an include. +# +ifeq ($(SUPPORT_LINUX_USING_WORKQUEUES),1) +override PVR_LINUX_USING_WORKQUEUES := 1 +override PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE := 1 +override PVR_LINUX_TIMERS_USING_WORKQUEUES := 1 +override SYS_CUSTOM_POWERLOCK_WRAP := 1 +else ifeq ($(SUPPORT_LINUX_USING_SHARED_WORKQUEUES),1) +override PVR_LINUX_USING_WORKQUEUES := 1 +override PVR_LINUX_MISR_USING_WORKQUEUE := 1 +override PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE := 1 +override SYS_CUSTOM_POWERLOCK_WRAP := 1 +endif + +ifneq ($(PDUMP),1) +override SUPPORT_PDUMP_MULTI_PROCESS := 0 +endif + +ifeq ($(SUPPORT_HYBRID_PB),1) +override SUPPORT_SHARED_PB := 1 +override SUPPORT_PERCONTEXT_PB := 1 +else ifeq ($(SUPPORT_PERCONTEXT_PB),1) +override SUPPORT_SHARED_PB := 0 +endif + +ifeq ($(NO_HARDWARE),1) +override SYS_USING_INTERRUPTS := 0 +override SUPPORT_HW_RECOVERY := 0 +override SUPPORT_ACTIVE_POWER_MANAGEMENT := 0 +endif + +ifeq ($(SGXCORE),535) +PVR2D_ALT_2DHW ?= 0 +endif + +# Multi-core handling must be done separately to other options +# Also do some sanity checks +# +ifeq ($(SGX_FEATURE_MP),1) +ifeq ($(SGX_FEATURE_MP_CORE_COUNT),) +ifeq ($(SGX_FEATURE_MP_CORE_COUNT_TA),) +$(error Must specify SGX_FEATURE_MP_CORE_COUNT or both SGX_FEATURE_MP_CORE_COUNT_TA and SGX_FEATURE_MP_CORE_COUNT_3D with SGX_FEATURE_MP) +else +$(eval $(call BothConfigC,SGX_FEATURE_MP_CORE_COUNT_TA,$(SGX_FEATURE_MP_CORE_COUNT_TA))) +endif +ifeq ($(SGX_FEATURE_MP_CORE_COUNT_3D),) +$(error Must specify SGX_FEATURE_MP_CORE_COUNT or both SGX_FEATURE_MP_CORE_COUNT_TA and SGX_FEATURE_MP_CORE_COUNT_3D with SGX_FEATURE_MP) +else +$(eval $(call BothConfigC,SGX_FEATURE_MP_CORE_COUNT_3D,$(SGX_FEATURE_MP_CORE_COUNT_3D))) +endif +else +$(eval $(call BothConfigC,SGX_FEATURE_MP_CORE_COUNT,$(SGX_FEATURE_MP_CORE_COUNT))) +endif +endif + +# Rather than requiring the user to have to define two variables (one quoted, +# one not), make PVRSRV_MODNAME a non-tunable and give it an overridable +# default here. +# +PVRSRV_MODNAME ?= pvrsrvkm + +# The user didn't set CROSS_COMPILE. There's probably nothing wrong +# with that, but we'll let them know anyway. +# +ifeq ($(CROSS_COMPILE),) +$(warning CROSS_COMPILE is not set. Target components will be built with the host compiler) +endif + +# The user is trying to set one of the old SUPPORT_ options on the +# command line or in the environment. This isn't supported any more +# and will often break the build. The user is generally only trying +# to remove a component from the list of targets to build, so we'll +# point them at the new way of doing this. +define sanity-check-support-option-origin +ifeq ($$(filter undefined file,$$(origin $(1))),) +$$(warning *** Setting $(1) via $$(origin $(1)) is deprecated) +$$(error If you are trying to disable a component, use e.g. EXCLUDED_APIS="opengles1 opengl") +endif +endef +$(foreach _o,SYS_CFLAGS SYS_CXXFLAGS SYS_EXE_LDFLAGS SYS_LIB_LDFLAGS SUPPORT_EWS SUPPORT_OPENGLES1 SUPPORT_OPENGLES2 SUPPORT_OPENVG SUPPORT_OPENCL SUPPORT_OPENGL SUPPORT_UNITTESTS SUPPORT_XORG,$(eval $(call sanity-check-support-option-origin,$(_o)))) + +# Check for words in EXCLUDED_APIS that aren't understood by the +# common/apis/*.mk files. This should be kept in sync with all the tests on +# EXCLUDED_APIS in those files +_excludable_apis := opencl opengl opengles1 opengles2 openvg ews unittests xorg xorg_unittests +_unrecognised := $(strip $(filter-out $(_excludable_apis),$(EXCLUDED_APIS))) +ifneq ($(_unrecognised),) +$(warning *** Unrecognised entries in EXCLUDED_APIS: $(_unrecognised)) +$(warning *** EXCLUDED_APIS was set via: $(origin EXCLUDED_APIS)) +$(error Excludable APIs are: $(_excludable_apis)) +endif + +# Build's selected list of components +# +-include components.mk + +# PDUMP needs extra components +# +ifeq ($(PDUMP),1) +ifneq ($(COMPONENTS),) +COMPONENTS += pdump +endif +ifeq ($(SUPPORT_DRI_DRM),1) +EXTRA_PVRSRVKM_COMPONENTS += dbgdrv +else +KERNEL_COMPONENTS += dbgdrv +endif +endif + +# If KERNELDIR is set, write it out to the config.mk, with +# KERNEL_COMPONENTS and KERNEL_ID +# +ifneq ($(strip $(KERNELDIR)),) +include ../kernel_version.mk +$(eval $(call KernelConfigMake,KERNELDIR,$(KERNELDIR))) +# Needed only by install script +$(eval $(call KernelConfigMake,KERNEL_COMPONENTS,$(KERNEL_COMPONENTS))) +$(eval $(call TunableKernelConfigMake,KERNEL_CROSS_COMPILE,)) +$(eval $(call TunableKernelConfigMake,EXTRA_PVRSRVKM_COMPONENTS,)) +$(eval $(call TunableKernelConfigMake,EXTRA_KBUILD_SOURCE,)) +endif + +# Ideally configured by platform Makefiles, as necessary +# + +# Invariant options for Linux +# +$(eval $(call BothConfigC,LINUX,)) + +$(eval $(call BothConfigC,PVR_BUILD_DIR,"\"$(PVR_BUILD_DIR)\"")) +$(eval $(call BothConfigC,PVR_BUILD_DATE,"\"\"")) +$(eval $(call BothConfigC,PVR_BUILD_TYPE,"\"$(BUILD)\"")) +$(eval $(call BothConfigC,PVRSRV_MODNAME,"\"$(PVRSRV_MODNAME)\"")) + +$(eval $(call TunableBothConfigC,SGXCORE,)) +$(eval $(call BothConfigC,SGX$(SGXCORE),)) +$(eval $(call BothConfigC,SUPPORT_SGX$(SGXCORE),)) + +$(eval $(call TunableBothConfigC,SUPPORT_SGX,1)) +$(eval $(call TunableBothConfigC,SGX_CORE_REV,)) +$(eval $(call TunableBothConfigC,USE_SGX_CORE_REV_HEAD,)) + +$(eval $(call BothConfigC,TRANSFER_QUEUE,1)) +$(eval $(call BothConfigC,PVR_SECURE_HANDLES,1)) + +$(eval $(call KernelConfigC,DISPLAY_CONTROLLER,$(DISPLAY_CONTROLLER))) + + +$(eval $(call BothConfigMake,PVR_SYSTEM,$(PVR_SYSTEM))) + + +# Build-type dependent options +# +$(eval $(call BothConfigMake,BUILD,$(BUILD))) + +ifeq ($(BUILD),debug) +$(eval $(call BothConfigC,DEBUG,)) +$(eval $(call KernelConfigC,DEBUG_LINUX_MEMORY_ALLOCATIONS,)) +$(eval $(call KernelConfigC,DEBUG_LINUX_MEM_AREAS,)) +$(eval $(call KernelConfigC,DEBUG_LINUX_MMAP_AREAS,)) +$(eval $(call KernelConfigC,DEBUG_BRIDGE_KM,)) +else ifeq ($(BUILD),release) +$(eval $(call BothConfigC,RELEASE,)) +$(eval $(call TunableBothConfigMake,DEBUGLINK,1)) +else ifeq ($(BUILD),timing) +$(eval $(call BothConfigC,TIMING,)) +$(eval $(call TunableBothConfigMake,DEBUGLINK,1)) +else +$(error BUILD= must be either debug, release or timing) +endif + +# User-configurable options +# +$(eval $(call TunableBothConfigC,SUPPORT_PERCONTEXT_PB,1)) +$(eval $(call TunableBothConfigC,SUPPORT_SHARED_PB,)) +$(eval $(call TunableBothConfigC,SUPPORT_HYBRID_PB,)) +$(eval $(call TunableBothConfigC,SUPPORT_HW_RECOVERY,1)) +$(eval $(call TunableBothConfigC,SUPPORT_ACTIVE_POWER_MANAGEMENT,0)) +$(eval $(call TunableBothConfigC,SUPPORT_SGX_HWPERF,1)) +$(eval $(call TunableBothConfigC,SUPPORT_SGX_LOW_LATENCY_SCHEDULING,1)) +$(eval $(call TunableBothConfigC,SUPPORT_MEMINFO_IDS,)) +$(eval $(call TunableBothConfigC,SUPPORT_SGX_NEW_STATUS_VALS,1)) +$(eval $(call TunableBothConfigC,SUPPORT_PDUMP_MULTI_PROCESS,)) +$(eval $(call TunableBothConfigC,SUPPORT_DBGDRV_EVENT_OBJECTS,)) +$(eval $(call TunableBothConfigC,PVR_DBG_BREAK_ASSERT_FAIL,)) +$(eval $(call TunableBothConfigC,SGX_FEATURE_SYSTEM_CACHE,)) +$(eval $(call TunableBothConfigC,SGX_BYPASS_SYSTEM_CACHE,)) +$(eval $(call TunableBothConfigC,SGX_BYPASS_DCU,)) +$(eval $(call TunableBothConfigC,SGX_FAST_DPM_INIT,)) +$(eval $(call TunableBothConfigC,SGX_FEATURE_MP,)) +$(eval $(call TunableBothConfigC,SGX_FEATURE_MP_PLUS,)) +$(eval $(call TunableBothConfigC,FPGA,)) +$(eval $(call TunableBothConfigC,PDUMP,)) +$(eval $(call TunableBothConfigC,NO_HARDWARE,)) +$(eval $(call TunableBothConfigC,PDUMP_DEBUG_OUTFILES,)) +$(eval $(call TunableBothConfigC,PVRSRV_USSE_EDM_STATUS_DEBUG,)) +$(eval $(call TunableBothConfigC,PVRSRV_RESET_ON_HWTIMEOUT,)) +$(eval $(call TunableBothConfigC,SYS_USING_INTERRUPTS,1)) +$(eval $(call TunableBothConfigC,SUPPORT_EXTERNAL_SYSTEM_CACHE,)) +$(eval $(call TunableBothConfigC,PVRSRV_NEED_PVR_DPF,)) +$(eval $(call TunableBothConfigC,PVRSRV_NEED_PVR_ASSERT,)) +$(eval $(call TunableBothConfigC,PVRSRV_NEED_PVR_TRACE,)) +$(eval $(call TunableBothConfigC,SUPPORT_SECURE_33657_FIX,)) + +$(eval $(call TunableKernelConfigC,SUPPORT_LINUX_X86_WRITECOMBINE,1)) +$(eval $(call TunableKernelConfigC,SUPPORT_LINUX_X86_PAT,1)) +$(eval $(call TunableKernelConfigC,SGX_DYNAMIC_TIMING_INFO,)) +$(eval $(call TunableKernelConfigC,SYS_SGX_ACTIVE_POWER_LATENCY_MS,)) +$(eval $(call TunableKernelConfigC,SYS_CUSTOM_POWERLOCK_WRAP,)) +$(eval $(call TunableKernelConfigC,PVR_LINUX_USING_WORKQUEUES,)) +$(eval $(call TunableKernelConfigC,PVR_LINUX_MISR_USING_WORKQUEUE,)) +$(eval $(call TunableKernelConfigC,PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE,)) +$(eval $(call TunableKernelConfigC,PVR_LINUX_TIMERS_USING_WORKQUEUES,)) +$(eval $(call TunableKernelConfigC,PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE,)) +$(eval $(call TunableKernelConfigC,LDM_PLATFORM,1)) +$(eval $(call TunableKernelConfigC,PVR_LDM_PLATFORM_PRE_REGISTERED,)) +$(eval $(call TunableKernelConfigC,LDM_PCI,)) +$(eval $(call TunableKernelConfigC,PVRSRV_DUMP_MK_TRACE,)) +$(eval $(call TunableKernelConfigC,PVRSRV_DUMP_KERNEL_CCB,)) +$(eval $(call TunableKernelConfigC,HYBRID_SHARED_PB_SIZE,)) + + +$(eval $(call TunableBothConfigMake,LDM_PLATFORM,)) +$(eval $(call TunableBothConfigMake,LDM_PCI,)) + + +$(eval $(call TunableBothConfigMake,OPTIM,)) + + +endif # INTERNAL_CLOBBER_ONLY + +export INTERNAL_CLOBBER_ONLY +export TOP +export OUT + +MAKE_ETC := -Rr --no-print-directory -C $(TOP) TOP=$(TOP) \ + -f eurasiacon/build/linux2/toplevel.mk + +# This must match the default value of MAKECMDGOALS below, and the default +# goal in toplevel.mk +.DEFAULT_GOAL := build + +ifeq ($(MAKECMDGOALS),) +MAKECMDGOALS := build +else +# We can't pass autogen to toplevel.mk +MAKECMDGOALS := $(filter-out autogen,$(MAKECMDGOALS)) +endif + +.PHONY: autogen +autogen: +ifeq ($(INTERNAL_CLOBBER_ONLY),) + @$(MAKE) -s --no-print-directory -C $(EURASIAROOT) \ + DOS2UNIX="$(DOS2UNIX)" \ + -f eurasiacon/build/linux2/prepare_tree.mk +else + @: +endif + +# This deletes built-in suffix rules. Otherwise the submake isn't run when +# saying e.g. "make thingy.a" +.SUFFIXES: + +# Because we have a match-anything rule below, we'll run the main build when +# we're actually trying to remake various makefiles after they're read in. +# These rules try to prevent that +%.mk: ; +Makefile%: ; +Makefile: ; + +.PHONY: build kbuild install +build kbuild install: autogen + @$(if $(MAKECMDGOALS),$(MAKE) $(MAKE_ETC) $(MAKECMDGOALS) $(eval MAKECMDGOALS :=),:) + +%: autogen + @$(if $(MAKECMDGOALS),$(MAKE) $(MAKE_ETC) $(MAKECMDGOALS) $(eval MAKECMDGOALS :=),:) diff --git a/eurasiacon/build/linux2/defs.mk b/eurasiacon/build/linux2/defs.mk new file mode 100644 index 0000000..d4cfe29 --- /dev/null +++ b/eurasiacon/build/linux2/defs.mk @@ -0,0 +1,103 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +define must-be-defined +$(if $(filter undefined,$(origin $(1))),$(error In makefile $(THIS_MAKEFILE): $$($(1)) must be defined),) +endef + +define must-be-nonempty +$(if $(strip $($(1))),,$(error In makefile $(THIS_MAKEFILE): $$($(1)) must contain a value)) +endef + +define directory-must-exist +$(if $(wildcard $(abspath $(1)/)),,$(error Directory $(1) must exist)) +endef + +define one-word-only +$(if $(filter-out $(firstword $($(1))),$($(1))),$(error In makefile $(THIS_MAKEFILE): $$($(1)) must contain only one word),) +endef + +define target-intermediates-of +$(addprefix $(TARGET_OUT)/intermediates/$(1)/,$(2)) +endef + +define host-intermediates-of +$(addprefix $(HOST_OUT)/intermediates/$(1)/,$(2)) +endef + +define module-library +$(patsubst lib%.so,%,$(if $($(1)_target),$($(1)_target),$(1).so)) +endef + +# This is done to allow module type makefiles to use $(THIS_MAKEFILE) +define register-module +INTERNAL_MAKEFILE_FOR_MODULE_$(1) := $(THIS_MAKEFILE) +endef + +define process-module +THIS_MODULE := $(1) +THIS_MAKEFILE := $(INTERNAL_MAKEFILE_FOR_MODULE_$(1)) +include $$(MAKE_TOP)/this_makefile.mk +$$(call must-be-nonempty,THIS_MAKEFILE) +$$(call must-be-nonempty,$(1)_type) +MODULE_HOST_BUILD := $$(if $(filter host_%,$($(1)_type)),true,) +include $$(MAKE_TOP)/moduledefs.mk +include $$(MAKE_TOP)/$$(patsubst host_%,%,$($(1)_type)).mk +INTERNAL_TARGETS_FOR_$(THIS_MODULE) := $(MODULE_TARGETS) +endef + +# This can be used by module_type.mk files to indicate that they can't be +# built as host_module_type +define target-build-only +$(if $(filter true,$(MODULE_HOST_BUILD)),$(error In makefile $(THIS_MAKEFILE): Module $(THIS_MODULE) attempted to build a host $(1), which is not supported)) +endef + +define relative-to-top +$(patsubst $(TOP)/%,%,$(1)) +endef + +define cc-check +$(shell \ + CC_CHECK=$(patsubst @%,%,$(CC_CHECK)) && \ + $(patsubst @%,%,$(DOS2UNIX)) $$CC_CHECK && \ + $(patsubst @%,%,$(CHMOD)) +x $$CC_CHECK && \ + $$CC_CHECK --cc "$(1)" --out "$(2)" $(3)) +endef + +define cc-is-64bit +$(call cc-check,$(1),$(OUT),--64) +endef + +define cc-option +$(call cc-check,$(patsubst @%,%,$(CC)),$(OUT),$(1)) +endef + +define cxx-option +$(call cc-check,$(patsubst @%,%,$(CXX)),$(OUT),$(1)) +endef + +define host-cc-option +$(call cc-check,$(patsubst @%,%,$(HOST_CC)),$(OUT),$(1)) +endef diff --git a/eurasiacon/build/linux2/kbuild/Makefile.template b/eurasiacon/build/linux2/kbuild/Makefile.template new file mode 100644 index 0000000..4804e94 --- /dev/null +++ b/eurasiacon/build/linux2/kbuild/Makefile.template @@ -0,0 +1,71 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +# This top-level kbuild makefile builds all the Linux kernel modules in the +# DDK. To run kbuild, this makefile is copied to $(TARGET_OUT)/kbuild/Makefile +# and make is invoked in $(TARGET_OUT)/kbuild. + +# This makefile doesn't define any kbuild special variables apart from +# ccflags-y and obj-m. The variables for objects are picked up by including +# the kbuild makefile fragments named in $(INTERNAL_KBUILD_MAKEFILES). The +# list of objects that these fragments make is collected in +# $(INTERNAL_KBUILD_OBJECTS) and $(INTERNAL_EXTRA_KBUILD_OBJECTS). These +# variables are set according to the build's $(KERNEL_COMPONENTS) and +# $(EXTRA_PVRSRVKM_COMPONENTS). To add a new kernel module to the build, edit +# these variables in the per-build Makefile. + +include $(OUT)/config_kernel.mk + +.SECONDARY: + +$(OUT)/target/kbuild/external/%.c: $(EXTRA_KBUILD_SOURCE)/%.c + @if [ ! -e $(dir $@) ]; then mkdir -p $(dir $@); fi + @if [ ! -h $@ ]; then ln -sf $< $@; fi + +$(OUT)/target/kbuild/%.c: $(TOP)/%.c + @if [ ! -e $(dir $@) ]; then mkdir -p $(dir $@); fi + @if [ ! -h $@ ]; then ln -sf $< $@; fi + +ccflags-y += -D__linux__ -include $(OUT)/config_kernel.h \ + -DDEBUG_LOG_PATH_TRUNCATE="\"$(OUT)/target/kbuild\"" \ + -I$(OUT)/include \ + -I$(TOP)/include4 \ + -I$(TOP)/services4/include \ + -I$(TOP)/services4/system/$(PVR_SYSTEM) \ + -I$(TOP)/services4/system/include \ + -I$(TOP)/services4/srvkm/hwdefs \ + -I$(TOP)/services4/srvkm/bridged \ + -I$(TOP)/services4/srvkm/bridged/sgx \ + -I$(TOP)/services4/srvkm/common \ + -I$(TOP)/services4/srvkm/devices/sgx \ + -I$(TOP)/services4/srvkm/env/linux \ + -I$(TOP)/services4/srvkm/include + +include $(INTERNAL_KBUILD_MAKEFILES) + +$(if $(pvrsrvkm-y),,$(error pvrsrvkm-y was empty, which could mean that srvkm is missing from $$(KERNEL_COMPONENTS))) +pvrsrvkm-y += $(foreach _m,$(INTERNAL_EXTRA_KBUILD_OBJECTS:.o=),$($(_m)-y)) + +obj-m += $(INTERNAL_KBUILD_OBJECTS) diff --git a/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile b/eurasiacon/build/linux2/kbuild/external_tarball.mk similarity index 70% rename from eurasiacon/build/linux/omap3430_linux/kbuild/Makefile rename to eurasiacon/build/linux2/kbuild/external_tarball.mk index d1805a5..caa58ed 100644 --- a/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile +++ b/eurasiacon/build/linux2/kbuild/external_tarball.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -22,16 +22,13 @@ # Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK # # -# - -include ../../kbuild/Makefile.kbuild -EXTRA_SUBDIRS = - -ifeq ($(SUPPORT_OMAP3430_OMAPFB3),1) -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omapfb3_linux -else -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux +ifneq ($(EXTERNAL_3PDD_TARBALL),) +TAR_OPT_STRIP_COMPONENTS ?= --strip-components +prepare_tree: $(OUT)/target/kbuild/external +$(OUT)/target/kbuild/external: eurasiacon/external/$(EXTERNAL_3PDD_TARBALL) + @echo "Extracting $<.." + @mkdir -p $@ + @tar $(TAR_OPT_STRIP_COMPONENTS) 1 --touch -jxf $< -C $@ + @touch $(OUT)/target/kbuild/external endif - -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/bufferclass_example diff --git a/eurasiacon/build/linux2/kbuild/kbuild.mk b/eurasiacon/build/linux2/kbuild/kbuild.mk new file mode 100644 index 0000000..2d973af --- /dev/null +++ b/eurasiacon/build/linux2/kbuild/kbuild.mk @@ -0,0 +1,85 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +include $(CONFIG_KERNEL_MK) + +$(if $(strip $(KERNELDIR)),,$(error KERNELDIR must be set)) +$(call directory-must-exist,$(KERNELDIR)) + +KERNEL_CROSS_COMPILE ?= $(CROSS_COMPILE) + +$(TARGET_OUT)/kbuild/Makefile: $(MAKE_TOP)/kbuild/Makefile.template + @[ ! -e $(dir $@) ] && mkdir -p $(dir $@) || true + $(CP) -f $< $@ + +# We need to make INTERNAL_KBUILD_MAKEFILES absolute because the files will be +# read while chdir'd into $(KERNELDIR) +INTERNAL_KBUILD_MAKEFILES := $(abspath $(foreach _m,$(KERNEL_COMPONENTS) $(EXTRA_PVRSRVKM_COMPONENTS),$(if $(INTERNAL_KBUILD_MAKEFILE_FOR_$(_m)),$(INTERNAL_KBUILD_MAKEFILE_FOR_$(_m)),$(error Unknown kbuild module "$(_m)")))) +INTERNAL_KBUILD_OBJECTS := $(foreach _m,$(KERNEL_COMPONENTS),$(if $(INTERNAL_KBUILD_OBJECTS_FOR_$(_m)),$(INTERNAL_KBUILD_OBJECTS_FOR_$(_m)),$(error BUG: Unknown kbuild module "$(_m)" should have been caught earlier))) +INTERNAL_EXTRA_KBUILD_OBJECTS := $(foreach _m,$(EXTRA_PVRSRVKM_COMPONENTS),$(if $(INTERNAL_KBUILD_OBJECTS_FOR_$(_m)),$(INTERNAL_KBUILD_OBJECTS_FOR_$(_m)),$(error BUG: Unknown kbuild module "$(_m)" should have been caught earlier))) +.PHONY: kbuild kbuild_clean + +kbuild: $(TARGET_OUT)/kbuild/Makefile + @$(MAKE) -Rr --no-print-directory -C $(KERNELDIR) M=$(abspath $(TARGET_OUT)/kbuild) \ + INTERNAL_KBUILD_MAKEFILES="$(INTERNAL_KBUILD_MAKEFILES)" \ + INTERNAL_KBUILD_OBJECTS="$(INTERNAL_KBUILD_OBJECTS)" \ + INTERNAL_EXTRA_KBUILD_OBJECTS="$(INTERNAL_EXTRA_KBUILD_OBJECTS)" \ + EXTRA_KBUILD_SOURCE="$(EXTRA_KBUILD_SOURCE)" \ + CROSS_COMPILE="$(KERNEL_CROSS_COMPILE)" \ + EXTRA_CFLAGS="$(ALL_KBUILD_CFLAGS)" \ + V=$(V) W=$(W) \ + TOP=$(TOP) +ifeq ($(DEBUGLINK),1) + @for kernel_module in $(addprefix $(TARGET_OUT)/kbuild/,$(INTERNAL_KBUILD_OBJECTS:.o=.ko)); do \ + $(patsubst @%,%,$(STRIP)) --strip-unneeded $$kernel_module; \ + done +endif + @for kernel_module in $(addprefix $(TARGET_OUT)/kbuild/,$(INTERNAL_KBUILD_OBJECTS:.o=.ko)); do \ + cp $$kernel_module $(TARGET_OUT); \ + done + +kbuild_clean: $(TARGET_OUT)/kbuild/Makefile + @$(MAKE) -Rr --no-print-directory -C $(KERNELDIR) M=$(abspath $(TARGET_OUT)/kbuild) \ + INTERNAL_KBUILD_MAKEFILES="$(INTERNAL_KBUILD_MAKEFILES)" \ + INTERNAL_KBUILD_OBJECTS="$(INTERNAL_KBUILD_OBJECTS)" \ + INTERNAL_EXTRA_KBUILD_OBJECTS="$(INTERNAL_EXTRA_KBUILD_OBJECTS)" \ + EXTRA_KBUILD_SOURCE="$(EXTRA_KBUILD_SOURCE)" \ + CROSS_COMPILE="$(KERNEL_CROSS_COMPILE)" \ + EXTRA_CFLAGS="$(ALL_KBUILD_CFLAGS)" \ + V=$(V) W=$(W) \ + TOP=$(TOP) clean + +kbuild_install: $(TARGET_OUT)/kbuild/Makefile + @: $(if $(strip $(DISCIMAGE)),,$(error $$(DISCIMAGE) was empty or unset while trying to use it to set INSTALL_MOD_PATH for modules_install)) + @$(MAKE) -Rr --no-print-directory -C $(KERNELDIR) M=$(abspath $(TARGET_OUT)/kbuild) \ + INTERNAL_KBUILD_MAKEFILES="$(INTERNAL_KBUILD_MAKEFILES)" \ + INTERNAL_KBUILD_OBJECTS="$(INTERNAL_KBUILD_OBJECTS)" \ + INTERNAL_EXTRA_KBUILD_OBJECTS="$(INTERNAL_EXTRA_KBUILD_OBJECTS)" \ + EXTRA_KBUILD_SOURCE="$(EXTRA_KBUILD_SOURCE)" \ + CROSS_COMPILE="$(KERNEL_CROSS_COMPILE)" \ + EXTRA_CFLAGS="$(ALL_KBUILD_CFLAGS)" \ + INSTALL_MOD_PATH="$(DISCIMAGE)" \ + V=$(V) W=$(W) \ + TOP=$(TOP) modules_install diff --git a/eurasiacon/build/linux2/kernel_module.mk b/eurasiacon/build/linux2/kernel_module.mk new file mode 100644 index 0000000..f5db1a8 --- /dev/null +++ b/eurasiacon/build/linux2/kernel_module.mk @@ -0,0 +1,59 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + +# Rules for making kernel modules with kbuild. This makefile doesn't define +# any rules that build the modules, it only copies the kbuild Makefile into +# the right place and then invokes kbuild to do the actual build + +$(call target-build-only,kernel module) + +MODULE_KBUILD_DIR := $(MODULE_OUT)/kbuild + +# $(THIS_MODULE)_makefile names the kbuild makefile fragment used to build +# this module's objects +$(call must-be-nonempty,$(THIS_MODULE)_makefile) +MODULE_KBUILD_MAKEFILE := $($(THIS_MODULE)_makefile) +$(if $(wildcard $(abspath $(MODULE_KBUILD_MAKEFILE))),,$(error In makefile $(THIS_MAKEFILE): Module $(THIS_MODULE) requires kbuild makefile $(MODULE_KBUILD_MAKEFILE), which is missing)) + +# $(THIS_MODULE)_target specifies the name of the kernel module +$(call must-be-nonempty,$(THIS_MODULE)_target) +MODULE_KBUILD_OBJECTS := $($(THIS_MODULE)_target:.ko=.o) + +# Here we could maybe include $(MODULE_KBUILD_MAKEFILE) and look at +# $(MODULE_KBUILD_OBJECTS)-y to see which source files might be built + +.PHONY: $(THIS_MODULE) +$(THIS_MODULE): MODULE_KBUILD_MAKEFILE := $(MODULE_KBUILD_MAKEFILE) +$(THIS_MODULE): MODULE_KBUILD_OBJECTS := $(MODULE_KBUILD_OBJECTS) +$(THIS_MODULE): + @echo "kbuild module '$@'" + @echo " MODULE_KBUILD_MAKEFILE := $(MODULE_KBUILD_MAKEFILE)" + @echo " MODULE_KBUILD_OBJECTS := $(MODULE_KBUILD_OBJECTS)" + @echo ' Being built:' $(if $(filter $@,$(KERNEL_COMPONENTS)),"yes (separate module)",$(if $(filter $@,$(EXTRA_PVRSRVKM_COMPONENTS)),"yes (into pvrsrvkm)","no")) + @echo "Module $@ is a kbuild module. Run 'make kbuild' to make it" + @false + +ALL_KBUILD_MODULES += $(THIS_MODULE) +INTERNAL_KBUILD_MAKEFILE_FOR_$(THIS_MODULE) := $(MODULE_KBUILD_MAKEFILE) +INTERNAL_KBUILD_OBJECTS_FOR_$(THIS_MODULE) := $(MODULE_KBUILD_OBJECTS) diff --git a/eurasiacon/build/linux2/kernel_version.mk b/eurasiacon/build/linux2/kernel_version.mk new file mode 100644 index 0000000..8ed6aaa --- /dev/null +++ b/eurasiacon/build/linux2/kernel_version.mk @@ -0,0 +1,61 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +$(if $(KERNELDIR),,$(error KERNELDIR must be set to obtain a version)) + +override KERNEL_VERSION := \ + $(shell grep "^VERSION = " $(KERNELDIR)/Makefile | cut -f3 -d' ') +override KERNEL_PATCHLEVEL := \ + $(shell grep "^PATCHLEVEL = " $(KERNELDIR)/Makefile | cut -f3 -d' ') +override KERNEL_SUBLEVEL := \ + $(shell grep "^SUBLEVEL = " $(KERNELDIR)/Makefile | cut -f3 -d' ') +override KERNEL_EXTRAVERSION := \ + $(shell grep "^EXTRAVERSION = " $(KERNELDIR)/Makefile | cut -f3 -d' ') + +# The base ID doesn't have to be accurate; we only use it for +# feature checks which will not care about extraversion bits +# +override KERNEL_BASE_ID := \ + $(KERNEL_VERSION).$(KERNEL_PATCHLEVEL).$(KERNEL_SUBLEVEL) + +# UTS_RELEASE is more accurate, if we can find it +# If we can't, fall back to manufacturing the version +# +KERNEL_ID ?= \ + $(shell grep -h '\#define UTS_RELEASE' \ + $(KERNELDIR)/include/linux/* | cut -f3 -d' ' | sed s/\"//g) + +ifeq ($(strip $(KERNEL_ID)),) +# kernel.release, it it exists, contains what UTS_RELEASE would have +# been set to. +# +KERNEL_ID := \ + $(shell cat $(KERNELDIR)/include/config/kernel.release 2>/dev/null) +endif + +ifeq ($(strip $(KERNEL_ID)),) +KERNEL_ID := \ + $(KERNEL_VERSION).$(KERNEL_PATCHLEVEL).$(KERNEL_SUBLEVEL)$(KERNEL_EXTRAVERSION) +endif diff --git a/eurasiacon/build/linux2/moduledefs.mk b/eurasiacon/build/linux2/moduledefs.mk new file mode 100644 index 0000000..2569099 --- /dev/null +++ b/eurasiacon/build/linux2/moduledefs.mk @@ -0,0 +1,81 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +MODULE_TARGETS := +MODULE_CFLAGS := $(ALL_CFLAGS) $($(THIS_MODULE)_cflags) +MODULE_CXXFLAGS := $(ALL_CXXFLAGS) $($(THIS_MODULE)_cxxflags) +MODULE_HOST_CFLAGS := $(ALL_HOST_CFLAGS) $($(THIS_MODULE)_cflags) +MODULE_HOST_CXXFLAGS := $(ALL_HOST_CXXFLAGS) $($(THIS_MODULE)_cxxflags) +MODULE_LDFLAGS := $(ALL_LDFLAGS) $($(THIS_MODULE)_ldflags) +MODULE_HOST_LDFLAGS := $(ALL_HOST_LDFLAGS) $($(THIS_MODULE)_ldflags) +MODULE_BISON_FLAGS := $(ALL_BISON_FLAGS) $($(THIS_MODULE)_bisonflags) +MODULE_FLEX_FLAGS := $(ALL_FLEX_FLAGS) $($(THIS_MODULE)_flexflags) + +# -L flags for library search dirs +MODULE_LIBRARY_DIR_FLAGS := $(foreach _path,$($(THIS_MODULE)_libpaths),$(if $(filter /%,$(_path)),-L$(call relative-to-top,$(_path)),-L$(_path))) +# -I flags for header search dirs +MODULE_INCLUDE_FLAGS := $(foreach _path,$($(THIS_MODULE)_includes),$(if $(filter /%,$(_path)),-I$(call relative-to-top,$(_path)),-I$(_path))) + +# Variables used to differentiate between host/target builds +MODULE_OUT := $(if $(MODULE_HOST_BUILD),$(HOST_OUT),$(TARGET_OUT)) +MODULE_INTERMEDIATES_DIR := $(if $(MODULE_HOST_BUILD),$(HOST_INTERMEDIATES)/$(THIS_MODULE),$(TARGET_INTERMEDIATES)/$(THIS_MODULE)) + +.SECONDARY: $(MODULE_INTERMEDIATES_DIR) +$(MODULE_INTERMEDIATES_DIR): + $(make-directory) + +Host_or_target := $(if $(MODULE_HOST_BUILD),Host,Target) + +# These define the rules for finding source files. +# - If a name begins with a slash, we strip $(TOP) off the front if it begins +# with $(TOP). This is so that we don't get really long error messages from +# the compiler if the source tree is in a deeply nested directory, but we +# still do get absolute paths if you say "make OUT=/tmp/somewhere" +# - Otherwise, if a name contains a slash and begins with $(OUT), we leave it +# as it is. This is so you can say "module_src := +# $(TARGET_INTERMEDIATES)/something/generated.c" +# - Otherwise, we assume it's a path referring to somewhere under the +# directory containing Linux.mk, and add $(THIS_DIR) to it +_SOURCES_WITHOUT_SLASH := $(strip $(foreach _s,$($(THIS_MODULE)_src),$(if $(findstring /,$(_s)),,$(_s)))) +_SOURCES_WITH_SLASH := $(strip $(foreach _s,$($(THIS_MODULE)_src),$(if $(findstring /,$(_s)),$(_s),))) +MODULE_SOURCES := $(addprefix $(THIS_DIR)/,$(_SOURCES_WITHOUT_SLASH)) +MODULE_SOURCES += $(call relative-to-top,$(filter /%,$(_SOURCES_WITH_SLASH))) +_RELATIVE_SOURCES_WITH_SLASH := $(filter-out /%,$(_SOURCES_WITH_SLASH)) +_OUTDIR_RELATIVE_SOURCES_WITH_SLASH := $(filter $(RELATIVE_OUT)/%,$(_RELATIVE_SOURCES_WITH_SLASH)) +_THISDIR_RELATIVE_SOURCES_WITH_SLASH := $(filter-out $(RELATIVE_OUT)/%,$(_RELATIVE_SOURCES_WITH_SLASH)) +MODULE_SOURCES += $(_OUTDIR_RELATIVE_SOURCES_WITH_SLASH) +MODULE_SOURCES += $(addprefix $(THIS_DIR)/,$(_THISDIR_RELATIVE_SOURCES_WITH_SLASH)) +MODULE_SOURCES += $(addprefix $(MODULE_OUT)/intermediates/,$($(THIS_MODULE)_gensrc)) +MODULE_GENERATED_HEADERS := $(addprefix $(MODULE_OUT)/intermediates/,$($(THIS_MODULE)_genheaders)) + +# -l flags for each library +MODULE_LIBRARY_FLAGS := $(addprefix -l, $($(THIS_MODULE)_staticlibs)) $(addprefix -l,$($(THIS_MODULE)_libs)) $(foreach _lib,$($(THIS_MODULE)_extlibs),$(if $(filter undefined,$(origin lib$(_lib)_ldflags)),-l$(_lib),$(lib$(_lib)_ldflags))) + +# pkg-config integration; primarily used by X.org +# FIXME: We don't support arbitrary CFLAGS yet (just includes) +$(foreach _package,$($(THIS_MODULE)_packages),\ + $(eval MODULE_INCLUDE_FLAGS += `pkg-config --cflags-only-I $(_package)`)\ + $(eval MODULE_LIBRARY_FLAGS += `pkg-config --libs-only-l $(_package)`)\ + $(eval MODULE_LIBRARY_DIR_FLAGS += `pkg-config --libs-only-L $(_package)`)) diff --git a/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile b/eurasiacon/build/linux2/modules.mk similarity index 67% rename from eurasiacon/build/linux/omap3630_linux/kbuild/Makefile rename to eurasiacon/build/linux2/modules.mk index d1805a5..9bc52a3 100644 --- a/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile +++ b/eurasiacon/build/linux2/modules.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -22,16 +22,12 @@ # Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK # # -# -include ../../kbuild/Makefile.kbuild +# Bits for processing $(modules) after reading in each Linux.mk -EXTRA_SUBDIRS = +#$(info ---- $(modules) ----) +$(call must-be-nonempty,modules) -ifeq ($(SUPPORT_OMAP3430_OMAPFB3),1) -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omapfb3_linux -else -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux -endif +$(foreach _m,$(modules),$(if $(filter $(_m),$(ALL_MODULES)),$(error In makefile $(THIS_MAKEFILE): Duplicate module $(_m) (first seen in $(INTERNAL_MAKEFILE_FOR_MODULE_$(_m))) listed in $$(modules)),$(eval $(call register-module,$(_m))))) -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/bufferclass_example +ALL_MODULES += $(modules) diff --git a/eurasiacon/build/linux2/omap4430_linux/Makefile b/eurasiacon/build/linux2/omap4430_linux/Makefile new file mode 100644 index 0000000..0f3a35b --- /dev/null +++ b/eurasiacon/build/linux2/omap4430_linux/Makefile @@ -0,0 +1,140 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +PVR_SYSTEM := omap4 + +KERNEL_COMPONENTS := srvkm bufferclass_example + +include ../kernel_version.mk + +OMAP_KERNEL_AT_LEAST_2_6_35 := $(shell test $(KERNEL_VERSION) -ge 2 -a \ + $(KERNEL_PATCHLEVEL) -ge 6 -a \ + $(KERNEL_SUBLEVEL) -ge 35 && echo 1 || echo 0) + +# Only enable active power management if passive power management is +# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP, +# the system can suspend in the case where active power management is +# enabled in the SGX driver, but passive power management isn't. As +# passive power management isn't enabled, the driver won't see the +# system suspend/resume events, and so won't take appropriate action. +LDM_PLATFORM ?= 1 + +ifeq ($(LDM_PLATFORM),1) +SUPPORT_LINUX_USING_WORKQUEUES := 1 +DISPLAY_CONTROLLER_COMPONENT += dc_omapfb3_linux +DISPLAY_CONTROLLER := omaplfb +else +SUPPORT_LINUX_USING_SHARED_WORKQUEUES := 1 +OMAP_NON_FLIP_DISPLAY := 1 +DISPLAY_CONTROLLER_COMPONENT += linux_framebuffer +DISPLAY_CONTROLLER := pvrlfb +endif + +OPTIM := -Os + +SYS_CFLAGS := -march=armv7-a + +ifneq ($(CROSS_COMPILE),) +SYS_CFLAGS += -mtls-dialect=arm +endif + +SUPPORT_OMAP4430_NEON ?= 1 + +ifeq ($(SUPPORT_OMAP4430_NEON),1) +SYS_CFLAGS += -ftree-vectorize -mfpu=neon -mfloat-abi=softfp +endif + +PVR_NO_FULL_CACHE_OPS := 1 + +LIBGCC := $(shell $(CROSS_COMPILE)gcc -print-libgcc-file-name) + +SGXCORE := 540 +SGX_CORE_REV := 120 + +SGX_DYNAMIC_TIMING_INFO := 1 +SYS_CUSTOM_POWERLOCK_WRAP := 1 + +ifeq ($(OMAP_NON_FLIP_DISPLAY),1) +OPK_DEFAULT := libpvrPVR2D_BLITWSEGL.so +else +OPK_DEFAULT := libpvrPVR2D_FLIPWSEGL.so +endif + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_35),1) +ifeq ($(LDM_PLATFORM),1) +PVR_LDM_PLATFORM_PRE_REGISTERED := 1 +endif +endif + +include ../common/xorg_test.mk +ifeq ($(want_xorg),1) + +SUPPORT_DRI_DRM := 1 + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_35),1) +PVR_DRI_DRM_PLATFORM_DEV := 1 +PVR_DRI_DRM_STATIC_BUS_ID := 1 +else +PVR_DRI_DRM_NOT_PCI := 1 +endif + +XORG_TOOLCHAIN := tarballs-omap4-ubuntu-10.10-cross +XORG_PVR_CONF := omap4 +XORG_PVR_VIDEO := omap4 + +OPK_FALLBACK := libpvrPVR2D_DRIWSEGL.so + +ifneq ($(OMAP_NON_FLIP_DISPLAY),1) +XORG_PVR_VIDEO ?= $(PVR_SYSTEM) +PVR_DISPLAY_CONTROLLER_DRM_IOCTL := 1 +endif + +else # xorg isn't excluded + +OPK_FALLBACK := libpvrPVR2D_BLITWSEGL.so + +endif # xorg isn't excluded + +ifeq ($(SUPPORT_DRI_DRM),1) +ifeq ($(PVR_DRI_DRM_NOT_PCI),1) +KERNEL_COMPONENTS += linux_drm +EXTRA_KBUILD_SOURCE := $(KERNELDIR) +endif +EXTRA_PVRSRVKM_COMPONENTS += $(DISPLAY_CONTROLLER_COMPONENT) +else +KERNEL_COMPONENTS += $(DISPLAY_CONTROLLER_COMPONENT) +endif + +include ../config/core.mk +include ../common/xorg.mk +include ../common/dridrm.mk +include ../common/opencl.mk +include ../common/omap4.mk + +# We only need this for pvr_video's includes, which should +# really be done differently, as DISPLAY_CONTROLLER_DIR is +# now obsolete.. +# +$(eval $(call UserConfigMake,DISPLAY_CONTROLLER_DIR,3rdparty/$(DISPLAY_CONTROLLER_COMPONENT))) diff --git a/eurasiacon/build/linux2/prepare_tree.mk b/eurasiacon/build/linux2/prepare_tree.mk new file mode 100644 index 0000000..e1e18da --- /dev/null +++ b/eurasiacon/build/linux2/prepare_tree.mk @@ -0,0 +1,47 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +-include $(OUT)/config.mk.new + +.PHONY: prepare_tree + +-include eurasiacon/build/linux2/kbuild/external_tarball.mk + +# If there's no external tarball, there's nothing to do +# +prepare_tree: + +INTERNAL_INCLUDED_PREPARE_HEADERS := +-include eurasiacon/build/linux2/prepare_headers.mk +ifneq ($(INTERNAL_INCLUDED_PREPARE_HEADERS),true) +missing_headers := $(strip $(shell test ! -e include4/pvrversion.h && echo true)) +ifdef missing_headers +$(info ) +$(info ** include4/pvrversion.h is missing, and cannot be rebuilt.) +$(info ** Cannot continue.) +$(info ) +$(error Missing headers) +endif +endif diff --git a/eurasiacon/build/linux2/this_makefile.mk b/eurasiacon/build/linux2/this_makefile.mk new file mode 100644 index 0000000..2410804 --- /dev/null +++ b/eurasiacon/build/linux2/this_makefile.mk @@ -0,0 +1,53 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +# Find out the path of the Linux.mk makefile currently being processed, and +# set paths used by the build rules + +# This magic is used so we can use this_makefile.mk twice: first when reading +# in each Linux.mk, and then again when generating rules. There we set +# $(THIS_MAKEFILE), and $(REMAINING_MAKEFILES) should be empty +ifneq ($(strip $(REMAINING_MAKEFILES)),) + +# Absolute path to the Linux.mk being processed +THIS_MAKEFILE := $(firstword $(REMAINING_MAKEFILES)) + +# The list of makefiles left to process +REMAINING_MAKEFILES := $(wordlist 2,$(words $(REMAINING_MAKEFILES)),$(REMAINING_MAKEFILES)) + +else + +# When generating rules, we should have read in every Linux.mk +$(if $(INTERNAL_INCLUDED_ALL_MAKEFILES),,$(error No makefiles left in $$(REMAINING_MAKEFILES), but $$(INTERNAL_INCLUDED_ALL_MAKEFILES) is not set)) + +endif + +# Path to the directory containing Linux.mk +THIS_DIR := $(patsubst %/,%,$(dir $(THIS_MAKEFILE))) +ifeq ($(strip $(THIS_DIR)),) +$(error Empty $$(THIS_DIR) for makefile "$(THIS_MAKEFILE)") +endif + +modules := diff --git a/eurasiacon/build/linux2/ti335x_linux/Makefile b/eurasiacon/build/linux2/ti335x_linux/Makefile new file mode 100644 index 0000000..4e360b7 --- /dev/null +++ b/eurasiacon/build/linux2/ti335x_linux/Makefile @@ -0,0 +1,140 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + +PVR_SYSTEM := ti335x + +KERNEL_COMPONENTS := srvkm bufferclass_example + +include ../kernel_version.mk + +OMAP_KERNEL_AT_LEAST_2_6_35 := $(shell test $(KERNEL_VERSION) -ge 2 -a \ + $(KERNEL_PATCHLEVEL) -ge 6 -a \ + $(KERNEL_SUBLEVEL) -ge 35 && echo 1 || echo 0) + +# Only enable active power management if passive power management is +# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP, +# the system can suspend in the case where active power management is +# enabled in the SGX driver, but passive power management isn't. As +# passive power management isn't enabled, the driver won't see the +# system suspend/resume events, and so won't take appropriate action. +LDM_PLATFORM ?= 1 + +SUPPORT_LINUX_USING_WORKQUEUES := 1 +DISPLAY_CONTROLLER_COMPONENT += dc_omapfb3_linux +DISPLAY_CONTROLLER := omaplfb + +OPTIM := -Os + +SYS_CFLAGS := -march=armv7-a +TRANSFER_QUEUE ?= 1 +SUPPORT_SGX_EVENT_OBJECT ?= 1 +SUPPORT_SECURE_HANDLES = 1 +SUPPORT_SRVINIT = 1 +SUPPORT_PERCONTEXT_PB = 1 +DISABLE_SGX_PB_GROW_SHRINK ?= 1 +SUPPORT_LINUX_X86_PAT ?=1 +SUPPORT_LINUX_X86_WRITECOMBINE ?=1 +SUPPORT_SGX_LOW_LATENCY_SCHEDULING ?=1 + + +SUPPORT_OMAP4430_NEON ?= 1 +PVR_LDM_PLATFORM_PRE_REGISTERED := 0 + +ifeq ($(SUPPORT_OMAP4430_NEON),1) +SYS_CFLAGS += -ftree-vectorize -mfpu=neon -mfloat-abi=softfp +endif + +PVR_NO_FULL_CACHE_OPS := 1 + +LIBGCC := $(shell $(CROSS_COMPILE)gcc -print-libgcc-file-name) + +SGXCORE := 530 +SGX_CORE_REV := 125 + +SGX_DYNAMIC_TIMING_INFO := 1 +SYS_CUSTOM_POWERLOCK_WRAP := 1 + +ifeq ($(OMAP_NON_FLIP_DISPLAY),1) +OPK_DEFAULT := libpvrPVR2D_BLITWSEGL.so +else +OPK_DEFAULT := libpvrPVR2D_FLIPWSEGL.so +endif + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_35),1) +ifeq ($(LDM_PLATFORM),1) +PVR_LDM_PLATFORM_PRE_REGISTERED := 0 +endif +endif + +include ../common/xorg_test.mk +ifeq ($(want_xorg),1) + +SUPPORT_DRI_DRM := 1 + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_35),1) +PVR_DRI_DRM_PLATFORM_DEV := 1 +PVR_DRI_DRM_STATIC_BUS_ID := 1 +else +PVR_DRI_DRM_NOT_PCI := 1 +endif + +XORG_TOOLCHAIN := tarballs-omap4-ubuntu-10.10-cross +XORG_PVR_CONF := omap4 +XORG_PVR_VIDEO := omap4 + +OPK_FALLBACK := libpvrPVR2D_DRIWSEGL.so + +ifneq ($(OMAP_NON_FLIP_DISPLAY),1) +XORG_PVR_VIDEO ?= $(PVR_SYSTEM) +PVR_DISPLAY_CONTROLLER_DRM_IOCTL := 1 +endif + +else # xorg isn't excluded + +OPK_FALLBACK := libpvrPVR2D_BLITWSEGL.so + +endif # xorg isn't excluded + +ifeq ($(SUPPORT_DRI_DRM),1) +ifeq ($(PVR_DRI_DRM_NOT_PCI),1) +KERNEL_COMPONENTS += linux_drm +EXTRA_KBUILD_SOURCE := $(KERNELDIR) +endif +EXTRA_PVRSRVKM_COMPONENTS += $(DISPLAY_CONTROLLER_COMPONENT) +else +KERNEL_COMPONENTS += $(DISPLAY_CONTROLLER_COMPONENT) +endif + +include ../config/core.mk +include ../common/xorg.mk +include ../common/dridrm.mk +include ../common/opencl.mk +include ../common/omap4.mk + +# We only need this for pvr_video's includes, which should +# really be done differently, as DISPLAY_CONTROLLER_DIR is +# now obsolete.. +# +$(eval $(call UserConfigMake,DISPLAY_CONTROLLER_DIR,3rdparty/$(DISPLAY_CONTROLLER_COMPONENT))) diff --git a/eurasiacon/build/linux2/tools/cc-check.sh b/eurasiacon/build/linux2/tools/cc-check.sh new file mode 100644 index 0000000..7d6d75c --- /dev/null +++ b/eurasiacon/build/linux2/tools/cc-check.sh @@ -0,0 +1,66 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + +usage() { + echo "usage: $0 [--64] --cc CC --out OUT [cflag]" + exit 1 +} + +do_cc() { + echo "int main(void){return 0;}" | $CC $1 -xc -c - -o $ccof 2>/dev/null +} + +while [ 1 ]; do + if [ "$1" = "--64" ]; then + BIT_CHECK=1 + elif [ "$1" = "--cc" ]; then + [ "x$2" = "x" ] && usage + CC="$2" && shift + elif [ "$1" = "--out" ]; then + [ "x$2" = "x" ] && usage + OUT="$2" && shift + elif [ "${1#--}" != "$1" ]; then + usage + else + break + fi + shift +done + +[ "x$CC" = "x" ] && usage +[ "x$OUT" = "x" ] && usage +ccof=$OUT/cc-sanity-check + +if [ "x$BIT_CHECK" = "x1" ]; then + do_cc "" + file $ccof | grep -q 64-bit + [ "$?" = "0" ] && echo true || echo false +else + [ "x$1" = "x" ] && usage + do_cc $1 + [ "$?" = "0" ] && echo $1 +fi + +rm -f $ccof +exit 0 diff --git a/eurasiacon/build/linux2/toplevel.mk b/eurasiacon/build/linux2/toplevel.mk new file mode 100644 index 0000000..79f906c --- /dev/null +++ b/eurasiacon/build/linux2/toplevel.mk @@ -0,0 +1,206 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# +# + + +# Define the default goal. This masks a previous definition of the default +# goal in Makefile.config, which must match this one +.PHONY: build +build: components kbuild scripts + +ifeq ($(OUT),) +$(error "Must specify output directory with OUT=") +endif + +ifeq ($(TOP),) +$(error "Must specify root of source tree with TOP=") +endif +$(call directory-must-exist,$(TOP)) + +# Output directory for configuration, object code, +# final programs/libraries, and install/rc scripts. +# + +# RELATIVE_OUT is relative only if it's under $(TOP) +RELATIVE_OUT := $(patsubst $(TOP)/%,%,$(OUT)) +HOST_OUT := $(RELATIVE_OUT)/host +TARGET_OUT := $(RELATIVE_OUT)/target +CONFIG_MK := $(RELATIVE_OUT)/config.mk +CONFIG_H := $(RELATIVE_OUT)/config.h +CONFIG_KERNEL_MK := $(RELATIVE_OUT)/config_kernel.mk +CONFIG_KERNEL_H := $(RELATIVE_OUT)/config_kernel.h +MAKE_TOP := eurasiacon/build/linux2 +THIS_MAKEFILE := (top-level makefiles) + +include $(MAKE_TOP)/defs.mk + +ifneq ($(INTERNAL_CLOBBER_ONLY),true) +# Create the out directory +# +$(shell mkdir -p $(OUT)) + +# Provide rules to create $(HOST_OUT) and $(TARGET_OUT) +.SECONDARY: $(HOST_OUT) $(TARGET_OUT) +$(HOST_OUT) $(TARGET_OUT): + $(make-directory) + +# If these generated files differ from any pre-existing ones, +# replace them, causing affected parts of the driver to rebuild. +# +$(shell \ + for file in $(CONFIG_MK) $(CONFIG_H) \ + $(CONFIG_KERNEL_MK) $(CONFIG_KERNEL_H); do \ + diff -q $$file $$file.new >/dev/null 2>/dev/null \ + && rm -f $$file.new \ + || mv -f $$file.new $$file >/dev/null 2>/dev/null; \ + done) +endif + +MAKEFLAGS := -Rr --no-print-directory + +ifneq ($(INTERNAL_CLOBBER_ONLY),true) + +# This is so you can say "find $(TOP) -name Linux.mk > /tmp/something; export +# ALL_MAKEFILES=/tmp/something; make" and avoid having to run find. This is +# handy if your source tree is mounted over NFS or something +override ALL_MAKEFILES := $(call relative-to-top,$(if $(strip $(ALL_MAKEFILES)),$(shell cat $(ALL_MAKEFILES)),$(shell find $(TOP) -type f -name Linux.mk))) +ifeq ($(strip $(ALL_MAKEFILES)),) +$(info ** Unable to find any Linux.mk files under $$(TOP). This could mean that) +$(info ** there are no makefiles, or that ALL_MAKEFILES is set in the environment) +$(info ** and points to a nonexistent or empty file.) +$(error No makefiles) +endif + +else # clobber-only +ALL_MAKEFILES := +endif + +REMAINING_MAKEFILES := $(ALL_MAKEFILES) +ALL_MODULES := +INTERNAL_INCLUDED_ALL_MAKEFILES := + +ifneq ($(INTERNAL_CLOBBER_ONLY),true) +-include $(CONFIG_MK) +# These files may not exist in GPL km source packages +-include $(MAKE_TOP)/xorgconf.mk +-include $(MAKE_TOP)/llvm.mk +endif + +include $(MAKE_TOP)/commands.mk +include $(MAKE_TOP)/buildvars.mk + +HOST_INTERMEDIATES := $(HOST_OUT)/intermediates +TARGET_INTERMEDIATES := $(TARGET_OUT)/intermediates + +# Include each Linux.mk, then include modules.mk to save some information +# about each module +include $(foreach _Linux.mk,$(ALL_MAKEFILES),$(MAKE_TOP)/this_makefile.mk $(_Linux.mk) $(MAKE_TOP)/modules.mk) + +ifeq ($(strip $(REMAINING_MAKEFILES)),) +INTERNAL_INCLUDED_ALL_MAKEFILES := true +else +$(error Impossible: $(words $(REMAINING_MAKEFILES)) makefiles were mysteriously ignored when reading $$(ALL_MAKEFILES)) +endif + +# At this point, all Linux.mks have been included. Now generate rules to build +# each module: for each module in $(ALL_MODULES), set per-makefile variables +$(foreach _m,$(ALL_MODULES),$(eval $(call process-module,$(_m)))) + +.PHONY: kbuild scripts install +kbuild scripts install: + +ifneq ($(INTERNAL_CLOBBER_ONLY),true) +-include $(MAKE_TOP)/scripts.mk +-include $(MAKE_TOP)/kbuild/kbuild.mk +else +# We won't depend on 'build' here so that people can build subsets of +# components and still have the install script attempt to install the +# subset. +install: + @if [ ! -d "$(DISCIMAGE)" ]; then \ + echo; \ + echo "** DISCIMAGE was not set or does not point to a valid directory."; \ + echo "** Cannot continue with install."; \ + echo; \ + exit 1; \ + fi + @if [ ! -f $(TARGET_OUT)/install.sh ]; then \ + echo; \ + echo "** install.sh not found in $(TARGET_OUT)."; \ + echo "** Cannot continue with install."; \ + echo; \ + exit 1; \ + fi + @cd $(TARGET_OUT) && ./install.sh +endif + +# You can say 'make all_modules' to attempt to make everything, or 'make +# components' to only make the things which are listed (in the per-build +# makefiles) as components of the build. 'make scripts' generates the +# install.sh and rc.pvr scripts. +.PHONY: all_modules components scripts +all_modules: $(ALL_MODULES) +components: $(COMPONENTS) + +# 'make opk' builds the OEM Porting Kit. The build should set OPK_COMPONENTS +# in components.mk if it should be possible to build the OPK for it +.PHONY: opk +ifneq ($(strip $(OPK_COMPONENTS)),) +opk: $(OPK_COMPONENTS) + +opk_clobber: MODULE_DIRS_TO_REMOVE := $(addprefix $(OUT)/target/intermediates/,$(OPK_COMPONENTS)) +opk_clobber: OPK_OUTFILES := $(addprefix $(RELATIVE_OUT)/target/,$(foreach _c,$(OPK_COMPONENTS),$(if $($(_c)_target),$($(_c)_target),$(error Module $(_c) must be a shared library which sets $$($(_c)_target) for OPK clobbering)))) +opk_clobber: + $(clean-dirs) + $(if $(V),,@echo " RM " $(call relative-to-top,$(OPK_OUTFILES))) + $(RM) -f $(OPK_OUTFILES) +else +# OPK_COMPONENTS is empty or unset +opk: + @echo + @echo "** This build ($(PVR_BUILD_DIR)) is unable to build the OPK, because" + @echo "** OPK_COMPONENTS is empty or unset. Cannot continue." + @echo + @false +endif + +# Cleaning +.PHONY: clean clobber +clean: MODULE_DIRS_TO_REMOVE := $(OUT)/host/intermediates $(OUT)/target/intermediates $(OUT)/target/kbuild +clean: + $(clean-dirs) +clobber: MODULE_DIRS_TO_REMOVE := $(OUT) +clobber: + $(clean-dirs) + +# Saying 'make clean-MODULE' removes the intermediates for MODULE. +# clobber-MODULE deletes the output files as well +clean-%: + $(if $(V),,@echo " RM " $(call relative-to-top,$(OUT)/host/intermediates/$* $(OUT)/target/intermediates/$*)) + $(RM) -rf $(OUT)/host/intermediates/$*/* $(OUT)/target/intermediates/$*/* +clobber-%: + $(if $(V),,@echo " RM " $(call relative-to-top,$(OUT)/host/intermediates/$* $(OUT)/target/intermediates/$* $(INTERNAL_TARGETS_FOR_$*))) + $(RM) -rf $(OUT)/host/intermediates/$* $(OUT)/target/intermediates/$* $(INTERNAL_TARGETS_FOR_$*) + +include $(MAKE_TOP)/bits.mk diff --git a/include4/dbgdrvif.h b/include4/dbgdrvif.h index 1057c6a..b7614ac 100644 --- a/include4/dbgdrvif.h +++ b/include4/dbgdrvif.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -28,8 +28,21 @@ #define _DBGDRVIF_ +#if defined(__linux__) + +#define FILE_DEVICE_UNKNOWN 0 +#define METHOD_BUFFERED 0 +#define FILE_ANY_ACCESS 0 + +#define CTL_CODE( DeviceType, Function, Method, Access ) (Function) +#define MAKEIOCTLINDEX(i) ((i) & 0xFFF) + +#else + #include "ioctldef.h" +#endif + #define DEBUG_CAPMODE_FRAMED 0x00000001UL #define DEBUG_CAPMODE_CONTINUOUS 0x00000002UL #define DEBUG_CAPMODE_HOTKEY 0x00000004UL diff --git a/include4/img_defs.h b/include4/img_defs.h index 3ba2d2f..79a730f 100644 --- a/include4/img_defs.h +++ b/include4/img_defs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -77,7 +77,7 @@ typedef char TCHAR, *PTCHAR, *PTSTR; #endif - #if defined(__linux__) || defined(__METAG) + #if defined(__linux__) || defined(__QNXNTO__) || defined(__METAG) #define IMG_CALLCONV #define IMG_INTERNAL __attribute__((visibility("hidden"))) @@ -109,6 +109,9 @@ typedef char TCHAR, *PTCHAR, *PTSTR; #define IMG_FORMAT_PRINTF(x,y) #endif +#define CLEANUP_WITH_POLL IMG_FALSE +#define FORCE_CLEANUP IMG_TRUE + #if defined (_WIN64) #define IMG_UNDEF (~0ULL) #else diff --git a/include4/img_types.h b/include4/img_types.h index 31962aa..2431786 100644 --- a/include4/img_types.h +++ b/include4/img_types.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -56,16 +56,19 @@ typedef signed long IMG_INT32, *IMG_PINT32; #define IMG_UINT32_MAX 0xFFFFFFFFUL #endif - #if (defined(LINUX) || defined(__METAG)) -#if !defined(USE_CODE) +#if defined(USE_CODE) + +typedef unsigned __int64 IMG_UINT64, *IMG_PUINT64; +typedef __int64 IMG_INT64, *IMG_PINT64; + +#else + #if ((defined(LINUX) || defined(__METAG)) || defined(__QNXNTO__)) typedef unsigned long long IMG_UINT64, *IMG_PUINT64; typedef long long IMG_INT64, *IMG_PINT64; -#endif #else - #error("define an OS") - #endif +#endif #if !(defined(LINUX) && defined (__KERNEL__)) typedef float IMG_FLOAT, *IMG_PFLOAT; @@ -84,21 +87,29 @@ typedef void IMG_VOID, *IMG_PVOID; typedef IMG_INT32 IMG_RESULT; #if defined(_WIN64) -typedef unsigned __int64 IMG_UINTPTR_T; + typedef unsigned __int64 IMG_UINTPTR_T; + typedef signed __int64 IMG_PTRDIFF_T; + typedef IMG_UINT64 IMG_SIZE_T; #else -typedef unsigned int IMG_UINTPTR_T; + typedef unsigned int IMG_UINTPTR_T; + typedef IMG_UINT32 IMG_SIZE_T; #endif typedef IMG_PVOID IMG_HANDLE; typedef void** IMG_HVOID, * IMG_PHVOID; -typedef IMG_UINT32 IMG_SIZE_T; - #define IMG_NULL 0 typedef IMG_UINT32 IMG_SID; +typedef IMG_UINT32 IMG_EVENTSID; + +#if defined(SUPPORT_SID_INTERFACE) + typedef IMG_SID IMG_S_HANDLE; +#else + typedef IMG_HANDLE IMG_S_HANDLE; +#endif typedef IMG_PVOID IMG_CPU_VIRTADDR; @@ -110,6 +121,8 @@ typedef struct _IMG_DEV_VIRTADDR } IMG_DEV_VIRTADDR; +typedef IMG_UINT32 IMG_DEVMEM_SIZE_T; + typedef struct _IMG_CPU_PHYADDR { diff --git a/include4/ioctldef.h b/include4/ioctldef.h deleted file mode 100644 index 4b23ad4..0000000 --- a/include4/ioctldef.h +++ /dev/null @@ -1,98 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __IOCTLDEF_H__ -#define __IOCTLDEF_H__ - -#define MAKEIOCTLINDEX(i) (((i) >> 2) & 0xFFF) - -#ifndef CTL_CODE - -#define DEVICE_TYPE ULONG - -#define FILE_DEVICE_BEEP 0x00000001 -#define FILE_DEVICE_CD_ROM 0x00000002 -#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 -#define FILE_DEVICE_CONTROLLER 0x00000004 -#define FILE_DEVICE_DATALINK 0x00000005 -#define FILE_DEVICE_DFS 0x00000006 -#define FILE_DEVICE_DISK 0x00000007 -#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 -#define FILE_DEVICE_FILE_SYSTEM 0x00000009 -#define FILE_DEVICE_INPORT_PORT 0x0000000a -#define FILE_DEVICE_KEYBOARD 0x0000000b -#define FILE_DEVICE_MAILSLOT 0x0000000c -#define FILE_DEVICE_MIDI_IN 0x0000000d -#define FILE_DEVICE_MIDI_OUT 0x0000000e -#define FILE_DEVICE_MOUSE 0x0000000f -#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 -#define FILE_DEVICE_NAMED_PIPE 0x00000011 -#define FILE_DEVICE_NETWORK 0x00000012 -#define FILE_DEVICE_NETWORK_BROWSER 0x00000013 -#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 -#define FILE_DEVICE_NULL 0x00000015 -#define FILE_DEVICE_PARALLEL_PORT 0x00000016 -#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 -#define FILE_DEVICE_PRINTER 0x00000018 -#define FILE_DEVICE_SCANNER 0x00000019 -#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a -#define FILE_DEVICE_SERIAL_PORT 0x0000001b -#define FILE_DEVICE_SCREEN 0x0000001c -#define FILE_DEVICE_SOUND 0x0000001d -#define FILE_DEVICE_STREAMS 0x0000001e -#define FILE_DEVICE_TAPE 0x0000001f -#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 -#define FILE_DEVICE_TRANSPORT 0x00000021 -#define FILE_DEVICE_UNKNOWN 0x00000022 -#define FILE_DEVICE_VIDEO 0x00000023 -#define FILE_DEVICE_VIRTUAL_DISK 0x00000024 -#define FILE_DEVICE_WAVE_IN 0x00000025 -#define FILE_DEVICE_WAVE_OUT 0x00000026 -#define FILE_DEVICE_8042_PORT 0x00000027 -#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 -#define FILE_DEVICE_BATTERY 0x00000029 -#define FILE_DEVICE_BUS_EXTENDER 0x0000002a -#define FILE_DEVICE_MODEM 0x0000002b -#define FILE_DEVICE_VDM 0x0000002c -#define FILE_DEVICE_MASS_STORAGE 0x0000002d - -#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ - ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ -) - -#define METHOD_BUFFERED 0 -#define METHOD_IN_DIRECT 1 -#define METHOD_OUT_DIRECT 2 -#define METHOD_NEITHER 3 - -#define FILE_ANY_ACCESS 0 -#define FILE_READ_ACCESS ( 0x0001 ) -#define FILE_WRITE_ACCESS ( 0x0002 ) - -#endif - -#endif - diff --git a/include4/pdumpdefs.h b/include4/pdumpdefs.h index 83ccbb2..193b464 100644 --- a/include4/pdumpdefs.h +++ b/include4/pdumpdefs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -68,6 +68,15 @@ typedef enum _PDUMP_PIXEL_FORMAT_ PVRSRV_PDUMP_PIXEL_FORMAT_F32 = 36, PVRSRV_PDUMP_PIXEL_FORMAT_L16 = 37, PVRSRV_PDUMP_PIXEL_FORMAT_L32 = 38, + PVRSRV_PDUMP_PIXEL_FORMAT_RGBA8888 = 39, + PVRSRV_PDUMP_PIXEL_FORMAT_ABGR4444 = 40, + PVRSRV_PDUMP_PIXEL_FORMAT_RGBA4444 = 41, + PVRSRV_PDUMP_PIXEL_FORMAT_BGRA4444 = 42, + PVRSRV_PDUMP_PIXEL_FORMAT_ABGR1555 = 43, + PVRSRV_PDUMP_PIXEL_FORMAT_RGBA5551 = 44, + PVRSRV_PDUMP_PIXEL_FORMAT_BGRA5551 = 45, + PVRSRV_PDUMP_PIXEL_FORMAT_BGR565 = 46, + PVRSRV_PDUMP_PIXEL_FORMAT_A8 = 47, PVRSRV_PDUMP_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff diff --git a/include4/pvr_debug.h b/include4/pvr_debug.h index 21fa2cd..a9d082e 100644 --- a/include4/pvr_debug.h +++ b/include4/pvr_debug.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -22,7 +22,7 @@ * Imagination Technologies Ltd. * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK * - ******************************************************************************/ +******************************************************************************/ #ifndef __PVR_DEBUG_H__ #define __PVR_DEBUG_H__ @@ -30,12 +30,14 @@ #include "img_types.h" + #if defined (__cplusplus) extern "C" { #endif #define PVR_MAX_DEBUG_MESSAGE_LEN (512) +/* These are privately used by pvr_debug, use the PVR_DBG_ defines instead */ #define DBGPRIV_FATAL 0x01UL #define DBGPRIV_ERROR 0x02UL #define DBGPRIV_WARNING 0x04UL @@ -58,6 +60,9 @@ extern "C" { #define PVR_DBG_CALLTRACE DBGPRIV_CALLTRACE,__FILE__, __LINE__ #define PVR_DBG_ALLOC DBGPRIV_ALLOC,__FILE__, __LINE__ +/* + * Debug driver debugging + */ #define PVR_DBGDRIV_MESSAGE DBGPRIV_DBGDRV_MESSAGE, "", 0 #if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) @@ -73,6 +78,8 @@ extern "C" { #endif +/* PVR_ASSERT() and PVR_DBG_BREAK handling */ + #if defined(PVRSRV_NEED_PVR_ASSERT) #define PVR_ASSERT(EXPR) if (!(EXPR)) PVRSRVDebugAssertFail(__FILE__, __LINE__); @@ -86,13 +93,15 @@ IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugAssertFail(const IMG_CHAR *pszFile, #define PVR_DBG_BREAK #endif -#else +#else /* defined(PVRSRV_NEED_PVR_ASSERT) */ #define PVR_ASSERT(EXPR) #define PVR_DBG_BREAK -#endif +#endif /* defined(PVRSRV_NEED_PVR_ASSERT) */ + +/* PVR_DPF() handling */ #if defined(PVRSRV_NEED_PVR_DPF) @@ -104,13 +113,15 @@ IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(4, 5); -#else +#else /* defined(PVRSRV_NEED_PVR_DPF) */ #define PVR_DPF(X) -#endif +#endif /* defined(PVRSRV_NEED_PVR_DPF) */ +/* PVR_TRACE() handling */ + #if defined(PVRSRV_NEED_PVR_TRACE) #define PVR_TRACE(X) PVRSRVTrace X @@ -118,16 +129,20 @@ IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTrace(const IMG_CHAR* pszFormat, ... ) IMG_FORMAT_PRINTF(1, 2); -#else +#else /* defined(PVRSRV_NEED_PVR_TRACE) */ #define PVR_TRACE(X) -#endif +#endif /* defined(PVRSRV_NEED_PVR_TRACE) */ #if defined (__cplusplus) } #endif -#endif +#endif /* __PVR_DEBUG_H__ */ + +/****************************************************************************** + End of file (pvr_debug.h) +******************************************************************************/ diff --git a/include4/pvrmodule.h b/include4/pvrmodule.h index 30cb2c3..3dd5845 100644 --- a/include4/pvrmodule.h +++ b/include4/pvrmodule.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/include4/pvrversion.h b/include4/pvrversion.h index 78181d9..331744c 100644 --- a/include4/pvrversion.h +++ b/include4/pvrversion.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -24,15 +24,38 @@ * ******************************************************************************/ + + + + + + + + + + #ifndef _PVRVERSION_H_ #define _PVRVERSION_H_ -#define PVRVERSION_MAJ 1 -#define PVRVERSION_MIN 6 -#define PVRVERSION_BRANCH 16 -#define PVRVERSION_BUILD 4117 -#define PVRVERSION_STRING "1.6.16.4117" -#define PVRVERSION_FILE "eurasiacon.pj" +#define PVR_STR(X) #X +#define PVR_STR2(X) PVR_STR(X) -#endif +#define PVRVERSION_MAJ 1 +#define PVRVERSION_MIN 7 +#define PVRVERSION_BRANCH 17 + +#define PVRVERSION_FAMILY "sgxddk" +#define PVRVERSION_BRANCHNAME "1.7" +#define PVRVERSION_BUILD 783851 +#define PVRVERSION_BSCONTROL "CustomerTI_OMAP4430_Linux_GPL" + +#define PVRVERSION_STRING "sgxddk 17 1.7@" PVR_STR2(PVRVERSION_BUILD) +#define PVRVERSION_STRING_SHORT "1.7@" PVR_STR2(PVRVERSION_BUILD) +#define COPYRIGHT_TXT "Copyright (c) Imagination Technologies Ltd. All Rights Reserved." + +#define PVRVERSION_BUILD_HI 78 +#define PVRVERSION_BUILD_LO 3851 +#define PVRVERSION_STRING_NUMERIC PVR_STR2(PVRVERSION_MAJ) "." PVR_STR2(PVRVERSION_MIN) "." PVR_STR2(PVRVERSION_BUILD_HI) "." PVR_STR2(PVRVERSION_BUILD_LO) + +#endif diff --git a/include4/regpaths.h b/include4/regpaths.h deleted file mode 100644 index a551eff..0000000 --- a/include4/regpaths.h +++ /dev/null @@ -1,43 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __REGPATHS_H__ -#define __REGPATHS_H__ - -#define POWERVR_REG_ROOT "Drivers\\Display\\PowerVR" -#define POWERVR_CHIP_KEY "\\SGX1\\" - -#define POWERVR_EURASIA_KEY "PowerVREurasia\\" - -#define POWERVR_SERVICES_KEY "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\PowerVR\\" - -#define PVRSRV_REGISTRY_ROOT POWERVR_EURASIA_KEY "HWSettings\\PVRSRVKM" - - -#define MAX_REG_STRING_SIZE 128 - - -#endif diff --git a/include4/services.h b/include4/services.h index d1afe28..cd672d1 100644 --- a/include4/services.h +++ b/include4/services.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -80,6 +80,7 @@ extern "C" { #define PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT (24) #define PVRSRV_MAP_NOUSERVIRTUAL (1UL<<27) +#define PVRSRV_MEM_XPROC (1U<<28) #define PVRSRV_NO_CONTEXT_LOSS 0 #define PVRSRV_SEVERE_LOSS_OF_CONTEXT 1 @@ -162,8 +163,11 @@ typedef enum IMG_VISTAVPBNODE = 0x0000000B, IMG_OPENGL = 0x0000000C, IMG_D3D = 0x0000000D, -#if defined(SUPPORT_GRAPHICS_HAL) - IMG_GRAPHICS_HAL = 0x0000000E +#if defined(SUPPORT_GRAPHICS_HAL) || defined(SUPPORT_COMPOSER_HAL) + IMG_ANDROID_HAL = 0x0000000E, +#endif +#if defined(SUPPORT_OPENCL) + IMG_OPENCL = 0x0000000F, #endif } IMG_MODULE_ID; @@ -207,7 +211,7 @@ typedef struct _PVRSRV_CLIENT_DEV_DATA_ typedef struct _PVRSRV_CONNECTION_ { IMG_HANDLE hServices; - IMG_UINTPTR_T ui32ProcessID; + IMG_UINT32 ui32ProcessID; PVRSRV_CLIENT_DEV_DATA sClientDevData; IMG_UINT32 ui32SrvFlags; }PVRSRV_CONNECTION; @@ -216,13 +220,17 @@ typedef struct _PVRSRV_CONNECTION_ typedef struct _PVRSRV_DEV_DATA_ { IMG_CONST PVRSRV_CONNECTION *psConnection; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif } PVRSRV_DEV_DATA; typedef struct _PVRSRV_MEMUPDATE_ { - IMG_UINTPTR_T ui32UpdateAddr; + IMG_UINT32 ui32UpdateAddr; IMG_UINT32 ui32UpdateVal; } PVRSRV_MEMUPDATE; @@ -272,12 +280,22 @@ typedef struct _PVRSRV_CLIENT_MEM_INFO_ IMG_UINT32 ui32ClientFlags; - IMG_SIZE_T ui32AllocSize; + IMG_SIZE_T uAllocSize; struct _PVRSRV_CLIENT_SYNC_INFO_ *psClientSyncInfo; +#if defined (SUPPORT_SID_INTERFACE) + + IMG_SID hMappingInfo; + + + IMG_SID hKernelMemInfo; + + + IMG_SID hResItem; +#else IMG_HANDLE hMappingInfo; @@ -286,6 +304,7 @@ typedef struct _PVRSRV_CLIENT_MEM_INFO_ IMG_HANDLE hResItem; +#endif #if defined(SUPPORT_MEMINFO_IDS) #if !defined(USE_CODE) @@ -309,7 +328,11 @@ typedef struct _PVRSRV_CLIENT_MEM_INFO_ typedef struct _PVRSRV_HEAP_INFO_ { IMG_UINT32 ui32HeapID; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeap; +#else IMG_HANDLE hDevMemHeap; +#endif IMG_DEV_VIRTADDR sDevVAddrBase; IMG_UINT32 ui32HeapByteSize; IMG_UINT32 ui32Attribs; @@ -324,7 +347,11 @@ typedef struct _PVRSRV_EVENTOBJECT_ IMG_CHAR szName[EVENTOBJNAME_MAXLENGTH]; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hOSEventKM; +#else IMG_HANDLE hOSEventKM; +#endif } PVRSRV_EVENTOBJECT; @@ -343,8 +370,13 @@ typedef struct _PVRSRV_MISC_INFO_ IMG_VOID *pvSOCTimerRegisterKM; IMG_VOID *pvSOCTimerRegisterUM; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSOCTimerRegisterOSMemHandle; + IMG_SID hSOCTimerRegisterMappingInfo; +#else IMG_HANDLE hSOCTimerRegisterOSMemHandle; IMG_HANDLE hSOCTimerRegisterMappingInfo; +#endif IMG_VOID *pvSOCClockGateRegs; @@ -356,7 +388,11 @@ typedef struct _PVRSRV_MISC_INFO_ PVRSRV_EVENTOBJECT sGlobalEventObject; +#if defined (SUPPORT_SID_INTERFACE) + IMG_EVENTSID hOSGlobalEvent; +#else IMG_HANDLE hOSGlobalEvent; +#endif IMG_UINT32 aui32DDKVersion[4]; @@ -371,6 +407,7 @@ typedef struct _PVRSRV_MISC_INFO_ PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType; +#if !defined (SUPPORT_SID_INTERFACE) union { @@ -379,6 +416,7 @@ typedef struct _PVRSRV_MISC_INFO_ struct _PVRSRV_KERNEL_MEM_INFO_ *psKernelMemInfo; } u; +#endif IMG_VOID *pvBaseVAddr; @@ -388,6 +426,22 @@ typedef struct _PVRSRV_MISC_INFO_ } sCacheOpCtl; } PVRSRV_MISC_INFO; +typedef struct _PVRSRV_SYNC_TOKEN_ +{ + + + struct + { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else + IMG_HANDLE hKernelSyncInfo; +#endif + IMG_UINT32 ui32ReadOpsPendingSnapshot; + IMG_UINT32 ui32WriteOpsPendingSnapshot; + } sPrivate; +} PVRSRV_SYNC_TOKEN; + typedef enum _PVRSRV_CLIENT_EVENT_ { @@ -432,7 +486,11 @@ IMG_IMPORT IMG_VOID WriteHWRegs(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Count IMG_IMPORT PVRSRV_ERROR PVRSRVPollForValue ( const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hOSEvent, +#else IMG_HANDLE hOSEvent, +#endif volatile IMG_UINT32 *pui32LinMemAddr, IMG_UINT32 ui32Value, IMG_UINT32 ui32Mask, @@ -441,17 +499,29 @@ PVRSRV_ERROR PVRSRVPollForValue ( const PVRSRV_CONNECTION *psConnection, IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phDevMemContext, +#else IMG_HANDLE *phDevMemContext, +#endif IMG_UINT32 *pui32SharedHeapCount, PVRSRV_HEAP_INFO *psHeapInfo); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext); +#else IMG_HANDLE hDevMemContext); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext, +#else IMG_HANDLE hDevMemContext, +#endif IMG_UINT32 *pui32SharedHeapCount, PVRSRV_HEAP_INFO *psHeapInfo); @@ -468,7 +538,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA * IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeap, +#else IMG_HANDLE hDevMemHeap, +#endif IMG_UINT32 ui32Attribs, IMG_SIZE_T ui32Size, IMG_SIZE_T ui32Alignment, @@ -481,11 +555,19 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevDa IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, PVRSRV_CLIENT_MEM_INFO *psMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phMemInfo); +#else IMG_HANDLE *phMemInfo); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeap, +#else IMG_HANDLE hDevMemHeap, +#endif IMG_DEV_VIRTADDR *psDevVAddr, IMG_SIZE_T ui32Size, IMG_SIZE_T ui32Alignment, @@ -496,8 +578,13 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA * IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo, + IMG_SID hDstDevMemHeap, +#else IMG_HANDLE hKernelMemInfo, IMG_HANDLE hDstDevMemHeap, +#endif PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo); IMG_IMPORT @@ -516,7 +603,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDev IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext, +#else IMG_HANDLE hDevMemContext, +#endif IMG_SIZE_T ui32ByteSize, IMG_SIZE_T ui32PageOffset, IMG_BOOL bPhysContig, @@ -534,8 +625,13 @@ PVRSRV_ERROR PVRSRVChangeDeviceMemoryAttributes(IMG_CONST PVRSRV_DEV_DATA *psD IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext, + IMG_SID hDeviceClassBuffer, +#else IMG_HANDLE hDevMemContext, IMG_HANDLE hDeviceClassBuffer, +#endif PVRSRV_CLIENT_MEM_INFO **ppsMemInfo); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, @@ -554,6 +650,23 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA * IMG_PVOID pvUserAddr, IMG_PVOID pvProcess); +#if defined(LINUX) +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem2(IMG_CONST PVRSRV_DEV_DATA *psDevData, + PVRSRV_CLIENT_MEM_INFO *psMemInfo, + IMG_INT *iFd); + +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory2(IMG_CONST PVRSRV_DEV_DATA *psDevData, + IMG_INT iFd, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDstDevMemHeap, +#else + IMG_HANDLE hDstDevMemHeap, +#endif + PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo); +#endif + typedef enum _PVRSRV_SYNCVAL_MODE_ { PVRSRV_SYNCVAL_READ = IMG_TRUE, @@ -611,7 +724,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCDims (IMG_HANDLE hDevice, IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCSystemBuffer(IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phBuffer); +#else IMG_HANDLE *phBuffer); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCInfo(IMG_HANDLE hDevice, @@ -625,48 +742,89 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDCSwapChain (IMG_HANDLE hDevice, IMG_UINT32 ui32BufferCount, IMG_UINT32 ui32OEMFlags, IMG_UINT32 *pui32SwapChainID, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phSwapChain); +#else IMG_HANDLE *phSwapChain); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDCSwapChain (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain); +#else IMG_HANDLE hSwapChain); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstRect (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain, +#else IMG_HANDLE hSwapChain, +#endif IMG_RECT *psDstRect); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcRect (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain, +#else IMG_HANDLE hSwapChain, +#endif IMG_RECT *psSrcRect); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstColourKey (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain, +#else IMG_HANDLE hSwapChain, +#endif IMG_UINT32 ui32CKColour); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcColourKey (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain, +#else IMG_HANDLE hSwapChain, +#endif IMG_UINT32 ui32CKColour); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers(IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain, + IMG_SID *phBuffer); +#else IMG_HANDLE hSwapChain, IMG_HANDLE *phBuffer); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hBuffer, +#else IMG_HANDLE hBuffer, +#endif IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect, + IMG_RECT *psClipRect, IMG_UINT32 ui32SwapInterval, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hPrivateTag); +#else IMG_HANDLE hPrivateTag); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCSystem (IMG_HANDLE hDevice, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain); +#else IMG_HANDLE hSwapChain); +#endif IMG_IMPORT @@ -684,7 +842,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBufferInfo(IMG_HANDLE hDevice, IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBuffer(IMG_HANDLE hDevice, IMG_UINT32 ui32BufferIndex, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phBuffer); +#else IMG_HANDLE *phBuffer); +#endif IMG_IMPORT @@ -698,7 +860,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStopInitPhase(IMG_CONST PVRSRV_CONNECTION * IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPol(IMG_CONST PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo, +#else PVRSRV_CLIENT_MEM_INFO *psMemInfo, +#endif IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value, IMG_UINT32 ui32Mask, @@ -707,10 +873,23 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPol(IMG_CONST PVRSRV_CONNECTION *psConne IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol(IMG_CONST PVRSRV_CONNECTION *psConnection, - PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, - IMG_BOOL bIsRead, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask); +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo, +#else + PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, +#endif + IMG_BOOL bIsRead, + IMG_UINT32 ui32Value, + IMG_UINT32 ui32Mask); + +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol2(IMG_CONST PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo, +#else + PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, +#endif + IMG_BOOL bIsRead); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMem(IMG_CONST PVRSRV_CONNECTION *psConnection, @@ -758,15 +937,21 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDDevPAddr(IMG_CONST PVRSRV_CONNECTION *psC IMG_UINT32 ui32Offset, IMG_DEV_PHYADDR sPDDevPAddr); +#if !defined(USE_CODE) IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPages(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_HANDLE hKernelMemInfo, - IMG_DEV_PHYADDR *pPages, - IMG_UINT32 ui32NumPages, - IMG_DEV_VIRTADDR sDevAddr, - IMG_UINT32 ui32Start, - IMG_UINT32 ui32Length, - IMG_BOOL bContinuous); +PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPages(IMG_CONST PVRSRV_DEV_DATA *psDevData, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo, +#else + IMG_HANDLE hKernelMemInfo, +#endif + IMG_DEV_PHYADDR *pPages, + IMG_UINT32 ui32NumPages, + IMG_DEV_VIRTADDR sDevVAddr, + IMG_UINT32 ui32Start, + IMG_UINT32 ui32Length, + IMG_UINT32 ui32Flags); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSetFrame(IMG_CONST PVRSRV_CONNECTION *psConnection, @@ -812,7 +997,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpBitmap(IMG_CONST PVRSRV_DEV_DATA *psDevData IMG_UINT32 ui32Height, IMG_UINT32 ui32StrideInBytes, IMG_DEV_VIRTADDR sDevBaseAddr, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext, +#else IMG_HANDLE hDevMemContext, +#endif IMG_UINT32 ui32Size, PDUMP_PIXEL_FORMAT ePixelFormat, PDUMP_MEM_FORMAT eMemFormat, @@ -843,7 +1032,7 @@ IMG_IMPORT PVRSRV_ERROR PVRSRVGetLibFuncAddr(IMG_HANDLE hExtDrv, const IMG_CHAR IMG_IMPORT IMG_UINT32 PVRSRVClockus (void); IMG_IMPORT IMG_VOID PVRSRVWaitus (IMG_UINT32 ui32Timeus); IMG_IMPORT IMG_VOID PVRSRVReleaseThreadQuanta (void); -IMG_IMPORT IMG_UINTPTR_T IMG_CALLCONV PVRSRVGetCurrentProcessID(void); +IMG_IMPORT IMG_UINT32 IMG_CALLCONV PVRSRVGetCurrentProcessID(void); IMG_IMPORT IMG_CHAR * IMG_CALLCONV PVRSRVSetLocale(const IMG_CHAR *pszLocale); @@ -877,6 +1066,10 @@ IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMut IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex); IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex); +IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockProcessGlobalMutex(void); +IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockProcessGlobalMutex(void); + + struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_; typedef struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_ *PVRSRV_SEMAPHORE_HANDLE; @@ -927,7 +1120,7 @@ static INLINE IMG_VOID PVRSRVPostSemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore, I #endif -#if (defined(DEBUG) && defined(__linux__)) +#if (defined(DEBUG) && (defined(__linux__) || defined(__QNXNTO__))) IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); @@ -939,21 +1132,37 @@ IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMemTracking(IMG_VOID *pvM #endif IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_EVENTSID hOSEvent); +#else IMG_HANDLE hOSEvent); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateSyncInfoModObj(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phKernelSyncInfoModObj); +#else IMG_HANDLE *phKernelSyncInfoModObj); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroySyncInfoModObj(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj); +#else IMG_HANDLE hKernelSyncInfoModObj); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj, +#else IMG_HANDLE hKernelSyncInfoModObj, +#endif PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, IMG_UINT32 ui32ModifyFlags, IMG_UINT32 *pui32ReadOpsPending, @@ -961,11 +1170,36 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(const PVRSRV_CONNECTION *ps IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj); +#else IMG_HANDLE hKernelSyncInfoModObj); +#endif +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsTakeToken(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + const IMG_SID hKernelSyncInfo, +#else + const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, +#endif + PVRSRV_SYNC_TOKEN *psSyncToken); +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToToken(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + const IMG_SID hKernelSyncInfo, +#else + const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, +#endif + const PVRSRV_SYNC_TOKEN *psSyncToken, + IMG_BOOL bWait); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToModObj(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj, +#else IMG_HANDLE hKernelSyncInfoModObj, +#endif IMG_BOOL bWait); IMG_IMPORT @@ -986,6 +1220,11 @@ IMG_IMPORT const IMG_CHAR *PVRSRVGetErrorString(PVRSRV_ERROR eError); +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVCacheInvalidate(const PVRSRV_CONNECTION *psConnection, + IMG_PVOID pvLinearAddress, + IMG_UINT32 ui32Size); + #define TIME_NOT_PASSED_UINT32(a,b,c) (((a) - (b)) < (c)) #if defined (__cplusplus) diff --git a/include4/servicesext.h b/include4/servicesext.h index c2c14af..54dd4d9 100644 --- a/include4/servicesext.h +++ b/include4/servicesext.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -86,6 +86,8 @@ typedef enum _PVRSRV_ERROR_ PVRSRV_ERROR_REGISTER_BASE_NOT_SET, + PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE, + PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM, PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY, PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC, @@ -149,6 +151,7 @@ typedef enum _PVRSRV_ERROR_ PVRSRV_ERROR_UNABLE_TO_CLOSE_SERVICES, PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT, PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE, + PVRSRV_ERROR_UNABLE_TO_CLOSE_HANDLE, PVRSRV_ERROR_INVALID_CCB_COMMAND, @@ -257,6 +260,8 @@ typedef enum _PVRSRV_ERROR_ PVRSRV_ERROR_CACHEOP_FAILED, + PVRSRV_ERROR_CACHE_INVALIDATE_FAILED, + PVRSRV_ERROR_FORCE_I32 = 0x7fffffff } PVRSRV_ERROR; @@ -578,6 +583,20 @@ typedef enum _PVRSRV_PIXEL_FORMAT_ { PVRSRV_PIXEL_FORMAT_ABGR1555 = 213, PVRSRV_PIXEL_FORMAT_BGR565 = 214, + + PVRSRV_PIXEL_FORMAT_C0_4KYUV420_2P_UV = 215, + PVRSRV_PIXEL_FORMAT_C0_4KYUV420_2P_VU = 216, + PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_UV = 217, + PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_VU = 218, + PVRSRV_PIXEL_FORMAT_P208 = 219, + PVRSRV_PIXEL_FORMAT_A8P8 = 220, + + PVRSRV_PIXEL_FORMAT_A4 = 221, + PVRSRV_PIXEL_FORMAT_AYUV8888 = 222, + PVRSRV_PIXEL_FORMAT_RAW256 = 223, + PVRSRV_PIXEL_FORMAT_RAW512 = 224, + PVRSRV_PIXEL_FORMAT_RAW1024 = 225, + PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff } PVRSRV_PIXEL_FORMAT; @@ -629,7 +648,7 @@ typedef struct _PVRSRV_SYNC_DATA_ typedef struct _PVRSRV_CLIENT_SYNC_INFO_ { - PVRSRV_SYNC_DATA *psSyncData; + PVRSRV_SYNC_DATA *psSyncData; @@ -641,10 +660,17 @@ typedef struct _PVRSRV_CLIENT_SYNC_INFO_ IMG_DEV_VIRTADDR sReadOpsCompleteDevVAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMappingInfo; + + + IMG_SID hKernelSyncInfo; +#else IMG_HANDLE hMappingInfo; IMG_HANDLE hKernelSyncInfo; +#endif } PVRSRV_CLIENT_SYNC_INFO, *PPVRSRV_CLIENT_SYNC_INFO; @@ -762,52 +788,11 @@ typedef struct ACCESS_INFO_TAG }ACCESS_INFO; -typedef struct PVRSRV_CURSOR_SHAPE_TAG -{ - IMG_UINT16 ui16Width; - IMG_UINT16 ui16Height; - IMG_INT16 i16XHot; - IMG_INT16 i16YHot; - - - IMG_VOID* pvMask; - IMG_INT16 i16MaskByteStride; - - - IMG_VOID* pvColour; - IMG_INT16 i16ColourByteStride; - PVRSRV_PIXEL_FORMAT eColourPixelFormat; -} PVRSRV_CURSOR_SHAPE; - -#define PVRSRV_SET_CURSOR_VISIBILITY (1<<0) -#define PVRSRV_SET_CURSOR_POSITION (1<<1) -#define PVRSRV_SET_CURSOR_SHAPE (1<<2) -#define PVRSRV_SET_CURSOR_ROTATION (1<<3) - -typedef struct PVRSRV_CURSOR_INFO_TAG -{ - - IMG_UINT32 ui32Flags; - - - IMG_BOOL bVisible; - - - IMG_INT16 i16XPos; - IMG_INT16 i16YPos; - - - PVRSRV_CURSOR_SHAPE sCursorShape; - - - IMG_UINT32 ui32Rotation; - -} PVRSRV_CURSOR_INFO; #if defined(PDUMP_SUSPEND_IS_PER_THREAD) typedef struct { IMG_UINT32 threadId; - int suspendCount; + IMG_INT suspendCount; } PVRSRV_THREAD_SUSPEND_COUNT; #define PVRSRV_PDUMP_SUSPEND_Q_NAME "PVRSRVPDumpSuspendMsgQ" @@ -815,6 +800,7 @@ typedef struct { #endif + typedef struct _PVRSRV_REGISTRY_INFO_ { IMG_UINT32 ui32DevCookie; diff --git a/include4/sgx_options.h b/include4/sgx_options.h index 6f91894..d2ddff6 100644 --- a/include4/sgx_options.h +++ b/include4/sgx_options.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,79 +26,84 @@ #if defined(DEBUG) || defined (INTERNAL_TEST) #define DEBUG_SET_OFFSET OPTIONS_BIT0 -#define OPTIONS_BIT0 0x1 +#define OPTIONS_BIT0 0x1U #else #define OPTIONS_BIT0 0x0 #endif #if defined(PDUMP) || defined (INTERNAL_TEST) #define PDUMP_SET_OFFSET OPTIONS_BIT1 -#define OPTIONS_BIT1 (0x1 << 1) +#define OPTIONS_BIT1 (0x1U << 1) #else #define OPTIONS_BIT1 0x0 #endif #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) || defined (INTERNAL_TEST) #define PVRSRV_USSE_EDM_STATUS_DEBUG_SET_OFFSET OPTIONS_BIT2 -#define OPTIONS_BIT2 (0x1 << 2) +#define OPTIONS_BIT2 (0x1U << 2) #else #define OPTIONS_BIT2 0x0 #endif #if defined(SUPPORT_HW_RECOVERY) || defined (INTERNAL_TEST) #define SUPPORT_HW_RECOVERY_SET_OFFSET OPTIONS_BIT3 -#define OPTIONS_BIT3 (0x1 << 3) +#define OPTIONS_BIT3 (0x1U << 3) #else #define OPTIONS_BIT3 0x0 #endif +#if defined (SUPPORT_SID_INTERFACE) +#define PVR_SECURE_HANDLES_SET_OFFSET OPTIONS_BIT4 +#define OPTIONS_BIT4 (0x1U << 4) +#else #if defined(PVR_SECURE_HANDLES) || defined (INTERNAL_TEST) #define PVR_SECURE_HANDLES_SET_OFFSET OPTIONS_BIT4 -#define OPTIONS_BIT4 (0x1 << 4) +#define OPTIONS_BIT4 (0x1U << 4) #else #define OPTIONS_BIT4 0x0 #endif +#endif #if defined(SGX_BYPASS_SYSTEM_CACHE) || defined (INTERNAL_TEST) #define SGX_BYPASS_SYSTEM_CACHE_SET_OFFSET OPTIONS_BIT5 -#define OPTIONS_BIT5 (0x1 << 5) +#define OPTIONS_BIT5 (0x1U << 5) #else #define OPTIONS_BIT5 0x0 #endif #if defined(SGX_DMS_AGE_ENABLE) || defined (INTERNAL_TEST) #define SGX_DMS_AGE_ENABLE_SET_OFFSET OPTIONS_BIT6 -#define OPTIONS_BIT6 (0x1 << 6) +#define OPTIONS_BIT6 (0x1U << 6) #else #define OPTIONS_BIT6 0x0 #endif #if defined(SGX_FAST_DPM_INIT) || defined (INTERNAL_TEST) #define SGX_FAST_DPM_INIT_SET_OFFSET OPTIONS_BIT8 -#define OPTIONS_BIT8 (0x1 << 8) +#define OPTIONS_BIT8 (0x1U << 8) #else #define OPTIONS_BIT8 0x0 #endif #if defined(SGX_FEATURE_WRITEBACK_DCU) || defined (INTERNAL_TEST) #define SGX_FEATURE_DCU_SET_OFFSET OPTIONS_BIT9 -#define OPTIONS_BIT9 (0x1 << 9) +#define OPTIONS_BIT9 (0x1U << 9) #else #define OPTIONS_BIT9 0x0 #endif #if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST) #define SGX_FEATURE_MP_SET_OFFSET OPTIONS_BIT10 -#define OPTIONS_BIT10 (0x1 << 10) +#define OPTIONS_BIT10 (0x1U << 10) #else #define OPTIONS_BIT10 0x0 #endif #if defined(SGX_FEATURE_MULTITHREADED_UKERNEL) || defined (INTERNAL_TEST) #define SGX_FEATURE_MULTITHREADED_UKERNEL_SET_OFFSET OPTIONS_BIT11 -#define OPTIONS_BIT11 (0x1 << 11) +#define OPTIONS_BIT11 (0x1U << 11) #else #define OPTIONS_BIT11 0x0 #endif @@ -107,7 +112,7 @@ #if defined(SGX_FEATURE_OVERLAPPED_SPM) || defined (INTERNAL_TEST) #define SGX_FEATURE_OVERLAPPED_SPM_SET_OFFSET OPTIONS_BIT12 -#define OPTIONS_BIT12 (0x1 << 12) +#define OPTIONS_BIT12 (0x1U << 12) #else #define OPTIONS_BIT12 0x0 #endif @@ -115,14 +120,14 @@ #if defined(SGX_FEATURE_SYSTEM_CACHE) || defined (INTERNAL_TEST) #define SGX_FEATURE_SYSTEM_CACHE_SET_OFFSET OPTIONS_BIT13 -#define OPTIONS_BIT13 (0x1 << 13) +#define OPTIONS_BIT13 (0x1U << 13) #else #define OPTIONS_BIT13 0x0 #endif #if defined(SGX_SUPPORT_HWPROFILING) || defined (INTERNAL_TEST) #define SGX_SUPPORT_HWPROFILING_SET_OFFSET OPTIONS_BIT14 -#define OPTIONS_BIT14 (0x1 << 14) +#define OPTIONS_BIT14 (0x1U << 14) #else #define OPTIONS_BIT14 0x0 #endif @@ -131,28 +136,28 @@ #if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) || defined (INTERNAL_TEST) #define SUPPORT_ACTIVE_POWER_MANAGEMENT_SET_OFFSET OPTIONS_BIT15 -#define OPTIONS_BIT15 (0x1 << 15) +#define OPTIONS_BIT15 (0x1U << 15) #else #define OPTIONS_BIT15 0x0 #endif #if defined(SUPPORT_DISPLAYCONTROLLER_TILING) || defined (INTERNAL_TEST) #define SUPPORT_DISPLAYCONTROLLER_TILING_SET_OFFSET OPTIONS_BIT16 -#define OPTIONS_BIT16 (0x1 << 16) +#define OPTIONS_BIT16 (0x1U << 16) #else #define OPTIONS_BIT16 0x0 #endif #if defined(SUPPORT_PERCONTEXT_PB) || defined (INTERNAL_TEST) #define SUPPORT_PERCONTEXT_PB_SET_OFFSET OPTIONS_BIT17 -#define OPTIONS_BIT17 (0x1 << 17) +#define OPTIONS_BIT17 (0x1U << 17) #else #define OPTIONS_BIT17 0x0 #endif #if defined(SUPPORT_SGX_HWPERF) || defined (INTERNAL_TEST) #define SUPPORT_SGX_HWPERF_SET_OFFSET OPTIONS_BIT18 -#define OPTIONS_BIT18 (0x1 << 18) +#define OPTIONS_BIT18 (0x1U << 18) #else #define OPTIONS_BIT18 0x0 #endif @@ -161,38 +166,45 @@ #if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) || defined (INTERNAL_TEST) #define SUPPORT_SGX_MMU_DUMMY_PAGE_SET_OFFSET OPTIONS_BIT19 -#define OPTIONS_BIT19 (0x1 << 19) +#define OPTIONS_BIT19 (0x1U << 19) #else #define OPTIONS_BIT19 0x0 #endif #if defined(SUPPORT_SGX_PRIORITY_SCHEDULING) || defined (INTERNAL_TEST) #define SUPPORT_SGX_PRIORITY_SCHEDULING_SET_OFFSET OPTIONS_BIT20 -#define OPTIONS_BIT20 (0x1 << 20) +#define OPTIONS_BIT20 (0x1U << 20) #else #define OPTIONS_BIT20 0x0 #endif #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) || defined (INTERNAL_TEST) #define SUPPORT_SGX_LOW_LATENCY_SCHEDULING_SET_OFFSET OPTIONS_BIT21 -#define OPTIONS_BIT21 (0x1 << 21) +#define OPTIONS_BIT21 (0x1U << 21) #else #define OPTIONS_BIT21 0x0 #endif #if defined(USE_SUPPORT_NO_TA3D_OVERLAP) || defined (INTERNAL_TEST) #define USE_SUPPORT_NO_TA3D_OVERLAP_SET_OFFSET OPTIONS_BIT22 -#define OPTIONS_BIT22 (0x1 << 22) +#define OPTIONS_BIT22 (0x1U << 22) #else #define OPTIONS_BIT22 0x0 #endif - #if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST) +#if defined(SGX_FEATURE_MP_CORE_COUNT) #define OPTIONS_HIGHBYTE ((SGX_FEATURE_MP_CORE_COUNT-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET) #define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET 28UL #define SGX_FEATURE_MP_CORE_COUNT_SET_MASK 0xFF #else +#define OPTIONS_HIGHBYTE (((SGX_FEATURE_MP_CORE_COUNT_TA-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET) |\ + ((SGX_FEATURE_MP_CORE_COUNT_3D-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET_3D)) +#define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET 24UL +#define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET_3D 28UL +#define SGX_FEATURE_MP_CORE_COUNT_SET_MASK 0xFF +#endif +#else #define OPTIONS_HIGHBYTE 0x0 #endif diff --git a/include4/sgxapi_km.h b/include4/sgxapi_km.h index db376b6..dcbafbf 100644 --- a/include4/sgxapi_km.h +++ b/include4/sgxapi_km.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -33,7 +33,7 @@ extern "C" { #include "sgxdefs.h" -#if defined(__linux__) && !defined(USE_CODE) +#if (defined(__linux__) || defined(__QNXNTO__)) && !defined(USE_CODE) #if defined(__KERNEL__) #include #else @@ -51,19 +51,25 @@ extern "C" { #define SGX_PDSPIXEL_CODEDATA_HEAP_ID 6 #define SGX_PDSVERTEX_CODEDATA_HEAP_ID 7 #define SGX_SYNCINFO_HEAP_ID 8 -#define SGX_3DPARAMETERS_HEAP_ID 9 +#define SGX_SHARED_3DPARAMETERS_HEAP_ID 9 +#define SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID 10 #if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) -#define SGX_GENERAL_MAPPING_HEAP_ID 10 +#define SGX_GENERAL_MAPPING_HEAP_ID 11 #endif #if defined(SGX_FEATURE_2D_HARDWARE) -#define SGX_2D_HEAP_ID 11 +#define SGX_2D_HEAP_ID 12 #else #if defined(FIX_HW_BRN_26915) -#define SGX_CGBUFFER_HEAP_ID 12 +#define SGX_CGBUFFER_HEAP_ID 13 #endif #endif -#define SGX_MAX_HEAP_ID 13 +#define SGX_MAX_HEAP_ID 14 +#if (defined(SUPPORT_PERCONTEXT_PB) || defined(SUPPORT_HYBRID_PB)) +#define SGX_3DPARAMETERS_HEAP_ID SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID +#else +#define SGX_3DPARAMETERS_HEAP_ID SGX_SHARED_3DPARAMETERS_HEAP_ID +#endif #if defined(SGX543) || defined(SGX544) || defined(SGX554) #define SGX_USE_CODE_SEGMENT_RANGE_BITS 23 #else @@ -78,15 +84,17 @@ extern "C" { #define SGX_MAX_TA_SRC_SYNCS 1 #define SGX_MAX_3D_SRC_SYNCS 4 #else -#define SGX_MAX_SRC_SYNCS 4 +#define SGX_MAX_SRC_SYNCS 8 #define SGX_MAX_DST_SYNCS 1 #endif #if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) #define PVRSRV_SGX_HWPERF_NUM_COUNTERS 8 +#define PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS 11 #else #define PVRSRV_SGX_HWPERF_NUM_COUNTERS 9 +#define PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS 8 #endif #define PVRSRV_SGX_HWPERF_INVALID 0x1 @@ -97,11 +105,19 @@ extern "C" { #define PVRSRV_SGX_HWPERF_2D 0x5 #define PVRSRV_SGX_HWPERF_POWER 0x6 #define PVRSRV_SGX_HWPERF_PERIODIC 0x7 +#define PVRSRV_SGX_HWPERF_3DSPM 0x8 #define PVRSRV_SGX_HWPERF_MK_EVENT 0x101 #define PVRSRV_SGX_HWPERF_MK_TA 0x102 #define PVRSRV_SGX_HWPERF_MK_3D 0x103 #define PVRSRV_SGX_HWPERF_MK_2D 0x104 +#define PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY 0x105 +#define PVRSRV_SGX_HWPERF_MK_TA_DUMMY 0x106 +#define PVRSRV_SGX_HWPERF_MK_3D_DUMMY 0x107 +#define PVRSRV_SGX_HWPERF_MK_2D_DUMMY 0x108 +#define PVRSRV_SGX_HWPERF_MK_TA_LOCKUP 0x109 +#define PVRSRV_SGX_HWPERF_MK_3D_LOCKUP 0x10A +#define PVRSRV_SGX_HWPERF_MK_2D_LOCKUP 0x10B #define PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT 28 #define PVRSRV_SGX_HWPERF_TYPE_OP_MASK ((1UL << PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT) - 1) @@ -119,6 +135,19 @@ extern "C" { #define PVRSRV_SGX_HWPERF_TYPE_POWER_START (PVRSRV_SGX_HWPERF_POWER | PVRSRV_SGX_HWPERF_TYPE_OP_START) #define PVRSRV_SGX_HWPERF_TYPE_POWER_END (PVRSRV_SGX_HWPERF_POWER | PVRSRV_SGX_HWPERF_TYPE_OP_END) #define PVRSRV_SGX_HWPERF_TYPE_PERIODIC (PVRSRV_SGX_HWPERF_PERIODIC) +#define PVRSRV_SGX_HWPERF_TYPE_3DSPM_START (PVRSRV_SGX_HWPERF_3DSPM | PVRSRV_SGX_HWPERF_TYPE_OP_START) +#define PVRSRV_SGX_HWPERF_TYPE_3DSPM_END (PVRSRV_SGX_HWPERF_3DSPM | PVRSRV_SGX_HWPERF_TYPE_OP_END) +#define PVRSRV_SGX_HWPERF_TYPE_MK_TRANSFER_DUMMY_START (PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) +#define PVRSRV_SGX_HWPERF_TYPE_MK_TRANSFER_DUMMY_END (PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) +#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_DUMMY_START (PVRSRV_SGX_HWPERF_MK_TA_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) +#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_DUMMY_END (PVRSRV_SGX_HWPERF_MK_TA_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) +#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_DUMMY_START (PVRSRV_SGX_HWPERF_MK_3D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) +#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_DUMMY_END (PVRSRV_SGX_HWPERF_MK_3D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) +#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_DUMMY_START (PVRSRV_SGX_HWPERF_MK_2D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) +#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_DUMMY_END (PVRSRV_SGX_HWPERF_MK_2D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) +#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_LOCKUP (PVRSRV_SGX_HWPERF_MK_TA_LOCKUP) +#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_LOCKUP (PVRSRV_SGX_HWPERF_MK_3D_LOCKUP) +#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_LOCKUP (PVRSRV_SGX_HWPERF_MK_2D_LOCKUP) #define PVRSRV_SGX_HWPERF_TYPE_MK_EVENT_START (PVRSRV_SGX_HWPERF_MK_EVENT | PVRSRV_SGX_HWPERF_TYPE_OP_START) #define PVRSRV_SGX_HWPERF_TYPE_MK_EVENT_END (PVRSRV_SGX_HWPERF_MK_EVENT | PVRSRV_SGX_HWPERF_TYPE_OP_END) @@ -139,11 +168,15 @@ extern "C" { typedef struct _PVRSRV_SGX_HWPERF_CB_ENTRY_ { IMG_UINT32 ui32FrameNo; + IMG_UINT32 ui32PID; + IMG_UINT32 ui32RTData; IMG_UINT32 ui32Type; IMG_UINT32 ui32Ordinal; IMG_UINT32 ui32Info; IMG_UINT32 ui32Clocksx16; - IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; + + IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; + IMG_UINT32 ui32MiscCounters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS]; } PVRSRV_SGX_HWPERF_CB_ENTRY; @@ -166,7 +199,6 @@ typedef enum _SGX_MISC_INFO_REQUEST_ SGX_MISC_INFO_REQUEST_SET_HWPERF_STATUS, #if defined(SGX_FEATURE_DATA_BREAKPOINTS) SGX_MISC_INFO_REQUEST_SET_BREAKPOINT, - SGX_MISC_INFO_REQUEST_WAIT_FOR_BREAKPOINT, SGX_MISC_INFO_REQUEST_POLL_BREAKPOINT, SGX_MISC_INFO_REQUEST_RESUME_BREAKPOINT, #endif @@ -269,6 +301,7 @@ typedef struct _PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS typedef struct _SGX_MISC_INFO_ { SGX_MISC_INFO_REQUEST eRequest; + IMG_UINT32 ui32Padding; #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) IMG_DEV_VIRTADDR sDevVAddrSrc; IMG_DEV_VIRTADDR sDevVAddrDest; @@ -318,6 +351,7 @@ typedef struct _PVRSRV_SGX_PDUMP_CONTEXT_ } PVRSRV_SGX_PDUMP_CONTEXT; +#if !defined (SUPPORT_SID_INTERFACE) typedef struct _SGX_KICKTA_DUMP_ROFF_ { IMG_HANDLE hKernelMemInfo; @@ -326,8 +360,13 @@ typedef struct _SGX_KICKTA_DUMP_ROFF_ IMG_UINT32 ui32Value; IMG_PCHAR pszName; } SGX_KICKTA_DUMP_ROFF, *PSGX_KICKTA_DUMP_ROFF; +#endif +#if defined (SUPPORT_SID_INTERFACE) +typedef struct _SGX_KICKTA_DUMP_BUFFER_KM_ +#else typedef struct _SGX_KICKTA_DUMP_BUFFER_ +#endif { IMG_UINT32 ui32SpaceUsed; IMG_UINT32 ui32Start; @@ -342,8 +381,13 @@ typedef struct _SGX_KICKTA_DUMP_BUFFER_ IMG_DEV_VIRTADDR sCtrlDevVAddr; #endif IMG_PCHAR pszName; +#if defined (SUPPORT_SID_INTERFACE) +} SGX_KICKTA_DUMP_BUFFER_KM, *PSGX_KICKTA_DUMP_BUFFER_KM; +#else } SGX_KICKTA_DUMP_BUFFER, *PSGX_KICKTA_DUMP_BUFFER; +#endif +#if !defined (SUPPORT_SID_INTERFACE) #ifdef PDUMP typedef struct _SGX_KICKTA_PDUMP_ { @@ -360,6 +404,7 @@ typedef struct _SGX_KICKTA_PDUMP_ IMG_UINT32 ui32ROffArraySize; } SGX_KICKTA_PDUMP, *PSGX_KICKTA_PDUMP; #endif +#endif #if defined(TRANSFER_QUEUE) #if defined(SGX_FEATURE_2D_HARDWARE) diff --git a/include4/sgxscript.h b/include4/sgxscript.h index 47c9e48..df79e2f 100644 --- a/include4/sgxscript.h +++ b/include4/sgxscript.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/3rdparty/dc_omap3430_linux/Kbuild b/services4/3rdparty/dc_omap3430_linux/Kbuild deleted file mode 100644 index e867f83..0000000 --- a/services4/3rdparty/dc_omap3430_linux/Kbuild +++ /dev/null @@ -1,17 +0,0 @@ -SYS_USING_INTERRUPTS = 1 -SUPPORT_OMAP3430_OMAPFB3 =1 -SUPPORT_TI_DSS_FW = 0 - -SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS -SYS_CFLAGS.$(SUPPORT_OMAP3430_OMAPFB3) += -DSUPPORT_OMAP3430_OMAPFB3 -SYS_CFLAGS.$(SUPPORT_TI_DSS_FW) += -DSUPPORT_TI_DSS_FW - -EXTRA_CFLAGS = -DLINUX \ - -I$(PVR_BUILD_DIR)/include4 \ - -I$(PVR_BUILD_DIR)/services4/include \ - -I$(PVR_BUILD_DIR)/services4/system/$(PVR_SYSTEM) \ - -I$(PVR_BUILD_DIR)/services4/system/include \ - $(SYS_CFLAGS.1) \ - -obj-m := omaplfb.o -omaplfb-y := omaplfb_displayclass.o omaplfb_linux.o diff --git a/services4/3rdparty/dc_omap3430_linux/kbuild/Makefile b/services4/3rdparty/dc_omap3430_linux/kbuild/Makefile deleted file mode 100644 index 0b37436..0000000 --- a/services4/3rdparty/dc_omap3430_linux/kbuild/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -MODULE = omaplfb - -INCLUDES = -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/services4/include \ - -I$(EURASIAROOT)/services4/system/$(PVR_SYSTEM) \ - -I$(EURASIAROOT)/services4/system/include \ - -SOURCES = ../omaplfb_displayclass.c \ - ../omaplfb_linux.c - -SYM_VERS_DEPS = $(EURASIAROOT)/services4/srvkm/env/linux - -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb.h b/services4/3rdparty/dc_omap3430_linux/omaplfb.h deleted file mode 100644 index d3ae4bc..0000000 --- a/services4/3rdparty/dc_omap3430_linux/omaplfb.h +++ /dev/null @@ -1,282 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __OMAPLFB_H__ -#define __OMAPLFB_H__ - -#define OMAPLCD_IRQ 25 - -#define OMAPLCD_SYSCONFIG 0x0410 -#define OMAPLCD_CONFIG 0x0444 -#define OMAPLCD_DEFAULT_COLOR0 0x044C -#define OMAPLCD_TIMING_H 0x0464 -#define OMAPLCD_TIMING_V 0x0468 -#define OMAPLCD_POL_FREQ 0x046C -#define OMAPLCD_DIVISOR 0x0470 -#define OMAPLCD_SIZE_DIG 0x0478 -#define OMAPLCD_SIZE_LCD 0x047C -#define OMAPLCD_GFX_POSITION 0x0488 -#define OMAPLCD_GFX_SIZE 0x048C -#define OMAPLCD_GFX_ATTRIBUTES 0x04a0 -#define OMAPLCD_GFX_FIFO_THRESHOLD 0x04a4 -#define OMAPLCD_GFX_WINDOW_SKIP 0x04b4 - -#define OMAPLCD_IRQSTATUS 0x0418 -#define OMAPLCD_IRQENABLE 0x041c -#define OMAPLCD_CONTROL 0x0440 -#define OMAPLCD_GFX_BA0 0x0480 -#define OMAPLCD_GFX_BA1 0x0484 -#define OMAPLCD_GFX_ROW_INC 0x04ac -#define OMAPLCD_GFX_PIX_INC 0x04b0 -#define OMAPLCD_VID1_BA0 0x04bc -#define OMAPLCD_VID1_BA1 0x04c0 -#define OMAPLCD_VID1_ROW_INC 0x04d8 -#define OMAPLCD_VID1_PIX_INC 0x04dc - -#define OMAP_CONTROL_GODIGITAL (1 << 6) -#define OMAP_CONTROL_GOLCD (1 << 5) -#define OMAP_CONTROL_DIGITALENABLE (1 << 1) -#define OMAP_CONTROL_LCDENABLE (1 << 0) - -#define OMAPLCD_INTMASK_VSYNC (1 << 1) -#define OMAPLCD_INTMASK_OFF 0 - -typedef void * OMAP_HANDLE; - -typedef enum tag_omap_bool -{ - OMAP_FALSE = 0, - OMAP_TRUE = 1, -} OMAP_BOOL, *OMAP_PBOOL; - -typedef struct OMAPLFB_BUFFER_TAG -{ - unsigned long ulBufferSize; - - - - - IMG_SYS_PHYADDR sSysAddr; - IMG_CPU_VIRTADDR sCPUVAddr; - PVRSRV_SYNC_DATA *psSyncData; - - struct OMAPLFB_BUFFER_TAG *psNext; -} OMAPLFB_BUFFER; - -typedef struct OMAPLFB_VSYNC_FLIP_ITEM_TAG -{ - - - - OMAP_HANDLE hCmdComplete; - - unsigned long ulSwapInterval; - - OMAP_BOOL bValid; - - OMAP_BOOL bFlipped; - - OMAP_BOOL bCmdCompleted; - - - - - - IMG_SYS_PHYADDR* sSysAddr; -} OMAPLFB_VSYNC_FLIP_ITEM; - -typedef struct PVRPDP_SWAPCHAIN_TAG -{ - - unsigned long ulBufferCount; - - OMAPLFB_BUFFER *psBuffer; - - OMAPLFB_VSYNC_FLIP_ITEM *psVSyncFlips; - - - unsigned long ulInsertIndex; - - - unsigned long ulRemoveIndex; - - - void *pvRegs; - - - PVRSRV_DC_DISP2SRV_KMJTABLE *psPVRJTable; - - - OMAP_BOOL bFlushCommands; - - - unsigned long ulSetFlushStateRefCount; - - - OMAP_BOOL bBlanked; - - - spinlock_t *psSwapChainLock; -} OMAPLFB_SWAPCHAIN; - -typedef struct OMAPLFB_FBINFO_TAG -{ - unsigned long ulFBSize; - unsigned long ulBufferSize; - unsigned long ulRoundedBufferSize; - unsigned long ulWidth; - unsigned long ulHeight; - unsigned long ulByteStride; - unsigned long ulPhysicalWidthmm; - unsigned long ulPhysicalHeightmm; - - - - IMG_SYS_PHYADDR sSysAddr; - IMG_CPU_VIRTADDR sCPUVAddr; - - - PVRSRV_PIXEL_FORMAT ePixelFormat; -}OMAPLFB_FBINFO; - -typedef struct OMAPLFB_DEVINFO_TAG -{ - unsigned int uiDeviceID; - - - OMAPLFB_BUFFER sSystemBuffer; - - - PVRSRV_DC_DISP2SRV_KMJTABLE sPVRJTable; - - - PVRSRV_DC_SRV2DISP_KMJTABLE sDCJTable; - - - OMAPLFB_FBINFO sFBInfo; - - - unsigned long ulRefCount; - - - OMAPLFB_SWAPCHAIN *psSwapChain; - - - OMAP_BOOL bFlushCommands; - - - struct fb_info *psLINFBInfo; - - - struct notifier_block sLINNotifBlock; - - - OMAP_BOOL bDeviceSuspended; - - - spinlock_t sSwapChainLock; - - - - - - IMG_DEV_VIRTADDR sDisplayDevVAddr; - - DISPLAY_INFO sDisplayInfo; - - - DISPLAY_FORMAT sDisplayFormat; - - - DISPLAY_DIMS sDisplayDim; - -} OMAPLFB_DEVINFO; - -#define OMAPLFB_PAGE_SIZE 4096 -#define OMAPLFB_PAGE_MASK (OMAPLFB_PAGE_SIZE - 1) -#define OMAPLFB_PAGE_TRUNC (~OMAPLFB_PAGE_MASK) - -#define OMAPLFB_PAGE_ROUNDUP(x) (((x) + OMAPLFB_PAGE_MASK) & OMAPLFB_PAGE_TRUNC) - -#ifdef DEBUG -#define DEBUG_PRINTK(x) printk x -#else -#define DEBUG_PRINTK(x) -#endif - -#define DISPLAY_DEVICE_NAME "PowerVR OMAP Linux Display Driver" -#define DRVNAME "omaplfb" -#define DEVNAME DRVNAME -#define DRIVER_PREFIX DRVNAME - -typedef enum _OMAP_ERROR_ -{ - OMAP_OK = 0, - OMAP_ERROR_GENERIC = 1, - OMAP_ERROR_OUT_OF_MEMORY = 2, - OMAP_ERROR_TOO_FEW_BUFFERS = 3, - OMAP_ERROR_INVALID_PARAMS = 4, - OMAP_ERROR_INIT_FAILURE = 5, - OMAP_ERROR_CANT_REGISTER_CALLBACK = 6, - OMAP_ERROR_INVALID_DEVICE = 7, - OMAP_ERROR_DEVICE_REGISTER_FAILED = 8 -} OMAP_ERROR; - - -#ifndef UNREFERENCED_PARAMETER -#define UNREFERENCED_PARAMETER(param) (param) = (param) -#endif - -OMAP_ERROR OMAPLFBInit(void); -OMAP_ERROR OMAPLFBDeinit(void); - -#ifdef LDM_PLATFORM -void OMAPLFBDriverSuspend(void); -void OMAPLFBDriverResume(void); -#endif - -void *OMAPLFBAllocKernelMem(unsigned long ulSize); -void OMAPLFBFreeKernelMem(void *pvMem); -OMAP_ERROR OMAPLFBGetLibFuncAddr(char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable); -OMAP_ERROR OMAPLFBInstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain); -OMAP_ERROR OMAPLFBUninstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain); -OMAP_BOOL OMAPLFBVSyncIHandler(OMAPLFB_SWAPCHAIN *psSwapChain); -void OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain); -void OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain); -#if defined (SUPPORT_TI_DSS_FW) -void OMAPLFBEnableDisplayRegisterAccess(void); -void OMAPLFBDisableDisplayRegisterAccess(void); -void OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long aPhyAddr); -#endif -#if defined (CONFIG_OMAP2_DSS) -IMG_VOID OMAPLFBFlipDSS2(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr); -#endif - -IMG_VOID OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr); -#endif - diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c deleted file mode 100644 index 8b0f2ff..0000000 --- a/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c +++ /dev/null @@ -1,1531 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "img_defs.h" -#include "servicesext.h" -#include "kerneldisplay.h" -#include "omaplfb.h" - -static void *gpvAnchor; - -static int fb_idx = 0; - -#define OMAPLFB_COMMAND_COUNT 1 - -static PFN_DC_GET_PVRJTABLE pfnGetPVRJTable = 0; - -static OMAPLFB_DEVINFO * GetAnchorPtr(void) -{ - return (OMAPLFB_DEVINFO *)gpvAnchor; -} - -static void SetAnchorPtr(OMAPLFB_DEVINFO *psDevInfo) -{ - gpvAnchor = (void*)psDevInfo; -} - - -static void FlushInternalVSyncQueue(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - OMAPLFB_VSYNC_FLIP_ITEM *psFlipItem; - unsigned long ulMaxIndex; - unsigned long i; - - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - ulMaxIndex = psSwapChain->ulBufferCount - 1; - - for(i = 0; i < psSwapChain->ulBufferCount; i++) - { - if (psFlipItem->bValid == OMAP_FALSE) - { - continue; - } - - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": FlushInternalVSyncQueue: Flushing swap buffer (index %lu)\n", psSwapChain->ulRemoveIndex)); - - if(psFlipItem->bFlipped == OMAP_FALSE) - { - - OMAPLFBFlip(psSwapChain, (unsigned long)psFlipItem->sSysAddr); - } - - if(psFlipItem->bCmdCompleted == OMAP_FALSE) - { - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": FlushInternalVSyncQueue: Calling command complete for swap buffer (index %lu)\n", psSwapChain->ulRemoveIndex)); - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete((IMG_HANDLE)psFlipItem->hCmdComplete, IMG_TRUE); - } - - - psSwapChain->ulRemoveIndex++; - - if(psSwapChain->ulRemoveIndex > ulMaxIndex) - { - psSwapChain->ulRemoveIndex = 0; - } - - - psFlipItem->bFlipped = OMAP_FALSE; - psFlipItem->bCmdCompleted = OMAP_FALSE; - psFlipItem->bValid = OMAP_FALSE; - - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - } - - psSwapChain->ulInsertIndex = 0; - psSwapChain->ulRemoveIndex = 0; -} - -static void SetFlushStateInternalNoLock(OMAPLFB_DEVINFO* psDevInfo, - OMAP_BOOL bFlushState) -{ - OMAPLFB_SWAPCHAIN *psSwapChain = psDevInfo->psSwapChain; - - if (psSwapChain == NULL) - { - return; - } - - if (bFlushState) - { - if (psSwapChain->ulSetFlushStateRefCount == 0) - { - OMAPLFBDisableVSyncInterrupt(psSwapChain); - psSwapChain->bFlushCommands = OMAP_TRUE; - FlushInternalVSyncQueue(psSwapChain); - } - psSwapChain->ulSetFlushStateRefCount++; - } - else - { - if (psSwapChain->ulSetFlushStateRefCount != 0) - { - psSwapChain->ulSetFlushStateRefCount--; - if (psSwapChain->ulSetFlushStateRefCount == 0) - { - psSwapChain->bFlushCommands = OMAP_FALSE; - OMAPLFBEnableVSyncInterrupt(psSwapChain); - } - } - } -} - -static IMG_VOID SetFlushStateInternal(OMAPLFB_DEVINFO* psDevInfo, - OMAP_BOOL bFlushState) -{ - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - SetFlushStateInternalNoLock(psDevInfo, bFlushState); - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} - -static void SetFlushStateExternal(OMAPLFB_DEVINFO* psDevInfo, - OMAP_BOOL bFlushState) -{ - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - if (psDevInfo->bFlushCommands != bFlushState) - { - psDevInfo->bFlushCommands = bFlushState; - SetFlushStateInternalNoLock(psDevInfo, bFlushState); - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} - -static IMG_VOID SetDCState(IMG_HANDLE hDevice, IMG_UINT32 ui32State) -{ - OMAPLFB_DEVINFO *psDevInfo = (OMAPLFB_DEVINFO *)hDevice; - - switch (ui32State) - { - case DC_STATE_FLUSH_COMMANDS: - SetFlushStateExternal(psDevInfo, OMAP_TRUE); - break; - case DC_STATE_NO_FLUSH_COMMANDS: - SetFlushStateExternal(psDevInfo, OMAP_FALSE); - break; - default: - break; - } - - return; -} - -static int FrameBufferEvents(struct notifier_block *psNotif, - unsigned long event, void *data) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_SWAPCHAIN *psSwapChain; - struct fb_event *psFBEvent = (struct fb_event *)data; - OMAP_BOOL bBlanked; - - - if (event != FB_EVENT_BLANK) - { - return 0; - } - - psDevInfo = GetAnchorPtr(); - psSwapChain = psDevInfo->psSwapChain; - - bBlanked = (*(IMG_INT *)psFBEvent->data != 0) ? OMAP_TRUE: OMAP_FALSE; - - if (bBlanked != psSwapChain->bBlanked) - { - psSwapChain->bBlanked = bBlanked; - - if (bBlanked) - { - - SetFlushStateInternal(psDevInfo, OMAP_TRUE); - } - else - { - - SetFlushStateInternal(psDevInfo, OMAP_FALSE); - } - } - - return 0; -} - - -static OMAP_ERROR UnblankDisplay(OMAPLFB_DEVINFO *psDevInfo) -{ - int res; - - acquire_console_sem(); - res = fb_blank(psDevInfo->psLINFBInfo, 0); - release_console_sem(); -#if !defined (CONFIG_OMAP2_DSS) - if (res != 0 && res != -EINVAL) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_blank failed (%d)", res); - return (OMAP_ERROR_GENERIC); - } -#endif - return (OMAP_OK); -} - -#if defined (CONFIG_OMAP2_DSS) -#include -struct wq_flip { - struct fb_var_screeninfo var; - struct fb_info *psLINFBInfo; - struct work_struct work; -}; -struct wq_flip wq_flipdss2; - -static void dss2_pan_display (struct work_struct *work) -{ - struct wq_flip *ptrwq_flip = - container_of(work, struct wq_flip, work); - if (ptrwq_flip->psLINFBInfo->fbops->fb_pan_display != NULL) { - ptrwq_flip->psLINFBInfo->fbops->fb_pan_display (&ptrwq_flip->var, ptrwq_flip->psLINFBInfo); - - } - -} - -/* - * Flip implementation for DSS2 using fb_pan_display - * */ -IMG_VOID OMAPLFBFlipDSS2(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr) -{ - OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr (); - struct fb_info *psLINFBInfo = psDevInfo->psLINFBInfo; - memcpy ( &wq_flipdss2.var, &psLINFBInfo->var, sizeof(struct fb_var_screeninfo)); - wq_flipdss2.var.yoffset = (aPhyAddr-psLINFBInfo->fix.smem_start)/psLINFBInfo->fix.line_length; - wq_flipdss2.psLINFBInfo = psLINFBInfo; - schedule_work (&wq_flipdss2.work); -} -#endif - - - -static OMAP_ERROR EnableLFBEventNotification(OMAPLFB_DEVINFO *psDevInfo) -{ - int res; - OMAPLFB_SWAPCHAIN *psSwapChain = psDevInfo->psSwapChain; - OMAP_ERROR eError; - - - memset(&psDevInfo->sLINNotifBlock, 0, sizeof(psDevInfo->sLINNotifBlock)); - - psDevInfo->sLINNotifBlock.notifier_call = FrameBufferEvents; - - psSwapChain->bBlanked = OMAP_FALSE; - - res = fb_register_client(&psDevInfo->sLINNotifBlock); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_register_client failed (%d)", res); - - return (OMAP_ERROR_GENERIC); - } - - eError = UnblankDisplay(psDevInfo); - if (eError != OMAP_OK) - { - DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX - ": UnblankDisplay failed (%d)", eError)); - return eError; - } - - return (OMAP_OK); -} - -static OMAP_ERROR DisableLFBEventNotification(OMAPLFB_DEVINFO *psDevInfo) -{ - int res; - - - res = fb_unregister_client(&psDevInfo->sLINNotifBlock); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_unregister_client failed (%d)", res); - return (OMAP_ERROR_GENERIC); - } - - return (OMAP_OK); -} - -static PVRSRV_ERROR OpenDCDevice(IMG_UINT32 ui32DeviceID, - IMG_HANDLE *phDevice, - PVRSRV_SYNC_DATA* psSystemBufferSyncData) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAP_ERROR eError; - - UNREFERENCED_PARAMETER(ui32DeviceID); - - psDevInfo = GetAnchorPtr(); - - - psDevInfo->sSystemBuffer.psSyncData = psSystemBufferSyncData; - - eError = UnblankDisplay(psDevInfo); - if (eError != OMAP_OK) - { - DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX - ": UnblankDisplay failed (%d)", eError)); - return (PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED); - } - - - *phDevice = (IMG_HANDLE)psDevInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR CloseDCDevice(IMG_HANDLE hDevice) -{ - UNREFERENCED_PARAMETER(hDevice); - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR EnumDCFormats(IMG_HANDLE hDevice, - IMG_UINT32 *pui32NumFormats, - DISPLAY_FORMAT *psFormat) -{ - OMAPLFB_DEVINFO *psDevInfo; - - if(!hDevice || !pui32NumFormats) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - *pui32NumFormats = 1; - - if(psFormat) - { - psFormat[0] = psDevInfo->sDisplayFormat; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR EnumDCDims(IMG_HANDLE hDevice, - DISPLAY_FORMAT *psFormat, - IMG_UINT32 *pui32NumDims, - DISPLAY_DIMS *psDim) -{ - OMAPLFB_DEVINFO *psDevInfo; - - if(!hDevice || !psFormat || !pui32NumDims) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - *pui32NumDims = 1; - - - if(psDim) - { - psDim[0] = psDevInfo->sDisplayDim; - } - - return (PVRSRV_OK); -} - - -static PVRSRV_ERROR GetDCSystemBuffer(IMG_HANDLE hDevice, IMG_HANDLE *phBuffer) -{ - OMAPLFB_DEVINFO *psDevInfo; - - if(!hDevice || !phBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - *phBuffer = (IMG_HANDLE)&psDevInfo->sSystemBuffer; - - return (PVRSRV_OK); -} - - -static PVRSRV_ERROR GetDCInfo(IMG_HANDLE hDevice, DISPLAY_INFO *psDCInfo) -{ - OMAPLFB_DEVINFO *psDevInfo; - - if(!hDevice || !psDCInfo) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - *psDCInfo = psDevInfo->sDisplayInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR GetDCBufferAddr(IMG_HANDLE hDevice, - IMG_HANDLE hBuffer, - IMG_SYS_PHYADDR **ppsSysAddr, - IMG_UINT32 *pui32ByteSize, - IMG_VOID **ppvCpuVAddr, - IMG_HANDLE *phOSMapInfo, - IMG_BOOL *pbIsContiguous, - IMG_UINT32 *pui32TilingStride) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_BUFFER *psSystemBuffer; - - UNREFERENCED_PARAMETER(pui32TilingStride); - - if(!hDevice) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - if(!hBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - psSystemBuffer = (OMAPLFB_BUFFER *)hBuffer; - - if (!ppsSysAddr) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - *ppsSysAddr = &psSystemBuffer->sSysAddr; - - if (!pui32ByteSize) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - *pui32ByteSize = (IMG_UINT32)psDevInfo->sFBInfo.ulBufferSize; - - if (ppvCpuVAddr) - { - *ppvCpuVAddr = psSystemBuffer->sCPUVAddr; - } - - if (phOSMapInfo) - { - *phOSMapInfo = (IMG_HANDLE)0; - } - - if (pbIsContiguous) - { - *pbIsContiguous = IMG_TRUE; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, - IMG_UINT32 ui32Flags, - DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib, - DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib, - IMG_UINT32 ui32BufferCount, - PVRSRV_SYNC_DATA **ppsSyncData, - IMG_UINT32 ui32OEMFlags, - IMG_HANDLE *phSwapChain, - IMG_UINT32 *pui32SwapChainID) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_SWAPCHAIN *psSwapChain; - OMAPLFB_BUFFER *psBuffer; - OMAPLFB_VSYNC_FLIP_ITEM *psVSyncFlips; - IMG_UINT32 i; - PVRSRV_ERROR eError = PVRSRV_ERROR_NOT_SUPPORTED; - unsigned long ulLockFlags; - IMG_UINT32 ui32BuffersToSkip; - - UNREFERENCED_PARAMETER(ui32OEMFlags); - UNREFERENCED_PARAMETER(pui32SwapChainID); - - - if(!hDevice - || !psDstSurfAttrib - || !psSrcSurfAttrib - || !ppsSyncData - || !phSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - - if (psDevInfo->sDisplayInfo.ui32MaxSwapChains == 0) - { - return (PVRSRV_ERROR_NOT_SUPPORTED); - } - - - if(psDevInfo->psSwapChain != NULL) - { - return (PVRSRV_ERROR_FLIP_CHAIN_EXISTS); - } - - - if(ui32BufferCount > psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers) - { - return (PVRSRV_ERROR_TOOMANYBUFFERS); - } - - if ((psDevInfo->sFBInfo.ulRoundedBufferSize * (unsigned long)ui32BufferCount) > psDevInfo->sFBInfo.ulFBSize) - { - return (PVRSRV_ERROR_TOOMANYBUFFERS); - } - - - ui32BuffersToSkip = psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers - ui32BufferCount; - - - if(psDstSurfAttrib->pixelformat != psDevInfo->sDisplayFormat.pixelformat - || psDstSurfAttrib->sDims.ui32ByteStride != psDevInfo->sDisplayDim.ui32ByteStride - || psDstSurfAttrib->sDims.ui32Width != psDevInfo->sDisplayDim.ui32Width - || psDstSurfAttrib->sDims.ui32Height != psDevInfo->sDisplayDim.ui32Height) - { - - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - if(psDstSurfAttrib->pixelformat != psSrcSurfAttrib->pixelformat - || psDstSurfAttrib->sDims.ui32ByteStride != psSrcSurfAttrib->sDims.ui32ByteStride - || psDstSurfAttrib->sDims.ui32Width != psSrcSurfAttrib->sDims.ui32Width - || psDstSurfAttrib->sDims.ui32Height != psSrcSurfAttrib->sDims.ui32Height) - { - - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - - UNREFERENCED_PARAMETER(ui32Flags); - - - psSwapChain = (OMAPLFB_SWAPCHAIN*)OMAPLFBAllocKernelMem(sizeof(OMAPLFB_SWAPCHAIN)); - if(!psSwapChain) - { - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - - psBuffer = (OMAPLFB_BUFFER*)OMAPLFBAllocKernelMem(sizeof(OMAPLFB_BUFFER) * ui32BufferCount); - if(!psBuffer) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeSwapChain; - } - - psVSyncFlips = (OMAPLFB_VSYNC_FLIP_ITEM *)OMAPLFBAllocKernelMem(sizeof(OMAPLFB_VSYNC_FLIP_ITEM) * ui32BufferCount); - if (!psVSyncFlips) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeBuffers; - } - - psSwapChain->ulBufferCount = (unsigned long)ui32BufferCount; - psSwapChain->psBuffer = psBuffer; - psSwapChain->psVSyncFlips = psVSyncFlips; - psSwapChain->ulInsertIndex = 0; - psSwapChain->ulRemoveIndex = 0; - psSwapChain->psPVRJTable = &psDevInfo->sPVRJTable; - psSwapChain->psSwapChainLock = &psDevInfo->sSwapChainLock; - - - for(i=0; isFBInfo.ulRoundedBufferSize; - - psBuffer[i].psSyncData = ppsSyncData[i]; - - psBuffer[i].sSysAddr.uiAddr = psDevInfo->sFBInfo.sSysAddr.uiAddr + ui32BufferOffset; - psBuffer[i].sCPUVAddr = psDevInfo->sFBInfo.sCPUVAddr + ui32BufferOffset; - } - - - for(i=0; ipvRegs = ioremap(psDevInfo->psLINFBInfo->fix.mmio_start, psDevInfo->psLINFBInfo->fix.mmio_len); - if (psSwapChain->pvRegs == NULL) - { - eError = PVRSRV_ERROR_BAD_MAPPING; - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't map registers needed for flipping\n"); - goto ErrorDisableDisplayRegisters; - } -#endif - if (OMAPLFBInstallVSyncISR(psSwapChain) != OMAP_OK) - { - eError = PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR; - printk(KERN_WARNING DRIVER_PREFIX ": ISR handler failed to register\n"); - goto ErrorUnmapRegisters; - } - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - psDevInfo->psSwapChain = psSwapChain; - - - psSwapChain->bFlushCommands = psDevInfo->bFlushCommands; - - if (psSwapChain->bFlushCommands) - { - psSwapChain->ulSetFlushStateRefCount = 1; - } - else - { - psSwapChain->ulSetFlushStateRefCount = 0; - OMAPLFBEnableVSyncInterrupt(psSwapChain); - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - if (EnableLFBEventNotification(psDevInfo)!= OMAP_OK) - { - eError = PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT; - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't enable framebuffer event notification\n"); - goto ErrorUninstallVSyncInterrupt; - } - - - *phSwapChain = (IMG_HANDLE)psSwapChain; - - return (PVRSRV_OK); - -ErrorUninstallVSyncInterrupt: - if(OMAPLFBUninstallVSyncISR(psSwapChain) != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't uninstall VSync ISR\n"); - } -ErrorUnmapRegisters: -#if defined (SUPPORT_TI_DSS_FW) - iounmap(psSwapChain->pvRegs); -ErrorDisableDisplayRegisters: - OMAPLFBDisableDisplayRegisterAccess(); -#endif - OMAPLFBFreeKernelMem(psVSyncFlips); -ErrorFreeBuffers: - OMAPLFBFreeKernelMem(psBuffer); -ErrorFreeSwapChain: - OMAPLFBFreeKernelMem(psSwapChain); - - return eError; -} - -static PVRSRV_ERROR DestroyDCSwapChain(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_SWAPCHAIN *psSwapChain; - unsigned long ulLockFlags; - OMAP_ERROR eError; - - - if(!hDevice || !hSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - psSwapChain = (OMAPLFB_SWAPCHAIN*)hSwapChain; - if (psSwapChain != psDevInfo->psSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - eError = DisableLFBEventNotification(psDevInfo); - if (eError != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't disable framebuffer event notification\n"); - } - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - OMAPLFBDisableVSyncInterrupt(psSwapChain); - - - FlushInternalVSyncQueue(psSwapChain); - - - OMAPLFBFlip(psSwapChain, (unsigned long)psDevInfo->sFBInfo.sSysAddr.uiAddr); - - - psDevInfo->psSwapChain = NULL; - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - if(OMAPLFBUninstallVSyncISR(psSwapChain) != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't uninstall VSync ISR\n"); - return (PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR); - } - -#if defined (SUPPORT_TI_DSS_FW) - iounmap(psSwapChain->pvRegs); - - OMAPLFBDisableDisplayRegisterAccess(); -#endif - - OMAPLFBFreeKernelMem(psSwapChain->psVSyncFlips); - OMAPLFBFreeKernelMem(psSwapChain->psBuffer); - OMAPLFBFreeKernelMem(psSwapChain); - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SetDCDstRect(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(psRect); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCSrcRect(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(psRect); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCDstColourKey(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(ui32CKColour); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCSrcColourKey(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(ui32CKColour); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR GetDCBuffers(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 *pui32BufferCount, - IMG_HANDLE *phBuffer) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_SWAPCHAIN *psSwapChain; - unsigned long i; - - - if(!hDevice - || !hSwapChain - || !pui32BufferCount - || !phBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - psSwapChain = (OMAPLFB_SWAPCHAIN*)hSwapChain; - if (psSwapChain != psDevInfo->psSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - - *pui32BufferCount = (IMG_UINT32)psSwapChain->ulBufferCount; - - - for(i=0; iulBufferCount; i++) - { - phBuffer[i] = (IMG_HANDLE)&psSwapChain->psBuffer[i]; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SwapToDCBuffer(IMG_HANDLE hDevice, - IMG_HANDLE hBuffer, - IMG_UINT32 ui32SwapInterval, - IMG_HANDLE hPrivateTag, - IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect) -{ - OMAPLFB_DEVINFO *psDevInfo; - - UNREFERENCED_PARAMETER(ui32SwapInterval); - UNREFERENCED_PARAMETER(hPrivateTag); - UNREFERENCED_PARAMETER(psClipRect); - - if(!hDevice - || !hBuffer - || (ui32ClipRectCount != 0)) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SwapToDCSystem(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain) -{ - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_SWAPCHAIN *psSwapChain; - unsigned long ulLockFlags; - - if(!hDevice || !hSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (OMAPLFB_DEVINFO*)hDevice; - psSwapChain = (OMAPLFB_SWAPCHAIN*)hSwapChain; - if (psSwapChain != psDevInfo->psSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - FlushInternalVSyncQueue(psSwapChain); - - - OMAPLFBFlip(psSwapChain, (unsigned long)psDevInfo->sFBInfo.sSysAddr.uiAddr); - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - return (PVRSRV_OK); -} - -OMAP_BOOL OMAPLFBVSyncIHandler(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - OMAP_BOOL bStatus = OMAP_FALSE; - OMAPLFB_VSYNC_FLIP_ITEM *psFlipItem; - unsigned long ulMaxIndex; - unsigned long ulLockFlags; - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - ulMaxIndex = psSwapChain->ulBufferCount - 1; - - spin_lock_irqsave(psSwapChain->psSwapChainLock, ulLockFlags); - - - if (psSwapChain->bFlushCommands) - { - goto ExitUnlock; - } - - while(psFlipItem->bValid) - { - - if(psFlipItem->bFlipped) - { - - if(!psFlipItem->bCmdCompleted) - { - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete((IMG_HANDLE)psFlipItem->hCmdComplete, IMG_TRUE); - - - psFlipItem->bCmdCompleted = OMAP_TRUE; - } - - - psFlipItem->ulSwapInterval--; - - - if(psFlipItem->ulSwapInterval == 0) - { - - psSwapChain->ulRemoveIndex++; - - if(psSwapChain->ulRemoveIndex > ulMaxIndex) - { - psSwapChain->ulRemoveIndex = 0; - } - - - psFlipItem->bCmdCompleted = OMAP_FALSE; - psFlipItem->bFlipped = OMAP_FALSE; - - - psFlipItem->bValid = OMAP_FALSE; - } - else - { - - break; - } - } - else - { - - OMAPLFBFlip(psSwapChain, (unsigned long)psFlipItem->sSysAddr); - - - psFlipItem->bFlipped = OMAP_TRUE; - - - break; - } - - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - } - -ExitUnlock: - spin_unlock_irqrestore(psSwapChain->psSwapChainLock, ulLockFlags); - - return bStatus; -} - -static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, - IMG_UINT32 ui32DataSize, - IMG_VOID *pvData) -{ - DISPLAYCLASS_FLIP_COMMAND *psFlipCmd; - OMAPLFB_DEVINFO *psDevInfo; - OMAPLFB_BUFFER *psBuffer; - OMAPLFB_SWAPCHAIN *psSwapChain; -#if defined(SYS_USING_INTERRUPTS) - OMAPLFB_VSYNC_FLIP_ITEM* psFlipItem; -#endif - unsigned long ulLockFlags; - - - if(!hCmdCookie || !pvData) - { - return IMG_FALSE; - } - - - psFlipCmd = (DISPLAYCLASS_FLIP_COMMAND*)pvData; - - if (psFlipCmd == IMG_NULL || sizeof(DISPLAYCLASS_FLIP_COMMAND) != ui32DataSize) - { - return IMG_FALSE; - } - - - psDevInfo = (OMAPLFB_DEVINFO*)psFlipCmd->hExtDevice; - - psBuffer = (OMAPLFB_BUFFER*)psFlipCmd->hExtBuffer; - psSwapChain = (OMAPLFB_SWAPCHAIN*) psFlipCmd->hExtSwapChain; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - if (psDevInfo->bDeviceSuspended) - { - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete(hCmdCookie, IMG_TRUE); - goto ExitTrueUnlock; - } - -#if defined(SYS_USING_INTERRUPTS) - - if(psFlipCmd->ui32SwapInterval == 0 || psSwapChain->bFlushCommands == OMAP_TRUE) - { -#endif - - OMAPLFBFlip(psSwapChain, (unsigned long)psBuffer->sSysAddr.uiAddr); - - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete(hCmdCookie, IMG_TRUE); - -#if defined(SYS_USING_INTERRUPTS) - goto ExitTrueUnlock; - } - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulInsertIndex]; - - - if(psFlipItem->bValid == OMAP_FALSE) - { - unsigned long ulMaxIndex = psSwapChain->ulBufferCount - 1; - - if(psSwapChain->ulInsertIndex == psSwapChain->ulRemoveIndex) - { - - OMAPLFBFlip(psSwapChain, (unsigned long)psBuffer->sSysAddr.uiAddr); - - psFlipItem->bFlipped = OMAP_TRUE; - } - else - { - psFlipItem->bFlipped = OMAP_FALSE; - } - - psFlipItem->hCmdComplete = (OMAP_HANDLE)hCmdCookie; - psFlipItem->ulSwapInterval = (unsigned long)psFlipCmd->ui32SwapInterval; - psFlipItem->sSysAddr = &psBuffer->sSysAddr; - psFlipItem->bValid = OMAP_TRUE; - - psSwapChain->ulInsertIndex++; - if(psSwapChain->ulInsertIndex > ulMaxIndex) - { - psSwapChain->ulInsertIndex = 0; - } - - goto ExitTrueUnlock; - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - return IMG_FALSE; -#endif - -ExitTrueUnlock: - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - return IMG_TRUE; -} - - -static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo) -{ - struct fb_info *psLINFBInfo; - struct module *psLINFBOwner; - OMAPLFB_FBINFO *psPVRFBInfo = &psDevInfo->sFBInfo; - OMAP_ERROR eError = OMAP_ERROR_GENERIC; - unsigned long FBSize; - - acquire_console_sem(); - - if (fb_idx < 0 || fb_idx >= num_registered_fb) - { - eError = OMAP_ERROR_INVALID_DEVICE; - goto errRelSem; - } - - psLINFBInfo = registered_fb[fb_idx]; - - psLINFBOwner = psLINFBInfo->fbops->owner; - if (!try_module_get(psLINFBOwner)) - { - printk(KERN_INFO DRIVER_PREFIX - ": Couldn't get framebuffer module\n"); - - goto errRelSem; - } - - if (psLINFBInfo->fbops->fb_open != NULL) - { - int res; - - res = psLINFBInfo->fbops->fb_open(psLINFBInfo, 0); - if (res != 0) - { - printk(KERN_INFO DRIVER_PREFIX - ": Couldn't open framebuffer: %d\n", res); - - goto errModPut; - } - } - - psDevInfo->psLINFBInfo = psLINFBInfo; - - FBSize = (psLINFBInfo->screen_size) != 0 ? - psLINFBInfo->screen_size : - psLINFBInfo->fix.smem_len; - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer physical address: 0x%lx\n", - psLINFBInfo->fix.smem_start)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer virtual address: 0x%lx\n", - (unsigned long)psLINFBInfo->screen_base)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer size: %lu\n", - FBSize)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer virtual width: %u\n", - psLINFBInfo->var.xres_virtual)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer virtual height: %u\n", - psLINFBInfo->var.yres_virtual)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer width: %u\n", - psLINFBInfo->var.xres)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer height: %u\n", - psLINFBInfo->var.yres)); - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Framebuffer stride: %u\n", - psLINFBInfo->fix.line_length)); - - - psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start; - psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base; - - psPVRFBInfo->ulWidth = psLINFBInfo->var.xres; - psPVRFBInfo->ulHeight = psLINFBInfo->var.yres; - psPVRFBInfo->ulByteStride = psLINFBInfo->fix.line_length; - psPVRFBInfo->ulFBSize = FBSize; - psPVRFBInfo->ulBufferSize = psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; - -#ifdef CONFIG_OMAP2_DSS - psPVRFBInfo->ulRoundedBufferSize = psPVRFBInfo->ulBufferSize; -#else - - psPVRFBInfo->ulRoundedBufferSize = OMAPLFB_PAGE_ROUNDUP(psPVRFBInfo->ulBufferSize); -#endif - if(psLINFBInfo->var.bits_per_pixel == 16) - { - if((psLINFBInfo->var.red.length == 5) && - (psLINFBInfo->var.green.length == 6) && - (psLINFBInfo->var.blue.length == 5) && - (psLINFBInfo->var.red.offset == 11) && - (psLINFBInfo->var.green.offset == 5) && - (psLINFBInfo->var.blue.offset == 0) && - (psLINFBInfo->var.red.msb_right == 0)) - { - psPVRFBInfo->ePixelFormat = PVRSRV_PIXEL_FORMAT_RGB565; - } - else - { - printk("Unknown FB format\n"); - } - } - else if(psLINFBInfo->var.bits_per_pixel == 32) - { - if((psLINFBInfo->var.red.length == 8) && - (psLINFBInfo->var.green.length == 8) && - (psLINFBInfo->var.blue.length == 8) && - (psLINFBInfo->var.red.offset == 16) && - (psLINFBInfo->var.green.offset == 8) && - (psLINFBInfo->var.blue.offset == 0) && - (psLINFBInfo->var.red.msb_right == 0)) - { - psPVRFBInfo->ePixelFormat = PVRSRV_PIXEL_FORMAT_ARGB8888; - } - else - { - printk("Unknown FB format\n"); - } - } - else - { - printk("Unknown FB format\n"); - } - - psDevInfo->sFBInfo.ulPhysicalWidthmm = - ((int)psLINFBInfo->var.width > 0) ? psLINFBInfo->var.width : 90; - - psDevInfo->sFBInfo.ulPhysicalHeightmm = - ((int)psLINFBInfo->var.height > 0) ? psLINFBInfo->var.height : 54; - - - psDevInfo->sFBInfo.sSysAddr.uiAddr = psPVRFBInfo->sSysAddr.uiAddr; - psDevInfo->sFBInfo.sCPUVAddr = psPVRFBInfo->sCPUVAddr; -#ifdef CONFIG_OMAP2_DSS - INIT_WORK (&wq_flipdss2.work, dss2_pan_display); -#endif - eError = OMAP_OK; - goto errRelSem; - -errModPut: - module_put(psLINFBOwner); -errRelSem: - release_console_sem(); - return eError; -} - -static void DeInitDev(OMAPLFB_DEVINFO *psDevInfo) -{ - struct fb_info *psLINFBInfo = psDevInfo->psLINFBInfo; - struct module *psLINFBOwner; - - acquire_console_sem(); - - psLINFBOwner = psLINFBInfo->fbops->owner; - - if (psLINFBInfo->fbops->fb_release != NULL) - { - (void) psLINFBInfo->fbops->fb_release(psLINFBInfo, 0); - } - - module_put(psLINFBOwner); - - release_console_sem(); -} - -OMAP_ERROR OMAPLFBInit(void) -{ - OMAPLFB_DEVINFO *psDevInfo; - - psDevInfo = GetAnchorPtr(); - - if (psDevInfo == NULL) - { - PFN_CMD_PROC pfnCmdProcList[OMAPLFB_COMMAND_COUNT]; - IMG_UINT32 aui32SyncCountList[OMAPLFB_COMMAND_COUNT][2]; - - psDevInfo = (OMAPLFB_DEVINFO *)OMAPLFBAllocKernelMem(sizeof(OMAPLFB_DEVINFO)); - - if(!psDevInfo) - { - return (OMAP_ERROR_OUT_OF_MEMORY); - } - - - memset(psDevInfo, 0, sizeof(OMAPLFB_DEVINFO)); - - - SetAnchorPtr((void*)psDevInfo); - - - psDevInfo->ulRefCount = 0; - - - if(InitDev(psDevInfo) != OMAP_OK) - { - return (OMAP_ERROR_INIT_FAILURE); - } - - if(OMAPLFBGetLibFuncAddr ("PVRGetDisplayClassJTable", &pfnGetPVRJTable) != OMAP_OK) - { - return (OMAP_ERROR_INIT_FAILURE); - } - - - if(!(*pfnGetPVRJTable)(&psDevInfo->sPVRJTable)) - { - return (OMAP_ERROR_INIT_FAILURE); - } - - - spin_lock_init(&psDevInfo->sSwapChainLock); - - psDevInfo->psSwapChain = 0; - psDevInfo->bFlushCommands = OMAP_FALSE; - psDevInfo->bDeviceSuspended = OMAP_FALSE; - - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = (IMG_UINT32)(psDevInfo->sFBInfo.ulFBSize / psDevInfo->sFBInfo.ulRoundedBufferSize); -#if !defined (SUPPORT_TI_DSS_FW) - /* DSS2 have trouble with ui32MaxSwapChainBuffers > 3 */ - if (psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers > 3) - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = 3; -#endif - - - if (psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers == 0) - { - psDevInfo->sDisplayInfo.ui32MaxSwapChains = 0; - psDevInfo->sDisplayInfo.ui32MaxSwapInterval = 0; - } - else - { - psDevInfo->sDisplayInfo.ui32MaxSwapChains = 1; - psDevInfo->sDisplayInfo.ui32MaxSwapInterval = 3; - } - psDevInfo->sDisplayInfo.ui32MinSwapInterval = 0; - - psDevInfo->sDisplayInfo.ui32PhysicalWidthmm = psDevInfo->sFBInfo.ulPhysicalWidthmm; - psDevInfo->sDisplayInfo.ui32PhysicalHeightmm = psDevInfo->sFBInfo.ulPhysicalHeightmm; - - strncpy(psDevInfo->sDisplayInfo.szDisplayName, DISPLAY_DEVICE_NAME, MAX_DISPLAY_NAME_SIZE); - - psDevInfo->sDisplayFormat.pixelformat = psDevInfo->sFBInfo.ePixelFormat; - psDevInfo->sDisplayDim.ui32Width = (IMG_UINT32)psDevInfo->sFBInfo.ulWidth; - psDevInfo->sDisplayDim.ui32Height = (IMG_UINT32)psDevInfo->sFBInfo.ulHeight; - psDevInfo->sDisplayDim.ui32ByteStride = (IMG_UINT32)psDevInfo->sFBInfo.ulByteStride; - - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Maximum number of swap chain buffers: %u\n", - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers)); - - - psDevInfo->sSystemBuffer.sSysAddr = psDevInfo->sFBInfo.sSysAddr; - psDevInfo->sSystemBuffer.sCPUVAddr = psDevInfo->sFBInfo.sCPUVAddr; - psDevInfo->sSystemBuffer.ulBufferSize = psDevInfo->sFBInfo.ulRoundedBufferSize; - - - - psDevInfo->sDCJTable.ui32TableSize = sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE); - psDevInfo->sDCJTable.pfnOpenDCDevice = OpenDCDevice; - psDevInfo->sDCJTable.pfnCloseDCDevice = CloseDCDevice; - psDevInfo->sDCJTable.pfnEnumDCFormats = EnumDCFormats; - psDevInfo->sDCJTable.pfnEnumDCDims = EnumDCDims; - psDevInfo->sDCJTable.pfnGetDCSystemBuffer = GetDCSystemBuffer; - psDevInfo->sDCJTable.pfnGetDCInfo = GetDCInfo; - psDevInfo->sDCJTable.pfnGetBufferAddr = GetDCBufferAddr; - psDevInfo->sDCJTable.pfnCreateDCSwapChain = CreateDCSwapChain; - psDevInfo->sDCJTable.pfnDestroyDCSwapChain = DestroyDCSwapChain; - psDevInfo->sDCJTable.pfnSetDCDstRect = SetDCDstRect; - psDevInfo->sDCJTable.pfnSetDCSrcRect = SetDCSrcRect; - psDevInfo->sDCJTable.pfnSetDCDstColourKey = SetDCDstColourKey; - psDevInfo->sDCJTable.pfnSetDCSrcColourKey = SetDCSrcColourKey; - psDevInfo->sDCJTable.pfnGetDCBuffers = GetDCBuffers; - psDevInfo->sDCJTable.pfnSwapToDCBuffer = SwapToDCBuffer; - psDevInfo->sDCJTable.pfnSwapToDCSystem = SwapToDCSystem; - psDevInfo->sDCJTable.pfnSetDCState = SetDCState; - - - if(psDevInfo->sPVRJTable.pfnPVRSRVRegisterDCDevice ( - &psDevInfo->sDCJTable, - &psDevInfo->uiDeviceID ) != PVRSRV_OK) - { - return (OMAP_ERROR_DEVICE_REGISTER_FAILED); - } - - - pfnCmdProcList[DC_FLIP_COMMAND] = ProcessFlip; - - - aui32SyncCountList[DC_FLIP_COMMAND][0] = 0; - aui32SyncCountList[DC_FLIP_COMMAND][1] = 2; - - - - - - if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterCmdProcList (psDevInfo->uiDeviceID, - &pfnCmdProcList[0], - aui32SyncCountList, - OMAPLFB_COMMAND_COUNT) != PVRSRV_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Can't register callback\n"); - return (OMAP_ERROR_CANT_REGISTER_CALLBACK); - } - - } - - - psDevInfo->ulRefCount++; - - - return (OMAP_OK); - - } - -OMAP_ERROR OMAPLFBDeinit(void) -{ - OMAPLFB_DEVINFO *psDevInfo, *psDevFirst; - - psDevFirst = GetAnchorPtr(); - psDevInfo = psDevFirst; - - - if (psDevInfo == NULL) - { - return (OMAP_ERROR_GENERIC); - } - - - psDevInfo->ulRefCount--; - - if (psDevInfo->ulRefCount == 0) - { - - PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable = &psDevInfo->sPVRJTable; - - if (psDevInfo->sPVRJTable.pfnPVRSRVRemoveCmdProcList (psDevInfo->uiDeviceID, OMAPLFB_COMMAND_COUNT) != PVRSRV_OK) - { - return (OMAP_ERROR_GENERIC); - } - - - if (psJTable->pfnPVRSRVRemoveDCDevice(psDevInfo->uiDeviceID) != PVRSRV_OK) - { - return (OMAP_ERROR_GENERIC); - } - - DeInitDev(psDevInfo); - - - OMAPLFBFreeKernelMem(psDevInfo); - } - - - SetAnchorPtr(NULL); - - - return (OMAP_OK); -} - - -#if defined(LDM_PLATFORM) -void OMAPLFBDriverSuspend(void) -{ - OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - if (psDevInfo->bDeviceSuspended) - { - goto ExitUnlock; - } - psDevInfo->bDeviceSuspended = OMAP_TRUE; - - - SetFlushStateInternalNoLock(psDevInfo, OMAP_TRUE); - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - -#if defined (SUPPORT_TI_DSS_FW) - if (psDevInfo->psSwapChain != NULL) - { - OMAPLFBDisableDisplayRegisterAccess(); - } -#endif - return; - -ExitUnlock: - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} - -void OMAPLFBDriverResume(void) -{ - OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - unsigned long ulLockFlags; - - if (psDevInfo->bDeviceSuspended == OMAP_FALSE) - { - return; - } -#if defined (SUPPORT_TI_DSS_FW) - if (psDevInfo->psSwapChain != NULL) - { - OMAPLFBEnableDisplayRegisterAccess(); - } -#endif - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - SetFlushStateInternalNoLock(psDevInfo, OMAP_FALSE); - - psDevInfo->bDeviceSuspended = OMAP_FALSE; - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} -#endif - diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c deleted file mode 100644 index fa52836..0000000 --- a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c +++ /dev/null @@ -1,445 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef AUTOCONF_INCLUDED -#include -#endif - -#include -#include - -#include -#include -#include -#include -#include - -#if defined(LDM_PLATFORM) -#include -#endif - -#if defined (SUPPORT_TI_DSS_FW) -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31)) -#include -#else -#include -#endif -#else -#include -#endif - -#else -#if !defined (CONFIG_OMAP2_DSS) -#define DISPC_IRQ_VSYNC 0x0002 -extern int omap_dispc_request_irq(unsigned long, void (*)(void *), void *); -extern void omap_dispc_free_irq(unsigned long, void (*)(void *), void *); -extern void omap_dispc_set_plane_base(int plane, IMG_UINT32 phys_addr); -#else -#include -#include -#include -static omap_dispc_isr_t *pOMAPLFBVSyncISRHandle = NULL; -#endif -#endif - - - -#include "img_defs.h" -#include "servicesext.h" -#include "kerneldisplay.h" -#include "omaplfb.h" -#include "pvrmodule.h" - -MODULE_SUPPORTED_DEVICE(DEVNAME); - -#define unref__ __attribute__ ((unused)) - -void *OMAPLFBAllocKernelMem(unsigned long ulSize) -{ - return kmalloc(ulSize, GFP_KERNEL); -} - -void OMAPLFBFreeKernelMem(void *pvMem) -{ - kfree(pvMem); -} - - -OMAP_ERROR OMAPLFBGetLibFuncAddr (char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable) -{ - if(strcmp("PVRGetDisplayClassJTable", szFunctionName) != 0) - { - return (OMAP_ERROR_INVALID_PARAMS); - } - - - *ppfnFuncTable = PVRGetDisplayClassJTable; - - return (OMAP_OK); -} - - -#if defined(SYS_USING_INTERRUPTS) - -#if defined(SUPPORT_OMAP3430_OMAPFB3) - -static void OMAPLFBVSyncISR(void *arg, u32 mask) -{ - OMAPLFB_SWAPCHAIN *psSwapChain= (OMAPLFB_SWAPCHAIN *)arg; - (void) OMAPLFBVSyncIHandler(psSwapChain); -} - -static inline int OMAPLFBRegisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - return omap_dispc_register_isr(OMAPLFBVSyncISR, psSwapChain, - DISPC_IRQ_VSYNC); -} - -static inline int OMAPLFBUnregisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - return omap_dispc_unregister_isr(OMAPLFBVSyncISR, psSwapChain, - DISPC_IRQ_VSYNC); -} - -#else - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -static void OMAPLFBVSyncISR(void *arg) -#else -static void OMAPLFBVSyncISR(void *arg, struct pt_regs unref__ *regs) -#endif -{ - OMAPLFB_SWAPCHAIN *psSwapChain= (OMAPLFB_SWAPCHAIN *)arg; - (void) OMAPLFBVSyncIHandler(psSwapChain); -} - -static inline int OMAPLFBRegisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) - return omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); -#else - return omap2_disp_register_isr(OMAPLFBVSyncISR, psSwapChain, - DISPC_IRQSTATUS_VSYNC); -#endif -} - -static inline int OMAPLFBUnregisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) - omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); - return 0; -#else - return omap2_disp_unregister_isr(OMAPLFBVSyncISR); -#endif -} - -#endif - -#endif - -#if !defined (SUPPORT_TI_DSS_FW) - -IMG_VOID OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - if (pOMAPLFBVSyncISRHandle == NULL) - OMAPLFBInstallVSyncISR (psSwapChain); -} - -IMG_VOID OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) -{ - if (pOMAPLFBVSyncISRHandle != NULL) - OMAPLFBUninstallVSyncISR (psSwapChain); -} -#else - -static void OMAPLFBVSyncWriteReg(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long ulOffset, unsigned long ulValue) -{ - void *pvRegAddr = (void *)((char *)psSwapChain->pvRegs + ulOffset); - - - writel(ulValue, pvRegAddr); -} - -static unsigned long OMAPLFBVSyncReadReg(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long ulOffset) -{ - return readl((char *)psSwapChain->pvRegs + ulOffset); -} - -void OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if defined(SYS_USING_INTERRUPTS) - - unsigned long ulInterruptEnable = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_IRQENABLE); - ulInterruptEnable |= OMAPLCD_INTMASK_VSYNC; - OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_IRQENABLE, ulInterruptEnable ); -#endif -} - -void OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if defined(SYS_USING_INTERRUPTS) - - unsigned long ulInterruptEnable = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_IRQENABLE); - ulInterruptEnable &= ~(OMAPLCD_INTMASK_VSYNC); - OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_IRQENABLE, ulInterruptEnable); -#endif -} -#endif - -#if !defined (SUPPORT_TI_DSS_FW) -OMAP_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if !defined (CONFIG_OMAP2_DSS) - if (omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain) != 0) -#else - pOMAPLFBVSyncISRHandle = omap_dispc_register_isr( - (omap_dispc_isr_t)OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC); - - if (pOMAPLFBVSyncISRHandle != NULL) -#endif - return PVRSRV_ERROR_OUT_OF_MEMORY; /* not worth a proper mapping */ - return OMAP_OK; -} - - -OMAP_ERROR OMAPLFBUninstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if !defined (CONFIG_OMAP2_DSS) - omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); -#else - omap_dispc_unregister_isr (OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC); -#endif - return OMAP_OK; -} - - -IMG_VOID OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr) -{ -#if !defined (CONFIG_OMAP2_DSS) - omap_dispc_set_plane_base(0, aPhyAddr); -#else - OMAPLFBFlipDSS2 (psSwapChain, aPhyAddr); -#endif -} -#else - -OMAP_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if defined(SYS_USING_INTERRUPTS) - OMAPLFBDisableVSyncInterrupt(psSwapChain); - - if (OMAPLFBRegisterVSyncISR(psSwapChain)) - { - printk(KERN_INFO DRIVER_PREFIX ": OMAPLFBInstallVSyncISR: Request OMAPLCD IRQ failed\n"); - return (OMAP_ERROR_INIT_FAILURE); - } - -#endif - return (OMAP_OK); -} - - -OMAP_ERROR OMAPLFBUninstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain) -{ -#if defined(SYS_USING_INTERRUPTS) - OMAPLFBDisableVSyncInterrupt(psSwapChain); - - OMAPLFBUnregisterVSyncISR(psSwapChain); - -#endif - return (OMAP_OK); -} - -void OMAPLFBEnableDisplayRegisterAccess(void) -{ -#if !defined(SUPPORT_OMAP3430_OMAPFB3) - omap2_disp_get_dss(); -#endif -} - -void OMAPLFBDisableDisplayRegisterAccess(void) -{ -#if !defined(SUPPORT_OMAP3430_OMAPFB3) - omap2_disp_put_dss(); -#endif -} - - -void OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long aPhyAddr) -{ - unsigned long control; - - - OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_GFX_BA0, aPhyAddr); - OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_GFX_BA1, aPhyAddr); - - control = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_CONTROL); - control |= OMAP_CONTROL_GOLCD; - OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_CONTROL, control); -} -#endif - -#if defined(LDM_PLATFORM) - -static OMAP_BOOL bDeviceSuspended; - -static void OMAPLFBCommonSuspend(void) -{ - if (bDeviceSuspended) - { - return; - } - - OMAPLFBDriverSuspend(); - - bDeviceSuspended = OMAP_TRUE; -} - -static int OMAPLFBDriverSuspend_Entry(struct platform_device unref__ *pDevice, pm_message_t unref__ state) -{ - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverSuspend_Entry\n")); - - OMAPLFBCommonSuspend(); - - return 0; -} - -static int OMAPLFBDriverResume_Entry(struct platform_device unref__ *pDevice) -{ - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverResume_Entry\n")); - - OMAPLFBDriverResume(); - - bDeviceSuspended = OMAP_FALSE; - - return 0; -} - -static IMG_VOID OMAPLFBDriverShutdown_Entry(struct platform_device unref__ *pDevice) -{ - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverShutdown_Entry\n")); - - OMAPLFBCommonSuspend(); -} - -static struct platform_driver omaplfb_driver = { - .driver = { - .name = DRVNAME, - }, - .suspend = OMAPLFBDriverSuspend_Entry, - .resume = OMAPLFBDriverResume_Entry, - .shutdown = OMAPLFBDriverShutdown_Entry, -}; - -#if defined(MODULE) - -static void OMAPLFBDeviceRelease_Entry(struct device unref__ *pDevice) -{ - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverRelease_Entry\n")); - - OMAPLFBCommonSuspend(); -} - -static struct platform_device omaplfb_device = { - .name = DEVNAME, - .id = -1, - .dev = { - .release = OMAPLFBDeviceRelease_Entry - } -}; - -#endif - -#endif - -static int __init OMAPLFB_Init(void) -{ -#if defined(LDM_PLATFORM) - int error; -#endif - - if(OMAPLFBInit() != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: OMAPLFBInit failed\n"); - return -ENODEV; - } - -#if defined(LDM_PLATFORM) - if ((error = platform_driver_register(&omaplfb_driver)) != 0) - { - printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: Unable to register platform driver (%d)\n", error); - - goto ExitDeinit; - } - -#if defined(MODULE) - if ((error = platform_device_register(&omaplfb_device)) != 0) - { - platform_driver_unregister(&omaplfb_driver); - - printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: Unable to register platform device (%d)\n", error); - - goto ExitDeinit; - } -#endif - -#endif - - return 0; - -#if defined(LDM_PLATFORM) -ExitDeinit: - if(OMAPLFBDeinit() != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: OMAPLFBDeinit failed\n"); - } - - return -ENODEV; -#endif -} - -static IMG_VOID __exit OMAPLFB_Cleanup(IMG_VOID) -{ -#if defined (LDM_PLATFORM) -#if defined (MODULE) - platform_device_unregister(&omaplfb_device); -#endif - platform_driver_unregister(&omaplfb_driver); -#endif - - if(OMAPLFBDeinit() != OMAP_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Cleanup: OMAPLFBDeinit failed\n"); - } -} - -module_init(OMAPLFB_Init); -module_exit(OMAPLFB_Cleanup); - diff --git a/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c b/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c index 248e964..b503b93 100644 --- a/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c +++ b/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c @@ -284,12 +284,12 @@ void OMAPLFBFlip(OMAPLFB_DEVINFO *psDevInfo, OMAPLFB_BUFFER *psBuffer) OMAPLFB_UPDATE_MODE OMAPLFBGetUpdateMode(OMAPLFB_DEVINFO *psDevInfo) { struct omap_dss_device *psDSSDev = fb2display(psDevInfo->psLINFBInfo); + enum omap_dss_update_mode eMode; OMAP_DSS_DRIVER(psDSSDrv, psDSSDev); if (psDSSDrv == NULL || psDSSDev == NULL) { DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": %s: Device %u: No DSS device\n", __FUNCTION__, psDevInfo->uiFBDevID)); } - enum omap_dss_update_mode eMode; if (psDSSDrv->get_update_mode == NULL) { diff --git a/services4/3rdparty/linux_drm/pvr_drm_stubs.c b/services4/3rdparty/linux_drm/pvr_drm_stubs.c index 0688bf5..3a78d1e 100644 --- a/services4/3rdparty/linux_drm/pvr_drm_stubs.c +++ b/services4/3rdparty/linux_drm/pvr_drm_stubs.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "pvr_drm_mod.h" diff --git a/services4/include/env/linux/pvr_drm_shared.h b/services4/include/env/linux/pvr_drm_shared.h index b031535..a7e9060 100644 --- a/services4/include/env/linux/pvr_drm_shared.h +++ b/services4/include/env/linux/pvr_drm_shared.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/include/kernelbuffer.h b/services4/include/kernelbuffer.h index 5243aaf..4cd36d2 100644 --- a/services4/include/kernelbuffer.h +++ b/services4/include/kernelbuffer.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/include/kerneldisplay.h b/services4/include/kerneldisplay.h index b5c1c7a..cdbef00 100644 --- a/services4/include/kerneldisplay.h +++ b/services4/include/kerneldisplay.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/include/pdump.h b/services4/include/pdump.h index 78d9073..c41a6d4 100644 --- a/services4/include/pdump.h +++ b/services4/include/pdump.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/include/pvr_bridge.h b/services4/include/pvr_bridge.h index 7e4697d..d06d902 100644 --- a/services4/include/pvr_bridge.h +++ b/services4/include/pvr_bridge.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -45,7 +45,11 @@ extern "C" { #else + #if defined(__QNXNTO__) + #define PVRSRV_IOC_GID (0x0UL) + #else #error Unknown platform: Cannot define ioctls + #endif #define PVRSRV_IO(INDEX) (PVRSRV_IOC_GID + (INDEX)) #define PVRSRV_IOW(INDEX) (PVRSRV_IOC_GID + (INDEX)) @@ -68,7 +72,7 @@ extern "C" { #define PVRSRV_BRIDGE_GETFREE_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+8) #define PVRSRV_BRIDGE_CREATE_COMMANDQUEUE PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+9) #define PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+10) -#define PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+11) +#define PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+11) #define PVRSRV_BRIDGE_CONNECT_SERVICES PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+12) #define PVRSRV_BRIDGE_DISCONNECT_SERVICES PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+13) #define PVRSRV_BRIDGE_WRAP_DEVICE_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+14) @@ -85,7 +89,10 @@ extern "C" { #define PVRSRV_BRIDGE_UNMAP_MEM_INFO_FROM_USER PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+25) #define PVRSRV_BRIDGE_EXPORT_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+26) #define PVRSRV_BRIDGE_RELEASE_MMAP_DATA PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+27) -#define PVRSRV_BRIDGE_CORE_CMD_LAST (PVRSRV_BRIDGE_CORE_CMD_FIRST+27) +#define PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+28) +#define PVRSRV_BRIDGE_MAP_DEV_MEMORY_2 PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+29) +#define PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2 PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+30) +#define PVRSRV_BRIDGE_CORE_CMD_LAST (PVRSRV_BRIDGE_CORE_CMD_FIRST+30) #define PVRSRV_BRIDGE_SIM_CMD_FIRST (PVRSRV_BRIDGE_CORE_CMD_LAST+1) #define PVRSRV_BRIDGE_PROCESS_SIMISR_EVENT PVRSRV_IOWR(PVRSRV_BRIDGE_SIM_CMD_FIRST+0) @@ -168,7 +175,6 @@ extern "C" { #define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14) #define PVRSRV_BRIDGE_DISPCLASS_CMD_LAST (PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14) - #define PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST (PVRSRV_BRIDGE_DISPCLASS_CMD_LAST+1) #define PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+0) #define PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+1) @@ -197,7 +203,7 @@ extern "C" { #define PVRSRV_BRIDGE_INITSRV_DISCONNECT PVRSRV_IOWR(PVRSRV_BRIDGE_INITSRV_CMD_FIRST+1) #define PVRSRV_BRIDGE_INITSRV_CMD_LAST (PVRSRV_BRIDGE_INITSRV_CMD_FIRST+1) -#define PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST (PVRSRV_BRIDGE_INITSRV_CMD_LAST+1) +#define PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST (PVRSRV_BRIDGE_INITSRV_CMD_LAST+1) #define PVRSRV_BRIDGE_EVENT_OBJECT_WAIT PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+0) #define PVRSRV_BRIDGE_EVENT_OBJECT_OPEN PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+1) #define PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+2) @@ -208,12 +214,14 @@ extern "C" { #define PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+1) #define PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+2) #define PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+3) -#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+4) -#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+5) -#define PVRSRV_BRIDGE_ALLOC_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+6) -#define PVRSRV_BRIDGE_FREE_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+7) -#define PVRSRV_BRIDGE_SYNC_OPS_CMD_LAST (PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+7) - +#define PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+4) +#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_TOKEN PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+5) +#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+6) +#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+7) +#define PVRSRV_BRIDGE_ALLOC_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+8) +#define PVRSRV_BRIDGE_FREE_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+9) +#define PVRSRV_BRIDGE_SYNC_OPS_CMD_LAST (PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+9) + #define PVRSRV_BRIDGE_LAST_NON_DEVICE_CMD (PVRSRV_BRIDGE_SYNC_OPS_CMD_LAST+1) @@ -231,19 +239,19 @@ typedef struct PVRSRV_BRIDGE_PACKAGE_TAG { IMG_UINT32 ui32BridgeID; IMG_UINT32 ui32Size; - IMG_VOID *pvParamIn; + IMG_VOID *pvParamIn; IMG_UINT32 ui32InBufferSize; IMG_VOID *pvParamOut; IMG_UINT32 ui32OutBufferSize; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelServices; +#else IMG_HANDLE hKernelServices; +#endif }PVRSRV_BRIDGE_PACKAGE; - - - - typedef struct PVRSRV_BRIDGE_IN_CONNECT_SERVICES_TAG { IMG_UINT32 ui32BridgeFlags; @@ -268,56 +276,82 @@ typedef struct PVRSRV_BRIDGE_IN_ENUMCLASS_TAG typedef struct PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE; typedef struct PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS; typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER; typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO; typedef struct PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE; typedef struct PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO; - typedef struct PVRSRV_BRIDGE_IN_RELEASE_DEVICEINFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif } PVRSRV_BRIDGE_IN_RELEASE_DEVICEINFO; - typedef struct PVRSRV_BRIDGE_IN_FREE_CLASSDEVICEINFO_TAG { IMG_UINT32 ui32BridgeFlags; @@ -327,85 +361,117 @@ typedef struct PVRSRV_BRIDGE_IN_FREE_CLASSDEVICEINFO_TAG }PVRSRV_BRIDGE_IN_FREE_CLASSDEVICEINFO; - typedef struct PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hDevMemContext; +#endif }PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO; - typedef struct PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT; - typedef struct PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hDevMemContext; +#endif }PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT; - typedef struct PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemHeap; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hDevMemHeap; +#endif IMG_UINT32 ui32Attribs; IMG_SIZE_T ui32Size; IMG_SIZE_T ui32Alignment; }PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM; - typedef struct PVRSRV_BRIDGE_IN_MAPMEMINFOTOUSER_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif }PVRSRV_BRIDGE_IN_MAPMEMINFOTOUSER; - typedef struct PVRSRV_BRIDGE_IN_UNMAPMEMINFOFROMUSER_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif IMG_PVOID pvLinAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMappingInfo; +#else IMG_HANDLE hMappingInfo; +#endif }PVRSRV_BRIDGE_IN_UNMAPMEMINFOFROMUSER; - typedef struct PVRSRV_BRIDGE_IN_FREEDEVICEMEM_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hDevCookie; PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; }PVRSRV_BRIDGE_IN_FREEDEVICEMEM; - typedef struct PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hDevCookie; PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif }PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM; - typedef struct PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM_TAG { IMG_UINT32 ui32BridgeFlags; @@ -413,126 +479,163 @@ typedef struct PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM_TAG } PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM; - typedef struct PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_SIZE_T ui32QueueSize; }PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE; - typedef struct PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif PVRSRV_QUEUE_INFO *psQueueInfo; }PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE; - typedef struct PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle; +#else IMG_HANDLE hMHandle; +#endif } PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA; - typedef struct PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle; +#else IMG_HANDLE hMHandle; +#endif } PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA; - typedef struct PVRSRV_BRIDGE_IN_RESERVE_DEV_VIRTMEM_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeap; +#else IMG_HANDLE hDevMemHeap; +#endif IMG_DEV_VIRTADDR *psDevVAddr; IMG_SIZE_T ui32Size; IMG_SIZE_T ui32Alignment; }PVRSRV_BRIDGE_IN_RESERVE_DEV_VIRTMEM; - typedef struct PVRSRV_BRIDGE_OUT_CONNECT_SERVICES_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelServices; +#else IMG_HANDLE hKernelServices; +#endif }PVRSRV_BRIDGE_OUT_CONNECT_SERVICES; - typedef struct PVRSRV_BRIDGE_OUT_RESERVE_DEV_VIRTMEM_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; + IMG_SID hKernelSyncInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; }PVRSRV_BRIDGE_OUT_RESERVE_DEV_VIRTMEM; - typedef struct PVRSRV_BRIDGE_IN_FREE_DEV_VIRTMEM_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; }PVRSRV_BRIDGE_IN_FREE_DEV_VIRTMEM; - typedef struct PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; + IMG_SID hDstDevMemHeap; +#else IMG_HANDLE hKernelMemInfo; IMG_HANDLE hDstDevMemHeap; +#endif }PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY; - typedef struct PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDstKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psDstKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sDstClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sDstClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sDstClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sDstClientSyncInfo; }PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; }PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_MAP_EXT_MEMORY_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - IMG_SYS_PHYADDR *psSysPAddr; - IMG_UINT32 ui32Flags; +#endif + IMG_SYS_PHYADDR *psSysPAddr; + IMG_UINT32 ui32Flags; }PVRSRV_BRIDGE_IN_MAP_EXT_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_UNMAP_EXT_MEMORY_TAG { IMG_UINT32 ui32BridgeFlags; @@ -542,44 +645,58 @@ typedef struct PVRSRV_BRIDGE_IN_UNMAP_EXT_MEMORY_TAG }PVRSRV_BRIDGE_IN_UNMAP_EXT_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceClassBuffer; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDeviceClassBuffer; IMG_HANDLE hDevMemContext; +#endif }PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY; - typedef struct PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY_TAG { - PVRSRV_ERROR eError; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_ERROR eError; + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; + IMG_SID hMappingInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; IMG_HANDLE hMappingInfo; +#endif }PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; }PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_MEMPOL_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif IMG_UINT32 ui32Offset; IMG_UINT32 ui32Value; IMG_UINT32 ui32Mask; @@ -588,25 +705,32 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_MEMPOL_TAG }PVRSRV_BRIDGE_IN_PDUMP_MEMPOL; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - IMG_BOOL bIsRead; +#endif + IMG_BOOL bIsRead; + IMG_BOOL bUseLastOpDumpVal; IMG_UINT32 ui32Value; IMG_UINT32 ui32Mask; }PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM_TAG { IMG_UINT32 ui32BridgeFlags; - IMG_PVOID pvLinAddr; - IMG_PVOID pvAltLinAddr; + IMG_PVOID pvLinAddr; + IMG_PVOID pvAltLinAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif IMG_UINT32 ui32Offset; IMG_UINT32 ui32Bytes; IMG_UINT32 ui32Flags; @@ -614,41 +738,49 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM_TAG }PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC_TAG { IMG_UINT32 ui32BridgeFlags; - IMG_PVOID pvAltLinAddr; + IMG_PVOID pvAltLinAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; +#endif IMG_UINT32 ui32Offset; IMG_UINT32 ui32Bytes; }PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPREG_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif PVRSRV_HWREG sHWReg; IMG_UINT32 ui32Flags; IMG_CHAR szRegRegion[32]; }PVRSRV_BRIDGE_IN_PDUMP_DUMPREG; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_REGPOL_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif PVRSRV_HWREG sHWReg; IMG_UINT32 ui32Mask; IMG_UINT32 ui32Flags; - IMG_CHAR szRegRegion[32]; + IMG_CHAR szRegRegion[32]; }PVRSRV_BRIDGE_IN_PDUMP_REGPOL; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPPDREG_TAG { IMG_UINT32 ui32BridgeFlags; @@ -657,21 +789,25 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPPDREG_TAG }PVRSRV_BRIDGE_IN_PDUMP_DUMPPDREG; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hKernelMemInfo; +#else + IMG_HANDLE hDevCookie; IMG_HANDLE hKernelMemInfo; +#endif IMG_DEV_PHYADDR *pPages; IMG_UINT32 ui32NumPages; - IMG_DEV_VIRTADDR sDevAddr; + IMG_DEV_VIRTADDR sDevVAddr; IMG_UINT32 ui32Start; IMG_UINT32 ui32Length; - IMG_BOOL bContinuous; + IMG_UINT32 ui32Flags; }PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_COMMENT_TAG { IMG_UINT32 ui32BridgeFlags; @@ -681,7 +817,6 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_COMMENT_TAG }PVRSRV_BRIDGE_IN_PDUMP_COMMENT; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_SETFRAME_TAG { IMG_UINT32 ui32BridgeFlags; @@ -690,19 +825,25 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_SETFRAME_TAG }PVRSRV_BRIDGE_IN_PDUMP_SETFRAME; - - typedef struct PVRSRV_BRIDGE_IN_PDUMP_BITMAP_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; +#endif + IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; IMG_UINT32 ui32FileOffset; IMG_UINT32 ui32Width; IMG_UINT32 ui32Height; IMG_UINT32 ui32StrideInBytes; IMG_DEV_VIRTADDR sDevBaseAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevMemContext; +#endif IMG_UINT32 ui32Size; PDUMP_PIXEL_FORMAT ePixelFormat; PDUMP_MEM_FORMAT eMemFormat; @@ -711,21 +852,23 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_BITMAP_TAG }PVRSRV_BRIDGE_IN_PDUMP_BITMAP; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_READREG_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; +#endif + IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; IMG_UINT32 ui32FileOffset; IMG_UINT32 ui32Address; IMG_UINT32 ui32Size; IMG_UINT32 ui32Flags; - IMG_CHAR szRegRegion[32]; + IMG_CHAR szRegRegion[32]; }PVRSRV_BRIDGE_IN_PDUMP_READREG; - typedef struct PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO_TAG { IMG_UINT32 ui32BridgeFlags; @@ -737,21 +880,27 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hKernelMemInfo; +#endif IMG_UINT32 ui32Offset; IMG_DEV_PHYADDR sPDDevPAddr; }PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR; - typedef struct PVRSRV_BRIDGE_PDUM_IN_CYCLE_COUNT_REG_READ_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_UINT32 ui32RegOffset; IMG_BOOL bLastFrame; }PVRSRV_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ; - typedef struct PVRSRV_BRIDGE_OUT_ENUMDEVICE_TAG { PVRSRV_ERROR eError; @@ -761,17 +910,19 @@ typedef struct PVRSRV_BRIDGE_OUT_ENUMDEVICE_TAG }PVRSRV_BRIDGE_OUT_ENUMDEVICE; - typedef struct PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif } PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO; - typedef struct PVRSRV_BRIDGE_OUT_ENUMCLASS_TAG { PVRSRV_ERROR eError; @@ -781,30 +932,40 @@ typedef struct PVRSRV_BRIDGE_OUT_ENUMCLASS_TAG }PVRSRV_BRIDGE_OUT_ENUMCLASS; - typedef struct PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE_TAG { IMG_UINT32 ui32BridgeFlags; IMG_UINT32 ui32DeviceID; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - +#endif + }PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE; - typedef struct PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif }PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE; - typedef struct PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hDevMemContext; +#endif IMG_VOID *pvLinAddr; IMG_SIZE_T ui32ByteSize; IMG_SIZE_T ui32PageOffset; @@ -815,7 +976,6 @@ typedef struct PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY_TAG }PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY; - typedef struct PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY_TAG { PVRSRV_ERROR eError; @@ -824,11 +984,14 @@ typedef struct PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY_TAG }PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY; - typedef struct PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hKernelMemInfo; +#endif PVRSRV_CLIENT_MEM_INFO sClientMemInfo; PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; @@ -840,7 +1003,6 @@ typedef struct PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY_TAG #define PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS 4 #define PVRSRV_MAX_DC_CLIP_RECTS 32 - typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS_TAG { PVRSRV_ERROR eError; @@ -850,17 +1012,19 @@ typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS_TAG }PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS; - typedef struct PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif DISPLAY_FORMAT sFormat; }PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS; - typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS_TAG { PVRSRV_ERROR eError; @@ -870,7 +1034,6 @@ typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS_TAG }PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS; - typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO_TAG { PVRSRV_ERROR eError; @@ -879,20 +1042,26 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO_TAG }PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO; - typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hBuffer; +#else IMG_HANDLE hBuffer; +#endif }PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER; - typedef struct PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif IMG_UINT32 ui32Flags; DISPLAY_SURF_ATTRIBUTES sDstSurfAttrib; DISPLAY_SURF_ATTRIBUTES sSrcSurfAttrib; @@ -903,112 +1072,151 @@ typedef struct PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN_TAG } PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN; - typedef struct PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSwapChain; +#else IMG_HANDLE hSwapChain; +#endif IMG_UINT32 ui32SwapChainID; } PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN; - typedef struct PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hSwapChain; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hSwapChain; +#endif } PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN; - typedef struct PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hSwapChain; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hSwapChain; +#endif IMG_RECT sRect; } PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT; - typedef struct PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hSwapChain; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hSwapChain; +#endif IMG_UINT32 ui32CKColour; } PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY; - typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hSwapChain; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hSwapChain; +#endif } PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS; - typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS_TAG { PVRSRV_ERROR eError; IMG_UINT32 ui32BufferCount; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; +#else IMG_HANDLE ahBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; +#endif } PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS; - typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hBuffer; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hBuffer; +#endif IMG_UINT32 ui32SwapInterval; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hPrivateTag; +#else IMG_HANDLE hPrivateTag; +#endif IMG_UINT32 ui32ClipRectCount; IMG_RECT sClipRect[PVRSRV_MAX_DC_CLIP_RECTS]; } PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER; - typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; + IMG_SID hSwapChain; +#else IMG_HANDLE hDeviceKM; IMG_HANDLE hSwapChain; +#endif } PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM; - typedef struct PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE_TAG { IMG_UINT32 ui32BridgeFlags; IMG_UINT32 ui32DeviceID; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - +#endif + } PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE; - typedef struct PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif } PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE; - typedef struct PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO_TAG { PVRSRV_ERROR eError; @@ -1017,26 +1225,31 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO_TAG } PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO; - typedef struct PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER_TAG { - IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; - IMG_UINT32 ui32BufferIndex; +#endif + IMG_UINT32 ui32BufferIndex; } PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER; - typedef struct PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hBuffer; +#else IMG_HANDLE hBuffer; +#endif } PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER; - typedef struct PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO_TAG { PVRSRV_ERROR eError; @@ -1046,42 +1259,54 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO_TAG } PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO; - typedef struct PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevMemContext; +#endif IMG_UINT32 ui32ClientHeapCount; PVRSRV_HEAP_INFO sHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; } PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT; - typedef struct PVRSRV_BRIDGE_OUT_CREATE_DEVMEMHEAP_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeap; +#else IMG_HANDLE hDevMemHeap; +#endif } PVRSRV_BRIDGE_OUT_CREATE_DEVMEMHEAP; - typedef struct PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; } PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM; - typedef struct PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMemInfo; +#else IMG_HANDLE hMemInfo; +#endif #if defined(SUPPORT_MEMINFO_IDS) IMG_UINT64 ui64Stamp; #endif @@ -1093,12 +1318,15 @@ typedef struct PVRSRV_BRIDGE_OUT_MAPMEMINFOTOUSER_TAG { PVRSRV_ERROR eError; IMG_PVOID pvLinAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMappingInfo; +#else IMG_HANDLE hMappingInfo; +#endif }PVRSRV_BRIDGE_OUT_MAPMEMINFOTOUSER; - typedef struct PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM_TAG { PVRSRV_ERROR eError; @@ -1113,7 +1341,7 @@ typedef struct PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM_TAG typedef struct PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA_TAG { PVRSRV_ERROR eError; - + IMG_UINT32 ui32MMapOffset; @@ -1131,7 +1359,7 @@ typedef struct PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA_TAG typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA_TAG { PVRSRV_ERROR eError; - + IMG_BOOL bMUnmap; @@ -1141,7 +1369,6 @@ typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA_TAG IMG_UINT32 ui32RealByteSize; } PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA; - typedef struct PVRSRV_BRIDGE_IN_GET_MISC_INFO_TAG { IMG_UINT32 ui32BridgeFlags; @@ -1150,7 +1377,6 @@ typedef struct PVRSRV_BRIDGE_IN_GET_MISC_INFO_TAG }PVRSRV_BRIDGE_IN_GET_MISC_INFO; - typedef struct PVRSRV_BRIDGE_OUT_GET_MISC_INFO_TAG { PVRSRV_ERROR eError; @@ -1159,7 +1385,6 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_MISC_INFO_TAG }PVRSRV_BRIDGE_OUT_GET_MISC_INFO; - typedef struct PVRSRV_BRIDGE_IN_RELEASE_MISC_INFO_TAG { IMG_UINT32 ui32BridgeFlags; @@ -1168,7 +1393,6 @@ typedef struct PVRSRV_BRIDGE_IN_RELEASE_MISC_INFO_TAG }PVRSRV_BRIDGE_IN_RELEASE_MISC_INFO; - typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MISC_INFO_TAG { PVRSRV_ERROR eError; @@ -1177,8 +1401,6 @@ typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MISC_INFO_TAG }PVRSRV_BRIDGE_OUT_RELEASE_MISC_INFO; - - typedef struct PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING_TAG { PVRSRV_ERROR eError; @@ -1186,8 +1408,7 @@ typedef struct PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING_TAG } PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING; - -typedef struct PVRSRV_BRIDGE_IN_GET_FB_STATS_TAG +typedef struct PVRSRV_BRIDGE_IN_GET_FB_STATS_TAG { IMG_UINT32 ui32BridgeFlags; IMG_SIZE_T ui32Total; @@ -1196,18 +1417,20 @@ typedef struct PVRSRV_BRIDGE_IN_GET_FB_STATS_TAG } PVRSRV_BRIDGE_IN_GET_FB_STATS; - typedef struct PVRSRV_BRIDGE_IN_MAPPHYSTOUSERSPACE_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_SYS_PHYADDR sSysPhysAddr; IMG_UINT32 uiSizeInBytes; } PVRSRV_BRIDGE_IN_MAPPHYSTOUSERSPACE; - typedef struct PVRSRV_BRIDGE_OUT_MAPPHYSTOUSERSPACE_TAG { IMG_PVOID pvUserAddr; @@ -1217,18 +1440,20 @@ typedef struct PVRSRV_BRIDGE_OUT_MAPPHYSTOUSERSPACE_TAG } PVRSRV_BRIDGE_OUT_MAPPHYSTOUSERSPACE; - typedef struct PVRSRV_BRIDGE_IN_UNMAPPHYSTOUSERSPACE_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_PVOID pvUserAddr; IMG_PVOID pvProcess; } PVRSRV_BRIDGE_IN_UNMAPPHYSTOUSERSPACE; - typedef struct PVRSRV_BRIDGE_OUT_GETPHYSTOUSERSPACEMAP_TAG { IMG_PVOID *ppvTbl; @@ -1237,7 +1462,7 @@ typedef struct PVRSRV_BRIDGE_OUT_GETPHYSTOUSERSPACEMAP_TAG } PVRSRV_BRIDGE_OUT_GETPHYSTOUSERSPACEMAP; - +#if !defined (SUPPORT_SID_INTERFACE) typedef struct PVRSRV_BRIDGE_IN_REGISTER_SIM_PROCESS_TAG { IMG_UINT32 ui32BridgeFlags; @@ -1275,6 +1500,7 @@ typedef struct PVRSRV_BRIDGE_IN_PROCESS_SIMISR_EVENT_TAG PVRSRV_ERROR eError; } PVRSRV_BRIDGE_IN_PROCESS_SIMISR_EVENT; +#endif typedef struct PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT_TAG { @@ -1292,16 +1518,24 @@ typedef struct PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM_TAG typedef struct PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM_TAG { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; }PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM; typedef struct PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM_TAG { - IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; + IMG_SID hMappingInfo; +#else + IMG_UINT32 ui32BridgeFlags; PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; +#endif + PVRSRV_CLIENT_MEM_INFO sClientMemInfo; }PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM; typedef struct PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM_TAG @@ -1312,14 +1546,22 @@ typedef struct PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM_TAG typedef struct PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hKernelMemInfo; +#endif }PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM; typedef struct PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM_TAG { PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; + PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif PVRSRV_ERROR eError; }PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM; @@ -1337,7 +1579,11 @@ typedef struct PVRSRV_BRIDGE_OUT_UNMAP_MEMINFO_MEM_TAG typedef struct PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevMemContext; +#endif }PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR; typedef struct PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR_TAG @@ -1349,7 +1595,11 @@ typedef struct PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR_TAG typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAI_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hOSEventKM; +#else IMG_HANDLE hOSEventKM; +#endif } PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAIT; typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN_TAG @@ -1359,35 +1609,56 @@ typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN_TAG typedef struct PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN_TAG { +#if defined (SUPPORT_SID_INTERFACE) + IMG_UINT32 hOSEvent; +#else IMG_HANDLE hOSEvent; +#endif PVRSRV_ERROR eError; } PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN; typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE_TAG { PVRSRV_EVENTOBJECT sEventObject; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hOSEventKM; +#else IMG_HANDLE hOSEventKM; +#endif } PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE; typedef struct PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj; +#else IMG_HANDLE hKernelSyncInfoModObj; +#endif } PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ; typedef struct PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj; +#else IMG_HANDLE hKernelSyncInfoModObj; +#endif } PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ; typedef struct PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj; + IMG_SID hKernelSyncInfo; +#else IMG_HANDLE hKernelSyncInfoModObj; IMG_HANDLE hKernelSyncInfo; +#endif IMG_UINT32 ui32ModifyFlags; } PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS; @@ -1395,7 +1666,11 @@ typedef struct PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS_TAG typedef struct PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj; +#else IMG_HANDLE hKernelSyncInfoModObj; +#endif } PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS; typedef struct PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS_TAG @@ -1408,16 +1683,56 @@ typedef struct PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS_TAG } PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS; +typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN_TAG +{ + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else + IMG_HANDLE hKernelSyncInfo; +#endif + +} PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN; + +typedef struct PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN_TAG +{ + PVRSRV_ERROR eError; + + IMG_UINT32 ui32ReadOpsPending; + IMG_UINT32 ui32WriteOpsPending; + +} PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN; + +typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN_TAG +{ + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else + IMG_HANDLE hKernelSyncInfo; +#endif + IMG_UINT32 ui32ReadOpsPendingSnapshot; + IMG_UINT32 ui32WriteOpsPendingSnapshot; +} PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN; + typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfoModObj; +#else IMG_HANDLE hKernelSyncInfoModObj; +#endif } PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ; typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else IMG_HANDLE hKernelSyncInfo; +#endif IMG_UINT32 ui32Delta; } PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA; @@ -1425,23 +1740,41 @@ typedef struct PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif } PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO; typedef struct PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else IMG_HANDLE hKernelSyncInfo; +#endif } PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO; typedef struct PVRSRV_BRIDGE_IN_FREE_SYNC_INFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelSyncInfo; +#else IMG_HANDLE hKernelSyncInfo; +#endif } PVRSRV_BRIDGE_IN_FREE_SYNC_INFO; +typedef struct PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS_TAG +{ + IMG_SID hKernelMemInfo; + IMG_UINT32 ui32Attribs; +} PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS; + #if defined (__cplusplus) } diff --git a/services4/include/pvr_bridge_km.h b/services4/include/pvr_bridge_km.h index d5592c2..1175b76 100644 --- a/services4/include/pvr_bridge_km.h +++ b/services4/include/pvr_bridge_km.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -57,14 +57,22 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueue IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo); +#else PVRSRV_HEAP_INFO *psHeapInfo); +#endif IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCookie, PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_HANDLE *phDevMemContext, IMG_UINT32 *pui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo, +#else PVRSRV_HEAP_INFO *psHeapInfo, +#endif IMG_BOOL *pbCreated, IMG_BOOL *pbShared); @@ -79,7 +87,11 @@ IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie, IMG_HANDLE hDevMemContext, IMG_UINT32 *pui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo, +#else PVRSRV_HEAP_INFO *psHeapInfo, +#endif IMG_BOOL *pbShared ); @@ -97,7 +109,7 @@ PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE hDevCookie, #if defined(PVRSRV_LOG_MEMORY_ALLOCS) #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \ - ", " #alignment "," #memInfo "): " logStr " (size = 0x%;x)", size)),\ + ", " #alignment "," #memInfo "): " logStr " (size = 0x%x)", size)),\ _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo)) #else #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ @@ -247,6 +259,10 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * PVRSRV_KERNEL_MEM_INFO **ppsMemInfo, IMG_HANDLE *phOSMapInfo); +IMG_EXPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVChangeDeviceMemoryAttributesKM(IMG_HANDLE hKernelMemInfo, + IMG_UINT32 ui32Attribs); + IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo); @@ -263,7 +279,11 @@ IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo); IMG_IMPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo); +#else PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo); +#endif IMG_IMPORT PVRSRV_ERROR PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, diff --git a/services4/include/pvrmmap.h b/services4/include/pvrmmap.h index 4404d88..242d953 100644 --- a/services4/include/pvrmmap.h +++ b/services4/include/pvrmmap.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,10 +27,18 @@ #ifndef __PVRMMAP_H__ #define __PVRMMAP_H__ +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRPMapKMem(IMG_HANDLE hModule, IMG_VOID **ppvLinAddr, IMG_VOID *pvLinAddrKM, IMG_SID *phMappingInfo, IMG_SID hMHandle); +#else PVRSRV_ERROR PVRPMapKMem(IMG_HANDLE hModule, IMG_VOID **ppvLinAddr, IMG_VOID *pvLinAddrKM, IMG_HANDLE *phMappingInfo, IMG_HANDLE hMHandle); +#endif +#if defined (SUPPORT_SID_INTERFACE) +IMG_BOOL PVRUnMapKMem(IMG_HANDLE hModule, IMG_SID hMappingInfo, IMG_SID hMHandle); +#else IMG_BOOL PVRUnMapKMem(IMG_HANDLE hModule, IMG_HANDLE hMappingInfo, IMG_HANDLE hMHandle); +#endif #endif diff --git a/services4/include/pvrsrv_errors.h b/services4/include/pvrsrv_errors.h index 56c7184..5474984 100644 --- a/services4/include/pvrsrv_errors.h +++ b/services4/include/pvrsrv_errors.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -88,6 +88,8 @@ extern "C" { case PVRSRV_ERROR_REGISTER_BASE_NOT_SET: return "PVRSRV_ERROR_REGISTER_BASE_NOT_SET"; + case PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE: return "PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE"; + case PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM: return "PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM"; case PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY: return "PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY"; case PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC: return "PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC"; diff --git a/services4/include/servicesint.h b/services4/include/servicesint.h index bc5aeb8..813a391 100644 --- a/services4/include/servicesint.h +++ b/services4/include/servicesint.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -68,7 +68,7 @@ typedef struct _PVRSRV_KERNEL_MEM_INFO_ IMG_UINT32 ui32Flags; - IMG_SIZE_T ui32AllocSize; + IMG_SIZE_T uAllocSize; PVRSRV_MEMBLK sMemBlk; @@ -97,6 +97,31 @@ typedef struct _PVRSRV_KERNEL_MEM_INFO_ struct _PVRSRV_KERNEL_SYNC_INFO_ *psKernelSyncInfo; PVRSRV_MEMTYPE memType; + + + + + + + + + struct { + + + IMG_BOOL bInUse; + + + IMG_HANDLE hDevCookieInt; + + + IMG_UINT32 ui32ShareIndex; + + + + IMG_UINT32 ui32OrigReqAttribs; + IMG_UINT32 ui32OrigReqSize; + IMG_UINT32 ui32OrigReqAlignment; + } sShareMemWorkaround; } PVRSRV_KERNEL_MEM_INFO; @@ -120,6 +145,9 @@ typedef struct _PVRSRV_KERNEL_SYNC_INFO_ IMG_HANDLE hResItem; + + + IMG_UINT32 ui32UID; } PVRSRV_KERNEL_SYNC_INFO; typedef struct _PVRSRV_DEVICE_SYNC_OBJECT_ @@ -141,14 +169,14 @@ typedef struct _PVRSRV_SYNC_OBJECT typedef struct _PVRSRV_COMMAND { - IMG_SIZE_T ui32CmdSize; + IMG_SIZE_T uCmdSize; IMG_UINT32 ui32DevIndex; IMG_UINT32 CommandType; IMG_UINT32 ui32DstSyncCount; IMG_UINT32 ui32SrcSyncCount; PVRSRV_SYNC_OBJECT *psDstSync; PVRSRV_SYNC_OBJECT *psSrcSync; - IMG_SIZE_T ui32DataSize; + IMG_SIZE_T uDataSize; IMG_UINT32 ui32ProcessID; IMG_VOID *pvData; }PVRSRV_COMMAND, *PPVRSRV_COMMAND; @@ -171,6 +199,75 @@ typedef struct _PVRSRV_QUEUE_INFO_ struct _PVRSRV_QUEUE_INFO_ *psNextKM; }PVRSRV_QUEUE_INFO; + +typedef struct _PVRSRV_HEAP_INFO_KM_ +{ + IMG_UINT32 ui32HeapID; + IMG_DEV_VIRTADDR sDevVAddrBase; + + IMG_HANDLE hDevMemHeap; + IMG_UINT32 ui32HeapByteSize; + IMG_UINT32 ui32Attribs; + IMG_UINT32 ui32XTileStride; +}PVRSRV_HEAP_INFO_KM; + + +typedef struct _PVRSRV_EVENTOBJECT_KM_ +{ + + IMG_CHAR szName[EVENTOBJNAME_MAXLENGTH]; + + IMG_HANDLE hOSEventKM; + +} PVRSRV_EVENTOBJECT_KM; + + +typedef struct _PVRSRV_MISC_INFO_KM_ +{ + IMG_UINT32 ui32StateRequest; + IMG_UINT32 ui32StatePresent; + + + IMG_VOID *pvSOCTimerRegisterKM; + IMG_VOID *pvSOCTimerRegisterUM; + IMG_HANDLE hSOCTimerRegisterOSMemHandle; + IMG_HANDLE hSOCTimerRegisterMappingInfo; + + + IMG_VOID *pvSOCClockGateRegs; + IMG_UINT32 ui32SOCClockGateRegsSize; + + + IMG_CHAR *pszMemoryStr; + IMG_UINT32 ui32MemoryStrLen; + + + PVRSRV_EVENTOBJECT_KM sGlobalEventObject; + IMG_HANDLE hOSGlobalEvent; + + + IMG_UINT32 aui32DDKVersion[4]; + + + struct + { + + IMG_BOOL bDeferOp; + + + PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType; + + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; + + + IMG_VOID *pvBaseVAddr; + + + IMG_UINT32 ui32Length; + } sCacheOpCtl; +} PVRSRV_MISC_INFO_KM; + + typedef PVRSRV_ERROR (*PFN_INSERT_CMD) (PVRSRV_QUEUE_INFO*, PVRSRV_COMMAND**, IMG_UINT32, @@ -190,13 +287,17 @@ typedef struct PVRSRV_DEVICECLASS_BUFFER_TAG IMG_HANDLE hExtDevice; IMG_HANDLE hExtBuffer; PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - + IMG_UINT32 ui32MemMapRefCount; } PVRSRV_DEVICECLASS_BUFFER; typedef struct PVRSRV_CLIENT_DEVICECLASS_INFO_TAG { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDeviceKM; +#else IMG_HANDLE hDeviceKM; +#endif IMG_HANDLE hServices; } PVRSRV_CLIENT_DEVICECLASS_INFO; @@ -252,7 +353,11 @@ PVRSRV_ERROR PVRSRVQueueCommand(IMG_HANDLE hQueueInfo, IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMMUContextPDDevPAddr(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemContext, +#else IMG_HANDLE hDevMemContext, +#endif IMG_DEV_PHYADDR *sPDDevPAddr); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV @@ -271,7 +376,11 @@ PVRSRVUnrefSharedSysMem(const PVRSRV_CONNECTION *psConnection, IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVMapMemInfoMem(const PVRSRV_CONNECTION *psConnection, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo, +#else IMG_HANDLE hKernelMemInfo, +#endif PVRSRV_CLIENT_MEM_INFO **ppsClientMemInfo); diff --git a/services4/include/sgx_bridge.h b/services4/include/sgx_bridge.h index 10e5919..204189c 100644 --- a/services4/include/sgx_bridge.h +++ b/services4/include/sgx_bridge.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,7 +27,11 @@ #if !defined(__SGX_BRIDGE_H__) #define __SGX_BRIDGE_H__ +#if defined (SUPPORT_SID_INTERFACE) +#include "sgxapi.h" +#else #include "sgxapi_km.h" +#endif #include "sgxinfo.h" #include "pvr_bridge.h" @@ -106,8 +110,13 @@ typedef struct PVRSRV_BRIDGE_OUT_GETPHYSPAGEADDR typedef struct PVRSRV_BRIDGE_IN_SGX_GETMMU_PDADDR_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hDevMemContext; +#endif }PVRSRV_BRIDGE_IN_SGX_GETMMU_PDADDR; @@ -121,7 +130,11 @@ typedef struct PVRSRV_BRIDGE_OUT_SGX_GETMMU_PDADDR_TAG typedef struct PVRSRV_BRIDGE_IN_GETCLIENTINFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_GETCLIENTINFO; @@ -135,7 +148,11 @@ typedef struct PVRSRV_BRIDGE_OUT_GETINTERNALDEVINFO_TAG typedef struct PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO; @@ -148,8 +165,12 @@ typedef struct PVRSRV_BRIDGE_OUT_GETCLIENTINFO_TAG typedef struct PVRSRV_BRIDGE_IN_RELEASECLIENTINFO_TAG { - IMG_UINT32 ui32BridgeFlags; - IMG_HANDLE hDevCookie; + IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else + IMG_HANDLE hDevCookie; +#endif SGX_CLIENT_INFO sClientInfo; }PVRSRV_BRIDGE_IN_RELEASECLIENTINFO; @@ -157,14 +178,22 @@ typedef struct PVRSRV_BRIDGE_IN_RELEASECLIENTINFO_TAG typedef struct PVRSRV_BRIDGE_IN_ISPBREAKPOLL_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_ISPBREAKPOLL; typedef struct PVRSRV_BRIDGE_IN_DOKICK_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif SGX_CCB_KICK sCCBKick; }PVRSRV_BRIDGE_IN_DOKICK; @@ -172,7 +201,11 @@ typedef struct PVRSRV_BRIDGE_IN_DOKICK_TAG typedef struct PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES; @@ -181,7 +214,11 @@ typedef struct PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES_TAG typedef struct PVRSRV_BRIDGE_IN_SUBMITTRANSFER_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif PVRSRV_TRANSFER_SGX_KICK sKick; }PVRSRV_BRIDGE_IN_SUBMITTRANSFER; @@ -190,8 +227,12 @@ typedef struct PVRSRV_BRIDGE_IN_SUBMITTRANSFER_TAG typedef struct PVRSRV_BRIDGE_IN_SUBMIT2D_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - PVRSRV_2D_SGX_KICK sKick; +#endif + PVRSRV_2D_SGX_KICK sKick; } PVRSRV_BRIDGE_IN_SUBMIT2D; #endif #endif @@ -200,7 +241,11 @@ typedef struct PVRSRV_BRIDGE_IN_SUBMIT2D_TAG typedef struct PVRSRV_BRIDGE_IN_READREGDWORD_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_PCHAR pszKey; IMG_PCHAR pszValue; }PVRSRV_BRIDGE_IN_READREGDWORD; @@ -216,14 +261,22 @@ typedef struct PVRSRV_BRIDGE_OUT_READREGDWORD_TAG typedef struct PVRSRV_BRIDGE_IN_SGXGETMISCINFO_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif SGX_MISC_INFO *psMiscInfo; }PVRSRV_BRIDGE_IN_SGXGETMISCINFO; typedef struct PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif }PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT; typedef struct PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT_TAG @@ -235,16 +288,32 @@ typedef struct PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT_TAG typedef struct PVRSRV_BRIDGE_IN_SGXDEVINITPART2_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif SGX_BRIDGE_INIT_INFO sInitInfo; }PVRSRV_BRIDGE_IN_SGXDEVINITPART2; +typedef struct PVRSRV_BRIDGE_OUT_SGXDEVINITPART2_TAG +{ + PVRSRV_ERROR eError; + IMG_UINT32 ui32KMBuildOptions; + +}PVRSRV_BRIDGE_OUT_SGXDEVINITPART2; + typedef struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hKernSyncInfo; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hKernSyncInfo; +#endif IMG_BOOL bWaitForComplete; }PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE; @@ -254,13 +323,26 @@ typedef struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE_TAG typedef struct PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; - IMG_BOOL bLockOnFailure; +#endif + IMG_BOOL bLockOnFailure; IMG_UINT32 ui32TotalPBSize; }PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC; typedef struct PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC_TAG { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; + IMG_SID hSharedPBDesc; + IMG_SID hSharedPBDescKernelMemInfoHandle; + IMG_SID hHWPBDescKernelMemInfoHandle; + IMG_SID hBlockKernelMemInfoHandle; + IMG_SID hHWBlockKernelMemInfoHandle; + IMG_SID ahSharedPBDescSubKernelMemInfoHandles[PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS]; +#else IMG_HANDLE hKernelMemInfo; IMG_HANDLE hSharedPBDesc; IMG_HANDLE hSharedPBDescKernelMemInfoHandle; @@ -268,6 +350,7 @@ typedef struct PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC_TAG IMG_HANDLE hBlockKernelMemInfoHandle; IMG_HANDLE hHWBlockKernelMemInfoHandle; IMG_HANDLE ahSharedPBDescSubKernelMemInfoHandles[PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS]; +#endif IMG_UINT32 ui32SharedPBDescSubKernelMemInfoHandlesCount; PVRSRV_ERROR eError; }PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC; @@ -275,7 +358,11 @@ typedef struct PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC_TAG typedef struct PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSharedPBDesc; +#else IMG_HANDLE hSharedPBDesc; +#endif }PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC; typedef struct PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC_TAG @@ -287,20 +374,34 @@ typedef struct PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC_TAG typedef struct PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC_TAG { IMG_UINT32 ui32BridgeFlags; + IMG_UINT32 ui32TotalPBSize; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hSharedPBDescKernelMemInfo; + IMG_SID hHWPBDescKernelMemInfo; + IMG_SID hBlockKernelMemInfo; + IMG_SID hHWBlockKernelMemInfo; + IMG_SID *phKernelMemInfoHandles; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hSharedPBDescKernelMemInfo; IMG_HANDLE hHWPBDescKernelMemInfo; IMG_HANDLE hBlockKernelMemInfo; IMG_HANDLE hHWBlockKernelMemInfo; - IMG_UINT32 ui32TotalPBSize; IMG_HANDLE *phKernelMemInfoHandles; +#endif IMG_UINT32 ui32KernelMemInfoHandlesCount; + IMG_DEV_VIRTADDR sHWPBDescDevVAddr; }PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC; typedef struct PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hSharedPBDesc; +#else IMG_HANDLE hSharedPBDesc; +#endif }PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC; @@ -316,9 +417,15 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_BUFFER_ARRAY_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; + IMG_HANDLE hDevMemContext; +#endif IMG_UINT32 ui32DumpFrameNum; - IMG_BOOL bLastFrame; + IMG_BOOL bLastFrame; IMG_UINT32 *pui32Registers; IMG_UINT32 ui32NumRegisters; }PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS; @@ -326,7 +433,11 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMPCOUNTER_REGISTERS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_UINT32 ui32DumpFrameNum; IMG_BOOL bLastFrame; IMG_UINT32 *pui32Registers; @@ -336,7 +447,11 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMPCOUNTER_REGISTERS_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_UINT32 ui32DumpFrameNum; IMG_UINT32 ui32TAKickCount; IMG_BOOL bLastFrame; @@ -347,7 +462,13 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; + IMG_HANDLE hDevMemContext; +#endif IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; IMG_UINT32 ui32FileOffset; IMG_UINT32 ui32PDumpFlags; @@ -357,12 +478,19 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB_TAG typedef struct PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hDevMemContext; +#else IMG_HANDLE hDevCookie; +#endif IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; IMG_UINT32 ui32FileOffset; IMG_DEV_VIRTADDR sDevVAddr; IMG_UINT32 ui32Size; - IMG_UINT32 ui32DataMaster; +#if !defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE hDevMemContext; +#endif IMG_UINT32 ui32PDumpFlags; }PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM; @@ -372,47 +500,79 @@ typedef struct PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_RENDER_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_DEV_VIRTADDR sHWRenderContextDevVAddr; }PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_RENDER_CONTEXT; typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHWRenderContext; +#else IMG_HANDLE hHWRenderContext; +#endif }PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT; typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; + IMG_BOOL bForceCleanup; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hHWRenderContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hHWRenderContext; +#endif }PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT; typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_TRANSFER_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; }PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_TRANSFER_CONTEXT; typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHWTransferContext; +#else IMG_HANDLE hHWTransferContext; +#endif }PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT; typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; + IMG_BOOL bForceCleanup; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hHWTransferContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hHWTransferContext; +#endif }PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT; typedef struct PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr; }PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET; @@ -421,21 +581,35 @@ typedef struct PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET_TAG typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_2D_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_DEV_VIRTADDR sHW2DContextDevVAddr; }PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_2D_CONTEXT; typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT_TAG { PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHW2DContext; +#else IMG_HANDLE hHW2DContext; +#endif }PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT; typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT_TAG { IMG_UINT32 ui32BridgeFlags; + IMG_BOOL bForceCleanup; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; + IMG_SID hHW2DContext; +#else IMG_HANDLE hDevCookie; IMG_HANDLE hHW2DContext; +#endif }PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT; #define SGX2D_MAX_BLT_CMD_SIZ 256 @@ -445,7 +619,11 @@ typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT_TAG typedef struct PVRSRV_BRIDGE_IN_SGX_READ_HWPERF_CB_TAG { IMG_UINT32 ui32BridgeFlags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevCookie; +#else IMG_HANDLE hDevCookie; +#endif IMG_UINT32 ui32ArraySize; PVRSRV_SGX_HWPERF_CB_ENTRY *psHWPerfCBData; } PVRSRV_BRIDGE_IN_SGX_READ_HWPERF_CB; diff --git a/services4/include/sgx_mkif_km.h b/services4/include/sgx_mkif_km.h index 8029321..d5cffdb 100644 --- a/services4/include/sgx_mkif_km.h +++ b/services4/include/sgx_mkif_km.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -32,29 +32,25 @@ #include "sgxapi_km.h" +#if !defined (SGX_MP_CORE_SELECT) #if defined(SGX_FEATURE_MP) - #define SGX_REG_BANK_SHIFT (12) - #define SGX_REG_BANK_SIZE (0x4000) - #if defined(SGX541) - #define SGX_REG_BANK_BASE_INDEX (1) - #define SGX_REG_BANK_MASTER_INDEX (SGX_REG_BANK_BASE_INDEX + SGX_FEATURE_MP_CORE_COUNT) - #else - #define SGX_REG_BANK_BASE_INDEX (2) - #define SGX_REG_BANK_MASTER_INDEX (1) - #endif + #define SGX_REG_BANK_SHIFT (14) + #define SGX_REG_BANK_SIZE (1 << SGX_REG_BANK_SHIFT) + #define SGX_REG_BANK_BASE_INDEX (2) + #define SGX_REG_BANK_MASTER_INDEX (1) #define SGX_MP_CORE_SELECT(x,i) (x + ((i + SGX_REG_BANK_BASE_INDEX) * SGX_REG_BANK_SIZE)) #define SGX_MP_MASTER_SELECT(x) (x + (SGX_REG_BANK_MASTER_INDEX * SGX_REG_BANK_SIZE)) #else #define SGX_MP_CORE_SELECT(x,i) (x) #endif +#endif typedef struct _SGXMKIF_COMMAND_ { IMG_UINT32 ui32ServiceAddress; IMG_UINT32 ui32CacheControl; - IMG_UINT32 ui32Data[4]; - IMG_UINT32 ui32Padding[2]; + IMG_UINT32 ui32Data[6]; } SGXMKIF_COMMAND; @@ -99,6 +95,7 @@ typedef struct _SGXMKIF_HOST_CTL_ IMG_UINT32 ui32TimeWraps; IMG_UINT32 ui32HostClock; + IMG_UINT32 ui32AssertFail; #if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) IMG_UINT32 aui32PerfGroup[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; @@ -106,6 +103,12 @@ typedef struct _SGXMKIF_HOST_CTL_ #else IMG_UINT32 ui32PerfGroup; #endif + +#if defined(FIX_HW_BRN_31939) + IMG_UINT32 ui32BRN31939Mem; +#endif + + IMG_UINT32 ui32OpenCLDelayCount; } SGXMKIF_HOST_CTL; #define SGXMKIF_CMDTA_CTRLFLAGS_READY 0x00000001 @@ -173,13 +176,6 @@ typedef struct _SGXMKIF_TRANSFERCMD_SHARED_ IMG_UINT32 ui32NumDstSyncs; PVRSRV_DEVICE_SYNC_OBJECT asDstSyncs[SGX_MAX_DST_SYNCS]; - IMG_UINT32 ui32DstReadOpPendingVal; - IMG_DEV_VIRTADDR sDstReadOpsCompleteDevAddr; - - IMG_UINT32 ui32DstWriteOpPendingVal; - IMG_DEV_VIRTADDR sDstWriteOpsCompleteDevAddr; - - IMG_UINT32 ui32TASyncWriteOpsPendingVal; IMG_DEV_VIRTADDR sTASyncWriteOpsCompleteDevVAddr; IMG_UINT32 ui32TASyncReadOpsPendingVal; @@ -250,18 +246,21 @@ typedef struct _SGXMKIF_HWDEVICE_SYNC_LIST_ #endif -#define PVRSRV_CLEANUPCMD_RT 0x1 -#define PVRSRV_CLEANUPCMD_RC 0x2 -#define PVRSRV_CLEANUPCMD_TC 0x3 -#define PVRSRV_CLEANUPCMD_2DC 0x4 -#define PVRSRV_CLEANUPCMD_PB 0x5 +#define PVRSRV_CLEANUPCMD_RT 0x1U +#define PVRSRV_CLEANUPCMD_RC 0x2U +#define PVRSRV_CLEANUPCMD_TC 0x3U +#define PVRSRV_CLEANUPCMD_2DC 0x4U +#define PVRSRV_CLEANUPCMD_PB 0x5U -#define PVRSRV_POWERCMD_POWEROFF 0x1 -#define PVRSRV_POWERCMD_IDLE 0x2 -#define PVRSRV_POWERCMD_RESUME 0x3 +#define PVRSRV_POWERCMD_POWEROFF 0x1U +#define PVRSRV_POWERCMD_IDLE 0x2U +#define PVRSRV_POWERCMD_RESUME 0x3U +#define PVRSRV_CTXSUSPCMD_SUSPEND 0x1U +#define PVRSRV_CTXSUSPCMD_RESUME 0x2U -#if defined(SGX_FEATURE_BIF_NUM_DIRLISTS) + +#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) #define SGX_BIF_DIR_LIST_INDEX_EDM (SGX_FEATURE_BIF_NUM_DIRLISTS - 1) #else #define SGX_BIF_DIR_LIST_INDEX_EDM (0) @@ -323,12 +322,16 @@ typedef struct _PVRSRV_SGX_MISCINFO_INFO typedef struct _SGXMKIF_HWPERF_CB_ENTRY_ { IMG_UINT32 ui32FrameNo; + IMG_UINT32 ui32PID; + IMG_UINT32 ui32RTData; IMG_UINT32 ui32Type; IMG_UINT32 ui32Ordinal; IMG_UINT32 ui32Info; IMG_UINT32 ui32TimeWraps; IMG_UINT32 ui32Time; - IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; + + IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; + IMG_UINT32 ui32MiscCounters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS]; } SGXMKIF_HWPERF_CB_ENTRY; typedef struct _SGXMKIF_HWPERF_CB_ diff --git a/services4/include/sgxinfo.h b/services4/include/sgxinfo.h index 2deaa7a..c32dc31 100644 --- a/services4/include/sgxinfo.h +++ b/services4/include/sgxinfo.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -30,12 +30,14 @@ #include "sgxscript.h" #include "servicesint.h" #include "services.h" +#if !defined (SUPPORT_SID_INTERFACE) #include "sgxapi_km.h" +#endif #include "sgx_mkif_km.h" #define SGX_MAX_DEV_DATA 24 -#define SGX_MAX_INIT_MEM_HANDLES 16 +#define SGX_MAX_INIT_MEM_HANDLES 18 typedef struct _SGX_BRIDGE_INFO_FOR_SRVINIT @@ -51,12 +53,14 @@ typedef enum _SGXMKIF_CMD_TYPE_ SGXMKIF_CMD_TRANSFER = 1, SGXMKIF_CMD_2D = 2, SGXMKIF_CMD_POWER = 3, - SGXMKIF_CMD_CLEANUP = 4, - SGXMKIF_CMD_GETMISCINFO = 5, - SGXMKIF_CMD_PROCESS_QUEUES = 6, - SGXMKIF_CMD_DATABREAKPOINT = 7, - SGXMKIF_CMD_SETHWPERFSTATUS = 8, - SGXMKIF_CMD_MAX = 9, + SGXMKIF_CMD_CONTEXTSUSPEND = 4, + SGXMKIF_CMD_CLEANUP = 5, + SGXMKIF_CMD_GETMISCINFO = 6, + SGXMKIF_CMD_PROCESS_QUEUES = 7, + SGXMKIF_CMD_DATABREAKPOINT = 8, + SGXMKIF_CMD_SETHWPERFSTATUS = 9, + SGXMKIF_CMD_FLUSHPDCACHE = 10, + SGXMKIF_CMD_MAX = 11, SGXMKIF_CMD_FORCE_I32 = -1, @@ -65,12 +69,27 @@ typedef enum _SGXMKIF_CMD_TYPE_ typedef struct _SGX_BRIDGE_INIT_INFO_ { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelCCBMemInfo; + IMG_SID hKernelCCBCtlMemInfo; + IMG_SID hKernelCCBEventKickerMemInfo; + IMG_SID hKernelSGXHostCtlMemInfo; + IMG_SID hKernelSGXTA3DCtlMemInfo; +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + IMG_SID hKernelSGXPTLAWriteBackMemInfo; +#endif + IMG_SID hKernelSGXMiscMemInfo; +#else IMG_HANDLE hKernelCCBMemInfo; IMG_HANDLE hKernelCCBCtlMemInfo; IMG_HANDLE hKernelCCBEventKickerMemInfo; IMG_HANDLE hKernelSGXHostCtlMemInfo; IMG_HANDLE hKernelSGXTA3DCtlMemInfo; +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + IMG_HANDLE hKernelSGXPTLAWriteBackMemInfo; +#endif IMG_HANDLE hKernelSGXMiscMemInfo; +#endif IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX]; @@ -80,47 +99,92 @@ typedef struct _SGX_BRIDGE_INIT_INFO_ SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; #if defined(SGX_SUPPORT_HWPROFILING) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelHWProfilingMemInfo; +#else IMG_HANDLE hKernelHWProfilingMemInfo; #endif +#endif #if defined(SUPPORT_SGX_HWPERF) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelHWPerfCBMemInfo; +#else IMG_HANDLE hKernelHWPerfCBMemInfo; #endif +#endif +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelTASigBufferMemInfo; + IMG_SID hKernel3DSigBufferMemInfo; +#else IMG_HANDLE hKernelTASigBufferMemInfo; IMG_HANDLE hKernel3DSigBufferMemInfo; +#endif #if defined(FIX_HW_BRN_29702) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelCFIMemInfo; +#else IMG_HANDLE hKernelCFIMemInfo; #endif +#endif #if defined(FIX_HW_BRN_29823) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelDummyTermStreamMemInfo; +#else IMG_HANDLE hKernelDummyTermStreamMemInfo; #endif +#endif #if defined(FIX_HW_BRN_31542) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelClearClipWAVDMStreamMemInfo; + IMG_SID hKernelClearClipWAIndexStreamMemInfo; + IMG_SID hKernelClearClipWAPDSMemInfo; + IMG_SID hKernelClearClipWAUSEMemInfo; + IMG_SID hKernelClearClipWAParamMemInfo; + IMG_SID hKernelClearClipWAPMPTMemInfo; + IMG_SID hKernelClearClipWATPCMemInfo; + IMG_SID hKernelClearClipWAPSGRgnHdrMemInfo; +#else IMG_HANDLE hKernelClearClipWAVDMStreamMemInfo; IMG_HANDLE hKernelClearClipWAIndexStreamMemInfo; IMG_HANDLE hKernelClearClipWAPDSMemInfo; IMG_HANDLE hKernelClearClipWAUSEMemInfo; IMG_HANDLE hKernelClearClipWAParamMemInfo; IMG_HANDLE hKernelClearClipWAPMPTMemInfo; - IMG_HANDLE hKernelClearClipWADPMLSSMemInfo; IMG_HANDLE hKernelClearClipWATPCMemInfo; IMG_HANDLE hKernelClearClipWAPSGRgnHdrMemInfo; - IMG_HANDLE hKernelClearClipWAPartiPIMMemInfo; +#endif #endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) + IMG_HANDLE hKernelVDMSnapShotBufferMemInfo; + IMG_HANDLE hKernelVDMCtrlStreamBufferMemInfo; +#endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) + IMG_HANDLE hKernelVDMStateUpdateBufferMemInfo; +#endif #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelEDMStatusBufferMemInfo; +#else IMG_HANDLE hKernelEDMStatusBufferMemInfo; #endif +#endif #if defined(SGX_FEATURE_OVERLAPPED_SPM) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelTmpRgnHeaderMemInfo; +#else IMG_HANDLE hKernelTmpRgnHeaderMemInfo; #endif -#if defined(SGX_FEATURE_SPM_MODE_0) - IMG_HANDLE hKernelTmpDPMStateMemInfo; #endif IMG_UINT32 ui32EDMTaskReg0; IMG_UINT32 ui32EDMTaskReg1; + IMG_UINT32 ui32ClkGateCtl; + IMG_UINT32 ui32ClkGateCtl2; IMG_UINT32 ui32ClkGateStatusReg; IMG_UINT32 ui32ClkGateStatusMask; #if defined(SGX_FEATURE_MP) @@ -133,7 +197,11 @@ typedef struct _SGX_BRIDGE_INIT_INFO_ IMG_UINT32 ui32CacheControl; IMG_UINT32 asInitDevData[SGX_MAX_DEV_DATA]; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; +#else IMG_HANDLE asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; +#endif } SGX_BRIDGE_INIT_INFO; @@ -142,7 +210,11 @@ typedef struct _SGX_DEVICE_SYNC_LIST_ { PSGXMKIF_HWDEVICE_SYNC_LIST psHWDeviceSyncList; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelHWSyncListMemInfo; +#else IMG_HANDLE hKernelHWSyncListMemInfo; +#endif PVRSRV_CLIENT_MEM_INFO *psHWDeviceSyncListClientMemInfo; PVRSRV_CLIENT_MEM_INFO *psAccessResourceClientMemInfo; @@ -152,27 +224,47 @@ typedef struct _SGX_DEVICE_SYNC_LIST_ IMG_UINT32 ui32NumSyncObjects; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahSyncHandles[1]; +#else IMG_HANDLE ahSyncHandles[1]; +#endif } SGX_DEVICE_SYNC_LIST, *PSGX_DEVICE_SYNC_LIST; typedef struct _SGX_INTERNEL_STATUS_UPDATE_ { CTL_STATUS sCtlStatus; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hKernelMemInfo; +#endif } SGX_INTERNEL_STATUS_UPDATE; typedef struct _SGX_CCB_KICK_ { SGXMKIF_COMMAND sCommand; - IMG_HANDLE hCCBKernelMemInfo; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hCCBKernelMemInfo; +#else + IMG_HANDLE hCCBKernelMemInfo; +#endif IMG_UINT32 ui32NumDstSyncObjects; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelHWSyncListMemInfo; +#else IMG_HANDLE hKernelHWSyncListMemInfo; +#endif +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *pahDstSyncHandles; +#else IMG_HANDLE *pahDstSyncHandles; +#endif IMG_UINT32 ui32NumTAStatusVals; IMG_UINT32 ui32Num3DStatusVals; @@ -180,9 +272,14 @@ typedef struct _SGX_CCB_KICK_ #if defined(SUPPORT_SGX_NEW_STATUS_VALS) SGX_INTERNEL_STATUS_UPDATE asTAStatusUpdate[SGX_MAX_TA_STATUS_VALS]; SGX_INTERNEL_STATUS_UPDATE as3DStatusUpdate[SGX_MAX_3D_STATUS_VALS]; +#else +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; + IMG_SID ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; #else IMG_HANDLE ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; IMG_HANDLE ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; +#endif #endif IMG_BOOL bFirstKickOrResume; @@ -197,29 +294,53 @@ typedef struct _SGX_CCB_KICK_ #if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) IMG_UINT32 ui32NumTASrcSyncs; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; +#else IMG_HANDLE ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; +#endif IMG_UINT32 ui32NumTADstSyncs; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; +#else IMG_HANDLE ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; +#endif IMG_UINT32 ui32Num3DSrcSyncs; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; +#else IMG_HANDLE ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; +#endif #else IMG_UINT32 ui32NumSrcSyncs; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; +#else IMG_HANDLE ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; #endif +#endif IMG_BOOL bTADependency; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hTA3DSyncInfo; + + IMG_SID hTASyncInfo; + IMG_SID h3DSyncInfo; +#else IMG_HANDLE hTA3DSyncInfo; IMG_HANDLE hTASyncInfo; IMG_HANDLE h3DSyncInfo; +#endif #if defined(PDUMP) IMG_UINT32 ui32CCBDumpWOff; #endif #if defined(NO_HARDWARE) IMG_UINT32 ui32WriteOpsPendingVal; #endif + IMG_HANDLE hDevMemContext; } SGX_CCB_KICK; @@ -239,27 +360,56 @@ typedef struct _SGX_CLIENT_INFO_ typedef struct _SGX_INTERNAL_DEVINFO_ { IMG_UINT32 ui32Flags; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHostCtlKernelMemInfoHandle; +#else IMG_HANDLE hHostCtlKernelMemInfoHandle; +#endif IMG_BOOL bForcePTOff; } SGX_INTERNAL_DEVINFO; +typedef struct _SGX_INTERNAL_DEVINFO_KM_ +{ + IMG_UINT32 ui32Flags; + IMG_HANDLE hHostCtlKernelMemInfoHandle; + IMG_BOOL bForcePTOff; +} SGX_INTERNAL_DEVINFO_KM; + + #if defined(TRANSFER_QUEUE) typedef struct _PVRSRV_TRANSFER_SGX_KICK_ { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hCCBMemInfo; +#else IMG_HANDLE hCCBMemInfo; +#endif IMG_UINT32 ui32SharedCmdCCBOffset; IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hTASyncInfo; + IMG_SID h3DSyncInfo; +#else IMG_HANDLE hTASyncInfo; IMG_HANDLE h3DSyncInfo; +#endif IMG_UINT32 ui32NumSrcSync; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; +#else IMG_HANDLE ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; +#endif IMG_UINT32 ui32NumDstSync; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; +#else IMG_HANDLE ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; +#endif IMG_UINT32 ui32Flags; @@ -267,17 +417,34 @@ typedef struct _PVRSRV_TRANSFER_SGX_KICK_ #if defined(PDUMP) IMG_UINT32 ui32CCBDumpWOff; #endif + IMG_HANDLE hDevMemContext; } PVRSRV_TRANSFER_SGX_KICK, *PPVRSRV_TRANSFER_SGX_KICK; #if defined(SGX_FEATURE_2D_HARDWARE) typedef struct _PVRSRV_2D_SGX_KICK_ { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hCCBMemInfo; +#else IMG_HANDLE hCCBMemInfo; +#endif IMG_UINT32 ui32SharedCmdCCBOffset; IMG_DEV_VIRTADDR sHW2DContextDevVAddr; IMG_UINT32 ui32NumSrcSync; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; + + + IMG_SID hDstSyncInfo; + + + IMG_SID hTASyncInfo; + + + IMG_SID h3DSyncInfo; +#else IMG_HANDLE ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; @@ -288,11 +455,13 @@ typedef struct _PVRSRV_2D_SGX_KICK_ IMG_HANDLE h3DSyncInfo; +#endif IMG_UINT32 ui32PDumpFlags; #if defined(PDUMP) IMG_UINT32 ui32CCBDumpWOff; #endif + IMG_HANDLE hDevMemContext; } PVRSRV_2D_SGX_KICK, *PPVRSRV_2D_SGX_KICK; #endif #endif diff --git a/services4/srvkm/bridged/bridged_pvr_bridge.c b/services4/srvkm/bridged/bridged_pvr_bridge.c index b727ed9..6dfb859 100644 --- a/services4/srvkm/bridged/bridged_pvr_bridge.c +++ b/services4/srvkm/bridged/bridged_pvr_bridge.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -63,12 +63,12 @@ #include "env_data.h" -#if defined (__linux__) +#if defined (__linux__) || defined(__QNXNTO__) #include "mmap.h" #endif -#include "srvkm.h" +#include "srvkm.h" PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY g_BridgeDispatchTable[BRIDGE_DISPATCH_TABLE_ENTRY_COUNT]; @@ -76,7 +76,7 @@ PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY g_BridgeDispatchTable[BRIDGE_DISPATCH_TABLE_E PVRSRV_BRIDGE_GLOBAL_STATS g_BridgeGlobalStats; #endif -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) static IMG_BOOL abSharedDeviceMemHeap[PVRSRV_MAX_CLIENT_HEAPS]; static IMG_BOOL *pbSharedDeviceMemHeap = abSharedDeviceMemHeap; #else @@ -87,1502 +87,1972 @@ static IMG_BOOL *pbSharedDeviceMemHeap = (IMG_BOOL*)IMG_NULL; #if defined(DEBUG_BRIDGE_KM) PVRSRV_ERROR CopyFromUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size) + IMG_UINT32 ui32BridgeID, + IMG_VOID *pvDest, + IMG_VOID *pvSrc, + IMG_UINT32 ui32Size) { - g_BridgeDispatchTable[ui32BridgeID].ui32CopyFromUserTotalBytes+=ui32Size; - g_BridgeGlobalStats.ui32TotalCopyFromUserBytes+=ui32Size; - return OSCopyFromUser(pProcData, pvDest, pvSrc, ui32Size); + g_BridgeDispatchTable[ui32BridgeID].ui32CopyFromUserTotalBytes+=ui32Size; + g_BridgeGlobalStats.ui32TotalCopyFromUserBytes+=ui32Size; + return OSCopyFromUser(pProcData, pvDest, pvSrc, ui32Size); } PVRSRV_ERROR CopyToUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size) + IMG_UINT32 ui32BridgeID, + IMG_VOID *pvDest, + IMG_VOID *pvSrc, + IMG_UINT32 ui32Size) { - g_BridgeDispatchTable[ui32BridgeID].ui32CopyToUserTotalBytes+=ui32Size; - g_BridgeGlobalStats.ui32TotalCopyToUserBytes+=ui32Size; - return OSCopyToUser(pProcData, pvDest, pvSrc, ui32Size); + g_BridgeDispatchTable[ui32BridgeID].ui32CopyToUserTotalBytes+=ui32Size; + g_BridgeGlobalStats.ui32TotalCopyToUserBytes+=ui32Size; + return OSCopyToUser(pProcData, pvDest, pvSrc, ui32Size); } #endif static IMG_INT PVRSRVEnumerateDevicesBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_ENUMDEVICE *psEnumDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_OUT_ENUMDEVICE *psEnumDeviceOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DEVICES); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DEVICES); - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); - psEnumDeviceOUT->eError = - PVRSRVEnumerateDevicesKM(&psEnumDeviceOUT->ui32NumDevices, - psEnumDeviceOUT->asDeviceIdentifier); + psEnumDeviceOUT->eError = + PVRSRVEnumerateDevicesKM(&psEnumDeviceOUT->ui32NumDevices, + psEnumDeviceOUT->asDeviceIdentifier); - return 0; + return 0; } static IMG_INT PVRSRVAcquireDeviceDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ACQUIRE_DEVICEINFO *psAcquireDevInfoIN, - PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO *psAcquireDevInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ACQUIRE_DEVICEINFO *psAcquireDevInfoIN, + PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO *psAcquireDevInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO); - - psAcquireDevInfoOUT->eError = - PVRSRVAcquireDeviceDataKM(psAcquireDevInfoIN->uiDevIndex, - psAcquireDevInfoIN->eDeviceType, - &hDevCookieInt); - if(psAcquireDevInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psAcquireDevInfoOUT->eError = - PVRSRVAllocHandle(psPerProc->psHandleBase, - &psAcquireDevInfoOUT->hDevCookie, - hDevCookieInt, - PVRSRV_HANDLE_TYPE_DEV_NODE, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - return 0; + IMG_HANDLE hDevCookieInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO); + + psAcquireDevInfoOUT->eError = + PVRSRVAcquireDeviceDataKM(psAcquireDevInfoIN->uiDevIndex, + psAcquireDevInfoIN->eDeviceType, + &hDevCookieInt); + if(psAcquireDevInfoOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psAcquireDevInfoOUT->eError = + PVRSRVAllocHandle(psPerProc->psHandleBase, + &psAcquireDevInfoOUT->hDevCookie, + hDevCookieInt, + PVRSRV_HANDLE_TYPE_DEV_NODE, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); + + return 0; } static IMG_INT PVRSRVCreateDeviceMemContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT *psCreateDevMemContextIN, - PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT *psCreateDevMemContextOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT *psCreateDevMemContextIN, + PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT *psCreateDevMemContextOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_UINT32 i; - IMG_BOOL bCreated; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT); - - - NEW_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS + 1) - - psCreateDevMemContextOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psCreateDevMemContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDevMemContextInt; + IMG_UINT32 i; + IMG_BOOL bCreated; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; +#endif - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT); - psCreateDevMemContextOUT->eError = - PVRSRVCreateDeviceMemContextKM(hDevCookieInt, - psPerProc, - &hDevMemContextInt, - &psCreateDevMemContextOUT->ui32ClientHeapCount, - &psCreateDevMemContextOUT->sHeapInfo[0], - &bCreated, - pbSharedDeviceMemHeap); + + NEW_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS + 1) - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } + psCreateDevMemContextOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psCreateDevMemContextIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(bCreated) - { - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psCreateDevMemContextOUT->hDevMemContext, - hDevMemContextInt, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - } - else - { - psCreateDevMemContextOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, - &psCreateDevMemContextOUT->hDevMemContext, - hDevMemContextInt, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - } + if(psCreateDevMemContextOUT->eError != PVRSRV_OK) + { + return 0; + } - for(i = 0; i < psCreateDevMemContextOUT->ui32ClientHeapCount; i++) - { - IMG_HANDLE hDevMemHeapExt; + psCreateDevMemContextOUT->eError = + PVRSRVCreateDeviceMemContextKM(hDevCookieInt, + psPerProc, + &hDevMemContextInt, + &psCreateDevMemContextOUT->ui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + &asHeapInfo[0], +#else + &psCreateDevMemContextOUT->sHeapInfo[0], +#endif + &bCreated, + pbSharedDeviceMemHeap); + + if(psCreateDevMemContextOUT->eError != PVRSRV_OK) + { + return 0; + } + + + if(bCreated) + { + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psCreateDevMemContextOUT->hDevMemContext, + hDevMemContextInt, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + } + else + { + psCreateDevMemContextOUT->eError = + PVRSRVFindHandle(psPerProc->psHandleBase, + &psCreateDevMemContextOUT->hDevMemContext, + hDevMemContextInt, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + if(psCreateDevMemContextOUT->eError != PVRSRV_OK) + { + return 0; + } + } + + for(i = 0; i < psCreateDevMemContextOUT->ui32ClientHeapCount; i++) + { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeapExt; +#else + IMG_HANDLE hDevMemHeapExt; +#endif -#if defined(PVR_SECURE_HANDLES) - if(abSharedDeviceMemHeap[i]) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + if(abSharedDeviceMemHeap[i]) #endif - { - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - } -#if defined(PVR_SECURE_HANDLES) - else - { - - if(bCreated) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psCreateDevMemContextOUT->hDevMemContext); - } - else - { - psCreateDevMemContextOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, &hDevMemHeapExt, - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - } - } + { + +#if defined (SUPPORT_SID_INTERFACE) + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &hDevMemHeapExt, + asHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); +#else + PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, + psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); #endif - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; - } + } +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + else + { + + if(bCreated) + { +#if defined (SUPPORT_SID_INTERFACE) + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &hDevMemHeapExt, + asHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psCreateDevMemContextOUT->hDevMemContext); +#else + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, + psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psCreateDevMemContextOUT->hDevMemContext); +#endif + } + else + { + psCreateDevMemContextOUT->eError = + PVRSRVFindHandle(psPerProc->psHandleBase, + &hDevMemHeapExt, +#if defined (SUPPORT_SID_INTERFACE) + asHeapInfo[i].hDevMemHeap, +#else + psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, +#endif + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); + if(psCreateDevMemContextOUT->eError != PVRSRV_OK) + { + return 0; + } + } + } +#endif + psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; +#if defined (SUPPORT_SID_INTERFACE) + psCreateDevMemContextOUT->sHeapInfo[i].ui32HeapID = asHeapInfo[i].ui32HeapID; + psCreateDevMemContextOUT->sHeapInfo[i].sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; + psCreateDevMemContextOUT->sHeapInfo[i].ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; + psCreateDevMemContextOUT->sHeapInfo[i].ui32Attribs = asHeapInfo[i].ui32Attribs; + psCreateDevMemContextOUT->sHeapInfo[i].ui32XTileStride = asHeapInfo[i].ui32XTileStride; +#endif + } - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVDestroyDeviceMemContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT *psDestroyDevMemContextIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT *psDestroyDevMemContextIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_BOOL bDestroyed; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psDestroyDevMemContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psDestroyDevMemContextIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVDestroyDeviceMemContextKM(hDevCookieInt, hDevMemContextInt, &bDestroyed); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(bDestroyed) - { - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroyDevMemContextIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - } - - return 0; + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDevMemContextInt; + IMG_BOOL bDestroyed; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psDestroyDevMemContextIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, + psDestroyDevMemContextIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVDestroyDeviceMemContextKM(hDevCookieInt, hDevMemContextInt, &bDestroyed); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + if(bDestroyed) + { + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, + psDestroyDevMemContextIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + } + + return 0; } static IMG_INT PVRSRVGetDeviceMemHeapInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoIN, - PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoIN, + PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_UINT32 i; + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDevMemContextInt; + IMG_UINT32 i; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; +#endif - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO); - NEW_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS) + NEW_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS) - psGetDevMemHeapInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psGetDevMemHeapInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); + psGetDevMemHeapInfoOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psGetDevMemHeapInfoIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - psGetDevMemHeapInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psGetDevMemHeapInfoIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + psGetDevMemHeapInfoOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, + psGetDevMemHeapInfoIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - psGetDevMemHeapInfoOUT->eError = - PVRSRVGetDeviceMemHeapInfoKM(hDevCookieInt, - hDevMemContextInt, - &psGetDevMemHeapInfoOUT->ui32ClientHeapCount, - &psGetDevMemHeapInfoOUT->sHeapInfo[0], - pbSharedDeviceMemHeap); + psGetDevMemHeapInfoOUT->eError = + PVRSRVGetDeviceMemHeapInfoKM(hDevCookieInt, + hDevMemContextInt, + &psGetDevMemHeapInfoOUT->ui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + &asHeapInfo[0], +#else + &psGetDevMemHeapInfoOUT->sHeapInfo[0], +#endif + pbSharedDeviceMemHeap); - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - for(i = 0; i < psGetDevMemHeapInfoOUT->ui32ClientHeapCount; i++) - { - IMG_HANDLE hDevMemHeapExt; + for(i = 0; i < psGetDevMemHeapInfoOUT->ui32ClientHeapCount; i++) + { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hDevMemHeapExt; +#else + IMG_HANDLE hDevMemHeapExt; +#endif -#if defined(PVR_SECURE_HANDLES) - if(abSharedDeviceMemHeap[i]) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + if(abSharedDeviceMemHeap[i]) #endif - { - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - } -#if defined(PVR_SECURE_HANDLES) - else - { - - psGetDevMemHeapInfoOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, &hDevMemHeapExt, - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - } + { + +#if defined (SUPPORT_SID_INTERFACE) + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &hDevMemHeapExt, + asHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); +#else + PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, + psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); #endif - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; - } + } +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + else + { + + psGetDevMemHeapInfoOUT->eError = + PVRSRVFindHandle(psPerProc->psHandleBase, + &hDevMemHeapExt, +#if defined (SUPPORT_SID_INTERFACE) + asHeapInfo[i].hDevMemHeap, +#else + psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, +#endif + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); + if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) + { + return 0; + } + } +#endif + psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; +#if defined (SUPPORT_SID_INTERFACE) + psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32HeapID = asHeapInfo[i].ui32HeapID; + psGetDevMemHeapInfoOUT->sHeapInfo[i].sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; + psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; + psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32Attribs = asHeapInfo[i].ui32Attribs; + psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32XTileStride = asHeapInfo[i].ui32XTileStride; +#endif + } - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc) - return 0; + return 0; } #if defined(OS_PVRSRV_ALLOC_DEVICE_MEM_BW) IMG_INT PVRSRVAllocDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, - PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc); + PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, + PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc); #else static IMG_INT PVRSRVAllocDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, - PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, + PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemHeapInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_DEVICEMEM); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc, 2) - - psAllocDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psAllocDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psAllocDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemHeapInt, - psAllocDeviceMemIN->hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psAllocDeviceMemOUT->eError = - PVRSRVAllocDeviceMemKM(hDevCookieInt, - psPerProc, - hDevMemHeapInt, - psAllocDeviceMemIN->ui32Attribs, - psAllocDeviceMemIN->ui32Size, - psAllocDeviceMemIN->ui32Alignment, - &psMemInfo, - "" ); - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - OSMemSet(&psAllocDeviceMemOUT->sClientMemInfo, - 0, - sizeof(psAllocDeviceMemOUT->sClientMemInfo)); - - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; + PVRSRV_KERNEL_MEM_INFO *psMemInfo; + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDevMemHeapInt; + IMG_UINT32 ui32ShareIndex; + IMG_BOOL bUseShareMemWorkaround; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_DEVICEMEM); + + NEW_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc, 2) + + psAllocDeviceMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psAllocDeviceMemIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + + if(psAllocDeviceMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + psAllocDeviceMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemHeapInt, + psAllocDeviceMemIN->hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); + + if(psAllocDeviceMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + + bUseShareMemWorkaround = ((psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_XPROC) != 0) ? IMG_TRUE : IMG_FALSE; + ui32ShareIndex = 7654321; + + if (bUseShareMemWorkaround) + { + + + + psAllocDeviceMemOUT->eError = + BM_XProcWorkaroundFindNewBufferAndSetShareIndex(&ui32ShareIndex); + if(psAllocDeviceMemOUT->eError != PVRSRV_OK) + { + return 0; + } + } + + psAllocDeviceMemOUT->eError = + PVRSRVAllocDeviceMemKM(hDevCookieInt, + psPerProc, + hDevMemHeapInt, + psAllocDeviceMemIN->ui32Attribs, + psAllocDeviceMemIN->ui32Size, + psAllocDeviceMemIN->ui32Alignment, + &psMemInfo, + "" ); + + if (bUseShareMemWorkaround) + { + PVR_ASSERT(ui32ShareIndex != 7654321); + BM_XProcWorkaroundUnsetShareIndex(ui32ShareIndex); + } + + if(psAllocDeviceMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + psMemInfo->sShareMemWorkaround.bInUse = bUseShareMemWorkaround; + if (bUseShareMemWorkaround) + { + PVR_ASSERT(ui32ShareIndex != 7654321); + psMemInfo->sShareMemWorkaround.ui32ShareIndex = ui32ShareIndex; + psMemInfo->sShareMemWorkaround.hDevCookieInt = hDevCookieInt; + psMemInfo->sShareMemWorkaround.ui32OrigReqAttribs = psAllocDeviceMemIN->ui32Attribs; + psMemInfo->sShareMemWorkaround.ui32OrigReqSize = (IMG_UINT32)psAllocDeviceMemIN->ui32Size; + psMemInfo->sShareMemWorkaround.ui32OrigReqAlignment = (IMG_UINT32)psAllocDeviceMemIN->ui32Alignment; + } + + OSMemSet(&psAllocDeviceMemOUT->sClientMemInfo, + 0, + sizeof(psAllocDeviceMemOUT->sClientMemInfo)); + + psAllocDeviceMemOUT->sClientMemInfo.pvLinAddrKM = + psMemInfo->pvLinAddrKM; #if defined (__linux__) - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = 0; + psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = 0; #else - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = psMemInfo->pvLinAddrKM; + psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = psMemInfo->pvLinAddrKM; +#endif + psAllocDeviceMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; + psAllocDeviceMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; + psAllocDeviceMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) +#else + psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; #endif - psAllocDeviceMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psAllocDeviceMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psAllocDeviceMemOUT->sClientMemInfo.ui32AllocSize = psMemInfo->ui32AllocSize; - psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - if(psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_NO_SYNCOBJ) - { - - OSMemSet(&psAllocDeviceMemOUT->sClientSyncInfo, - 0, - sizeof (PVRSRV_CLIENT_SYNC_INFO)); - psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = IMG_NULL; - } - else - { - - psAllocDeviceMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psAllocDeviceMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psAllocDeviceMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo, + psMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + + #if defined (SUPPORT_SID_INTERFACE) + PVR_ASSERT(psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo != 0); + + if (psMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo, + psMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = 0; + } +#endif - psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; + if(psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_NO_SYNCOBJ) + { + + OSMemSet(&psAllocDeviceMemOUT->sClientSyncInfo, + 0, + sizeof (PVRSRV_CLIENT_SYNC_INFO)); + psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = IMG_NULL; + } + else + { + + +#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) + psAllocDeviceMemOUT->sClientSyncInfo.psSyncData = + psMemInfo->psKernelSyncInfo->psSyncData; + psAllocDeviceMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; + psAllocDeviceMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + +#if defined (SUPPORT_SID_INTERFACE) + if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo, + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo = 0; + } +#else + psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo = + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; +#endif +#endif - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientSyncInfo.hKernelSyncInfo, - psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psAllocDeviceMemOUT->sClientSyncInfo.hKernelSyncInfo, + psMemInfo->psKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); - psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = - &psAllocDeviceMemOUT->sClientSyncInfo; + psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = + &psAllocDeviceMemOUT->sClientSyncInfo; - } + } - COMMIT_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc) - return 0; + return 0; } #endif static IMG_INT PVRSRVFreeDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREEDEVICEMEM *psFreeDeviceMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_FREEDEVICEMEM *psFreeDeviceMemIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_VOID *pvKernelMemInfo; + IMG_HANDLE hDevCookieInt; + IMG_VOID *pvKernelMemInfo; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_DEVICEMEM); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_DEVICEMEM); - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psFreeDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psFreeDeviceMemIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvKernelMemInfo, - psFreeDeviceMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvKernelMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psFreeDeviceMemIN->hKernelMemInfo, +#else + psFreeDeviceMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = PVRSRVFreeDeviceMemKM(hDevCookieInt, pvKernelMemInfo); + psRetOUT->eError = PVRSRVFreeDeviceMemKM(hDevCookieInt, pvKernelMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psFreeDeviceMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + psFreeDeviceMemIN->hKernelMemInfo, +#else + psFreeDeviceMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); - return 0; + return 0; } static IMG_INT PVRSRVExportDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM *psExportDeviceMemIN, - PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM *psExportDeviceMemIN, + PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EXPORT_DEVICEMEM); - - - psExportDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psExportDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find devcookie")); - return 0; - } - - - psExportDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_PVOID *)&psKernelMemInfo, - psExportDeviceMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find kernel meminfo")); - return 0; - } - - - psExportDeviceMemOUT->eError = - PVRSRVFindHandle(KERNEL_HANDLE_BASE, - &psExportDeviceMemOUT->hMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psExportDeviceMemOUT->eError == PVRSRV_OK) - { - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVExportDeviceMemBW: allocation is already exported")); - return 0; - } - - - psExportDeviceMemOUT->eError = PVRSRVAllocHandle(KERNEL_HANDLE_BASE, - &psExportDeviceMemOUT->hMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - if (psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: failed to allocate handle from global handle list")); - return 0; - } - - - psKernelMemInfo->ui32Flags |= PVRSRV_MEM_EXPORTED; + IMG_HANDLE hDevCookieInt; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; +#else + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; +#endif - return 0; + PVR_ASSERT(ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_EXPORT_DEVICEMEM) || + ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2)); + PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + + + psExportDeviceMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, + psExportDeviceMemIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + + if(psExportDeviceMemOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find devcookie")); + return 0; + } + + + psExportDeviceMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_PVOID *)&psKernelMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psExportDeviceMemIN->hKernelMemInfo, +#else + psExportDeviceMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); + + if(psExportDeviceMemOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find kernel meminfo")); + return 0; + } + + + psExportDeviceMemOUT->eError = + PVRSRVFindHandle(KERNEL_HANDLE_BASE, + &psExportDeviceMemOUT->hMemInfo, + psKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psExportDeviceMemOUT->eError == PVRSRV_OK) + { + + PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVExportDeviceMemBW: allocation is already exported")); + return 0; + } + + + psExportDeviceMemOUT->eError = PVRSRVAllocHandle(KERNEL_HANDLE_BASE, + &psExportDeviceMemOUT->hMemInfo, + psKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + if (psExportDeviceMemOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: failed to allocate handle from global handle list")); + return 0; + } + + + psKernelMemInfo->ui32Flags |= PVRSRV_MEM_EXPORTED; + + return 0; } static IMG_INT PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *psMapDevMemIN, - PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *psMapDevMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *psMapDevMemIN, + PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *psMapDevMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psSrcKernelMemInfo = IMG_NULL; - PVRSRV_KERNEL_MEM_INFO *psDstKernelMemInfo = IMG_NULL; - IMG_HANDLE hDstDevMemHeap = IMG_NULL; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_DEV_MEMORY); - - NEW_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc, 2) - - - psMapDevMemOUT->eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, - (IMG_VOID**)&psSrcKernelMemInfo, - psMapDevMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psMapDevMemOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDstDevMemHeap, - psMapDevMemIN->hDstDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psMapDevMemOUT->eError = PVRSRVMapDeviceMemoryKM(psPerProc, - psSrcKernelMemInfo, - hDstDevMemHeap, - &psDstKernelMemInfo); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_KERNEL_MEM_INFO *psSrcKernelMemInfo = IMG_NULL; + PVRSRV_KERNEL_MEM_INFO *psDstKernelMemInfo = IMG_NULL; + IMG_HANDLE hDstDevMemHeap = IMG_NULL; + + PVR_ASSERT(ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_MAP_DEV_MEMORY) || + ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_MAP_DEV_MEMORY_2)); + PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + + NEW_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc, 2) + + + psMapDevMemOUT->eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, + (IMG_VOID**)&psSrcKernelMemInfo, + psMapDevMemIN->hKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psMapDevMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psMapDevMemOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDstDevMemHeap, + psMapDevMemIN->hDstDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); + if(psMapDevMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + if (psSrcKernelMemInfo->sShareMemWorkaround.bInUse) + { + PVR_DPF((PVR_DBG_MESSAGE, "using the mem wrap workaround.")); + + + + + + + + + + psMapDevMemOUT->eError = BM_XProcWorkaroundSetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); + if(psMapDevMemOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVMapDeviceMemoryBW(): failed to recycle shared buffer")); + return 0; + } + + psMapDevMemOUT->eError = + PVRSRVAllocDeviceMemKM(psSrcKernelMemInfo->sShareMemWorkaround.hDevCookieInt, + psPerProc, + hDstDevMemHeap, + psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAttribs | PVRSRV_MEM_NO_SYNCOBJ, + psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqSize, + psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAlignment, + &psDstKernelMemInfo, + "" ); + + + BM_XProcWorkaroundUnsetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); + if(psMapDevMemOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "lakjgfgewjlrgebhe")); + return 0; + } + + if(psSrcKernelMemInfo->psKernelSyncInfo) + { + psSrcKernelMemInfo->psKernelSyncInfo->ui32RefCount++; + } + + psDstKernelMemInfo->psKernelSyncInfo = psSrcKernelMemInfo->psKernelSyncInfo; + } + else + { + + psMapDevMemOUT->eError = PVRSRVMapDeviceMemoryKM(psPerProc, + psSrcKernelMemInfo, + hDstDevMemHeap, + &psDstKernelMemInfo); + if(psMapDevMemOUT->eError != PVRSRV_OK) + { + return 0; + } + } + + + psDstKernelMemInfo->sShareMemWorkaround = psSrcKernelMemInfo->sShareMemWorkaround; + + OSMemSet(&psMapDevMemOUT->sDstClientMemInfo, + 0, + sizeof(psMapDevMemOUT->sDstClientMemInfo)); + OSMemSet(&psMapDevMemOUT->sDstClientSyncInfo, + 0, + sizeof(psMapDevMemOUT->sDstClientSyncInfo)); + + psMapDevMemOUT->sDstClientMemInfo.pvLinAddrKM = + psDstKernelMemInfo->pvLinAddrKM; + + psMapDevMemOUT->sDstClientMemInfo.pvLinAddr = 0; + psMapDevMemOUT->sDstClientMemInfo.sDevVAddr = psDstKernelMemInfo->sDevVAddr; + psMapDevMemOUT->sDstClientMemInfo.ui32Flags = psDstKernelMemInfo->ui32Flags; + psMapDevMemOUT->sDstClientMemInfo.uAllocSize = psDstKernelMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) +#else + psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = psDstKernelMemInfo->sMemBlk.hOSMemHandle; +#endif - OSMemSet(&psMapDevMemOUT->sDstClientMemInfo, - 0, - sizeof(psMapDevMemOUT->sDstClientMemInfo)); - OSMemSet(&psMapDevMemOUT->sDstClientSyncInfo, - 0, - sizeof(psMapDevMemOUT->sDstClientSyncInfo)); - - psMapDevMemOUT->sDstClientMemInfo.pvLinAddrKM = - psDstKernelMemInfo->pvLinAddrKM; - - psMapDevMemOUT->sDstClientMemInfo.pvLinAddr = 0; - psMapDevMemOUT->sDstClientMemInfo.sDevVAddr = psDstKernelMemInfo->sDevVAddr; - psMapDevMemOUT->sDstClientMemInfo.ui32Flags = psDstKernelMemInfo->ui32Flags; - psMapDevMemOUT->sDstClientMemInfo.ui32AllocSize = psDstKernelMemInfo->ui32AllocSize; - psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = psDstKernelMemInfo->sMemBlk.hOSMemHandle; - - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo, - psDstKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo = IMG_NULL; - - - if(psDstKernelMemInfo->psKernelSyncInfo) - { - psMapDevMemOUT->sDstClientSyncInfo.psSyncData = - psDstKernelMemInfo->psKernelSyncInfo->psSyncData; - psMapDevMemOUT->sDstClientSyncInfo.sWriteOpsCompleteDevVAddr = - psDstKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapDevMemOUT->sDstClientSyncInfo.sReadOpsCompleteDevVAddr = - psDstKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo, + psDstKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo = IMG_NULL; + +#if defined (SUPPORT_SID_INTERFACE) + + if (psDstKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevMemOUT->sDstClientMemInfo.hMappingInfo, + psDstKernelMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); + } + else + { + psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = 0; + } +#endif - psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo = - psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; + + if(psDstKernelMemInfo->psKernelSyncInfo) + { +#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) + psMapDevMemOUT->sDstClientSyncInfo.psSyncData = + psDstKernelMemInfo->psKernelSyncInfo->psSyncData; + psMapDevMemOUT->sDstClientSyncInfo.sWriteOpsCompleteDevVAddr = + psDstKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; + psMapDevMemOUT->sDstClientSyncInfo.sReadOpsCompleteDevVAddr = + psDstKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + +#if defined (SUPPORT_SID_INTERFACE) + + if (psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo, + psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); + } + else + { + psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo = 0; + } +#else + psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo = + psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; +#endif +#endif - psMapDevMemOUT->sDstClientMemInfo.psClientSyncInfo = &psMapDevMemOUT->sDstClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo, - psDstKernelMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); - } + psMapDevMemOUT->sDstClientMemInfo.psClientSyncInfo = &psMapDevMemOUT->sDstClientSyncInfo; + + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo, + psDstKernelMemInfo->psKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); + } - COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVUnmapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY *psUnmapDevMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY *psUnmapDevMemIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEV_MEMORY); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEV_MEMORY); - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelMemInfo, - psUnmapDevMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVUnmapDeviceMemoryKM(psKernelMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psUnmapDevMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); + psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psKernelMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psUnmapDevMemIN->hKernelMemInfo, +#else + psUnmapDevMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + if (psKernelMemInfo->sShareMemWorkaround.bInUse) + { + psRetOUT->eError = PVRSRVFreeDeviceMemKM(psKernelMemInfo->sShareMemWorkaround.hDevCookieInt, psKernelMemInfo); + if(psRetOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVUnmapDeviceMemoryBW: internal error, should expect FreeDeviceMem to fail")); + return 0; + } + } + else + { + psRetOUT->eError = PVRSRVUnmapDeviceMemoryKM(psKernelMemInfo); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + } + + psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + psUnmapDevMemIN->hKernelMemInfo, +#else + psUnmapDevMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); - return 0; + return 0; } static IMG_INT PVRSRVMapDeviceClassMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY *psMapDevClassMemIN, - PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *psMapDevClassMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY *psMapDevClassMemIN, + PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *psMapDevClassMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_HANDLE hOSMapInfo; - IMG_HANDLE hDeviceClassBufferInt; - IMG_HANDLE hDevMemContextInt; - PVRSRV_HANDLE_TYPE eHandleType; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY); - - NEW_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc, 2) - - - psMapDevClassMemOUT->eError = - PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, &hDeviceClassBufferInt, - &eHandleType, - psMapDevClassMemIN->hDeviceClassBuffer); - - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psMapDevClassMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psMapDevClassMemIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - switch(eHandleType) - { -#if defined(PVR_SECURE_HANDLES) - case PVRSRV_HANDLE_TYPE_DISP_BUFFER: - case PVRSRV_HANDLE_TYPE_BUF_BUFFER: + PVRSRV_KERNEL_MEM_INFO *psMemInfo; + IMG_HANDLE hOSMapInfo; + IMG_HANDLE hDeviceClassBufferInt; + IMG_HANDLE hDevMemContextInt; + PVRSRV_HANDLE_TYPE eHandleType; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY); + + NEW_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc, 2) + + + psMapDevClassMemOUT->eError = + PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, + &hDeviceClassBufferInt, + &eHandleType, + psMapDevClassMemIN->hDeviceClassBuffer); + + if(psMapDevClassMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psMapDevClassMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevMemContextInt, + psMapDevClassMemIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psMapDevClassMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + switch(eHandleType) + { +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + case PVRSRV_HANDLE_TYPE_DISP_BUFFER: + case PVRSRV_HANDLE_TYPE_BUF_BUFFER: #else - case PVRSRV_HANDLE_TYPE_NONE: + case PVRSRV_HANDLE_TYPE_NONE: +#endif + break; + default: + psMapDevClassMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; + return 0; + } + + psMapDevClassMemOUT->eError = + PVRSRVMapDeviceClassMemoryKM(psPerProc, + hDevMemContextInt, + hDeviceClassBufferInt, + &psMemInfo, + &hOSMapInfo); + if(psMapDevClassMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + OSMemSet(&psMapDevClassMemOUT->sClientMemInfo, + 0, + sizeof(psMapDevClassMemOUT->sClientMemInfo)); + OSMemSet(&psMapDevClassMemOUT->sClientSyncInfo, + 0, + sizeof(psMapDevClassMemOUT->sClientSyncInfo)); + + psMapDevClassMemOUT->sClientMemInfo.pvLinAddrKM = + psMemInfo->pvLinAddrKM; + + psMapDevClassMemOUT->sClientMemInfo.pvLinAddr = 0; + psMapDevClassMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; + psMapDevClassMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; + psMapDevClassMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) + if (psMemInfo->sMemBlk.hOSMemHandle != 0) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevClassMemOUT->sClientMemInfo.hMappingInfo, + psMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psMapDevClassMemIN->hDeviceClassBuffer); + } + else + { + psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = 0; + } +#else + psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; #endif - break; - default: - psMapDevClassMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; - return 0; - } - - psMapDevClassMemOUT->eError = - PVRSRVMapDeviceClassMemoryKM(psPerProc, - hDevMemContextInt, - hDeviceClassBufferInt, - &psMemInfo, - &hOSMapInfo); - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - OSMemSet(&psMapDevClassMemOUT->sClientMemInfo, - 0, - sizeof(psMapDevClassMemOUT->sClientMemInfo)); - OSMemSet(&psMapDevClassMemOUT->sClientSyncInfo, - 0, - sizeof(psMapDevClassMemOUT->sClientSyncInfo)); - - psMapDevClassMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; - - psMapDevClassMemOUT->sClientMemInfo.pvLinAddr = 0; - psMapDevClassMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psMapDevClassMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psMapDevClassMemOUT->sClientMemInfo.ui32AllocSize = psMemInfo->ui32AllocSize; - psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psMapDevClassMemIN->hDeviceClassBuffer); - - psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo = IMG_NULL; - - - if(psMemInfo->psKernelSyncInfo) - { - psMapDevClassMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psMapDevClassMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapDevClassMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo, + psMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psMapDevClassMemIN->hDeviceClassBuffer); + + psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo = IMG_NULL; + + + if(psMemInfo->psKernelSyncInfo) + { +#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) + psMapDevClassMemOUT->sClientSyncInfo.psSyncData = + psMemInfo->psKernelSyncInfo->psSyncData; + psMapDevClassMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; + psMapDevClassMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + +#if defined (SUPPORT_SID_INTERFACE) + if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != 0) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo, + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo = 0; + } +#else + psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo = + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; +#endif +#endif - psMapDevClassMemOUT->sClientMemInfo.psClientSyncInfo = &psMapDevClassMemOUT->sClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo, - psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo); - } + psMapDevClassMemOUT->sClientMemInfo.psClientSyncInfo = &psMapDevClassMemOUT->sClientSyncInfo; + + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo, + psMemInfo->psKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo); + } - COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVUnmapDeviceClassMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY *psUnmapDevClassMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY *psUnmapDevClassMemIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvKernelMemInfo; + IMG_VOID *pvKernelMemInfo; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY); - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvKernelMemInfo, - psUnmapDevClassMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVUnmapDeviceClassMemoryKM(pvKernelMemInfo); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psUnmapDevClassMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &pvKernelMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psUnmapDevClassMemIN->hKernelMemInfo, +#else + psUnmapDevClassMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = PVRSRVUnmapDeviceClassMemoryKM(pvKernelMemInfo); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + psUnmapDevClassMemIN->hKernelMemInfo, +#else + psUnmapDevClassMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); - return 0; + return 0; } #if defined(OS_PVRSRV_WRAP_EXT_MEM_BW) IMG_INT PVRSRVWrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, - PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc); + PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, + PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc); #else static IMG_INT PVRSRVWrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, - PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_SYS_PHYADDR *psSysPAddr = IMG_NULL; + PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, + PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDevMemContextInt; + PVRSRV_KERNEL_MEM_INFO *psMemInfo; + IMG_SYS_PHYADDR *psSysPAddr = IMG_NULL; IMG_UINT32 ui32PageTableSize = 0; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_WRAP_EXT_MEMORY); - - NEW_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc, 2) - - - psWrapExtMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psWrapExtMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psWrapExtMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psWrapExtMemIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(psWrapExtMemIN->ui32NumPageTableEntries) - { - ui32PageTableSize = psWrapExtMemIN->ui32NumPageTableEntries - * sizeof(IMG_SYS_PHYADDR); - - ASSIGN_AND_EXIT_ON_ERROR(psWrapExtMemOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageTableSize, - (IMG_VOID **)&psSysPAddr, 0, - "Page Table")); - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - psSysPAddr, - psWrapExtMemIN->psSysPAddr, - ui32PageTableSize) != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32PageTableSize, (IMG_VOID *)psSysPAddr, 0); - - return -EFAULT; - } - } - - psWrapExtMemOUT->eError = - PVRSRVWrapExtMemoryKM(hDevCookieInt, - psPerProc, - hDevMemContextInt, - psWrapExtMemIN->ui32ByteSize, - psWrapExtMemIN->ui32PageOffset, - psWrapExtMemIN->bPhysContig, - psSysPAddr, - psWrapExtMemIN->pvLinAddr, - psWrapExtMemIN->ui32Flags, - &psMemInfo); - - if(psWrapExtMemIN->ui32NumPageTableEntries) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageTableSize, - (IMG_VOID *)psSysPAddr, 0); - - } - - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psWrapExtMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; - - psWrapExtMemOUT->sClientMemInfo.pvLinAddr = 0; - psWrapExtMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psWrapExtMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psWrapExtMemOUT->sClientMemInfo.ui32AllocSize = psMemInfo->ui32AllocSize; - psWrapExtMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_WRAP_EXT_MEMORY); + + NEW_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc, 2) + + + psWrapExtMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + psWrapExtMemIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psWrapExtMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psWrapExtMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, + psWrapExtMemIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psWrapExtMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + if(psWrapExtMemIN->ui32NumPageTableEntries) + { + ui32PageTableSize = psWrapExtMemIN->ui32NumPageTableEntries + * sizeof(IMG_SYS_PHYADDR); + + ASSIGN_AND_EXIT_ON_ERROR(psWrapExtMemOUT->eError, + OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + ui32PageTableSize, + (IMG_VOID **)&psSysPAddr, 0, + "Page Table")); + + if(CopyFromUserWrapper(psPerProc, + ui32BridgeID, + psSysPAddr, + psWrapExtMemIN->psSysPAddr, + ui32PageTableSize) != PVRSRV_OK) + { + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32PageTableSize, (IMG_VOID *)psSysPAddr, 0); + + return -EFAULT; + } + } + + psWrapExtMemOUT->eError = + PVRSRVWrapExtMemoryKM(hDevCookieInt, + psPerProc, + hDevMemContextInt, + psWrapExtMemIN->ui32ByteSize, + psWrapExtMemIN->ui32PageOffset, + psWrapExtMemIN->bPhysContig, + psSysPAddr, + psWrapExtMemIN->pvLinAddr, + psWrapExtMemIN->ui32Flags, + &psMemInfo); + + if(psWrapExtMemIN->ui32NumPageTableEntries) + { + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, + ui32PageTableSize, + (IMG_VOID *)psSysPAddr, 0); + + } + + if(psWrapExtMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + psWrapExtMemOUT->sClientMemInfo.pvLinAddrKM = + psMemInfo->pvLinAddrKM; + + + psWrapExtMemOUT->sClientMemInfo.pvLinAddr = 0; + psWrapExtMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; + psWrapExtMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; + psWrapExtMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) +#else + psWrapExtMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; +#endif - - psWrapExtMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psWrapExtMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psWrapExtMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo, + psMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + +#if defined (SUPPORT_SID_INTERFACE) + + if (psMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psWrapExtMemOUT->sClientMemInfo.hMappingInfo, + psMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psWrapExtMemOUT->sClientMemInfo.hMappingInfo = 0; + } +#endif - psWrapExtMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; + +#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) + psWrapExtMemOUT->sClientSyncInfo.psSyncData = + psMemInfo->psKernelSyncInfo->psSyncData; + psWrapExtMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; + psWrapExtMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = + psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + +#if defined (SUPPORT_SID_INTERFACE) + + if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psWrapExtMemOUT->sClientSyncInfo.hMappingInfo, + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psWrapExtMemOUT->sClientSyncInfo.hMappingInfo = 0; + } +#else + psWrapExtMemOUT->sClientSyncInfo.hMappingInfo = + psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; +#endif +#endif - psWrapExtMemOUT->sClientMemInfo.psClientSyncInfo = &psWrapExtMemOUT->sClientSyncInfo; + psWrapExtMemOUT->sClientMemInfo.psClientSyncInfo = &psWrapExtMemOUT->sClientSyncInfo; - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientSyncInfo.hKernelSyncInfo, - (IMG_HANDLE)psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psWrapExtMemOUT->sClientSyncInfo.hKernelSyncInfo, + (IMG_HANDLE)psMemInfo->psKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); - COMMIT_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc) - return 0; + return 0; } #endif static IMG_INT PVRSRVUnwrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY *psUnwrapExtMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY *psUnwrapExtMemIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, - psUnwrapExtMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVUnwrapExtMemoryKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psUnwrapExtMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - return 0; + IMG_VOID *pvMemInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvMemInfo, + psUnwrapExtMemIN->hKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVUnwrapExtMemoryKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, + psUnwrapExtMemIN->hKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + + return 0; } static IMG_INT PVRSRVGetFreeDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM *psGetFreeDeviceMemIN, - PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM *psGetFreeDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM *psGetFreeDeviceMemIN, + PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM *psGetFreeDeviceMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETFREE_DEVICEMEM); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETFREE_DEVICEMEM); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psGetFreeDeviceMemOUT->eError = - PVRSRVGetFreeDeviceMemKM(psGetFreeDeviceMemIN->ui32Flags, - &psGetFreeDeviceMemOUT->ui32Total, - &psGetFreeDeviceMemOUT->ui32Free, - &psGetFreeDeviceMemOUT->ui32LargestBlock); + psGetFreeDeviceMemOUT->eError = + PVRSRVGetFreeDeviceMemKM(psGetFreeDeviceMemIN->ui32Flags, + &psGetFreeDeviceMemOUT->ui32Total, + &psGetFreeDeviceMemOUT->ui32Free, + &psGetFreeDeviceMemOUT->ui32LargestBlock); - return 0; + return 0; } static IMG_INT PVRMMapOSMemHandleToMMapDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA *psMMapDataIN, - PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA *psMMapDataOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA *psMMapDataIN, + PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA *psMMapDataOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA); - -#if defined (__linux__) - psMMapDataOUT->eError = - PVRMMapOSMemHandleToMMapData(psPerProc, - psMMapDataIN->hMHandle, - &psMMapDataOUT->ui32MMapOffset, - &psMMapDataOUT->ui32ByteOffset, - &psMMapDataOUT->ui32RealByteSize, - &psMMapDataOUT->ui32UserVAddr); -#else - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psMMapDataIN); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA); + +#if defined (__linux__) || defined(__QNXNTO__) + psMMapDataOUT->eError = + PVRMMapOSMemHandleToMMapData(psPerProc, + psMMapDataIN->hMHandle, + &psMMapDataOUT->ui32MMapOffset, + &psMMapDataOUT->ui32ByteOffset, + &psMMapDataOUT->ui32RealByteSize, + &psMMapDataOUT->ui32UserVAddr); +#else + PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psMMapDataIN); - psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; -#endif - return 0; + psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; +#endif + return 0; } static IMG_INT PVRMMapReleaseMMapDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA *psMMapDataIN, - PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA *psMMapDataOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA *psMMapDataIN, + PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA *psMMapDataOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RELEASE_MMAP_DATA); - -#if defined (__linux__) - psMMapDataOUT->eError = - PVRMMapReleaseMMapData(psPerProc, - psMMapDataIN->hMHandle, - &psMMapDataOUT->bMUnmap, - &psMMapDataOUT->ui32RealByteSize, - &psMMapDataOUT->ui32UserVAddr); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RELEASE_MMAP_DATA); + +#if defined (__linux__) || defined(__QNXNTO__) + psMMapDataOUT->eError = + PVRMMapReleaseMMapData(psPerProc, + psMMapDataIN->hMHandle, + &psMMapDataOUT->bMUnmap, + &psMMapDataOUT->ui32RealByteSize, + &psMMapDataOUT->ui32UserVAddr); #else - - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psMMapDataIN); - psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; -#endif - return 0; + PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psMMapDataIN); + + psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; +#endif + return 0; +} + + +#if defined (SUPPORT_SID_INTERFACE) +static IMG_INT +PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS *psChgMemAttribIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + IMG_HANDLE hKernelMemInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hKernelMemInfo, + psChgMemAttribIN->hKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVChangeDeviceMemoryAttributesKM(hKernelMemInfo, psChgMemAttribIN->ui32Attribs); + + return 0; } +#else +static IMG_INT +PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS *psChgMemAttribIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + PVR_UNREFERENCED_PARAMETER(psChgMemAttribIN); + PVR_UNREFERENCED_PARAMETER(psRetOUT); + PVR_UNREFERENCED_PARAMETER(psPerProc); + return 0; +} +#endif #ifdef PDUMP static IMG_INT PDumpIsCaptureFrameBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING *psPDumpIsCapturingOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING *psPDumpIsCapturingOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_ISCAPTURING); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_ISCAPTURING); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psPDumpIsCapturingOUT->bIsCapturing = PDumpIsCaptureFrameKM(); - psPDumpIsCapturingOUT->eError = PVRSRV_OK; + psPDumpIsCapturingOUT->bIsCapturing = PDumpIsCaptureFrameKM(); + psPDumpIsCapturingOUT->eError = PVRSRV_OK; - return 0; + return 0; } static IMG_INT PDumpCommentBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_COMMENT *psPDumpCommentIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_COMMENT *psPDumpCommentIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_COMMENT); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_COMMENT); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpCommentKM(&psPDumpCommentIN->szComment[0], - psPDumpCommentIN->ui32Flags); - return 0; + psRetOUT->eError = PDumpCommentKM(&psPDumpCommentIN->szComment[0], + psPDumpCommentIN->ui32Flags); + return 0; } static IMG_INT PDumpSetFrameBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_SETFRAME *psPDumpSetFrameIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_SETFRAME *psPDumpSetFrameIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SETFRAME); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SETFRAME); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpSetFrameKM(psPDumpSetFrameIN->ui32Frame); + psRetOUT->eError = PDumpSetFrameKM(psPDumpSetFrameIN->ui32Frame); - return 0; + return 0; } static IMG_INT PDumpRegWithFlagsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPREG *psPDumpRegDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_DUMPREG *psPDumpRegDumpIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REG); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpRegDumpIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PDumpRegWithFlagsKM (psPDumpRegDumpIN->szRegRegion, - psPDumpRegDumpIN->sHWReg.ui32RegAddr, - psPDumpRegDumpIN->sHWReg.ui32RegVal, - psPDumpRegDumpIN->ui32Flags); - - return 0; + PVRSRV_DEVICE_NODE *psDeviceNode; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REG); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID **)&psDeviceNode, + psPDumpRegDumpIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = PDumpRegWithFlagsKM (psPDumpRegDumpIN->szRegRegion, + psPDumpRegDumpIN->sHWReg.ui32RegAddr, + psPDumpRegDumpIN->sHWReg.ui32RegVal, + psPDumpRegDumpIN->ui32Flags); + + return 0; } static IMG_INT PDumpRegPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_REGPOL *psPDumpRegPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_REGPOL *psPDumpRegPolIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REGPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpRegPolIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psRetOUT->eError = - PDumpRegPolWithFlagsKM(psPDumpRegPolIN->szRegRegion, - psPDumpRegPolIN->sHWReg.ui32RegAddr, - psPDumpRegPolIN->sHWReg.ui32RegVal, - psPDumpRegPolIN->ui32Mask, - psPDumpRegPolIN->ui32Flags); - - return 0; + PVRSRV_DEVICE_NODE *psDeviceNode; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REGPOL); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID **)&psDeviceNode, + psPDumpRegPolIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psRetOUT->eError = + PDumpRegPolWithFlagsKM(psPDumpRegPolIN->szRegRegion, + psPDumpRegPolIN->sHWReg.ui32RegAddr, + psPDumpRegPolIN->sHWReg.ui32RegVal, + psPDumpRegPolIN->ui32Mask, + psPDumpRegPolIN->ui32Flags, + PDUMP_POLL_OPERATOR_EQUAL); + + return 0; } static IMG_INT PDumpMemPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_MEMPOL *psPDumpMemPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_MEMPOL *psPDumpMemPolIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, - psPDumpMemPolIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + IMG_VOID *pvMemInfo; - psRetOUT->eError = - PDumpMemPolKM(((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo), - psPDumpMemPolIN->ui32Offset, - psPDumpMemPolIN->ui32Value, - psPDumpMemPolIN->ui32Mask, - psPDumpMemPolIN->eOperator, - psPDumpMemPolIN->ui32Flags, - MAKEUNIQUETAG(pvMemInfo)); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPOL); - return 0; + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psPDumpMemPolIN->hKernelMemInfo, +#else + psPDumpMemPolIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PDumpMemPolKM(((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo), + psPDumpMemPolIN->ui32Offset, + psPDumpMemPolIN->ui32Value, + psPDumpMemPolIN->ui32Mask, + psPDumpMemPolIN->eOperator, + psPDumpMemPolIN->ui32Flags, + MAKEUNIQUETAG(pvMemInfo)); + + return 0; } static IMG_INT PDumpMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM *psPDumpMemDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM *psPDumpMemDumpIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPMEM); + IMG_VOID *pvMemInfo; - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, - psPDumpMemDumpIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPMEM); - psRetOUT->eError = - PDumpMemUM(psPerProc, - psPDumpMemDumpIN->pvAltLinAddr, - psPDumpMemDumpIN->pvLinAddr, - pvMemInfo, - psPDumpMemDumpIN->ui32Offset, - psPDumpMemDumpIN->ui32Bytes, - psPDumpMemDumpIN->ui32Flags, - MAKEUNIQUETAG(pvMemInfo)); - - return 0; + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psPDumpMemDumpIN->hKernelMemInfo, +#else + psPDumpMemDumpIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PDumpMemUM(psPerProc, + psPDumpMemDumpIN->pvAltLinAddr, + psPDumpMemDumpIN->pvLinAddr, + pvMemInfo, + psPDumpMemDumpIN->ui32Offset, + psPDumpMemDumpIN->ui32Bytes, + psPDumpMemDumpIN->ui32Flags, + MAKEUNIQUETAG(pvMemInfo)); + + return 0; } static IMG_INT PDumpBitmapBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_BITMAP *psPDumpBitmapIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContextInt; - - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, - psPDumpBitmapIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - psRetOUT->eError = - PVRSRVLookupHandle( psPerProc->psHandleBase, - &hDevMemContextInt, - psPDumpBitmapIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpBitmapKM(psDeviceNode, - &psPDumpBitmapIN->szFileName[0], - psPDumpBitmapIN->ui32FileOffset, - psPDumpBitmapIN->ui32Width, - psPDumpBitmapIN->ui32Height, - psPDumpBitmapIN->ui32StrideInBytes, - psPDumpBitmapIN->sDevBaseAddr, - hDevMemContextInt, - psPDumpBitmapIN->ui32Size, - psPDumpBitmapIN->ePixelFormat, - psPDumpBitmapIN->eMemFormat, - psPDumpBitmapIN->ui32Flags); + PVRSRV_BRIDGE_IN_PDUMP_BITMAP *psPDumpBitmapIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_HANDLE hDevMemContextInt; + + PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, + psPDumpBitmapIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + + psRetOUT->eError = + PVRSRVLookupHandle( psPerProc->psHandleBase, + &hDevMemContextInt, + psPDumpBitmapIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PDumpBitmapKM(psDeviceNode, + &psPDumpBitmapIN->szFileName[0], + psPDumpBitmapIN->ui32FileOffset, + psPDumpBitmapIN->ui32Width, + psPDumpBitmapIN->ui32Height, + psPDumpBitmapIN->ui32StrideInBytes, + psPDumpBitmapIN->sDevBaseAddr, + hDevMemContextInt, + psPDumpBitmapIN->ui32Size, + psPDumpBitmapIN->ePixelFormat, + psPDumpBitmapIN->eMemFormat, + psPDumpBitmapIN->ui32Flags); + + return 0; +} + +static IMG_INT +PDumpReadRegBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_PDUMP_READREG *psPDumpReadRegIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_DEVICE_NODE *psDeviceNode; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPREADREG); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, + psPDumpReadRegIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); - return 0; + psRetOUT->eError = + PDumpReadRegKM(&psPDumpReadRegIN->szRegRegion[0], + &psPDumpReadRegIN->szFileName[0], + psPDumpReadRegIN->ui32FileOffset, + psPDumpReadRegIN->ui32Address, + psPDumpReadRegIN->ui32Size, + psPDumpReadRegIN->ui32Flags); + + return 0; } static IMG_INT -PDumpReadRegBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_READREG *psPDumpReadRegIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) +PDumpMemPagesBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES *psPDumpMemPagesIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_DEVICE_NODE *psDeviceNode; + PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPREADREG); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPAGES); - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, - psPDumpReadRegIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID **)&psDeviceNode, + psPDumpMemPagesIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); - psRetOUT->eError = - PDumpReadRegKM(&psPDumpReadRegIN->szRegRegion[0], - &psPDumpReadRegIN->szFileName[0], - psPDumpReadRegIN->ui32FileOffset, - psPDumpReadRegIN->ui32Address, - psPDumpReadRegIN->ui32Size, - psPDumpReadRegIN->ui32Flags); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - return 0; + + return 0; } static IMG_INT PDumpDriverInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO *psPDumpDriverInfoIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO *psPDumpDriverInfoIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_UINT32 ui32PDumpFlags; + IMG_UINT32 ui32PDumpFlags; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DRIVERINFO); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DRIVERINFO); + PVR_UNREFERENCED_PARAMETER(psPerProc); - ui32PDumpFlags = 0; - if(psPDumpDriverInfoIN->bContinuous) - { - ui32PDumpFlags |= PDUMP_FLAGS_CONTINUOUS; - } - psRetOUT->eError = - PDumpDriverInfoKM(&psPDumpDriverInfoIN->szString[0], - ui32PDumpFlags); + ui32PDumpFlags = 0; + if(psPDumpDriverInfoIN->bContinuous) + { + ui32PDumpFlags |= PDUMP_FLAGS_CONTINUOUS; + } + psRetOUT->eError = + PDumpDriverInfoKM(&psPDumpDriverInfoIN->szString[0], + ui32PDumpFlags); - return 0; + return 0; } static IMG_INT PDumpSyncDumpBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC *psPDumpSyncDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC *psPDumpSyncDumpIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_UINT32 ui32Bytes = psPDumpSyncDumpIN->ui32Bytes; - IMG_VOID *pvSyncInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPSYNC); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo, - psPDumpSyncDumpIN->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + IMG_UINT32 ui32Bytes = psPDumpSyncDumpIN->ui32Bytes; + IMG_VOID *pvSyncInfo; - psRetOUT->eError = - PDumpMemUM(psPerProc, - psPDumpSyncDumpIN->pvAltLinAddr, - IMG_NULL, - ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, - psPDumpSyncDumpIN->ui32Offset, - ui32Bytes, - 0, - MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPSYNC); - return 0; + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo, +#if defined (SUPPORT_SID_INTERFACE) + psPDumpSyncDumpIN->hKernelSyncInfo, +#else + psPDumpSyncDumpIN->psKernelSyncInfo, +#endif + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PDumpMemUM(psPerProc, + psPDumpSyncDumpIN->pvAltLinAddr, + IMG_NULL, + ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, + psPDumpSyncDumpIN->ui32Offset, + ui32Bytes, + 0, + MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); + + return 0; } static IMG_INT PDumpSyncPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL *psPDumpSyncPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL *psPDumpSyncPolIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_UINT32 ui32Offset; - IMG_VOID *pvSyncInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SYNCPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo, - psPDumpSyncPolIN->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(psPDumpSyncPolIN->bIsRead) - { - ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); - } - else - { - ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete); - } - - psRetOUT->eError = - PDumpMemPolKM(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, - ui32Offset, - psPDumpSyncPolIN->ui32Value, - psPDumpSyncPolIN->ui32Mask, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); - - return 0; + IMG_UINT32 ui32Offset; + IMG_VOID *pvSyncInfo; + IMG_UINT32 ui32Value; + IMG_UINT32 ui32Mask; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SYNCPOL); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSyncInfo, +#if defined (SUPPORT_SID_INTERFACE) + psPDumpSyncPolIN->hKernelSyncInfo, +#else + psPDumpSyncPolIN->psKernelSyncInfo, +#endif + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + if(psPDumpSyncPolIN->bIsRead) + { + ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); + } + else + { + ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete); + } + + + if (psPDumpSyncPolIN->bUseLastOpDumpVal) + { + if(psPDumpSyncPolIN->bIsRead) + { + ui32Value = ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncData->ui32LastReadOpDumpVal; + } + else + { + ui32Value = ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncData->ui32LastOpDumpVal; + } + ui32Mask = 0xffffffff; + } + else + { + ui32Value = psPDumpSyncPolIN->ui32Value; + ui32Mask = psPDumpSyncPolIN->ui32Mask; + } + + psRetOUT->eError = + PDumpMemPolKM(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, + ui32Offset, + ui32Value, + ui32Mask, + PDUMP_POLL_OPERATOR_EQUAL, + 0, + MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); + + return 0; } static IMG_INT PDumpCycleCountRegReadBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ *psPDumpCycleCountRegReadIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpCycleCountRegReadIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ *psPDumpCycleCountRegReadIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_DEVICE_NODE *psDeviceNode; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ); - PDumpCycleCountRegRead(&psDeviceNode->sDevId, - psPDumpCycleCountRegReadIN->ui32RegOffset, - psPDumpCycleCountRegReadIN->bLastFrame); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID **)&psDeviceNode, + psPDumpCycleCountRegReadIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = PVRSRV_OK; + PDumpCycleCountRegRead(&psDeviceNode->sDevId, + psPDumpCycleCountRegReadIN->ui32RegOffset, + psPDumpCycleCountRegReadIN->bLastFrame); - return 0; + psRetOUT->eError = PVRSRV_OK; + + return 0; } static IMG_INT PDumpPDDevPAddrBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR *psPDumpPDDevPAddrIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR *psPDumpPDDevPAddrIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvMemInfo, - psPDumpPDDevPAddrIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpPDDevPAddrKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo, - psPDumpPDDevPAddrIN->ui32Offset, - psPDumpPDDevPAddrIN->sPDDevPAddr, - MAKEUNIQUETAG(pvMemInfo), - PDUMP_PD_UNIQUETAG); - return 0; + IMG_VOID *pvMemInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &pvMemInfo, + psPDumpPDDevPAddrIN->hKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PDumpPDDevPAddrKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo, + psPDumpPDDevPAddrIN->ui32Offset, + psPDumpPDDevPAddrIN->sPDDevPAddr, + MAKEUNIQUETAG(pvMemInfo), + PDUMP_PD_UNIQUETAG); + return 0; } static IMG_INT PDumpStartInitPhaseBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STARTINITPHASE); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STARTINITPHASE); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpStartInitPhaseKM(); + psRetOUT->eError = PDumpStartInitPhaseKM(); - return 0; + return 0; } static IMG_INT PDumpStopInitPhaseBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STOPINITPHASE); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STOPINITPHASE); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psPerProc); - psRetOUT->eError = PDumpStopInitPhaseKM(); + psRetOUT->eError = PDumpStopInitPhaseKM(); - return 0; + return 0; } #endif @@ -1590,2307 +2060,2683 @@ PDumpStopInitPhaseBW(IMG_UINT32 ui32BridgeID, static IMG_INT PVRSRVGetMiscInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_MISC_INFO *psGetMiscInfoIN, - PVRSRV_BRIDGE_OUT_GET_MISC_INFO *psGetMiscInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_MISC_INFO *psGetMiscInfoIN, + PVRSRV_BRIDGE_OUT_GET_MISC_INFO *psGetMiscInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_ERROR eError; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_MISC_INFO); - - OSMemCopy(&psGetMiscInfoOUT->sMiscInfo, - &psGetMiscInfoIN->sMiscInfo, - sizeof(PVRSRV_MISC_INFO)); - - 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)) - { - - psGetMiscInfoOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_MISC_INFO_KM sMiscInfo = {0}; +#endif + PVRSRV_ERROR eError; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_MISC_INFO); +#if defined (SUPPORT_SID_INTERFACE) + sMiscInfo.ui32StateRequest = psGetMiscInfoIN->sMiscInfo.ui32StateRequest; + sMiscInfo.ui32StatePresent = psGetMiscInfoIN->sMiscInfo.ui32StatePresent; + sMiscInfo.ui32MemoryStrLen = psGetMiscInfoIN->sMiscInfo.ui32MemoryStrLen; + sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr; + + OSMemCopy(&sMiscInfo.sCacheOpCtl, + &psGetMiscInfoIN->sMiscInfo.sCacheOpCtl, + sizeof(sMiscInfo.sCacheOpCtl)); +#else - 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)) - { - - ASSIGN_AND_EXIT_ON_ERROR(psGetMiscInfoOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, - (IMG_VOID **)&psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0, - "Output string buffer")); + OSMemCopy(&psGetMiscInfoOUT->sMiscInfo, + &psGetMiscInfoIN->sMiscInfo, + sizeof(PVRSRV_MISC_INFO)); +#endif - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); + 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)) + { + + psGetMiscInfoOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; + return 0; + } + + 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)) + { + +#if defined (SUPPORT_SID_INTERFACE) + ASSIGN_AND_EXIT_ON_ERROR(psGetMiscInfoOUT->eError, + OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, + (IMG_VOID **)&sMiscInfo.pszMemoryStr, 0, + "Output string buffer")); + psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&sMiscInfo); + + + eError = CopyToUserWrapper(psPerProc, ui32BridgeID, + psGetMiscInfoIN->sMiscInfo.pszMemoryStr, + sMiscInfo.pszMemoryStr, + sMiscInfo.ui32MemoryStrLen); +#else + ASSIGN_AND_EXIT_ON_ERROR(psGetMiscInfoOUT->eError, + OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, + (IMG_VOID **)&psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0, + "Output string buffer")); + + psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); + + + eError = CopyToUserWrapper(psPerProc, ui32BridgeID, + psGetMiscInfoIN->sMiscInfo.pszMemoryStr, + psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, + psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen); +#endif - - eError = CopyToUserWrapper(psPerProc, ui32BridgeID, - psGetMiscInfoIN->sMiscInfo.pszMemoryStr, - psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen); + +#if defined (SUPPORT_SID_INTERFACE) + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, + sMiscInfo.ui32MemoryStrLen, + (IMG_VOID *)sMiscInfo.pszMemoryStr, 0); +#else + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, + psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, + (IMG_VOID *)psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0); +#endif - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, - (IMG_VOID *)psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0); - psGetMiscInfoOUT->sMiscInfo.pszMemoryStr = IMG_NULL; + + psGetMiscInfoOUT->sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr; + + if(eError != PVRSRV_OK) + { + + PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoBW Error copy to user")); + return -EFAULT; + } + } + else + { +#if defined (SUPPORT_SID_INTERFACE) + psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&sMiscInfo); +#else + psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); +#endif + } - - psGetMiscInfoOUT->sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr; + + if (psGetMiscInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - if(eError != PVRSRV_OK) - { - - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoBW Error copy to user")); - return -EFAULT; - } - } - else - { - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); - } + +#if defined (SUPPORT_SID_INTERFACE) + if (sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) +#else + if (psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) +#endif + { + psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, + &psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, +#if defined (SUPPORT_SID_INTERFACE) + sMiscInfo.sGlobalEventObject.hOSEventKM, +#else + psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, +#endif + PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } + if (psGetMiscInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - - if (psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) - { - psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, - psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - } +#if defined (SUPPORT_SID_INTERFACE) + OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.szName, + sMiscInfo.sGlobalEventObject.szName, + EVENTOBJNAME_MAXLENGTH); - if (psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle) - { - - psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, - psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, - PVRSRV_HANDLE_TYPE_SOC_TIMER, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); +#endif + } - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - } +#if defined (SUPPORT_SID_INTERFACE) + if (sMiscInfo.hSOCTimerRegisterOSMemHandle) +#else + if (psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle) +#endif + { + + psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, + &psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, +#if defined (SUPPORT_SID_INTERFACE) + sMiscInfo.hSOCTimerRegisterOSMemHandle, +#else + psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, +#endif + PVRSRV_HANDLE_TYPE_SOC_TIMER, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); + + if (psGetMiscInfoOUT->eError != PVRSRV_OK) + { + return 0; + } + } +#if defined (SUPPORT_SID_INTERFACE) + else + { + psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle = 0; + } + + + psGetMiscInfoOUT->sMiscInfo.ui32StateRequest = sMiscInfo.ui32StateRequest; + psGetMiscInfoOUT->sMiscInfo.ui32StatePresent = sMiscInfo.ui32StatePresent; + + psGetMiscInfoOUT->sMiscInfo.pvSOCTimerRegisterKM = sMiscInfo.pvSOCTimerRegisterKM; + psGetMiscInfoOUT->sMiscInfo.pvSOCTimerRegisterUM = sMiscInfo.pvSOCTimerRegisterUM; + psGetMiscInfoOUT->sMiscInfo.pvSOCClockGateRegs = sMiscInfo.pvSOCClockGateRegs; + + psGetMiscInfoOUT->sMiscInfo.ui32SOCClockGateRegsSize = sMiscInfo.ui32SOCClockGateRegsSize; + + OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion, + &sMiscInfo.aui32DDKVersion, + sizeof(psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion)); + OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl, + &sMiscInfo.sCacheOpCtl, + sizeof(psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl)); +#endif - return 0; + return 0; } static IMG_INT PVRSRVConnectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CONNECT_SERVICES *psConnectServicesIN, - PVRSRV_BRIDGE_OUT_CONNECT_SERVICES *psConnectServicesOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_CONNECT_SERVICES *psConnectServicesIN, + PVRSRV_BRIDGE_OUT_CONNECT_SERVICES *psConnectServicesOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CONNECT_SERVICES); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CONNECT_SERVICES); #if defined(PDUMP) - - psPerProc->bPDumpPersistent |= ( (psConnectServicesIN->ui32Flags & SRV_FLAGS_PERSIST) != 0) ? IMG_TRUE : IMG_FALSE; + + if ((psConnectServicesIN->ui32Flags & SRV_FLAGS_PERSIST) != 0) + { + psPerProc->bPDumpPersistent = IMG_TRUE; + } #if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - psPerProc->bPDumpActive |= ( (psConnectServicesIN->ui32Flags & SRV_FLAGS_PDUMP_ACTIVE) != 0) ? IMG_TRUE : IMG_FALSE; + + if ((psConnectServicesIN->ui32Flags & SRV_FLAGS_PDUMP_ACTIVE) != 0) + { + psPerProc->bPDumpActive = IMG_TRUE; + } #endif #else - PVR_UNREFERENCED_PARAMETER(psConnectServicesIN); + PVR_UNREFERENCED_PARAMETER(psConnectServicesIN); #endif - psConnectServicesOUT->hKernelServices = psPerProc->hPerProcData; - psConnectServicesOUT->eError = PVRSRV_OK; + psConnectServicesOUT->hKernelServices = psPerProc->hPerProcData; + psConnectServicesOUT->eError = PVRSRV_OK; - return 0; + return 0; } static IMG_INT PVRSRVDisconnectBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DISCONNECT_SERVICES); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DISCONNECT_SERVICES); - - psRetOUT->eError = PVRSRV_OK; + + psRetOUT->eError = PVRSRV_OK; - return 0; + return 0; } static IMG_INT PVRSRVEnumerateDCBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUMCLASS *psEnumDispClassIN, - PVRSRV_BRIDGE_OUT_ENUMCLASS *psEnumDispClassOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ENUMCLASS *psEnumDispClassIN, + PVRSRV_BRIDGE_OUT_ENUMCLASS *psEnumDispClassOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psPerProc); - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_CLASS); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_CLASS); - psEnumDispClassOUT->eError = - PVRSRVEnumerateDCKM(psEnumDispClassIN->sDeviceClass, - &psEnumDispClassOUT->ui32NumDevices, - &psEnumDispClassOUT->ui32DevID[0]); + psEnumDispClassOUT->eError = + PVRSRVEnumerateDCKM(psEnumDispClassIN->sDeviceClass, + &psEnumDispClassOUT->ui32NumDevices, + &psEnumDispClassOUT->ui32DevID[0]); - return 0; + return 0; } static IMG_INT PVRSRVOpenDCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceIN, - PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceIN, + PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE); - - NEW_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc, 1) - - psOpenDispClassDeviceOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psOpenDispClassDeviceIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - psOpenDispClassDeviceOUT->eError = - PVRSRVOpenDCDeviceKM(psPerProc, - psOpenDispClassDeviceIN->ui32DeviceID, - hDevCookieInt, - &hDispClassInfoInt); - - if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psOpenDispClassDeviceOUT->hDeviceKM, - hDispClassInfoInt, - PVRSRV_HANDLE_TYPE_DISP_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - COMMIT_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc) - - return 0; + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hDispClassInfoInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE); + + NEW_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc, 1) + + psOpenDispClassDeviceOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, + psOpenDispClassDeviceIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) + { + return 0; + } + + psOpenDispClassDeviceOUT->eError = + PVRSRVOpenDCDeviceKM(psPerProc, + psOpenDispClassDeviceIN->ui32DeviceID, + hDevCookieInt, + &hDispClassInfoInt); + + if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) + { + return 0; + } + + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psOpenDispClassDeviceOUT->hDeviceKM, + hDispClassInfoInt, + PVRSRV_HANDLE_TYPE_DISP_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + COMMIT_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc) + + return 0; } static IMG_INT PVRSRVCloseDCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE *psCloseDispClassDeviceIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE *psCloseDispClassDeviceIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psCloseDispClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVCloseDCDeviceKM(pvDispClassInfoInt, IMG_FALSE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psCloseDispClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - return 0; + IMG_VOID *pvDispClassInfoInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfoInt, + psCloseDispClassDeviceIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = PVRSRVCloseDCDeviceKM(pvDispClassInfoInt, IMG_FALSE); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, + psCloseDispClassDeviceIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + return 0; } static IMG_INT PVRSRVEnumDCFormatsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsIN, - PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsIN, + PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS); - - psEnumDispClassFormatsOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psEnumDispClassFormatsIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psEnumDispClassFormatsOUT->eError != PVRSRV_OK) - { - return 0; - } - - psEnumDispClassFormatsOUT->eError = - PVRSRVEnumDCFormatsKM(pvDispClassInfoInt, - &psEnumDispClassFormatsOUT->ui32Count, - psEnumDispClassFormatsOUT->asFormat); - - return 0; + IMG_VOID *pvDispClassInfoInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS); + + psEnumDispClassFormatsOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfoInt, + psEnumDispClassFormatsIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psEnumDispClassFormatsOUT->eError != PVRSRV_OK) + { + return 0; + } + + psEnumDispClassFormatsOUT->eError = + PVRSRVEnumDCFormatsKM(pvDispClassInfoInt, + &psEnumDispClassFormatsOUT->ui32Count, + psEnumDispClassFormatsOUT->asFormat); + + return 0; } static IMG_INT PVRSRVEnumDCDimsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsIN, - PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsIN, + PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfoInt; + IMG_VOID *pvDispClassInfoInt; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS); - psEnumDispClassDimsOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psEnumDispClassDimsIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); + psEnumDispClassDimsOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfoInt, + psEnumDispClassDimsIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psEnumDispClassDimsOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psEnumDispClassDimsOUT->eError != PVRSRV_OK) + { + return 0; + } - psEnumDispClassDimsOUT->eError = - PVRSRVEnumDCDimsKM(pvDispClassInfoInt, - &psEnumDispClassDimsIN->sFormat, - &psEnumDispClassDimsOUT->ui32Count, - psEnumDispClassDimsOUT->asDim); + psEnumDispClassDimsOUT->eError = + PVRSRVEnumDCDimsKM(pvDispClassInfoInt, + &psEnumDispClassDimsIN->sFormat, + &psEnumDispClassDimsOUT->ui32Count, + psEnumDispClassDimsOUT->asDim); - return 0; + return 0; } static IMG_INT PVRSRVGetDCSystemBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferIN, + PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hBufferInt; - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER); - - NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc, 1) - - psGetDispClassSysBufferOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psGetDispClassSysBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDispClassSysBufferOUT->eError = - PVRSRVGetDCSystemBufferKM(pvDispClassInfoInt, - &hBufferInt); - - if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psGetDispClassSysBufferOUT->hBuffer, - hBufferInt, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetDispClassSysBufferIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc) - - return 0; + IMG_HANDLE hBufferInt; + IMG_VOID *pvDispClassInfoInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER); + + NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc, 1) + + psGetDispClassSysBufferOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfoInt, + psGetDispClassSysBufferIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) + { + return 0; + } + + psGetDispClassSysBufferOUT->eError = + PVRSRVGetDCSystemBufferKM(pvDispClassInfoInt, + &hBufferInt); + + if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) + { + return 0; + } + + + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psGetDispClassSysBufferOUT->hBuffer, + hBufferInt, + PVRSRV_HANDLE_TYPE_DISP_BUFFER, + (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), + psGetDispClassSysBufferIN->hDeviceKM); + + COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc) + + return 0; } static IMG_INT PVRSRVGetDCInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO *psGetDispClassInfoIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO *psGetDispClassInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO *psGetDispClassInfoIN, + PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO *psGetDispClassInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; + IMG_VOID *pvDispClassInfo; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_INFO); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_INFO); - psGetDispClassInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psGetDispClassInfoIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassInfoOUT->eError != PVRSRV_OK) - { - return 0; - } + psGetDispClassInfoOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psGetDispClassInfoIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psGetDispClassInfoOUT->eError != PVRSRV_OK) + { + return 0; + } - psGetDispClassInfoOUT->eError = - PVRSRVGetDCInfoKM(pvDispClassInfo, - &psGetDispClassInfoOUT->sDisplayInfo); + psGetDispClassInfoOUT->eError = + PVRSRVGetDCInfoKM(pvDispClassInfo, + &psGetDispClassInfoOUT->sDisplayInfo); - return 0; + return 0; } static IMG_INT PVRSRVCreateDCSwapChainBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainIN, - PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainIN, + PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_HANDLE hSwapChainInt; - IMG_UINT32 ui32SwapChainID; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN); - - NEW_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc, 1) - - psCreateDispClassSwapChainOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psCreateDispClassSwapChainIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - - if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) - { - return 0; - } - - - ui32SwapChainID = psCreateDispClassSwapChainIN->ui32SwapChainID; - - psCreateDispClassSwapChainOUT->eError = - PVRSRVCreateDCSwapChainKM(psPerProc, pvDispClassInfo, - psCreateDispClassSwapChainIN->ui32Flags, - &psCreateDispClassSwapChainIN->sDstSurfAttrib, - &psCreateDispClassSwapChainIN->sSrcSurfAttrib, - psCreateDispClassSwapChainIN->ui32BufferCount, - psCreateDispClassSwapChainIN->ui32OEMFlags, - &hSwapChainInt, - &ui32SwapChainID); - - if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psCreateDispClassSwapChainOUT->ui32SwapChainID = ui32SwapChainID; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psCreateDispClassSwapChainOUT->hSwapChain, - hSwapChainInt, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psCreateDispClassSwapChainIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc) - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_HANDLE hSwapChainInt; + IMG_UINT32 ui32SwapChainID; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN); + + NEW_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc, 1) + + psCreateDispClassSwapChainOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psCreateDispClassSwapChainIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + + if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) + { + return 0; + } + + + ui32SwapChainID = psCreateDispClassSwapChainIN->ui32SwapChainID; + + psCreateDispClassSwapChainOUT->eError = + PVRSRVCreateDCSwapChainKM(psPerProc, pvDispClassInfo, + psCreateDispClassSwapChainIN->ui32Flags, + &psCreateDispClassSwapChainIN->sDstSurfAttrib, + &psCreateDispClassSwapChainIN->sSrcSurfAttrib, + psCreateDispClassSwapChainIN->ui32BufferCount, + psCreateDispClassSwapChainIN->ui32OEMFlags, + &hSwapChainInt, + &ui32SwapChainID); + + if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) + { + return 0; + } + + + psCreateDispClassSwapChainOUT->ui32SwapChainID = ui32SwapChainID; + + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psCreateDispClassSwapChainOUT->hSwapChain, + hSwapChainInt, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, + PVRSRV_HANDLE_ALLOC_FLAG_NONE, + psCreateDispClassSwapChainIN->hDeviceKM); + + COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc) + + return 0; } static IMG_INT PVRSRVDestroyDCSwapChainBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN *psDestroyDispClassSwapChainIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN *psDestroyDispClassSwapChainIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvSwapChain; + IMG_VOID *pvSwapChain; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN); - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSwapChain, - psDestroyDispClassSwapChainIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSwapChain, + psDestroyDispClassSwapChainIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = - PVRSRVDestroyDCSwapChainKM(pvSwapChain); + psRetOUT->eError = + PVRSRVDestroyDCSwapChainKM(pvSwapChain); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroyDispClassSwapChainIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + psRetOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, + psDestroyDispClassSwapChainIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - return 0; + return 0; } static IMG_INT PVRSRVSetDCDstRectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassDstRectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassDstRectIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassDstRectIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassDstRectIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCDstRectKM(pvDispClassInfo, - pvSwapChain, - &psSetDispClassDstRectIN->sRect); - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSetDispClassDstRectIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSwapChain, + psSetDispClassDstRectIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVSetDCDstRectKM(pvDispClassInfo, + pvSwapChain, + &psSetDispClassDstRectIN->sRect); + + return 0; } static IMG_INT PVRSRVSetDCSrcRectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassSrcRectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassSrcRectIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassSrcRectIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassSrcRectIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCSrcRectKM(pvDispClassInfo, - pvSwapChain, - &psSetDispClassSrcRectIN->sRect); - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSetDispClassSrcRectIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSwapChain, + psSetDispClassSrcRectIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVSetDCSrcRectKM(pvDispClassInfo, + pvSwapChain, + &psSetDispClassSrcRectIN->sRect); + + return 0; } static IMG_INT PVRSRVSetDCDstColourKeyBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassColKeyIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassColKeyIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCDstColourKeyKM(pvDispClassInfo, - pvSwapChain, - psSetDispClassColKeyIN->ui32CKColour); - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSetDispClassColKeyIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSwapChain, + psSetDispClassColKeyIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVSetDCDstColourKeyKM(pvDispClassInfo, + pvSwapChain, + psSetDispClassColKeyIN->ui32CKColour); + + return 0; } static IMG_INT PVRSRVSetDCSrcColourKeyBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassColKeyIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassColKeyIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCSrcColourKeyKM(pvDispClassInfo, - pvSwapChain, - psSetDispClassColKeyIN->ui32CKColour); - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSetDispClassColKeyIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSwapChain, + psSetDispClassColKeyIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVSetDCSrcColourKeyKM(pvDispClassInfo, + pvSwapChain, + psSetDispClassColKeyIN->ui32CKColour); + + return 0; } static IMG_INT PVRSRVGetDCBuffersBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersIN, + PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - IMG_UINT32 i; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS); - - NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc, PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS) + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + IMG_UINT32 i; +#if defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE *pahBuffer; +#endif - psGetDispClassBuffersOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psGetDispClassBuffersIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS); + + NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc, PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS) + + psGetDispClassBuffersOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psGetDispClassBuffersIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) + { + return 0; + } + + psGetDispClassBuffersOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSwapChain, + psGetDispClassBuffersIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); + if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) + { + return 0; + } + +#if defined (SUPPORT_SID_INTERFACE) + psGetDispClassBuffersOUT->eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + sizeof(IMG_HANDLE) * PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS, + (IMG_PVOID *)&pahBuffer, 0, + "Temp Swapchain Buffers"); + + if (psGetDispClassBuffersOUT->eError != PVRSRV_OK) + { + return 0; + } +#endif - psGetDispClassBuffersOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psGetDispClassBuffersIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } + psGetDispClassBuffersOUT->eError = + PVRSRVGetDCBuffersKM(pvDispClassInfo, + pvSwapChain, + &psGetDispClassBuffersOUT->ui32BufferCount, +#if defined (SUPPORT_SID_INTERFACE) + pahBuffer); +#else + psGetDispClassBuffersOUT->ahBuffer); +#endif + if (psGetDispClassBuffersOUT->eError != PVRSRV_OK) + { + return 0; + } - psGetDispClassBuffersOUT->eError = - PVRSRVGetDCBuffersKM(pvDispClassInfo, - pvSwapChain, - &psGetDispClassBuffersOUT->ui32BufferCount, - psGetDispClassBuffersOUT->ahBuffer); - if (psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } + PVR_ASSERT(psGetDispClassBuffersOUT->ui32BufferCount <= PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS); - PVR_ASSERT(psGetDispClassBuffersOUT->ui32BufferCount <= PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS); + for(i = 0; i < psGetDispClassBuffersOUT->ui32BufferCount; i++) + { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hBufferExt; +#else + IMG_HANDLE hBufferExt; +#endif - for(i = 0; i < psGetDispClassBuffersOUT->ui32BufferCount; i++) - { - IMG_HANDLE hBufferExt; + +#if defined (SUPPORT_SID_INTERFACE) + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &hBufferExt, + pahBuffer[i], + PVRSRV_HANDLE_TYPE_DISP_BUFFER, + (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), + psGetDispClassBuffersIN->hSwapChain); +#else + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &hBufferExt, + psGetDispClassBuffersOUT->ahBuffer[i], + PVRSRV_HANDLE_TYPE_DISP_BUFFER, + (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), + psGetDispClassBuffersIN->hSwapChain); +#endif - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &hBufferExt, - psGetDispClassBuffersOUT->ahBuffer[i], - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetDispClassBuffersIN->hSwapChain); + psGetDispClassBuffersOUT->ahBuffer[i] = hBufferExt; + } - psGetDispClassBuffersOUT->ahBuffer[i] = hBufferExt; - } +#if defined (SUPPORT_SID_INTERFACE) + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, + sizeof(IMG_HANDLE) * PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS, + (IMG_PVOID)pahBuffer, 0); +#endif - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVSwapToDCBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER *psSwapDispClassBufferIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER *psSwapDispClassBufferIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChainBuf; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER); + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChainBuf; +#if defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE hPrivateTag; +#endif - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSwapDispClassBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSwapDispClassBufferIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupSubHandle(psPerProc->psHandleBase, + &pvSwapChainBuf, + psSwapDispClassBufferIN->hBuffer, + PVRSRV_HANDLE_TYPE_DISP_BUFFER, + psSwapDispClassBufferIN->hDeviceKM); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + +#if defined (SUPPORT_SID_INTERFACE) + if (psSwapDispClassBufferIN->hPrivateTag != 0) + { + psRetOUT->eError = + PVRSRVLookupSubHandle(psPerProc->psHandleBase, + &hPrivateTag, + psSwapDispClassBufferIN->hPrivateTag, + PVRSRV_HANDLE_TYPE_DISP_BUFFER, + psSwapDispClassBufferIN->hDeviceKM); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + } + else + { + hPrivateTag = IMG_NULL; + } +#endif - psRetOUT->eError = - PVRSRVLookupSubHandle(psPerProc->psHandleBase, - &pvSwapChainBuf, - psSwapDispClassBufferIN->hBuffer, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - psSwapDispClassBufferIN->hDeviceKM); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - psRetOUT->eError = - PVRSRVSwapToDCBufferKM(pvDispClassInfo, - pvSwapChainBuf, - psSwapDispClassBufferIN->ui32SwapInterval, - psSwapDispClassBufferIN->hPrivateTag, - psSwapDispClassBufferIN->ui32ClipRectCount, - psSwapDispClassBufferIN->sClipRect); + psRetOUT->eError = + PVRSRVSwapToDCBufferKM(pvDispClassInfo, + pvSwapChainBuf, + psSwapDispClassBufferIN->ui32SwapInterval, +#if defined (SUPPORT_SID_INTERFACE) + hPrivateTag, +#else + psSwapDispClassBufferIN->hPrivateTag, +#endif + psSwapDispClassBufferIN->ui32ClipRectCount, + psSwapDispClassBufferIN->sClipRect); - return 0; + return 0; } static IMG_INT PVRSRVSwapToDCSystemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM *psSwapDispClassSystemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM *psSwapDispClassSystemIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSwapDispClassSystemIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupSubHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSwapDispClassSystemIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, - psSwapDispClassSystemIN->hDeviceKM); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - psRetOUT->eError = - PVRSRVSwapToDCSystemKM(pvDispClassInfo, - pvSwapChain); - - return 0; + IMG_VOID *pvDispClassInfo; + IMG_VOID *pvSwapChain; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM); + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvDispClassInfo, + psSwapDispClassSystemIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_DISP_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = + PVRSRVLookupSubHandle(psPerProc->psHandleBase, + &pvSwapChain, + psSwapDispClassSystemIN->hSwapChain, + PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, + psSwapDispClassSystemIN->hDeviceKM); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + psRetOUT->eError = + PVRSRVSwapToDCSystemKM(pvDispClassInfo, + pvSwapChain); + + return 0; } static IMG_INT PVRSRVOpenBCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceIN, - PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceIN, + PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hBufClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE); - - NEW_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc, 1) - - psOpenBufferClassDeviceOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psOpenBufferClassDeviceIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - psOpenBufferClassDeviceOUT->eError = - PVRSRVOpenBCDeviceKM(psPerProc, - psOpenBufferClassDeviceIN->ui32DeviceID, - hDevCookieInt, - &hBufClassInfo); - if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psOpenBufferClassDeviceOUT->hDeviceKM, - hBufClassInfo, - PVRSRV_HANDLE_TYPE_BUF_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc) - - return 0; + IMG_HANDLE hDevCookieInt; + IMG_HANDLE hBufClassInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE); + + NEW_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc, 1) + + psOpenBufferClassDeviceOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, + psOpenBufferClassDeviceIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) + { + return 0; + } + + psOpenBufferClassDeviceOUT->eError = + PVRSRVOpenBCDeviceKM(psPerProc, + psOpenBufferClassDeviceIN->ui32DeviceID, + hDevCookieInt, + &hBufClassInfo); + if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) + { + return 0; + } + + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psOpenBufferClassDeviceOUT->hDeviceKM, + hBufClassInfo, + PVRSRV_HANDLE_TYPE_BUF_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + + COMMIT_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc) + + return 0; } static IMG_INT PVRSRVCloseBCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE *psCloseBufferClassDeviceIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE *psCloseBufferClassDeviceIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvBufClassInfo; + IMG_VOID *pvBufClassInfo; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE); - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psCloseBufferClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvBufClassInfo, + psCloseBufferClassDeviceIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_BUF_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = - PVRSRVCloseBCDeviceKM(pvBufClassInfo, IMG_FALSE); + psRetOUT->eError = + PVRSRVCloseBCDeviceKM(pvBufClassInfo, IMG_FALSE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psCloseBufferClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); + psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, + psCloseBufferClassDeviceIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_BUF_INFO); - return 0; + return 0; } static IMG_INT PVRSRVGetBCInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO *psGetBufferClassInfoIN, - PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO *psGetBufferClassInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO *psGetBufferClassInfoIN, + PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO *psGetBufferClassInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvBufClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO); - - psGetBufferClassInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psGetBufferClassInfoIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psGetBufferClassInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetBufferClassInfoOUT->eError = - PVRSRVGetBCInfoKM(pvBufClassInfo, - &psGetBufferClassInfoOUT->sBufferInfo); - return 0; + IMG_VOID *pvBufClassInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO); + + psGetBufferClassInfoOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvBufClassInfo, + psGetBufferClassInfoIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_BUF_INFO); + if(psGetBufferClassInfoOUT->eError != PVRSRV_OK) + { + return 0; + } + + psGetBufferClassInfoOUT->eError = + PVRSRVGetBCInfoKM(pvBufClassInfo, + &psGetBufferClassInfoOUT->sBufferInfo); + return 0; } static IMG_INT PVRSRVGetBCBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferIN, - PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferIN, + PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_VOID *pvBufClassInfo; - IMG_HANDLE hBufferInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER); - - NEW_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc, 1) - - psGetBufferClassBufferOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psGetBufferClassBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetBufferClassBufferOUT->eError = - PVRSRVGetBCBufferKM(pvBufClassInfo, - psGetBufferClassBufferIN->ui32BufferIndex, - &hBufferInt); - - if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psGetBufferClassBufferOUT->hBuffer, - hBufferInt, - PVRSRV_HANDLE_TYPE_BUF_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetBufferClassBufferIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc) - - return 0; + IMG_VOID *pvBufClassInfo; + IMG_HANDLE hBufferInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER); + + NEW_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc, 1) + + psGetBufferClassBufferOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvBufClassInfo, + psGetBufferClassBufferIN->hDeviceKM, + PVRSRV_HANDLE_TYPE_BUF_INFO); + if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) + { + return 0; + } + + psGetBufferClassBufferOUT->eError = + PVRSRVGetBCBufferKM(pvBufClassInfo, + psGetBufferClassBufferIN->ui32BufferIndex, + &hBufferInt); + + if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) + { + return 0; + } + + + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psGetBufferClassBufferOUT->hBuffer, + hBufferInt, + PVRSRV_HANDLE_TYPE_BUF_BUFFER, + (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), + psGetBufferClassBufferIN->hDeviceKM); + + COMMIT_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc) + + return 0; } static IMG_INT PVRSRVAllocSharedSysMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemIN, - PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemIN, + PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc, 1) - - psAllocSharedSysMemOUT->eError = - PVRSRVAllocSharedSysMemoryKM(psPerProc, - psAllocSharedSysMemIN->ui32Flags, - psAllocSharedSysMemIN->ui32Size, - &psKernelMemInfo); - if(psAllocSharedSysMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - OSMemSet(&psAllocSharedSysMemOUT->sClientMemInfo, - 0, - sizeof(psAllocSharedSysMemOUT->sClientMemInfo)); - - psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddrKM = - psKernelMemInfo->pvLinAddrKM; - - psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddr = 0; - psAllocSharedSysMemOUT->sClientMemInfo.ui32Flags = - psKernelMemInfo->ui32Flags; - psAllocSharedSysMemOUT->sClientMemInfo.ui32AllocSize = - psKernelMemInfo->ui32AllocSize; - psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM); + + NEW_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc, 1) + + psAllocSharedSysMemOUT->eError = + PVRSRVAllocSharedSysMemoryKM(psPerProc, + psAllocSharedSysMemIN->ui32Flags, + psAllocSharedSysMemIN->ui32Size, + &psKernelMemInfo); + if(psAllocSharedSysMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + OSMemSet(&psAllocSharedSysMemOUT->sClientMemInfo, + 0, + sizeof(psAllocSharedSysMemOUT->sClientMemInfo)); + + psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddrKM = + psKernelMemInfo->pvLinAddrKM; + + psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddr = 0; + psAllocSharedSysMemOUT->sClientMemInfo.ui32Flags = + psKernelMemInfo->ui32Flags; + psAllocSharedSysMemOUT->sClientMemInfo.uAllocSize = + psKernelMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) + if (psKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo, + psKernelMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); + } + else + { + psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo = 0; + } +#else + psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; +#endif - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psAllocSharedSysMemOUT->sClientMemInfo.hKernelMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psAllocSharedSysMemOUT->sClientMemInfo.hKernelMemInfo, + psKernelMemInfo, + PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_NONE); - COMMIT_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVFreeSharedSysMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM *psFreeSharedSysMemIN, - PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM *psFreeSharedSysMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM *psFreeSharedSysMemIN, + PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM *psFreeSharedSysMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM); - - psFreeSharedSysMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psKernelMemInfo, - psFreeSharedSysMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) - return 0; + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM); - psFreeSharedSysMemOUT->eError = - PVRSRVFreeSharedSysMemoryKM(psKernelMemInfo); - if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) - return 0; + psFreeSharedSysMemOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID **)&psKernelMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psFreeSharedSysMemIN->hKernelMemInfo, +#else + psFreeSharedSysMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); + + if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) + return 0; + + psFreeSharedSysMemOUT->eError = + PVRSRVFreeSharedSysMemoryKM(psKernelMemInfo); + if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) + return 0; +#if defined (SUPPORT_SID_INTERFACE) + if (psFreeSharedSysMemIN->hMappingInfo != 0) + { + psFreeSharedSysMemOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, + psFreeSharedSysMemIN->hMappingInfo, + PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); + if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) + { + return 0; + } + } +#endif - psFreeSharedSysMemOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psFreeSharedSysMemIN->psKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - return 0; + psFreeSharedSysMemOUT->eError = + PVRSRVReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + psFreeSharedSysMemIN->hKernelMemInfo, +#else + psFreeSharedSysMemIN->psKernelMemInfo, +#endif + PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); + return 0; } static IMG_INT PVRSRVMapMemInfoMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM *psMapMemInfoMemIN, - PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM *psMapMemInfoMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_HANDLE_TYPE eHandleType; - IMG_HANDLE hParent; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_MEMINFO_MEM); - - NEW_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc, 2) - - psMapMemInfoMemOUT->eError = - PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, - (IMG_VOID **)&psKernelMemInfo, - &eHandleType, - psMapMemInfoMemIN->hKernelMemInfo); - if(psMapMemInfoMemOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM *psMapMemInfoMemIN, + PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM *psMapMemInfoMemOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; + PVRSRV_HANDLE_TYPE eHandleType; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hParent; +#else + IMG_HANDLE hParent; +#endif + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_MEMINFO_MEM); + + NEW_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc, 2) + + psMapMemInfoMemOUT->eError = + PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, + (IMG_VOID **)&psKernelMemInfo, + &eHandleType, + psMapMemInfoMemIN->hKernelMemInfo); + if(psMapMemInfoMemOUT->eError != PVRSRV_OK) + { + return 0; + } + + switch (eHandleType) + { +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) + case PVRSRV_HANDLE_TYPE_MEM_INFO: + case PVRSRV_HANDLE_TYPE_MEM_INFO_REF: + case PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO: +#else + case PVRSRV_HANDLE_TYPE_NONE: +#endif + break; + default: + psMapMemInfoMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; + return 0; + } + + + psMapMemInfoMemOUT->eError = + PVRSRVGetParentHandle(psPerProc->psHandleBase, + &hParent, + psMapMemInfoMemIN->hKernelMemInfo, + eHandleType); + if (psMapMemInfoMemOUT->eError != PVRSRV_OK) + { + return 0; + } +#if defined (SUPPORT_SID_INTERFACE) + if (hParent == 0) +#else + if (hParent == IMG_NULL) +#endif + { + hParent = psMapMemInfoMemIN->hKernelMemInfo; + } + + OSMemSet(&psMapMemInfoMemOUT->sClientMemInfo, + 0, + sizeof(psMapMemInfoMemOUT->sClientMemInfo)); + + psMapMemInfoMemOUT->sClientMemInfo.pvLinAddrKM = + psKernelMemInfo->pvLinAddrKM; + + psMapMemInfoMemOUT->sClientMemInfo.pvLinAddr = 0; + psMapMemInfoMemOUT->sClientMemInfo.sDevVAddr = + psKernelMemInfo->sDevVAddr; + psMapMemInfoMemOUT->sClientMemInfo.ui32Flags = + psKernelMemInfo->ui32Flags; + psMapMemInfoMemOUT->sClientMemInfo.uAllocSize = + psKernelMemInfo->uAllocSize; +#if defined (SUPPORT_SID_INTERFACE) + if (psKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo, + psKernelMemInfo->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_MEM_INFO_REF, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + hParent); + } + else + { + psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = 0; + } +#else + psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; +#endif - switch (eHandleType) - { -#if defined(PVR_SECURE_HANDLES) - case PVRSRV_HANDLE_TYPE_MEM_INFO: - case PVRSRV_HANDLE_TYPE_MEM_INFO_REF: - case PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO: + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo, + psKernelMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO_REF, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + hParent); + + if(psKernelMemInfo->ui32Flags & PVRSRV_MEM_NO_SYNCOBJ) + { + + OSMemSet(&psMapMemInfoMemOUT->sClientSyncInfo, + 0, + sizeof (PVRSRV_CLIENT_SYNC_INFO)); + } + else + { + +#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) + psMapMemInfoMemOUT->sClientSyncInfo.psSyncData = + psKernelMemInfo->psKernelSyncInfo->psSyncData; + psMapMemInfoMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = + psKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; + psMapMemInfoMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = + psKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; + +#if defined (SUPPORT_SID_INTERFACE) + if (psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) + { + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo, + psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo); + } + else + { + psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo = 0; + } #else - case PVRSRV_HANDLE_TYPE_NONE: + psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo = + psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; +#endif #endif - break; - default: - psMapMemInfoMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; - return 0; - } - - psMapMemInfoMemOUT->eError = - PVRSRVGetParentHandle(psPerProc->psHandleBase, - &hParent, - psMapMemInfoMemIN->hKernelMemInfo, - eHandleType); - if (psMapMemInfoMemOUT->eError != PVRSRV_OK) - { - return 0; - } - if (hParent == IMG_NULL) - { - hParent = psMapMemInfoMemIN->hKernelMemInfo; - } + psMapMemInfoMemOUT->sClientMemInfo.psClientSyncInfo = &psMapMemInfoMemOUT->sClientSyncInfo; - OSMemSet(&psMapMemInfoMemOUT->sClientMemInfo, - 0, - sizeof(psMapMemInfoMemOUT->sClientMemInfo)); - - psMapMemInfoMemOUT->sClientMemInfo.pvLinAddrKM = - psKernelMemInfo->pvLinAddrKM; - - psMapMemInfoMemOUT->sClientMemInfo.pvLinAddr = 0; - psMapMemInfoMemOUT->sClientMemInfo.sDevVAddr = - psKernelMemInfo->sDevVAddr; - psMapMemInfoMemOUT->sClientMemInfo.ui32Flags = - psKernelMemInfo->ui32Flags; - psMapMemInfoMemOUT->sClientMemInfo.ui32AllocSize = - psKernelMemInfo->ui32AllocSize; - psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - hParent); - - if(psKernelMemInfo->ui32Flags & PVRSRV_MEM_NO_SYNCOBJ) - { - - OSMemSet(&psMapMemInfoMemOUT->sClientSyncInfo, - 0, - sizeof (PVRSRV_CLIENT_SYNC_INFO)); - } - else - { - - psMapMemInfoMemOUT->sClientSyncInfo.psSyncData = - psKernelMemInfo->psKernelSyncInfo->psSyncData; - psMapMemInfoMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapMemInfoMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - - psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo = - psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; - - psMapMemInfoMemOUT->sClientMemInfo.psClientSyncInfo = &psMapMemInfoMemOUT->sClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientSyncInfo.hKernelSyncInfo, - psKernelMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo); - } + PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, + &psMapMemInfoMemOUT->sClientSyncInfo.hKernelSyncInfo, + psKernelMemInfo->psKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI, + psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo); + } - COMMIT_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT MMU_GetPDDevPAddrBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrIN, - PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrIN, + PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hDevMemContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR); - - psGetMmuPDDevPAddrOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psGetMmuPDDevPAddrIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psGetMmuPDDevPAddrOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetMmuPDDevPAddrOUT->sPDDevPAddr = - BM_GetDeviceNode(hDevMemContextInt)->pfnMMUGetPDDevPAddr(BM_GetMMUContextFromMemContext(hDevMemContextInt)); - if(psGetMmuPDDevPAddrOUT->sPDDevPAddr.uiAddr) - { - psGetMmuPDDevPAddrOUT->eError = PVRSRV_OK; - } - else - { - psGetMmuPDDevPAddrOUT->eError = PVRSRV_ERROR_INVALID_PHYS_ADDR; - } - return 0; + IMG_HANDLE hDevMemContextInt; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR); + + psGetMmuPDDevPAddrOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, + psGetMmuPDDevPAddrIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + if(psGetMmuPDDevPAddrOUT->eError != PVRSRV_OK) + { + return 0; + } + + psGetMmuPDDevPAddrOUT->sPDDevPAddr = + BM_GetDeviceNode(hDevMemContextInt)->pfnMMUGetPDDevPAddr(BM_GetMMUContextFromMemContext(hDevMemContextInt)); + if(psGetMmuPDDevPAddrOUT->sPDDevPAddr.uiAddr) + { + psGetMmuPDDevPAddrOUT->eError = PVRSRV_OK; + } + else + { + psGetMmuPDDevPAddrOUT->eError = PVRSRV_ERROR_INVALID_PHYS_ADDR; + } + return 0; } IMG_INT DummyBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + IMG_VOID *psBridgeOut, + PVRSRV_PER_PROCESS_DATA *psPerProc) { #if !defined(DEBUG) - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + PVR_UNREFERENCED_PARAMETER(ui32BridgeID); #endif - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psBridgeOut); - PVR_UNREFERENCED_PARAMETER(psPerProc); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psBridgeOut); + PVR_UNREFERENCED_PARAMETER(psPerProc); #if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u (%s) mapped to " - "Dummy Wrapper (probably not what you want!)", - __FUNCTION__, ui32BridgeID, g_BridgeDispatchTable[ui32BridgeID].pszIOCName)); + PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u (%s) mapped to " + "Dummy Wrapper (probably not what you want!)", + __FUNCTION__, ui32BridgeID, g_BridgeDispatchTable[ui32BridgeID].pszIOCName)); #else - PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u mapped to " - "Dummy Wrapper (probably not what you want!)", - __FUNCTION__, ui32BridgeID)); + PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u mapped to " + "Dummy Wrapper (probably not what you want!)", + __FUNCTION__, ui32BridgeID)); #endif - return -ENOTTY; + return -ENOTTY; } IMG_VOID _SetDispatchTableEntry(IMG_UINT32 ui32Index, - const IMG_CHAR *pszIOCName, - BridgeWrapperFunction pfFunction, - const IMG_CHAR *pszFunctionName) + const IMG_CHAR *pszIOCName, + BridgeWrapperFunction pfFunction, + const IMG_CHAR *pszFunctionName) { - static IMG_UINT32 ui32PrevIndex = ~0UL; + static IMG_UINT32 ui32PrevIndex = ~0UL; #if !defined(DEBUG) - PVR_UNREFERENCED_PARAMETER(pszIOCName); + PVR_UNREFERENCED_PARAMETER(pszIOCName); #endif #if !defined(DEBUG_BRIDGE_KM_DISPATCH_TABLE) && !defined(DEBUG_BRIDGE_KM) - PVR_UNREFERENCED_PARAMETER(pszFunctionName); + PVR_UNREFERENCED_PARAMETER(pszFunctionName); #endif #if defined(DEBUG_BRIDGE_KM_DISPATCH_TABLE) - - PVR_DPF((PVR_DBG_WARNING, "%s: %d %s %s", __FUNCTION__, ui32Index, pszIOCName, pszFunctionName)); + + PVR_DPF((PVR_DBG_WARNING, "%s: %d %s %s", __FUNCTION__, ui32Index, pszIOCName, pszFunctionName)); #endif - - if(g_BridgeDispatchTable[ui32Index].pfFunction) - { + + if(g_BridgeDispatchTable[ui32Index].pfFunction) + { #if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, - "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry for %s", - __FUNCTION__, pszIOCName, g_BridgeDispatchTable[ui32Index].pszIOCName)); + PVR_DPF((PVR_DBG_ERROR, + "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry for %s", + __FUNCTION__, pszIOCName, g_BridgeDispatchTable[ui32Index].pszIOCName)); #else - PVR_DPF((PVR_DBG_ERROR, - "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry (index=%u)", - __FUNCTION__, pszIOCName, ui32Index)); + PVR_DPF((PVR_DBG_ERROR, + "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry (index=%u)", + __FUNCTION__, pszIOCName, ui32Index)); #endif - PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); - } - - - if((ui32PrevIndex != ~0UL) && - ((ui32Index >= ui32PrevIndex + DISPATCH_TABLE_GAP_THRESHOLD) || - (ui32Index <= ui32PrevIndex))) - { + PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); + } + + + if((ui32PrevIndex != ~0UL) && + ((ui32Index >= ui32PrevIndex + DISPATCH_TABLE_GAP_THRESHOLD) || + (ui32Index <= ui32PrevIndex))) + { #if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_WARNING, - "%s: There is a gap in the dispatch table between indices %u (%s) and %u (%s)", - __FUNCTION__, ui32PrevIndex, g_BridgeDispatchTable[ui32PrevIndex].pszIOCName, - ui32Index, pszIOCName)); + PVR_DPF((PVR_DBG_WARNING, + "%s: There is a gap in the dispatch table between indices %u (%s) and %u (%s)", + __FUNCTION__, ui32PrevIndex, g_BridgeDispatchTable[ui32PrevIndex].pszIOCName, + ui32Index, pszIOCName)); #else - PVR_DPF((PVR_DBG_WARNING, - "%s: There is a gap in the dispatch table between indices %u and %u (%s)", - __FUNCTION__, (IMG_UINT)ui32PrevIndex, (IMG_UINT)ui32Index, pszIOCName)); + PVR_DPF((PVR_DBG_WARNING, + "%s: There is a gap in the dispatch table between indices %u and %u (%s)", + __FUNCTION__, (IMG_UINT)ui32PrevIndex, (IMG_UINT)ui32Index, pszIOCName)); #endif - PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); - } + PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); + } - g_BridgeDispatchTable[ui32Index].pfFunction = pfFunction; + g_BridgeDispatchTable[ui32Index].pfFunction = pfFunction; #if defined(DEBUG_BRIDGE_KM) - g_BridgeDispatchTable[ui32Index].pszIOCName = pszIOCName; - g_BridgeDispatchTable[ui32Index].pszFunctionName = pszFunctionName; - g_BridgeDispatchTable[ui32Index].ui32CallCount = 0; - g_BridgeDispatchTable[ui32Index].ui32CopyFromUserTotalBytes = 0; + g_BridgeDispatchTable[ui32Index].pszIOCName = pszIOCName; + g_BridgeDispatchTable[ui32Index].pszFunctionName = pszFunctionName; + g_BridgeDispatchTable[ui32Index].ui32CallCount = 0; + g_BridgeDispatchTable[ui32Index].ui32CopyFromUserTotalBytes = 0; #endif - ui32PrevIndex = ui32Index; + ui32PrevIndex = ui32Index; } static IMG_INT PVRSRVInitSrvConnectBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_CONNECT); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_CONNECT); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - if((OSProcHasPrivSrvInit() == IMG_FALSE) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) - { - psRetOUT->eError = PVRSRV_ERROR_SRV_CONNECT_FAILED; - return 0; - } + + if((OSProcHasPrivSrvInit() == IMG_FALSE) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) + { + psRetOUT->eError = PVRSRV_ERROR_SRV_CONNECT_FAILED; + return 0; + } -#if defined (__linux__) - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_TRUE); +#if defined (__linux__) || defined(__QNXNTO__) + PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_TRUE); #endif - psPerProc->bInitProcess = IMG_TRUE; + psPerProc->bInitProcess = IMG_TRUE; - psRetOUT->eError = PVRSRV_OK; + psRetOUT->eError = PVRSRV_OK; - return 0; + return 0; } static IMG_INT PVRSRVInitSrvDisconnectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT *psInitSrvDisconnectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT *psInitSrvDisconnectIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_DISCONNECT); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_DISCONNECT); - if(!psPerProc->bInitProcess) - { - psRetOUT->eError = PVRSRV_ERROR_SRV_DISCONNECT_FAILED; - return 0; - } + if(!psPerProc->bInitProcess) + { + psRetOUT->eError = PVRSRV_ERROR_SRV_DISCONNECT_FAILED; + return 0; + } - psPerProc->bInitProcess = IMG_FALSE; + psPerProc->bInitProcess = IMG_FALSE; - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_FALSE); - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RAN, IMG_TRUE); + PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_FALSE); + PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RAN, IMG_TRUE); - psRetOUT->eError = PVRSRVFinaliseSystem(psInitSrvDisconnectIN->bInitSuccesful); + psRetOUT->eError = PVRSRVFinaliseSystem(psInitSrvDisconnectIN->bInitSuccesful); - PVRSRVSetInitServerState( PVRSRV_INIT_SERVER_SUCCESSFUL , - ((psRetOUT->eError == PVRSRV_OK) && (psInitSrvDisconnectIN->bInitSuccesful)) - ? IMG_TRUE : IMG_FALSE); + PVRSRVSetInitServerState( PVRSRV_INIT_SERVER_SUCCESSFUL , + ((psRetOUT->eError == PVRSRV_OK) && (psInitSrvDisconnectIN->bInitSuccesful)) + ? IMG_TRUE : IMG_FALSE); - return 0; + return 0; } static IMG_INT PVRSRVEventObjectWaitBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAIT *psEventObjectWaitIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAIT *psEventObjectWaitIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hOSEventKM; + IMG_HANDLE hOSEventKM; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_WAIT); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_WAIT); - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hOSEventKM, - psEventObjectWaitIN->hOSEventKM, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); + psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + &hOSEventKM, + psEventObjectWaitIN->hOSEventKM, + PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } - psRetOUT->eError = OSEventObjectWait(hOSEventKM); + psRetOUT->eError = OSEventObjectWaitKM(hOSEventKM); - return 0; + return 0; } static IMG_INT PVRSRVEventObjectOpenBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN *psEventObjectOpenIN, - PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN *psEventObjectOpenOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN *psEventObjectOpenIN, + PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN *psEventObjectOpenOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_EVENTOBJECT_KM sEventObject; + IMG_HANDLE hOSEvent; +#endif - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_OPEN); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_OPEN); - NEW_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc, 1) + NEW_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc, 1) - psEventObjectOpenOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psEventObjectOpenIN->sEventObject.hOSEventKM, - psEventObjectOpenIN->sEventObject.hOSEventKM, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); + psEventObjectOpenOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sEventObject.hOSEventKM, +#else + &psEventObjectOpenIN->sEventObject.hOSEventKM, +#endif + psEventObjectOpenIN->sEventObject.hOSEventKM, + PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); - if(psEventObjectOpenOUT->eError != PVRSRV_OK) - { - return 0; - } + if(psEventObjectOpenOUT->eError != PVRSRV_OK) + { + return 0; + } - psEventObjectOpenOUT->eError = OSEventObjectOpen(&psEventObjectOpenIN->sEventObject, &psEventObjectOpenOUT->hOSEvent); +#if defined (SUPPORT_SID_INTERFACE) + OSMemCopy(&sEventObject.szName, + &psEventObjectOpenIN->sEventObject.szName, + EVENTOBJNAME_MAXLENGTH); - if(psEventObjectOpenOUT->eError != PVRSRV_OK) - { - return 0; - } + psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&sEventObject, &hOSEvent); +#else + psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&psEventObjectOpenIN->sEventObject, &psEventObjectOpenOUT->hOSEvent); +#endif - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psEventObjectOpenOUT->hOSEvent, - psEventObjectOpenOUT->hOSEvent, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI); + if(psEventObjectOpenOUT->eError != PVRSRV_OK) + { + return 0; + } + +#if defined (SUPPORT_SID_INTERFACE) +#if !defined (WINXP) && !defined(SUPPORT_VISTA) + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psEventObjectOpenOUT->hOSEvent, + hOSEvent, + PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI); +#endif +#else + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psEventObjectOpenOUT->hOSEvent, + psEventObjectOpenOUT->hOSEvent, + PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, + PVRSRV_HANDLE_ALLOC_FLAG_MULTI); +#endif - COMMIT_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVEventObjectCloseBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE *psEventObjectCloseIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE *psEventObjectCloseIN, + PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - IMG_HANDLE hOSEventKM; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psEventObjectCloseIN->sEventObject.hOSEventKM, - psEventObjectCloseIN->sEventObject.hOSEventKM, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &hOSEventKM, - psEventObjectCloseIN->hOSEventKM, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); + IMG_HANDLE hOSEventKM; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_EVENTOBJECT_KM sEventObject; +#endif - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE); - psRetOUT->eError = OSEventObjectClose(&psEventObjectCloseIN->sEventObject, hOSEventKM); + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sEventObject.hOSEventKM, +#else + &psEventObjectCloseIN->sEventObject.hOSEventKM, +#endif + psEventObjectCloseIN->sEventObject.hOSEventKM, + PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + psRetOUT->eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, + &hOSEventKM, + psEventObjectCloseIN->hOSEventKM, + PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + +#if defined (SUPPORT_SID_INTERFACE) + if(CopyFromUserWrapper(psPerProc, ui32BridgeID, + &sEventObject.szName, + &psEventObjectCloseIN->sEventObject.szName, + EVENTOBJNAME_MAXLENGTH) != PVRSRV_OK) + { + + return -EFAULT; + } + + psRetOUT->eError = OSEventObjectCloseKM(&sEventObject, hOSEventKM); +#else + psRetOUT->eError = OSEventObjectCloseKM(&psEventObjectCloseIN->sEventObject, hOSEventKM); +#endif - return 0; + return 0; } typedef struct _MODIFY_SYNC_OP_INFO { - IMG_HANDLE hResItem; - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - IMG_UINT32 ui32ModifyFlags; - IMG_UINT32 ui32ReadOpsPendingSnapShot; - IMG_UINT32 ui32WriteOpsPendingSnapShot; + IMG_HANDLE hResItem; + PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; + IMG_UINT32 ui32ModifyFlags; + IMG_UINT32 ui32ReadOpsPendingSnapShot; + IMG_UINT32 ui32WriteOpsPendingSnapShot; } MODIFY_SYNC_OP_INFO; -static PVRSRV_ERROR DoQuerySyncOpsSatisfied(MODIFY_SYNC_OP_INFO *psModSyncOpInfo) +static PVRSRV_ERROR DoQuerySyncOpsSatisfied(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo, + IMG_UINT32 ui32ReadOpsPendingSnapShot, + IMG_UINT32 ui32WriteOpsPendingSnapShot) { - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; + IMG_UINT32 ui32WriteOpsPending; + IMG_UINT32 ui32ReadOpsPending; - psKernelSyncInfo = psModSyncOpInfo->psKernelSyncInfo; + + if (!psKernelSyncInfo) + { + return PVRSRV_ERROR_INVALID_PARAMS; + } - if (!psKernelSyncInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } + - if((psModSyncOpInfo->ui32WriteOpsPendingSnapShot == psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) - && (psModSyncOpInfo->ui32ReadOpsPendingSnapShot == psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) - { -#if defined(PDUMP) - - - - PDumpComment("Poll for read ops complete to reach value (%u)", psModSyncOpInfo->ui32ReadOpsPendingSnapShot); - PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - psModSyncOpInfo->ui32ReadOpsPendingSnapShot, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); - - - PDumpComment("Poll for write ops complete to reach value (%u)", psModSyncOpInfo->ui32WriteOpsPendingSnapShot); - PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - psModSyncOpInfo->ui32WriteOpsPendingSnapShot, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); -#endif - return PVRSRV_OK; - } - else - { - return PVRSRV_ERROR_RETRY; - } -} -static PVRSRV_ERROR DoModifyCompleteSyncOps(MODIFY_SYNC_OP_INFO *psModSyncOpInfo) -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - psKernelSyncInfo = psModSyncOpInfo->psKernelSyncInfo; - if (!psKernelSyncInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if((psModSyncOpInfo->ui32WriteOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) - || (psModSyncOpInfo->ui32ReadOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) - { - return PVRSRV_ERROR_BAD_SYNC_STATE; - } - - - if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) - { - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete++; - } - - - if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) - { - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete++; - } - return PVRSRV_OK; -} -static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - PVR_UNREFERENCED_PARAMETER(ui32Param); + ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; + ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - if (!pvParam) - { - PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } + if((ui32WriteOpsPending - ui32WriteOpsPendingSnapShot >= + ui32WriteOpsPending - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) && + (ui32ReadOpsPending - ui32ReadOpsPendingSnapShot >= + ui32ReadOpsPending - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) + { +#if defined(PDUMP) && !defined(SUPPORT_VGX) + + PDumpComment("Poll for read ops complete to reach value (pdump: %u, actual snapshot: %u)", + psKernelSyncInfo->psSyncData->ui32LastReadOpDumpVal, + ui32ReadOpsPendingSnapShot); + PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, + offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), + psKernelSyncInfo->psSyncData->ui32LastReadOpDumpVal, + 0xFFFFFFFF, + PDUMP_POLL_OPERATOR_EQUAL, + 0, + MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); - psModSyncOpInfo = (MODIFY_SYNC_OP_INFO*)pvParam; + + PDumpComment("Poll for write ops complete to reach value (pdump: %u, actual snapshot: %u)", + psKernelSyncInfo->psSyncData->ui32LastOpDumpVal, + ui32WriteOpsPendingSnapShot); + PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, + offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), + psKernelSyncInfo->psSyncData->ui32LastOpDumpVal, + 0xFFFFFFFF, + PDUMP_POLL_OPERATOR_EQUAL, + 0, + MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); + + +#endif + return PVRSRV_OK; + } + else + { + return PVRSRV_ERROR_RETRY; + } +} - if (psModSyncOpInfo->psKernelSyncInfo) - { - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if (DoQuerySyncOpsSatisfied(psModSyncOpInfo) == PVRSRV_OK) - { - goto OpFlushedComplete; - } - PVR_DPF((PVR_DBG_WARNING, "ModifyCompleteSyncOpsCallBack: waiting for current Ops to flush")); - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: timeout whilst waiting for current Ops to flush.")); - PVR_DPF((PVR_DBG_ERROR, " Write ops pending snapshot = %d, write ops complete = %d", - psModSyncOpInfo->ui32WriteOpsPendingSnapShot, - psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32WriteOpsComplete)); - PVR_DPF((PVR_DBG_ERROR, " Read ops pending snapshot = %d, write ops complete = %d", - psModSyncOpInfo->ui32ReadOpsPendingSnapShot, - psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)); - - return PVRSRV_ERROR_TIMEOUT; - - OpFlushedComplete: - - DoModifyCompleteSyncOps(psModSyncOpInfo); - } - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(MODIFY_SYNC_OP_INFO), (IMG_VOID *)psModSyncOpInfo, 0); - +static PVRSRV_ERROR DoModifyCompleteSyncOps(MODIFY_SYNC_OP_INFO *psModSyncOpInfo) +{ + PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; + + psKernelSyncInfo = psModSyncOpInfo->psKernelSyncInfo; + + if (!psKernelSyncInfo) + { + return PVRSRV_ERROR_INVALID_PARAMS; + } + + + if((psModSyncOpInfo->ui32WriteOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) + || (psModSyncOpInfo->ui32ReadOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) + { + return PVRSRV_ERROR_BAD_SYNC_STATE; + } + + + if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) + { + psKernelSyncInfo->psSyncData->ui32WriteOpsComplete++; + } + + + if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) + { + psKernelSyncInfo->psSyncData->ui32ReadOpsComplete++; + } + + return PVRSRV_OK; +} - - PVRSRVScheduleDeviceCallbacks(); - return PVRSRV_OK; +static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) +{ + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; + + PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); + + if (!pvParam) + { + PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: invalid parameter")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + psModSyncOpInfo = (MODIFY_SYNC_OP_INFO*)pvParam; + + if (psModSyncOpInfo->psKernelSyncInfo) + { + + LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) + { + if (DoQuerySyncOpsSatisfied(psModSyncOpInfo->psKernelSyncInfo, + psModSyncOpInfo->ui32ReadOpsPendingSnapShot, + psModSyncOpInfo->ui32WriteOpsPendingSnapShot) == PVRSRV_OK) + { + goto OpFlushedComplete; + } + PVR_DPF((PVR_DBG_WARNING, "ModifyCompleteSyncOpsCallBack: waiting for current Ops to flush")); + OSSleepms(1); + } END_LOOP_UNTIL_TIMEOUT(); + + PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: timeout whilst waiting for current Ops to flush.")); + PVR_DPF((PVR_DBG_ERROR, " Write ops pending snapshot = %d, write ops complete = %d", + psModSyncOpInfo->ui32WriteOpsPendingSnapShot, + psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32WriteOpsComplete)); + PVR_DPF((PVR_DBG_ERROR, " Read ops pending snapshot = %d, write ops complete = %d", + psModSyncOpInfo->ui32ReadOpsPendingSnapShot, + psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)); + + return PVRSRV_ERROR_TIMEOUT; + + OpFlushedComplete: + + DoModifyCompleteSyncOps(psModSyncOpInfo); + } + + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(MODIFY_SYNC_OP_INFO), (IMG_VOID *)psModSyncOpInfo, 0); + + + + PVRSRVScheduleDeviceCallbacks(); + + return PVRSRV_OK; } static IMG_INT PVRSRVCreateSyncInfoModObjBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ *psCreateSyncInfoModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + IMG_VOID *psBridgeIn, + PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ *psCreateSyncInfoModObjOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - PVR_UNREFERENCED_PARAMETER(psBridgeIn); + PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ); + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ); - NEW_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc, 1) + NEW_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc, 1) - ASSIGN_AND_EXIT_ON_ERROR(psCreateSyncInfoModObjOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(MODIFY_SYNC_OP_INFO), - (IMG_VOID **)&psModSyncOpInfo, 0, - "ModSyncOpInfo (MODIFY_SYNC_OP_INFO)")); + ASSIGN_AND_EXIT_ON_ERROR(psCreateSyncInfoModObjOUT->eError, + OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + sizeof(MODIFY_SYNC_OP_INFO), + (IMG_VOID **)&psModSyncOpInfo, 0, + "ModSyncOpInfo (MODIFY_SYNC_OP_INFO)")); - psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; + psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; - psCreateSyncInfoModObjOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psCreateSyncInfoModObjOUT->hKernelSyncInfoModObj, - psModSyncOpInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ, - PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); + psCreateSyncInfoModObjOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, + &psCreateSyncInfoModObjOUT->hKernelSyncInfoModObj, + psModSyncOpInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ, + PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); - if (psCreateSyncInfoModObjOUT->eError != PVRSRV_OK) - { - return 0; - } + if (psCreateSyncInfoModObjOUT->eError != PVRSRV_OK) + { + return 0; + } - psModSyncOpInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_MODIFY_SYNC_OPS, - psModSyncOpInfo, - 0, - &ModifyCompleteSyncOpsCallBack); + psModSyncOpInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, + RESMAN_TYPE_MODIFY_SYNC_OPS, + psModSyncOpInfo, + 0, + &ModifyCompleteSyncOpsCallBack); - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc) + COMMIT_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc) - return 0; + return 0; } static IMG_INT PVRSRVDestroySyncInfoModObjBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ *psDestroySyncInfoModObjIN, - PVRSRV_BRIDGE_RETURN *psDestroySyncInfoModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ *psDestroySyncInfoModObjIN, + PVRSRV_BRIDGE_RETURN *psDestroySyncInfoModObjOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ); - - psDestroySyncInfoModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo != IMG_NULL) - { - - psDestroySyncInfoModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - psDestroySyncInfoModObjOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVReleaseHandle failed")); - return 0; - } - - psDestroySyncInfoModObjOUT->eError = ResManFreeResByPtr(psModSyncOpInfo->hResItem); - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed")); - return 0; - } - - return 0; + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ); + + psDestroySyncInfoModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psModSyncOpInfo, + psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); + if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVLookupHandle failed")); + return 0; + } + + if(psModSyncOpInfo->psKernelSyncInfo != IMG_NULL) + { + + psDestroySyncInfoModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; + return 0; + } + + psDestroySyncInfoModObjOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, + psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); + + if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVReleaseHandle failed")); + return 0; + } + + psDestroySyncInfoModObjOUT->eError = ResManFreeResByPtr(psModSyncOpInfo->hResItem, CLEANUP_WITH_POLL); + if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed")); + return 0; + } + + return 0; } - + static IMG_INT -PVRSRVModifyPendingSyncOpsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsIN, - PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) +PVRSRVModifyPendingSyncOpsBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsIN, + PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS); - - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psModifySyncOpsIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } + PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS); + + psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psModSyncOpInfo, + psModifySyncOpsIN->hKernelSyncInfoModObj, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); + if (psModifySyncOpsOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); + return 0; + } + + psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psKernelSyncInfo, + psModifySyncOpsIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if (psModifySyncOpsOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); + return 0; + } + + if(psModSyncOpInfo->psKernelSyncInfo) + { + + psModifySyncOpsOUT->eError = PVRSRV_ERROR_RETRY; + PVR_DPF((PVR_DBG_VERBOSE, "PVRSRVModifyPendingSyncOpsBW: SyncInfo Modification object is not empty")); + return 0; + } + + + psModSyncOpInfo->psKernelSyncInfo = psKernelSyncInfo; + psModSyncOpInfo->ui32ModifyFlags = psModifySyncOpsIN->ui32ModifyFlags; + psModSyncOpInfo->ui32ReadOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; + psModSyncOpInfo->ui32WriteOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; + + + + psModifySyncOpsOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; + psModifySyncOpsOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; + + if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) + { + psKernelSyncInfo->psSyncData->ui32WriteOpsPending++; + } + + if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) + { + psKernelSyncInfo->psSyncData->ui32ReadOpsPending++; + } + + + psModifySyncOpsOUT->eError = ResManDissociateRes(psModSyncOpInfo->hResItem, + psPerProc->hResManContext); + + if (psModifySyncOpsOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); + return 0; + } + + return 0; +} - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelSyncInfo, - psModifySyncOpsIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } - if(psModSyncOpInfo->psKernelSyncInfo) - { - - psModifySyncOpsOUT->eError = PVRSRV_ERROR_RETRY; - PVR_DPF((PVR_DBG_VERBOSE, "PVRSRVModifyPendingSyncOpsBW: SyncInfo Modification object is not empty")); - return 0; - } +static IMG_INT +PVRSRVModifyCompleteSyncOpsBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS *psModifySyncOpsIN, + PVRSRV_BRIDGE_RETURN *psModifySyncOpsOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - psModSyncOpInfo->psKernelSyncInfo = psKernelSyncInfo; - psModSyncOpInfo->ui32ModifyFlags = psModifySyncOpsIN->ui32ModifyFlags; - psModSyncOpInfo->ui32ReadOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - psModSyncOpInfo->ui32WriteOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS); - + psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psModSyncOpInfo, + psModifySyncOpsIN->hKernelSyncInfoModObj, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); + if (psModifySyncOpsOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: PVRSRVLookupHandle failed")); + return 0; + } - psModifySyncOpsOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - psModifySyncOpsOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; + if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) + { + + psModifySyncOpsOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; + return 0; + } - if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) - { - psKernelSyncInfo->psSyncData->ui32WriteOpsPending++; - } + psModifySyncOpsOUT->eError = DoModifyCompleteSyncOps(psModSyncOpInfo); - if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) - { - psKernelSyncInfo->psSyncData->ui32ReadOpsPending++; - } + if (psModifySyncOpsOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: DoModifyCompleteSyncOps failed")); + return 0; + } - - psModifySyncOpsOUT->eError = ResManDissociateRes(psModSyncOpInfo->hResItem, - psPerProc->hResManContext); + psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } + + PVRSRVScheduleDeviceCallbacks(); - return 0; + return 0; } static IMG_INT -PVRSRVModifyCompleteSyncOpsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS *psModifySyncOpsIN, - PVRSRV_BRIDGE_RETURN *psModifySyncOpsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) +PVRSRVSyncOpsTakeTokenBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN *psSyncOpsTakeTokenIN, + PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN *psSyncOpsTakeTokenOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS); + PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psModifySyncOpsIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN); - if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) - { - - psModifySyncOpsOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } + psSyncOpsTakeTokenOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psKernelSyncInfo, + psSyncOpsTakeTokenIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if (psSyncOpsTakeTokenOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsTakeTokenBW: PVRSRVLookupHandle failed")); + return 0; + } - psModifySyncOpsOUT->eError = DoModifyCompleteSyncOps(psModSyncOpInfo); + - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: DoModifyCompleteSyncOps failed")); - return 0; - } + psSyncOpsTakeTokenOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; + psSyncOpsTakeTokenOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; - psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; + return 0; +} - - PVRSRVScheduleDeviceCallbacks(); - return 0; +static IMG_INT +PVRSRVSyncOpsFlushToTokenBW(IMG_UINT32 ui32BridgeID, + PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN *psSyncOpsFlushToTokenIN, + PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToTokenOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; + IMG_UINT32 ui32ReadOpsPendingSnapshot; + IMG_UINT32 ui32WriteOpsPendingSnapshot; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_TOKEN); + + psSyncOpsFlushToTokenOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psKernelSyncInfo, + psSyncOpsFlushToTokenIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if (psSyncOpsFlushToTokenOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToTokenBW: PVRSRVLookupHandle failed")); + return 0; + } + + ui32ReadOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32ReadOpsPendingSnapshot; + ui32WriteOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32WriteOpsPendingSnapshot; + + psSyncOpsFlushToTokenOUT->eError = DoQuerySyncOpsSatisfied(psKernelSyncInfo, + ui32ReadOpsPendingSnapshot, + ui32WriteOpsPendingSnapshot); + + if (psSyncOpsFlushToTokenOUT->eError != PVRSRV_OK && psSyncOpsFlushToTokenOUT->eError != PVRSRV_ERROR_RETRY) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToTokenBW: DoQuerySyncOpsSatisfied failed")); + return 0; + } + + return 0; } static IMG_INT PVRSRVSyncOpsFlushToModObjBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ *psSyncOpsFlushToModObjIN, - PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ *psSyncOpsFlushToModObjIN, + PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToModObjOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ); - - psSyncOpsFlushToModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psSyncOpsFlushToModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) - { - - psSyncOpsFlushToModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - psSyncOpsFlushToModObjOUT->eError = DoQuerySyncOpsSatisfied(psModSyncOpInfo); - - if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK && psSyncOpsFlushToModObjOUT->eError != PVRSRV_ERROR_RETRY) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: DoQuerySyncOpsSatisfied failed")); - return 0; - } - - return 0; + MODIFY_SYNC_OP_INFO *psModSyncOpInfo; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ); + + psSyncOpsFlushToModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psModSyncOpInfo, + psSyncOpsFlushToModObjIN->hKernelSyncInfoModObj, + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); + if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: PVRSRVLookupHandle failed")); + return 0; + } + + if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) + { + + psSyncOpsFlushToModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; + return 0; + } + + psSyncOpsFlushToModObjOUT->eError = DoQuerySyncOpsSatisfied(psModSyncOpInfo->psKernelSyncInfo, + psModSyncOpInfo->ui32ReadOpsPendingSnapShot, + psModSyncOpInfo->ui32WriteOpsPendingSnapShot); + + if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK && psSyncOpsFlushToModObjOUT->eError != PVRSRV_ERROR_RETRY) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: DoQuerySyncOpsSatisfied failed")); + return 0; + } + + return 0; } static IMG_INT PVRSRVSyncOpsFlushToDeltaBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA *psSyncOpsFlushToDeltaIN, - PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToDeltaOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA *psSyncOpsFlushToDeltaIN, + PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToDeltaOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - IMG_UINT32 ui32DeltaRead; - IMG_UINT32 ui32DeltaWrite; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA); - - psSyncOpsFlushToDeltaOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psSyncInfo, - psSyncOpsFlushToDeltaIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psSyncOpsFlushToDeltaOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToDeltaBW: PVRSRVLookupHandle failed")); - return 0; - } - - ui32DeltaRead = psSyncInfo->psSyncData->ui32ReadOpsPending - psSyncInfo->psSyncData->ui32ReadOpsComplete; - ui32DeltaWrite = psSyncInfo->psSyncData->ui32WriteOpsPending - psSyncInfo->psSyncData->ui32WriteOpsComplete; - - if (ui32DeltaRead <= psSyncOpsFlushToDeltaIN->ui32Delta && ui32DeltaWrite <= psSyncOpsFlushToDeltaIN->ui32Delta) - { -#if defined(PDUMP) - IMG_UINT32 ui32MinimumReadOpsComplete; - - ui32MinimumReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - if (ui32MinimumReadOpsComplete < psSyncOpsFlushToDeltaIN->ui32Delta) - { - ui32MinimumReadOpsComplete = 0; - } - else - { - ui32MinimumReadOpsComplete = ui32MinimumReadOpsComplete - psSyncOpsFlushToDeltaIN->ui32Delta; - } - - - PDumpComment("Poll for read ops complete to delta (%u)", - psSyncOpsFlushToDeltaIN->ui32Delta); - psSyncOpsFlushToDeltaOUT->eError = - PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_GREATEREQUAL, - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); + PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; + IMG_UINT32 ui32DeltaRead; + IMG_UINT32 ui32DeltaWrite; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA); + + psSyncOpsFlushToDeltaOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psSyncInfo, + psSyncOpsFlushToDeltaIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if (psSyncOpsFlushToDeltaOUT->eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToDeltaBW: PVRSRVLookupHandle failed")); + return 0; + } + + + ui32DeltaRead = psSyncInfo->psSyncData->ui32ReadOpsPending - psSyncInfo->psSyncData->ui32ReadOpsComplete; + ui32DeltaWrite = psSyncInfo->psSyncData->ui32WriteOpsPending - psSyncInfo->psSyncData->ui32WriteOpsComplete; + + if (ui32DeltaRead <= psSyncOpsFlushToDeltaIN->ui32Delta && ui32DeltaWrite <= psSyncOpsFlushToDeltaIN->ui32Delta) + { +#if defined(PDUMP) && !defined(SUPPORT_VGX) + + PDumpComment("Poll for read ops complete to delta (%u)", + psSyncOpsFlushToDeltaIN->ui32Delta); + psSyncOpsFlushToDeltaOUT->eError = + PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, + offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), + psSyncInfo->psSyncData->ui32LastReadOpDumpVal, + 0xFFFFFFFF, + PDUMP_POLL_OPERATOR_GREATEREQUAL, + 0, + MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); + + + PDumpComment("Poll for write ops complete to delta (%u)", + psSyncOpsFlushToDeltaIN->ui32Delta); + psSyncOpsFlushToDeltaOUT->eError = + PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, + offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), + psSyncInfo->psSyncData->ui32LastOpDumpVal, + 0xFFFFFFFF, + PDUMP_POLL_OPERATOR_GREATEREQUAL, + 0, + MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); +#endif - - PDumpComment("Poll for write ops complete to delta (%u)", - psSyncOpsFlushToDeltaIN->ui32Delta); - psSyncOpsFlushToDeltaOUT->eError = - PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - psSyncInfo->psSyncData->ui32LastOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_GREATEREQUAL, - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); -#endif - - psSyncOpsFlushToDeltaOUT->eError = PVRSRV_OK; - } - else - { - psSyncOpsFlushToDeltaOUT->eError = PVRSRV_ERROR_RETRY; - } + psSyncOpsFlushToDeltaOUT->eError = PVRSRV_OK; + } + else + { + psSyncOpsFlushToDeltaOUT->eError = PVRSRV_ERROR_RETRY; + } - return 0; + return 0; } static PVRSRV_ERROR -FreeSyncInfoCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +FreeSyncInfoCallback(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; + PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; + PVRSRV_ERROR eError; - PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)pvParam; + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)pvParam; - eError = PVRSRVFreeSyncInfoKM(psSyncInfo); - if (eError != PVRSRV_OK) - { - return eError; - } - - return PVRSRV_OK; + eError = PVRSRVFreeSyncInfoKM(psSyncInfo); + if (eError != PVRSRV_OK) + { + return eError; + } + + return PVRSRV_OK; } static IMG_INT PVRSRVAllocSyncInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO *psAllocSyncInfoIN, - PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO *psAllocSyncInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContext; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SYNC_INFO); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocSyncInfoOUT->eError, psPerProc, 1) - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_HANDLE *)&psDeviceNode, - psAllocSyncInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit; - } - - hDevMemContext = psDeviceNode->sDevMemoryInfo.pBMKernelContext; - - eError = PVRSRVAllocSyncInfoKM(psDeviceNode, - hDevMemContext, - &psSyncInfo); - - if (eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit; - } - - eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psAllocSyncInfoOUT->hKernelSyncInfo, - psSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); - - if(eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit_freesyncinfo; - } - - psSyncInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SYNC_INFO, - psSyncInfo, - 0, - FreeSyncInfoCallback); - - - goto allocsyncinfo_commit; - - + PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO *psAllocSyncInfoIN, + PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO *psAllocSyncInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) +{ + PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; + PVRSRV_ERROR eError; + PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_HANDLE hDevMemContext; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SYNC_INFO); + + NEW_HANDLE_BATCH_OR_ERROR(psAllocSyncInfoOUT->eError, psPerProc, 1) + + eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_HANDLE *)&psDeviceNode, + psAllocSyncInfoIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE); + if(eError != PVRSRV_OK) + { + goto allocsyncinfo_errorexit; + } + + hDevMemContext = psDeviceNode->sDevMemoryInfo.pBMKernelContext; + + eError = PVRSRVAllocSyncInfoKM(psDeviceNode, + hDevMemContext, + &psSyncInfo); + + if (eError != PVRSRV_OK) + { + goto allocsyncinfo_errorexit; + } + + eError = PVRSRVAllocHandle(psPerProc->psHandleBase, + &psAllocSyncInfoOUT->hKernelSyncInfo, + psSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO, + PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); + + if(eError != PVRSRV_OK) + { + goto allocsyncinfo_errorexit_freesyncinfo; + } + + psSyncInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, + RESMAN_TYPE_SYNC_INFO, + psSyncInfo, + 0, + FreeSyncInfoCallback); + + + goto allocsyncinfo_commit; + + allocsyncinfo_errorexit_freesyncinfo: - PVRSRVFreeSyncInfoKM(psSyncInfo); + PVRSRVFreeSyncInfoKM(psSyncInfo); allocsyncinfo_errorexit: - + allocsyncinfo_commit: - psAllocSyncInfoOUT->eError = eError; - COMMIT_HANDLE_BATCH_OR_ERROR(eError, psPerProc); - - return 0; + psAllocSyncInfoOUT->eError = eError; + COMMIT_HANDLE_BATCH_OR_ERROR(eError, psPerProc); + + return 0; } static IMG_INT PVRSRVFreeSyncInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREE_SYNC_INFO *psFreeSyncInfoIN, - PVRSRV_BRIDGE_RETURN *psFreeSyncInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) + PVRSRV_BRIDGE_IN_FREE_SYNC_INFO *psFreeSyncInfoIN, + PVRSRV_BRIDGE_RETURN *psFreeSyncInfoOUT, + PVRSRV_PER_PROCESS_DATA *psPerProc) { - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SYNC_INFO); - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psSyncInfo, - psFreeSyncInfoIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVLookupHandle failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psFreeSyncInfoIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVReleaseHandle failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - eError = ResManFreeResByPtr(psSyncInfo->hResItem); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - return 0; + PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; + PVRSRV_ERROR eError; + + PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SYNC_INFO); + + eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psSyncInfo, + psFreeSyncInfoIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVLookupHandle failed")); + psFreeSyncInfoOUT->eError = eError; + return 0; + } + + eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, + psFreeSyncInfoIN->hKernelSyncInfo, + PVRSRV_HANDLE_TYPE_SYNC_INFO); + + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVReleaseHandle failed")); + psFreeSyncInfoOUT->eError = eError; + return 0; + } + + eError = ResManFreeResByPtr(psSyncInfo->hResItem, CLEANUP_WITH_POLL); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed")); + psFreeSyncInfoOUT->eError = eError; + return 0; + } + + return 0; } PVRSRV_ERROR CommonBridgeInit(IMG_VOID) { - IMG_UINT32 i; - - SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DEVICES, PVRSRVEnumerateDevicesBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO, PVRSRVAcquireDeviceDataBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_DEVICEINFO, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT, PVRSRVCreateDeviceMemContextBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT, PVRSRVDestroyDeviceMemContextBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO, PVRSRVGetDeviceMemHeapInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_DEVICEMEM, PVRSRVAllocDeviceMemBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_DEVICEMEM, PVRSRVFreeDeviceMemBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GETFREE_DEVICEMEM, PVRSRVGetFreeDeviceMemBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_COMMANDQUEUE, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA, PVRMMapOSMemHandleToMMapDataBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CONNECT_SERVICES, PVRSRVConnectBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DISCONNECT_SERVICES, PVRSRVDisconnectBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_WRAP_DEVICE_MEM, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DEVICEMEMINFO, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_RESERVE_DEV_VIRTMEM , DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_DEV_VIRTMEM, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_EXT_MEMORY, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_EXT_MEMORY, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEV_MEMORY, PVRSRVMapDeviceMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_DEV_MEMORY, PVRSRVUnmapDeviceMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY, PVRSRVMapDeviceClassMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY, PVRSRVUnmapDeviceClassMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_MEM_INFO_TO_USER, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_MEM_INFO_FROM_USER, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_EXPORT_DEVICEMEM, PVRSRVExportDeviceMemBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_MMAP_DATA, PVRMMapReleaseMMapDataBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_PROCESS_SIMISR_EVENT, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_REGISTER_SIM_PROCESS, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNREGISTER_SIM_PROCESS, DummyBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_MAPPHYSTOUSERSPACE, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAPPHYSTOUSERSPACE, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GETPHYSTOUSERSPACEMAP, DummyBW); - - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_FB_STATS, DummyBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_MISC_INFO, PVRSRVGetMiscInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_MISC_INFO, DummyBW); - - + IMG_UINT32 i; + + SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DEVICES, PVRSRVEnumerateDevicesBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO, PVRSRVAcquireDeviceDataBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_DEVICEINFO, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT, PVRSRVCreateDeviceMemContextBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT, PVRSRVDestroyDeviceMemContextBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO, PVRSRVGetDeviceMemHeapInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_DEVICEMEM, PVRSRVAllocDeviceMemBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_DEVICEMEM, PVRSRVFreeDeviceMemBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GETFREE_DEVICEMEM, PVRSRVGetFreeDeviceMemBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_COMMANDQUEUE, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA, PVRMMapOSMemHandleToMMapDataBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CONNECT_SERVICES, PVRSRVConnectBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DISCONNECT_SERVICES, PVRSRVDisconnectBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_WRAP_DEVICE_MEM, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DEVICEMEMINFO, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_RESERVE_DEV_VIRTMEM , DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_DEV_VIRTMEM, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_EXT_MEMORY, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_EXT_MEMORY, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEV_MEMORY, PVRSRVMapDeviceMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_DEV_MEMORY, PVRSRVUnmapDeviceMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY, PVRSRVMapDeviceClassMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY, PVRSRVUnmapDeviceClassMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_MEM_INFO_TO_USER, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_MEM_INFO_FROM_USER, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_EXPORT_DEVICEMEM, PVRSRVExportDeviceMemBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_MMAP_DATA, PVRMMapReleaseMMapDataBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS, PVRSRVChangeDeviceMemoryAttributesBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEV_MEMORY_2, PVRSRVMapDeviceMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2, PVRSRVExportDeviceMemBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_PROCESS_SIMISR_EVENT, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_REGISTER_SIM_PROCESS, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNREGISTER_SIM_PROCESS, DummyBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_MAPPHYSTOUSERSPACE, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAPPHYSTOUSERSPACE, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GETPHYSTOUSERSPACEMAP, DummyBW); + + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_FB_STATS, DummyBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_MISC_INFO, PVRSRVGetMiscInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_MISC_INFO, DummyBW); + + #if defined (SUPPORT_OVERLAY_ROTATE_BLIT) - SetDispatchTableEntry(PVRSRV_BRIDGE_INIT_3D_OVL_BLT_RES, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DEINIT_3D_OVL_BLT_RES, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_INIT_3D_OVL_BLT_RES, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DEINIT_3D_OVL_BLT_RES, DummyBW); #endif - + #if defined(PDUMP) - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_INIT, DummyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_MEMPOL, PDumpMemPolBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPMEM, PDumpMemBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_REG, PDumpRegWithFlagsBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_REGPOL, PDumpRegPolBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_COMMENT, PDumpCommentBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_SETFRAME, PDumpSetFrameBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_ISCAPTURING, PDumpIsCaptureFrameBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPBITMAP, PDumpBitmapBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPREADREG, PDumpReadRegBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_SYNCPOL, PDumpSyncPolBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPSYNC, PDumpSyncDumpBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DRIVERINFO, PDumpDriverInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR, PDumpPDDevPAddrBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ, PDumpCycleCountRegReadBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_STARTINITPHASE, PDumpStartInitPhaseBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_STOPINITPHASE, PDumpStopInitPhaseBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_INIT, DummyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_MEMPOL, PDumpMemPolBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPMEM, PDumpMemBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_REG, PDumpRegWithFlagsBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_REGPOL, PDumpRegPolBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_COMMENT, PDumpCommentBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_SETFRAME, PDumpSetFrameBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_ISCAPTURING, PDumpIsCaptureFrameBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPBITMAP, PDumpBitmapBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPREADREG, PDumpReadRegBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_SYNCPOL, PDumpSyncPolBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPSYNC, PDumpSyncDumpBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_MEMPAGES, PDumpMemPagesBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DRIVERINFO, PDumpDriverInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR, PDumpPDDevPAddrBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ, PDumpCycleCountRegReadBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_STARTINITPHASE, PDumpStartInitPhaseBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_PDUMP_STOPINITPHASE, PDumpStopInitPhaseBW); #endif - - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_OEMJTABLE, DummyBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_CLASS, PVRSRVEnumerateDCBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE, PVRSRVOpenDCDeviceBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE, PVRSRVCloseDCDeviceBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS, PVRSRVEnumDCFormatsBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS, PVRSRVEnumDCDimsBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER, PVRSRVGetDCSystemBufferBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_INFO, PVRSRVGetDCInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN, PVRSRVCreateDCSwapChainBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN, PVRSRVDestroyDCSwapChainBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT, PVRSRVSetDCDstRectBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT, PVRSRVSetDCSrcRectBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY, PVRSRVSetDCDstColourKeyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY, PVRSRVSetDCSrcColourKeyBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS, PVRSRVGetDCBuffersBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER, PVRSRVSwapToDCBufferBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM, PVRSRVSwapToDCSystemBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE, PVRSRVOpenBCDeviceBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE, PVRSRVCloseBCDeviceBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO, PVRSRVGetBCInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER, PVRSRVGetBCBufferBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_WRAP_EXT_MEMORY, PVRSRVWrapExtMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY, PVRSRVUnwrapExtMemoryBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM, PVRSRVAllocSharedSysMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM, PVRSRVFreeSharedSysMemoryBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_MEMINFO_MEM, PVRSRVMapMemInfoMemBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR, MMU_GetPDDevPAddrBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_CONNECT, &PVRSRVInitSrvConnectBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_DISCONNECT, &PVRSRVInitSrvDisconnectBW); - - - SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_WAIT, &PVRSRVEventObjectWaitBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_OPEN, &PVRSRVEventObjectOpenBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE, &PVRSRVEventObjectCloseBW); - - SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ, PVRSRVCreateSyncInfoModObjBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ, PVRSRVDestroySyncInfoModObjBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS, PVRSRVModifyPendingSyncOpsBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS, PVRSRVModifyCompleteSyncOpsBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ, PVRSRVSyncOpsFlushToModObjBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA, PVRSRVSyncOpsFlushToDeltaBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_SYNC_INFO, PVRSRVAllocSyncInfoBW); - SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_SYNC_INFO, PVRSRVFreeSyncInfoBW); + + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_OEMJTABLE, DummyBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_CLASS, PVRSRVEnumerateDCBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE, PVRSRVOpenDCDeviceBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE, PVRSRVCloseDCDeviceBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS, PVRSRVEnumDCFormatsBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS, PVRSRVEnumDCDimsBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER, PVRSRVGetDCSystemBufferBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_INFO, PVRSRVGetDCInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN, PVRSRVCreateDCSwapChainBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN, PVRSRVDestroyDCSwapChainBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT, PVRSRVSetDCDstRectBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT, PVRSRVSetDCSrcRectBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY, PVRSRVSetDCDstColourKeyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY, PVRSRVSetDCSrcColourKeyBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS, PVRSRVGetDCBuffersBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER, PVRSRVSwapToDCBufferBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM, PVRSRVSwapToDCSystemBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE, PVRSRVOpenBCDeviceBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE, PVRSRVCloseBCDeviceBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO, PVRSRVGetBCInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER, PVRSRVGetBCBufferBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_WRAP_EXT_MEMORY, PVRSRVWrapExtMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY, PVRSRVUnwrapExtMemoryBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM, PVRSRVAllocSharedSysMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM, PVRSRVFreeSharedSysMemoryBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_MEMINFO_MEM, PVRSRVMapMemInfoMemBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR, MMU_GetPDDevPAddrBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_CONNECT, &PVRSRVInitSrvConnectBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_DISCONNECT, &PVRSRVInitSrvDisconnectBW); + + + SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_WAIT, &PVRSRVEventObjectWaitBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_OPEN, &PVRSRVEventObjectOpenBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE, &PVRSRVEventObjectCloseBW); + + SetDispatchTableEntry(PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ, PVRSRVCreateSyncInfoModObjBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ, PVRSRVDestroySyncInfoModObjBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS, PVRSRVModifyPendingSyncOpsBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS, PVRSRVModifyCompleteSyncOpsBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN, PVRSRVSyncOpsTakeTokenBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_TOKEN, PVRSRVSyncOpsFlushToTokenBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ, PVRSRVSyncOpsFlushToModObjBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA, PVRSRVSyncOpsFlushToDeltaBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_ALLOC_SYNC_INFO, PVRSRVAllocSyncInfoBW); + SetDispatchTableEntry(PVRSRV_BRIDGE_FREE_SYNC_INFO, PVRSRVFreeSyncInfoBW); #if defined (SUPPORT_SGX) - SetSGXDispatchTableEntry(); + SetSGXDispatchTableEntry(); #endif #if defined (SUPPORT_VGX) - SetVGXDispatchTableEntry(); + SetVGXDispatchTableEntry(); #endif #if defined (SUPPORT_MSVDX) - SetMSVDXDispatchTableEntry(); + SetMSVDXDispatchTableEntry(); #endif - - - for(i=0;iui32BridgeID; - IMG_INT err = -EFAULT; + IMG_VOID * psBridgeIn; + IMG_VOID * psBridgeOut; + BridgeWrapperFunction pfBridgeHandler; + IMG_UINT32 ui32BridgeID = psBridgePackageKM->ui32BridgeID; + IMG_INT err = -EFAULT; #if defined(DEBUG_TRACE_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, "%s: %s", - __FUNCTION__, - g_BridgeDispatchTable[ui32BridgeID].pszIOCName)); + PVR_DPF((PVR_DBG_ERROR, "%s: %s", + __FUNCTION__, + g_BridgeDispatchTable[ui32BridgeID].pszIOCName)); #endif #if defined(DEBUG_BRIDGE_KM) - g_BridgeDispatchTable[ui32BridgeID].ui32CallCount++; - g_BridgeGlobalStats.ui32IOCTLCount++; + g_BridgeDispatchTable[ui32BridgeID].ui32CallCount++; + g_BridgeGlobalStats.ui32IOCTLCount++; #endif - if(!psPerProc->bInitProcess) - { - if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) - { - if(!PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation failed. Driver unusable.", - __FUNCTION__)); - goto return_fault; - } - } - else - { - if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation is in progress", - __FUNCTION__)); - goto return_fault; - } - else - { - - switch(ui32BridgeID) - { - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_CONNECT_SERVICES): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_DISCONNECT_SERVICES): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_CONNECT): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_DISCONNECT): - break; - default: - PVR_DPF((PVR_DBG_ERROR, "%s: Driver initialisation not completed yet.", - __FUNCTION__)); - goto return_fault; - } - } - } - } + if(!psPerProc->bInitProcess) + { + if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) + { + if(!PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) + { + PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation failed. Driver unusable.", + __FUNCTION__)); + goto return_fault; + } + } + else + { + if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING)) + { + PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation is in progress", + __FUNCTION__)); + goto return_fault; + } + else + { + + switch(ui32BridgeID) + { + case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_CONNECT_SERVICES): + case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_DISCONNECT_SERVICES): + case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_CONNECT): + case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_DISCONNECT): + break; + default: + PVR_DPF((PVR_DBG_ERROR, "%s: Driver initialisation not completed yet.", + __FUNCTION__)); + goto return_fault; + } + } + } + } #if defined(__linux__) - { - - SYS_DATA *psSysData; + { + + SYS_DATA *psSysData; - SysAcquireData(&psSysData); + SysAcquireData(&psSysData); - - psBridgeIn = ((ENV_DATA *)psSysData->pvEnvSpecificData)->pvBridgeData; - psBridgeOut = (IMG_PVOID)((IMG_PBYTE)psBridgeIn + PVRSRV_MAX_BRIDGE_IN_SIZE); + + psBridgeIn = ((ENV_DATA *)psSysData->pvEnvSpecificData)->pvBridgeData; + psBridgeOut = (IMG_PVOID)((IMG_PBYTE)psBridgeIn + PVRSRV_MAX_BRIDGE_IN_SIZE); -#if defined(DEBUG) - PVR_ASSERT(psBridgePackageKM->ui32InBufferSize < PVRSRV_MAX_BRIDGE_IN_SIZE); - PVR_ASSERT(psBridgePackageKM->ui32OutBufferSize < PVRSRV_MAX_BRIDGE_OUT_SIZE); -#endif - - if(psBridgePackageKM->ui32InBufferSize > 0) + if((psBridgePackageKM->ui32InBufferSize > PVRSRV_MAX_BRIDGE_IN_SIZE) || + (psBridgePackageKM->ui32OutBufferSize > PVRSRV_MAX_BRIDGE_OUT_SIZE)) { - if(!OSAccessOK(PVR_VERIFY_READ, - psBridgePackageKM->pvParamIn, - psBridgePackageKM->ui32InBufferSize)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Invalid pvParamIn pointer", __FUNCTION__)); - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - psBridgeIn, - psBridgePackageKM->pvParamIn, - psBridgePackageKM->ui32InBufferSize) - != PVRSRV_OK) - { - goto return_fault; - } + goto return_fault; } - } + + + if(psBridgePackageKM->ui32InBufferSize > 0) + { + if(!OSAccessOK(PVR_VERIFY_READ, + psBridgePackageKM->pvParamIn, + psBridgePackageKM->ui32InBufferSize)) + { + PVR_DPF((PVR_DBG_ERROR, "%s: Invalid pvParamIn pointer", __FUNCTION__)); + } + + if(CopyFromUserWrapper(psPerProc, + ui32BridgeID, + psBridgeIn, + psBridgePackageKM->pvParamIn, + psBridgePackageKM->ui32InBufferSize) + != PVRSRV_OK) + { + goto return_fault; + } + } + } #else - psBridgeIn = psBridgePackageKM->pvParamIn; - psBridgeOut = psBridgePackageKM->pvParamOut; + psBridgeIn = psBridgePackageKM->pvParamIn; + psBridgeOut = psBridgePackageKM->pvParamOut; #endif - if(ui32BridgeID >= (BRIDGE_DISPATCH_TABLE_ENTRY_COUNT)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: ui32BridgeID = %d is out if range!", - __FUNCTION__, ui32BridgeID)); - goto return_fault; - } - pfBridgeHandler = - (BridgeWrapperFunction)g_BridgeDispatchTable[ui32BridgeID].pfFunction; - err = pfBridgeHandler(ui32BridgeID, - psBridgeIn, - psBridgeOut, - psPerProc); - if(err < 0) - { - goto return_fault; - } + if(ui32BridgeID >= (BRIDGE_DISPATCH_TABLE_ENTRY_COUNT)) + { + PVR_DPF((PVR_DBG_ERROR, "%s: ui32BridgeID = %d is out if range!", + __FUNCTION__, ui32BridgeID)); + goto return_fault; + } + pfBridgeHandler = + (BridgeWrapperFunction)g_BridgeDispatchTable[ui32BridgeID].pfFunction; + err = pfBridgeHandler(ui32BridgeID, + psBridgeIn, + psBridgeOut, + psPerProc); + if(err < 0) + { + goto return_fault; + } #if defined(__linux__) - - if(CopyToUserWrapper(psPerProc, - ui32BridgeID, - psBridgePackageKM->pvParamOut, - psBridgeOut, - psBridgePackageKM->ui32OutBufferSize) - != PVRSRV_OK) - { - goto return_fault; - } + + if(CopyToUserWrapper(psPerProc, + ui32BridgeID, + psBridgePackageKM->pvParamOut, + psBridgeOut, + psBridgePackageKM->ui32OutBufferSize) + != PVRSRV_OK) + { + goto return_fault; + } #endif - err = 0; + err = 0; return_fault: - ReleaseHandleBatch(psPerProc); - return err; + + ReleaseHandleBatch(psPerProc); + return err; } diff --git a/services4/srvkm/bridged/bridged_pvr_bridge.h b/services4/srvkm/bridged/bridged_pvr_bridge.h index 0042574..6b0dd88 100644 --- a/services4/srvkm/bridged/bridged_pvr_bridge.h +++ b/services4/srvkm/bridged/bridged_pvr_bridge.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -83,7 +83,7 @@ CopyToUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, #define ASSIGN_AND_EXIT_ON_ERROR(error, src) \ ASSIGN_AND_RETURN_ON_ERROR(error, src, 0) -#if defined (PVR_SECURE_HANDLES) +#if defined (PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) #ifdef INLINE_IS_PRAGMA #pragma inline(NewHandleBatch) #endif diff --git a/services4/srvkm/bridged/bridged_support.c b/services4/srvkm/bridged/bridged_support.c index e10e577..dad0800 100644 --- a/services4/srvkm/bridged/bridged_support.c +++ b/services4/srvkm/bridged/bridged_support.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -30,7 +30,11 @@ PVRSRV_ERROR +#if defined (SUPPORT_SID_INTERFACE) +PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psHandleBase, IMG_HANDLE *phOSMemHandle, IMG_SID hMHandle) +#else PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psHandleBase, IMG_HANDLE *phOSMemHandle, IMG_HANDLE hMHandle) +#endif { IMG_HANDLE hMHandleInt; PVRSRV_HANDLE_TYPE eHandleType; @@ -47,7 +51,7 @@ PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psHandleBase, IMG_HANDLE *phOSMemHan switch(eHandleType) { -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) case PVRSRV_HANDLE_TYPE_MEM_INFO: case PVRSRV_HANDLE_TYPE_MEM_INFO_REF: case PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO: diff --git a/services4/srvkm/bridged/bridged_support.h b/services4/srvkm/bridged/bridged_support.h index 371715d..d027290 100644 --- a/services4/srvkm/bridged/bridged_support.h +++ b/services4/srvkm/bridged/bridged_support.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -33,7 +33,11 @@ extern "C" { #endif +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phOSMemHandle, IMG_SID hMHandle); +#else PVRSRV_ERROR PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phOSMemHandle, IMG_HANDLE hMHandle); +#endif #if defined (__cplusplus) } diff --git a/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c b/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c index 7e5a63c..4bc2d74 100644 --- a/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c +++ b/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -40,6 +40,7 @@ #include "power.h" #include "pvr_bridge_km.h" #include "sgx_bridge_km.h" +#include "sgx_options.h" #if defined(SUPPORT_MSVDX) #include "msvdx_bridge.h" @@ -48,6 +49,7 @@ #include "bridged_pvr_bridge.h" #include "bridged_sgx_bridge.h" #include "sgxutils.h" +#include "buffer_manager.h" #include "pdump_km.h" static IMG_INT @@ -61,7 +63,8 @@ SGXGetClientInfoBW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_GETCLIENTINFO); psGetClientInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, psGetClientInfoIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psGetClientInfoOUT->eError != PVRSRV_OK) @@ -87,7 +90,8 @@ SGXReleaseClientInfoBW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_RELEASECLIENTINFO); psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, psReleaseClientInfoIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psRetOUT->eError != PVRSRV_OK) @@ -99,8 +103,12 @@ SGXReleaseClientInfoBW(IMG_UINT32 ui32BridgeID, PVR_ASSERT(psDevInfo->ui32ClientRefCount > 0); - psDevInfo->ui32ClientRefCount--; - + + if (psDevInfo->ui32ClientRefCount > 0) + { + psDevInfo->ui32ClientRefCount--; + } + psRetOUT->eError = PVRSRV_OK; return 0; @@ -114,11 +122,15 @@ SGXGetInternalDevInfoBW(IMG_UINT32 ui32BridgeID, PVRSRV_PER_PROCESS_DATA *psPerProc) { IMG_HANDLE hDevCookieInt; +#if defined (SUPPORT_SID_INTERFACE) + SGX_INTERNAL_DEVINFO_KM sSGXInternalDevInfo; +#endif PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_GETINTERNALDEVINFO); psSGXGetInternalDevInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, psSGXGetInternalDevInfoIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psSGXGetInternalDevInfoOUT->eError != PVRSRV_OK) @@ -128,13 +140,21 @@ SGXGetInternalDevInfoBW(IMG_UINT32 ui32BridgeID, psSGXGetInternalDevInfoOUT->eError = SGXGetInternalDevInfoKM(hDevCookieInt, +#if defined (SUPPORT_SID_INTERFACE) + &sSGXInternalDevInfo); +#else &psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo); +#endif psSGXGetInternalDevInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, &psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, +#if defined (SUPPORT_SID_INTERFACE) + sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, +#else psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, +#endif PVRSRV_HANDLE_TYPE_MEM_INFO, PVRSRV_HANDLE_ALLOC_FLAG_SHARED); @@ -152,7 +172,12 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, IMG_UINT32 i; IMG_INT ret = 0; IMG_UINT32 ui32NumDstSyncs; +#if defined (SUPPORT_SID_INTERFACE) + SGX_CCB_KICK_KM sCCBKickKM = {{0}}; + IMG_HANDLE ahSyncInfoHandles[16]; +#else IMG_HANDLE *phKernelSyncInfoHandles = IMG_NULL; +#endif PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_DOKICK); @@ -169,7 +194,11 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.hCCBKernelMemInfo, +#else &psDoKickIN->sCCBKick.hCCBKernelMemInfo, +#endif psDoKickIN->sCCBKick.hCCBKernelMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); @@ -178,11 +207,24 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + if (psDoKickIN->sCCBKick.ui32NumDstSyncObjects > 16) + { + return 0; + } + + if(psDoKickIN->sCCBKick.hTA3DSyncInfo != 0) +#else if(psDoKickIN->sCCBKick.hTA3DSyncInfo != IMG_NULL) +#endif { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.hTA3DSyncInfo, +#else &psDoKickIN->sCCBKick.hTA3DSyncInfo, +#endif psDoKickIN->sCCBKick.hTA3DSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -192,11 +234,19 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, } } +#if defined (SUPPORT_SID_INTERFACE) + if(psDoKickIN->sCCBKick.hTASyncInfo != 0) +#else if(psDoKickIN->sCCBKick.hTASyncInfo != IMG_NULL) +#endif { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.hTASyncInfo, +#else &psDoKickIN->sCCBKick.hTASyncInfo, +#endif psDoKickIN->sCCBKick.hTASyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -206,11 +256,33 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, } } +#if defined(FIX_HW_BRN_31620) + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &psDoKickIN->sCCBKick.hDevMemContext, + psDoKickIN->sCCBKick.hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } +#endif + +#if defined (SUPPORT_SID_INTERFACE) + if(psDoKickIN->sCCBKick.h3DSyncInfo != 0) +#else if(psDoKickIN->sCCBKick.h3DSyncInfo != IMG_NULL) +#endif { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.h3DSyncInfo, +#else &psDoKickIN->sCCBKick.h3DSyncInfo, +#endif psDoKickIN->sCCBKick.h3DSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -229,11 +301,18 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.ui32NumTASrcSyncs = psDoKickIN->sCCBKick.ui32NumTASrcSyncs; +#endif for(i=0; isCCBKick.ui32NumTASrcSyncs; i++) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ahTASrcKernelSyncInfo[i], +#else &psDoKickIN->sCCBKick.ahTASrcKernelSyncInfo[i], +#endif psDoKickIN->sCCBKick.ahTASrcKernelSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -249,11 +328,18 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.ui32NumTADstSyncs = psDoKickIN->sCCBKick.ui32NumTADstSyncs; +#endif for(i=0; isCCBKick.ui32NumTADstSyncs; i++) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ahTADstKernelSyncInfo[i], +#else &psDoKickIN->sCCBKick.ahTADstKernelSyncInfo[i], +#endif psDoKickIN->sCCBKick.ahTADstKernelSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -269,11 +355,18 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.ui32Num3DSrcSyncs = psDoKickIN->sCCBKick.ui32Num3DSrcSyncs; +#endif for(i=0; isCCBKick.ui32Num3DSrcSyncs; i++) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ah3DSrcKernelSyncInfo[i], +#else &psDoKickIN->sCCBKick.ah3DSrcKernelSyncInfo[i], +#endif psDoKickIN->sCCBKick.ah3DSrcKernelSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -289,11 +382,19 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; return 0; } + +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.ui32NumSrcSyncs = psDoKickIN->sCCBKick.ui32NumSrcSyncs; +#endif for(i=0; isCCBKick.ui32NumSrcSyncs; i++) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ahSrcKernelSyncInfo[i], +#else &psDoKickIN->sCCBKick.ahSrcKernelSyncInfo[i], +#endif psDoKickIN->sCCBKick.ahSrcKernelSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -314,12 +415,25 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = #if defined(SUPPORT_SGX_NEW_STATUS_VALS) PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.asTAStatusUpdate[i].hKernelMemInfo, +#else &psDoKickIN->sCCBKick.asTAStatusUpdate[i].hKernelMemInfo, +#endif psDoKickIN->sCCBKick.asTAStatusUpdate[i].hKernelMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); + +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.asTAStatusUpdate[i].sCtlStatus = psDoKickIN->sCCBKick.asTAStatusUpdate[i].sCtlStatus; +#endif + #else PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ahTAStatusSyncInfo[i], +#else &psDoKickIN->sCCBKick.ahTAStatusSyncInfo[i], +#endif psDoKickIN->sCCBKick.ahTAStatusSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); #endif @@ -339,12 +453,24 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = #if defined(SUPPORT_SGX_NEW_STATUS_VALS) PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.as3DStatusUpdate[i].hKernelMemInfo, +#else &psDoKickIN->sCCBKick.as3DStatusUpdate[i].hKernelMemInfo, +#endif psDoKickIN->sCCBKick.as3DStatusUpdate[i].hKernelMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); + +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.as3DStatusUpdate[i].sCtlStatus = psDoKickIN->sCCBKick.as3DStatusUpdate[i].sCtlStatus; +#endif #else PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.ah3DStatusSyncInfo[i], +#else &psDoKickIN->sCCBKick.ah3DStatusSyncInfo[i], +#endif psDoKickIN->sCCBKick.ah3DStatusSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); #endif @@ -378,6 +504,9 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + sCCBKickKM.pahDstSyncHandles = phKernelSyncInfoHandles; +#else if(CopyFromUserWrapper(psPerProc, ui32BridgeID, phKernelSyncInfoHandles, @@ -390,12 +519,17 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psDoKickIN->sCCBKick.pahDstSyncHandles = phKernelSyncInfoHandles; +#endif for( i = 0; i < ui32NumDstSyncs; i++) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.pahDstSyncHandles[i], +#else &psDoKickIN->sCCBKick.pahDstSyncHandles[i], +#endif psDoKickIN->sCCBKick.pahDstSyncHandles[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); @@ -408,7 +542,11 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM.hKernelHWSyncListMemInfo, +#else &psDoKickIN->sCCBKick.hKernelHWSyncListMemInfo, +#endif psDoKickIN->sCCBKick.hKernelHWSyncListMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); @@ -418,9 +556,34 @@ SGXDoKickBW(IMG_UINT32 ui32BridgeID, } } +#if defined (SUPPORT_SID_INTERFACE) + OSMemCopy(&sCCBKickKM.sCommand, &psDoKickIN->sCCBKick.sCommand, sizeof(sCCBKickKM.sCommand)); + + sCCBKickKM.ui32NumDstSyncObjects = psDoKickIN->sCCBKick.ui32NumDstSyncObjects; + sCCBKickKM.ui32NumTAStatusVals = psDoKickIN->sCCBKick.ui32NumTAStatusVals; + sCCBKickKM.ui32Num3DStatusVals = psDoKickIN->sCCBKick.ui32Num3DStatusVals; + sCCBKickKM.bFirstKickOrResume = psDoKickIN->sCCBKick.bFirstKickOrResume; + sCCBKickKM.ui32CCBOffset = psDoKickIN->sCCBKick.ui32CCBOffset; + sCCBKickKM.bTADependency = psDoKickIN->sCCBKick.bTADependency; + +#if (defined(NO_HARDWARE) || defined(PDUMP)) + sCCBKickKM.bTerminateOrAbort = psDoKickIN->sCCBKick.bTerminateOrAbort; +#endif +#if defined(PDUMP) + sCCBKickKM.ui32CCBDumpWOff = psDoKickIN->sCCBKick.ui32CCBDumpWOff; +#endif + +#if defined(NO_HARDWARE) + sCCBKickKM.ui32WriteOpsPendingVal = psDoKickIN->sCCBKick.ui32WriteOpsPendingVal; +#endif +#endif psRetOUT->eError = SGXDoKickKM(hDevCookieInt, +#if defined (SUPPORT_SID_INTERFACE) + &sCCBKickKM); +#else &psDoKickIN->sCCBKick); +#endif PVRSRV_BRIDGE_SGX_DOKICK_RETURN_RESULT: @@ -472,6 +635,9 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, { IMG_HANDLE hDevCookieInt; PVRSRV_TRANSFER_SGX_KICK *psKick; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_TRANSFER_SGX_KICK_KM sKickKM = {0}; +#endif IMG_UINT32 i; PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_SUBMITTRANSFER); @@ -479,6 +645,20 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, psKick = &psSubmitTransferIN->sKick; +#if defined(FIX_HW_BRN_31620) + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &psKick->hDevMemContext, + psKick->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } +#endif + psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, @@ -491,7 +671,11 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.hCCBMemInfo, +#else &psKick->hCCBMemInfo, +#endif psKick->hCCBMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -503,7 +687,11 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.hTASyncInfo, +#else &psKick->hTASyncInfo, +#endif psKick->hTASyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -516,7 +704,11 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.h3DSyncInfo, +#else &psKick->h3DSyncInfo, +#endif psKick->h3DSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -534,7 +726,11 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.ahSrcSyncInfo[i], +#else &psKick->ahSrcSyncInfo[i], +#endif psKick->ahSrcSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -552,7 +748,11 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.ahDstSyncInfo[i], +#else &psKick->ahDstSyncInfo[i], +#endif psKick->ahDstSyncInfo[i], PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -561,7 +761,21 @@ SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, } } +#if defined (SUPPORT_SID_INTERFACE) + sKickKM.sHWTransferContextDevVAddr = psKick->sHWTransferContextDevVAddr; + sKickKM.ui32SharedCmdCCBOffset = psKick->ui32SharedCmdCCBOffset; + sKickKM.ui32NumSrcSync = psKick->ui32NumSrcSync; + sKickKM.ui32NumDstSync = psKick->ui32NumDstSync; + sKickKM.ui32Flags = psKick->ui32Flags; + sKickKM.ui32PDumpFlags = psKick->ui32PDumpFlags; +#if defined(PDUMP) + sKickKM.ui32CCBDumpWOff = psKick->ui32CCBDumpWOff; +#endif + + psRetOUT->eError = SGXSubmitTransferKM(hDevCookieInt, &sKickKM); +#else psRetOUT->eError = SGXSubmitTransferKM(hDevCookieInt, psKick); +#endif return 0; } @@ -575,12 +789,32 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, PVRSRV_PER_PROCESS_DATA *psPerProc) { IMG_HANDLE hDevCookieInt; - PVRSRV_2D_SGX_KICK *psKick; + PVRSRV_2D_SGX_KICK *psKick; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_2D_SGX_KICK_KM sKickKM; +#endif IMG_UINT32 i; PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_SUBMIT2D); PVR_UNREFERENCED_PARAMETER(ui32BridgeID); + psKick = &psSubmit2DIN->sKick; + +#if defined(FIX_HW_BRN_31620) + + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &psKick->hDevMemContext, + psKick->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } +#endif + + psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, @@ -592,11 +826,14 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } - psKick = &psSubmit2DIN->sKick; psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.hCCBMemInfo, +#else &psKick->hCCBMemInfo, +#endif psKick->hCCBMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -604,11 +841,19 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } +#if defined (SUPPORT_SID_INTERFACE) + if (psKick->hTASyncInfo != 0) +#else if (psKick->hTASyncInfo != IMG_NULL) +#endif { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.hTASyncInfo, +#else &psKick->hTASyncInfo, +#endif psKick->hTASyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -616,12 +861,22 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } } +#if defined (SUPPORT_SID_INTERFACE) + else + { + sKickKM.hTASyncInfo = IMG_NULL; + } +#endif if (psKick->h3DSyncInfo != IMG_NULL) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.h3DSyncInfo, +#else &psKick->h3DSyncInfo, +#endif psKick->h3DSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -629,12 +884,39 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } } +#if defined (SUPPORT_SID_INTERFACE) + else + { + sKickKM.h3DSyncInfo = IMG_NULL; + } +#endif if (psKick->ui32NumSrcSync > SGX_MAX_2D_SRC_SYNC_OPS) { psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; return 0; } +#if defined (SUPPORT_SID_INTERFACE) + for (i = 0; i < SGX_MAX_2D_SRC_SYNC_OPS; i++) + { + if (i < psKick->ui32NumSrcSync) + { + psRetOUT->eError = + PVRSRVLookupHandle(psPerProc->psHandleBase, + &sKickKM.ahSrcSyncInfo[i], + psKick->ahSrcSyncInfo[i], + PVRSRV_HANDLE_TYPE_SYNC_INFO); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + } + else + { + sKickKM.ahSrcSyncInfo[i] = IMG_NULL; + } + } +#else for (i = 0; i < psKick->ui32NumSrcSync; i++) { psRetOUT->eError = @@ -647,12 +929,17 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } } +#endif if (psKick->hDstSyncInfo != IMG_NULL) { psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &sKickKM.hDstSyncInfo, +#else &psKick->hDstSyncInfo, +#endif psKick->hDstSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -660,9 +947,28 @@ SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, return 0; } } +#if defined (SUPPORT_SID_INTERFACE) + else + { + sKickKM.hDstSyncInfo = IMG_NULL; + } + + + sKickKM.ui32SharedCmdCCBOffset = psKick->ui32SharedCmdCCBOffset; + sKickKM.ui32NumSrcSync = psKick->ui32NumSrcSync; + sKickKM.ui32PDumpFlags = psKick->ui32PDumpFlags; + sKickKM.sHW2DContextDevVAddr = psKick->sHW2DContextDevVAddr; +#if defined(PDUMP) + sKickKM.ui32CCBDumpWOff = psKick->ui32CCBDumpWOff; +#endif +#endif psRetOUT->eError = +#if defined (SUPPORT_SID_INTERFACE) + SGXSubmit2DKM(hDevCookieInt, &sKickKM); +#else SGXSubmit2DKM(hDevCookieInt, psKick); +#endif return 0; } @@ -767,7 +1073,7 @@ SGXReadHWPerfCBBW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_READ_HWPERF_CB); - psSGXReadHWPerfCBOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + psSGXReadHWPerfCBOUT->eError =PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, psSGXReadHWPerfCBIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); @@ -814,31 +1120,41 @@ SGXReadHWPerfCBBW(IMG_UINT32 ui32BridgeID, static IMG_INT SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_IN_SGXDEVINITPART2 *psSGXDevInitPart2IN, - PVRSRV_BRIDGE_RETURN *psRetOUT, + PVRSRV_BRIDGE_OUT_SGXDEVINITPART2 *psSGXDevInitPart2OUT, PVRSRV_PER_PROCESS_DATA *psPerProc) { IMG_HANDLE hDevCookieInt; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_ERROR eError = PVRSRV_OK; +#else PVRSRV_ERROR eError; +#endif IMG_BOOL bDissociateFailed = IMG_FALSE; IMG_BOOL bLookupFailed = IMG_FALSE; IMG_BOOL bReleaseFailed = IMG_FALSE; IMG_HANDLE hDummy; IMG_UINT32 i; +#if defined (SUPPORT_SID_INTERFACE) + SGX_BRIDGE_INIT_INFO_KM asInitInfoKM = {0}; +#endif PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_DEVINITPART2); + + psSGXDevInitPart2OUT->ui32KMBuildOptions = SGX_BUILD_OPTIONS; + if(!psPerProc->bInitProcess) { - psRetOUT->eError = PVRSRV_ERROR_PROCESS_NOT_INITIALISED; + psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_PROCESS_NOT_INITIALISED; return 0; } - psRetOUT->eError = + psSGXDevInitPart2OUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, psSGXDevInitPart2IN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) + if(psSGXDevInitPart2OUT->eError != PVRSRV_OK) { return 0; } @@ -889,6 +1205,16 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bLookupFailed = IMG_TRUE; } +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + eError = PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDummy, + psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if (eError != PVRSRV_OK) + { + bLookupFailed = IMG_TRUE; + } +#endif eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, @@ -961,6 +1287,7 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } #endif + #if defined(FIX_HW_BRN_31542) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, @@ -1010,9 +1337,10 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, { bLookupFailed = IMG_TRUE; } + eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWADPMLSSMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1020,34 +1348,38 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bLookupFailed = IMG_TRUE; } +#endif + +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bLookupFailed = IMG_TRUE; } + eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPartiPIMMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bLookupFailed = IMG_TRUE; } #endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1055,10 +1387,10 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } #endif -#if defined(SGX_FEATURE_SPM_MODE_0) +#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1068,9 +1400,17 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; +#else IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; +#endif +#if defined (SUPPORT_SID_INTERFACE) + if (hHandle == 0) +#else if (hHandle == IMG_NULL) +#endif { continue; } @@ -1088,13 +1428,17 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, if (bLookupFailed) { PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A handle lookup failed")); - psRetOUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; + psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; return 0; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelCCBMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1103,7 +1447,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelCCBCtlMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1112,7 +1460,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelCCBEventKickerMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1122,7 +1474,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelSGXHostCtlMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1131,7 +1487,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelSGXTA3DCtlMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1139,8 +1499,27 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo, +#else + &psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, +#endif + psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, + PVRSRV_HANDLE_TYPE_MEM_INFO); + if (eError != PVRSRV_OK) + { + bReleaseFailed = IMG_TRUE; + } +#endif + + eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelSGXMiscMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1149,9 +1528,13 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } - #if defined(SGX_SUPPORT_HWPROFILING) +#if defined(SGX_SUPPORT_HWPROFILING) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelHWProfilingMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1162,7 +1545,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #if defined(SUPPORT_SGX_HWPERF) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelHWPerfCBMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1172,7 +1559,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #endif eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelTASigBufferMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1181,7 +1572,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernel3DSigBufferMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1191,7 +1586,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #if defined(FIX_HW_BRN_29702) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelCFIMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1202,7 +1601,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #if defined(FIX_HW_BRN_29823) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelDummyTermStreamMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1214,7 +1617,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #if defined(FIX_HW_BRN_31542) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAVDMStreamMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1222,7 +1629,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAIndexStreamMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1230,7 +1641,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAPDSMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1238,7 +1653,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAUSEMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1246,7 +1665,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAParamMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1254,7 +1677,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAPMPTMemInfo, +#else &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo, +#endif psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) @@ -1262,43 +1689,54 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWADPMLSSMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWADPMLSSMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWATPCMemInfo, +#else + &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, +#endif + psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bReleaseFailed = IMG_TRUE; } eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelClearClipWAPSGRgnHdrMemInfo, +#else + &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, +#endif + psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bReleaseFailed = IMG_TRUE; } +#endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, + &psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bReleaseFailed = IMG_TRUE; } + eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPartiPIMMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPartiPIMMemInfo, + &psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { bReleaseFailed = IMG_TRUE; } #endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, + &psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, + psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1306,10 +1744,14 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } #endif -#if defined(SGX_FEATURE_SPM_MODE_0) +#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + &asInitInfoKM.hKernelEDMStatusBufferMemInfo, +#else + &psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, +#endif + psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1317,17 +1759,28 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, } #endif - for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; + IMG_HANDLE *phHandleKM = &asInitInfoKM.asInitMemHandles[i]; + + if (hHandle == 0) +#else IMG_HANDLE *phHandle = &psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; if (*phHandle == IMG_NULL) +#endif continue; eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, +#if defined (SUPPORT_SID_INTERFACE) + phHandleKM, + hHandle, +#else phHandle, *phHandle, +#endif PVRSRV_HANDLE_TYPE_MEM_INFO); if (eError != PVRSRV_OK) { @@ -1338,45 +1791,81 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, if (bReleaseFailed) { PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A handle release failed")); - psRetOUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; + psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; PVR_DBG_BREAK; return 0; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBCtlMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBEventKickerMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXHostCtlMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXTA3DCtlMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo); +#else + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo); +#endif + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#endif + +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXMiscMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; @@ -1384,79 +1873,192 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, #if defined(SGX_SUPPORT_HWPROFILING) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelHWProfilingMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); #endif +#endif #if defined(SUPPORT_SGX_HWPERF) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelHWPerfCBMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } #endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelTASigBufferMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernel3DSigBufferMemInfo); +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo); +#endif if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } #if defined(FIX_HW_BRN_29702) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCFIMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); #endif +#endif #if defined(FIX_HW_BRN_29823) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelDummyTermStreamMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); #endif +#endif #if defined(FIX_HW_BRN_31542) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAVDMStreamMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAIndexStreamMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPDSMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAUSEMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAParamMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPMPTMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWADPMLSSMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWATPCMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPSGRgnHdrMemInfo); + if (eError != PVRSRV_OK) + { + bDissociateFailed = IMG_TRUE; + } +#else eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPartiPIMMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif #endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo); +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo); + bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); + + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo); + bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo); bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); #endif -#if defined(SGX_FEATURE_SPM_MODE_0) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo); +#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) +#if defined (SUPPORT_SID_INTERFACE) + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelEDMStatusBufferMemInfo); if (eError != PVRSRV_OK) { bDissociateFailed = IMG_TRUE; } +#else + eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo); + bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); +#endif #endif for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE hHandle = asInitInfoKM.asInitMemHandles[i]; +#else IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; +#endif if (hHandle == IMG_NULL) continue; @@ -1471,17 +2073,37 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, if(bDissociateFailed) { +#if defined (SUPPORT_SID_INTERFACE) + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBMemInfo); + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBCtlMemInfo); + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXHostCtlMemInfo); + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXTA3DCtlMemInfo); +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo); +#endif + PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXMiscMemInfo); +#else PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo); PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo); PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo); PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo); +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo); +#endif PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo); +#endif for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE hHandle = asInitInfoKM.asInitMemHandles[i]; + + if (hHandle == 0) +#else IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; if (hHandle == IMG_NULL) +#endif continue; PVRSRVFreeDeviceMemKM(hDevCookieInt, (PVRSRV_KERNEL_MEM_INFO *)hHandle); @@ -1490,17 +2112,40 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A dissociate failed")); - psRetOUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; + psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; PVR_DBG_BREAK; return 0; } - psRetOUT->eError = +#if defined (SUPPORT_SID_INTERFACE) + asInitInfoKM.sScripts = psSGXDevInitPart2IN->sInitInfo.sScripts; + asInitInfoKM.ui32ClientBuildOptions = psSGXDevInitPart2IN->sInitInfo.ui32ClientBuildOptions; + asInitInfoKM.sSGXStructSizes = psSGXDevInitPart2IN->sInitInfo.sSGXStructSizes; + asInitInfoKM.ui32CacheControl = psSGXDevInitPart2IN->sInitInfo.ui32CacheControl; + asInitInfoKM.ui32EDMTaskReg0 = psSGXDevInitPart2IN->sInitInfo.ui32EDMTaskReg0; + asInitInfoKM.ui32EDMTaskReg1 = psSGXDevInitPart2IN->sInitInfo.ui32EDMTaskReg1; + asInitInfoKM.ui32ClkGateStatusReg = psSGXDevInitPart2IN->sInitInfo.ui32ClkGateStatusReg; + asInitInfoKM.ui32ClkGateStatusMask = psSGXDevInitPart2IN->sInitInfo.ui32ClkGateStatusMask; + + OSMemCopy(&asInitInfoKM.asInitDevData , + &psSGXDevInitPart2IN->sInitInfo.asInitDevData, + sizeof(asInitInfoKM.asInitDevData)); + OSMemCopy(&asInitInfoKM.aui32HostKickAddr, + &psSGXDevInitPart2IN->sInitInfo.aui32HostKickAddr, + sizeof(asInitInfoKM.aui32HostKickAddr)); + + psSGXDevInitPart2OUT->eError = + DevInitSGXPart2KM(psPerProc, + hDevCookieInt, + &asInitInfoKM); +#else + psSGXDevInitPart2OUT->eError = DevInitSGXPart2KM(psPerProc, hDevCookieInt, &psSGXDevInitPart2IN->sInitInfo); +#endif return 0; } @@ -1572,7 +2217,8 @@ SGXUnregisterHWRenderContextBW(IMG_UINT32 ui32BridgeID, return 0; } - psRetOUT->eError = SGXUnregisterHWRenderContextKM(hHWRenderContextInt); + psRetOUT->eError = SGXUnregisterHWRenderContextKM(hHWRenderContextInt, + psSGXUnregHWRenderContextIN->bForceCleanup); if(psRetOUT->eError != PVRSRV_OK) { return 0; @@ -1639,7 +2285,11 @@ SGXUnregisterHWTransferContextBW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_RETURN *psRetOUT, PVRSRV_PER_PROCESS_DATA *psPerProc) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_HANDLE hHWTransferContextInt = 0; +#else IMG_HANDLE hHWTransferContextInt; +#endif PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_UNREGISTER_HW_TRANSFER_CONTEXT); @@ -1653,7 +2303,8 @@ SGXUnregisterHWTransferContextBW(IMG_UINT32 ui32BridgeID, return 0; } - psRetOUT->eError = SGXUnregisterHWTransferContextKM(hHWTransferContextInt); + psRetOUT->eError = SGXUnregisterHWTransferContextKM(hHWTransferContextInt, + psSGXUnregHWTransferContextIN->bForceCleanup); if(psRetOUT->eError != PVRSRV_OK) { return 0; @@ -1735,7 +2386,8 @@ SGXUnregisterHW2DContextBW(IMG_UINT32 ui32BridgeID, return 0; } - psRetOUT->eError = SGXUnregisterHW2DContextKM(hHW2DContextInt); + psRetOUT->eError = SGXUnregisterHW2DContextKM(hHW2DContextInt, + psSGXUnregHW2DContextIN->bForceCleanup); if(psRetOUT->eError != PVRSRV_OK) { return 0; @@ -1769,7 +2421,7 @@ SGXFlushHWRenderTargetBW(IMG_UINT32 ui32BridgeID, return 0; } - SGXFlushHWRenderTargetKM(hDevCookieInt, psSGXFlushHWRenderTargetIN->sHWRTDataSetDevVAddr); + psRetOUT->eError = SGXFlushHWRenderTargetKM(hDevCookieInt, psSGXFlushHWRenderTargetIN->sHWRTDataSetDevVAddr, IMG_FALSE); return 0; } @@ -1788,7 +2440,8 @@ SGX2DQueryBlitsCompleteBW(IMG_UINT32 ui32BridgeID, PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_2DQUERYBLTSCOMPLETE); psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, + PVRSRVLookupHandle(psPerProc->psHandleBase, + &hDevCookieInt, ps2DQueryBltsCompleteIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psRetOUT->eError != PVRSRV_OK) @@ -1797,7 +2450,8 @@ SGX2DQueryBlitsCompleteBW(IMG_UINT32 ui32BridgeID, } psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo, + PVRSRVLookupHandle(psPerProc->psHandleBase, + &pvSyncInfo, ps2DQueryBltsCompleteIN->hKernSyncInfo, PVRSRV_HANDLE_TYPE_SYNC_INFO); if(psRetOUT->eError != PVRSRV_OK) @@ -1998,7 +2652,11 @@ SGXAddSharedPBDescBW(IMG_UINT32 ui32BridgeID, IMG_UINT32 ui32KernelMemInfoHandlesCount = psSGXAddSharedPBDescIN->ui32KernelMemInfoHandlesCount; IMG_INT ret = 0; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID *phKernelMemInfoHandles = 0; +#else IMG_HANDLE *phKernelMemInfoHandles = IMG_NULL; +#endif PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfos = IMG_NULL; IMG_UINT32 i; PVRSRV_ERROR eError; @@ -2154,7 +2812,8 @@ SGXAddSharedPBDescBW(IMG_UINT32 ui32BridgeID, psSGXAddSharedPBDescIN->ui32TotalPBSize, &hSharedPBDesc, ppsKernelMemInfos, - ui32KernelMemInfoHandlesCount); + ui32KernelMemInfoHandlesCount, + psSGXAddSharedPBDescIN->sHWPBDescDevVAddr); if (eError != PVRSRV_OK) @@ -2203,6 +2862,9 @@ SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, { IMG_HANDLE hDevCookieInt; IMG_UINT32 i; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; +#endif PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGXINFO_FOR_SRVINIT); NEW_HANDLE_BATCH_OR_ERROR(psSGXInfoForSrvinitOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS); @@ -2225,7 +2887,12 @@ SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, psSGXInfoForSrvinitOUT->eError = SGXGetInfoForSrvinitKM(hDevCookieInt, +#if defined (SUPPORT_SID_INTERFACE) + &asHeapInfo[0], + &psSGXInfoForSrvinitOUT->sInitInfo.sPDDevPAddr); +#else &psSGXInfoForSrvinitOUT->sInitInfo); +#endif if(psSGXInfoForSrvinitOUT->eError != PVRSRV_OK) { @@ -2238,6 +2905,28 @@ SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, psHeapInfo = &psSGXInfoForSrvinitOUT->sInitInfo.asHeapInfo[i]; +#if defined (SUPPORT_SID_INTERFACE) + if ((asHeapInfo[i].ui32HeapID != (IMG_UINT32)SGX_UNDEFINED_HEAP_ID) && + (asHeapInfo[i].hDevMemHeap != IMG_NULL)) + { + + PVRSRVAllocHandleNR(psPerProc->psHandleBase, + &psHeapInfo->hDevMemHeap, + asHeapInfo[i].hDevMemHeap, + PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, + PVRSRV_HANDLE_ALLOC_FLAG_SHARED); + } + else + { + psHeapInfo->hDevMemHeap = 0; + } + + psHeapInfo->ui32HeapID = asHeapInfo[i].ui32HeapID; + psHeapInfo->sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; + psHeapInfo->ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; + psHeapInfo->ui32Attribs = asHeapInfo[i].ui32Attribs; + psHeapInfo->ui32XTileStride = asHeapInfo[i].ui32XTileStride; +#else if (psHeapInfo->ui32HeapID != (IMG_UINT32)SGX_UNDEFINED_HEAP_ID) { IMG_HANDLE hDevMemHeapExt; @@ -2253,6 +2942,7 @@ SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, psHeapInfo->hDevMemHeap = hDevMemHeapExt; } } +#endif } COMMIT_HANDLE_BATCH_OR_ERROR(psSGXInfoForSrvinitOUT->eError, psPerProc); @@ -2262,17 +2952,25 @@ SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, #if defined(PDUMP) static IMG_VOID -DumpBufferArray(PVRSRV_PER_PROCESS_DATA *psPerProc, +DumpBufferArray(PVRSRV_PER_PROCESS_DATA *psPerProc, +#if defined (SUPPORT_SID_INTERFACE) + PSGX_KICKTA_DUMP_BUFFER_KM psBufferArray, +#else PSGX_KICKTA_DUMP_BUFFER psBufferArray, - IMG_UINT32 ui32BufferArrayLength, - IMG_BOOL bDumpPolls) +#endif + IMG_UINT32 ui32BufferArrayLength, + IMG_BOOL bDumpPolls) { IMG_UINT32 i; for (i=0; iui32BufferArrayLength; IMG_UINT32 ui32BufferArraySize = ui32BufferArrayLength * sizeof(SGX_KICKTA_DUMP_BUFFER); PVRSRV_ERROR eError = PVRSRV_ERROR_TOO_FEW_BUFFERS; +#if defined (__QNXNTO__) + const IMG_UINT32 MAX_BUFFER_NAME_SIZE = 30; + IMG_PCHAR pszNamesBuffer, pszName; + IMG_UINT32 ui32NameBufferArraySize; +#endif + PVR_UNREFERENCED_PARAMETER(psBridgeOut); PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_BUFFER_ARRAY); +#if defined (SUPPORT_SID_INTERFACE) + if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + ui32BufferArraySize, + (IMG_PVOID *)&psKickTADumpBufferKM, 0, + "Array of Kick Tile Accelerator Dump Buffer") != PVRSRV_OK) +#else if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, (IMG_PVOID *)&psKickTADumpBuffer, 0, "Array of Kick Tile Accelerator Dump Buffer") != PVRSRV_OK) +#endif { return -ENOMEM; } +#if !defined (SUPPORT_SID_INTERFACE) if(CopyFromUserWrapper(psPerProc, ui32BridgeID, psKickTADumpBuffer, @@ -2410,14 +3127,54 @@ SGXPDumpBufferArrayBW(IMG_UINT32 ui32BridgeID, return -EFAULT; } +#endif + +#if defined (__QNXNTO__) + ui32NameBufferArraySize = ui32BufferArrayLength * MAX_BUFFER_NAME_SIZE; + if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, ui32NameBufferArraySize, + (IMG_PVOID *)&pszNamesBuffer, 0, + "Kick Tile Accelerator Dump Buffer names") != PVRSRV_OK) + { + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBuffer, 0); + return -ENOMEM; + } + + pszName = pszNamesBuffer; + for (i=0; ipsBufferArray[i]; + psKMPtr = &psKickTADumpBufferKM[i]; +#else IMG_VOID *pvMemInfo; +#endif eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &pvMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psUMPtr->hKernelMemInfo, +#else psKickTADumpBuffer[i].hKernelMemInfo, +#endif PVRSRV_HANDLE_TYPE_MEM_INFO); if(eError != PVRSRV_OK) @@ -2426,12 +3183,20 @@ SGXPDumpBufferArrayBW(IMG_UINT32 ui32BridgeID, "PVRSRVLookupHandle failed (%d)", eError)); break; } +#if defined (SUPPORT_SID_INTERFACE) + psKMPtr->hKernelMemInfo = pvMemInfo; +#else psKickTADumpBuffer[i].hKernelMemInfo = pvMemInfo; +#endif #if defined(SUPPORT_SGX_NEW_STATUS_VALS) eError = PVRSRVLookupHandle(psPerProc->psHandleBase, &pvMemInfo, +#if defined (SUPPORT_SID_INTERFACE) + psUMPtr->hCtrlKernelMemInfo, +#else psKickTADumpBuffer[i].hCtrlKernelMemInfo, +#endif PVRSRV_HANDLE_TYPE_MEM_INFO); if(eError != PVRSRV_OK) @@ -2440,21 +3205,49 @@ SGXPDumpBufferArrayBW(IMG_UINT32 ui32BridgeID, "PVRSRVLookupHandle failed (%d)", eError)); break; } +#if defined (SUPPORT_SID_INTERFACE) + psKMPtr->hCtrlKernelMemInfo = pvMemInfo; + psKMPtr->sCtrlDevVAddr = psUMPtr->sCtrlDevVAddr; +#else psKickTADumpBuffer[i].hCtrlKernelMemInfo = pvMemInfo; +#endif +#endif + +#if defined (SUPPORT_SID_INTERFACE) + psKMPtr->ui32SpaceUsed = psUMPtr->ui32SpaceUsed; + psKMPtr->ui32Start = psUMPtr->ui32Start; + psKMPtr->ui32End = psUMPtr->ui32End; + psKMPtr->ui32BufferSize = psUMPtr->ui32BufferSize; + psKMPtr->ui32BackEndLength = psUMPtr->ui32BackEndLength; + psKMPtr->uiAllocIndex = psUMPtr->uiAllocIndex; + psKMPtr->pvLinAddr = psUMPtr->pvLinAddr; + psKMPtr->pszName = psUMPtr->pszName; #endif } if(eError == PVRSRV_OK) { DumpBufferArray(psPerProc, +#if defined (SUPPORT_SID_INTERFACE) + psKickTADumpBufferKM, +#else psKickTADumpBuffer, +#endif ui32BufferArrayLength, psPDumpBufferArrayIN->bDumpPolls); } +#if defined (SUPPORT_SID_INTERFACE) + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBufferKM, 0); +#else OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBuffer, 0); +#endif +#if defined (__QNXNTO__) + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32NameBufferArraySize, pszNamesBuffer, 0); +#endif + return 0; } @@ -2466,11 +3259,13 @@ SGXPDump3DSignatureRegistersBW(IMG_UINT32 ui32BridgeID, { IMG_UINT32 ui32RegisterArraySize = psPDump3DSignatureRegistersIN->ui32NumRegisters * sizeof(IMG_UINT32); IMG_UINT32 *pui32Registers = IMG_NULL; - PVRSRV_SGXDEV_INFO *psDevInfo = IMG_NULL; + PVRSRV_SGXDEV_INFO *psDevInfo; #if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) IMG_UINT32 ui32RegVal = 0; #endif PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_HANDLE hDevMemContextInt = 0; + IMG_UINT32 ui32MMUContextID; IMG_INT ret = -EFAULT; PVR_UNREFERENCED_PARAMETER(psRetOUT); @@ -2483,7 +3278,8 @@ SGXPDump3DSignatureRegistersBW(IMG_UINT32 ui32BridgeID, } psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID**)&psDeviceNode, + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psDeviceNode, psPDump3DSignatureRegistersIN->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psRetOUT->eError != PVRSRV_OK) @@ -2529,17 +3325,33 @@ SGXPDump3DSignatureRegistersBW(IMG_UINT32 ui32BridgeID, pui32Registers, psPDump3DSignatureRegistersIN->ui32NumRegisters); + psRetOUT->eError = + PVRSRVLookupHandle( psPerProc->psHandleBase, + &hDevMemContextInt, + psPDump3DSignatureRegistersIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + + PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) + ui32MMUContextID = psDeviceNode->pfnMMUGetContextID((IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext); + PDumpSignatureBuffer(&psDeviceNode->sDevId, - "out.tasig", "TA", 0, + "out.tasig", "TA", 0, psDevInfo->psKernelTASigBufferMemInfo->sDevVAddr, - psDevInfo->psKernelTASigBufferMemInfo->ui32AllocSize, + (IMG_UINT32)psDevInfo->psKernelTASigBufferMemInfo->uAllocSize, + ui32MMUContextID, 0 ); PDumpSignatureBuffer(&psDeviceNode->sDevId, - "out.3dsig", "3D", 0, + "out.3dsig", "3D", 0, psDevInfo->psKernel3DSigBufferMemInfo->sDevVAddr, - psDevInfo->psKernel3DSigBufferMemInfo->ui32AllocSize, + (IMG_UINT32)psDevInfo->psKernel3DSigBufferMemInfo->uAllocSize, + ui32MMUContextID, 0 ); - + ExitNoError: psRetOUT->eError = PVRSRV_OK; ret = 0; @@ -2571,7 +3383,7 @@ SGXPDumpCounterRegistersBW(IMG_UINT32 ui32BridgeID, { IMG_UINT32 ui32RegisterArraySize = psPDumpCounterRegistersIN->ui32NumRegisters * sizeof(IMG_UINT32); IMG_UINT32 *pui32Registers = IMG_NULL; - PVRSRV_DEVICE_NODE *psDeviceNode; + PVRSRV_DEVICE_NODE *psDeviceNode ; IMG_INT ret = -EFAULT; PVR_UNREFERENCED_PARAMETER(psBridgeOut); @@ -2583,9 +3395,10 @@ SGXPDumpCounterRegistersBW(IMG_UINT32 ui32BridgeID, goto ExitNoError; } - if(PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID**)&psDeviceNode, - psPDumpCounterRegistersIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE) != PVRSRV_OK) + if(PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psDeviceNode, + psPDumpCounterRegistersIN->hDevCookie, + PVRSRV_HANDLE_TYPE_DEV_NODE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "SGXPDumpCounterRegistersBW: hDevCookie lookup failed")); ret = -ENOMEM; @@ -2735,6 +3548,8 @@ SGXPDumpHWPerfCBBW(IMG_UINT32 ui32BridgeID, #if defined(__linux__) PVRSRV_SGXDEV_INFO *psDevInfo; PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_HANDLE hDevMemContextInt = 0; + IMG_UINT32 ui32MMUContextID = 0; PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_HWPERFCB); @@ -2749,11 +3564,26 @@ SGXPDumpHWPerfCBBW(IMG_UINT32 ui32BridgeID, psDevInfo = psDeviceNode->pvDevice; + psRetOUT->eError = + PVRSRVLookupHandle( psPerProc->psHandleBase, + &hDevMemContextInt, + psPDumpHWPerfCBIN->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + + PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) + ui32MMUContextID = psDeviceNode->pfnMMUGetContextID(hDevMemContextInt); + PDumpHWPerfCBKM(&psDeviceNode->sDevId, &psPDumpHWPerfCBIN->szFileName[0], psPDumpHWPerfCBIN->ui32FileOffset, psDevInfo->psKernelHWPerfCBMemInfo->sDevVAddr, - psDevInfo->psKernelHWPerfCBMemInfo->ui32AllocSize, + psDevInfo->psKernelHWPerfCBMemInfo->uAllocSize, + ui32MMUContextID, psPDumpHWPerfCBIN->ui32PDumpFlags); return 0; @@ -2781,11 +3611,14 @@ SGXPDumpSaveMemBW(IMG_UINT32 ui32BridgeID, PVRSRV_PER_PROCESS_DATA *psPerProc) { PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_HANDLE hDevMemContextInt = 0; + IMG_UINT32 ui32MMUContextID; PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_SAVEMEM); psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID**)&psDeviceNode, + PVRSRVLookupHandle(psPerProc->psHandleBase, + (IMG_VOID**)&psDeviceNode, psPDumpSaveMem->hDevCookie, PVRSRV_HANDLE_TYPE_DEV_NODE); if(psRetOUT->eError != PVRSRV_OK) @@ -2793,12 +3626,26 @@ SGXPDumpSaveMemBW(IMG_UINT32 ui32BridgeID, return 0; } + psRetOUT->eError = + PVRSRVLookupHandle( psPerProc->psHandleBase, + &hDevMemContextInt, + psPDumpSaveMem->hDevMemContext, + PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); + if(psRetOUT->eError != PVRSRV_OK) + { + return 0; + } + + + PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) + ui32MMUContextID = psDeviceNode->pfnMMUGetContextID(hDevMemContextInt); + PDumpSaveMemKM(&psDeviceNode->sDevId, &psPDumpSaveMem->szFileName[0], psPDumpSaveMem->ui32FileOffset, psPDumpSaveMem->sDevVAddr, psPDumpSaveMem->ui32Size, - psPDumpSaveMem->ui32DataMaster, + ui32MMUContextID, psPDumpSaveMem->ui32PDumpFlags); return 0; } @@ -2806,7 +3653,7 @@ SGXPDumpSaveMemBW(IMG_UINT32 ui32BridgeID, #endif - + IMG_VOID SetSGXDispatchTableEntry(IMG_VOID) { diff --git a/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h b/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h index de6cfd1..204450c 100644 --- a/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h +++ b/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/common/buffer_manager.c b/services4/srvkm/common/buffer_manager.c index c5ee8c7..4580f4a 100644 --- a/services4/srvkm/common/buffer_manager.c +++ b/services4/srvkm/common/buffer_manager.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -526,6 +526,7 @@ static IMG_VOID FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) { BM_MAPPING *pMapping; + PVRSRV_DEVICE_NODE *psDeviceNode; PVR_DPF ((PVR_DBG_MESSAGE, "FreeBuf: pBuf=0x%x: DevVAddr=%08X CpuVAddr=0x%x CpuPAddr=%08X", @@ -535,6 +536,12 @@ FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) pMapping = pBuf->pMapping; + psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; + if (psDeviceNode->pfnCacheInvalidate) + { + psDeviceNode->pfnCacheInvalidate(psDeviceNode); + } + if(ui32Flags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) { @@ -695,7 +702,7 @@ BM_DestroyContext(IMG_HANDLE hBMContext, else { - eError = ResManFreeResByPtr(pBMContext->hResItem); + eError = ResManFreeResByPtr(pBMContext->hResItem, CLEANUP_WITH_POLL); if(eError != PVRSRV_OK) { PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: ResManFreeResByPtr failed %d",eError)); @@ -745,13 +752,15 @@ static PVRSRV_ERROR BM_DestroyContextCallBack_AnyVaCb(BM_HEAP *psBMHeap, va_list } -static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { BM_CONTEXT *pBMContext = pvParam; PVRSRV_DEVICE_NODE *psDeviceNode; PVRSRV_ERROR eError; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); @@ -787,8 +796,11 @@ static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, } else { - - List_BM_CONTEXT_Remove(pBMContext); + if (pBMContext->ppsThis != IMG_NULL) + { + + List_BM_CONTEXT_Remove(pBMContext); + } } OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_CONTEXT), pBMContext, IMG_NULL); @@ -895,9 +907,9 @@ BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode, goto cleanup; } - if(psDeviceNode->pfnMMUInitialise(psDeviceNode, - &pBMContext->psMMUContext, - psPDDevPAddr) != PVRSRV_OK) + if((IMG_NULL == psDeviceNode->pfnMMUInitialise) || (psDeviceNode->pfnMMUInitialise(psDeviceNode, + &pBMContext->psMMUContext, + psPDDevPAddr) != PVRSRV_OK)) { PVR_DPF((PVR_DBG_ERROR, "BM_CreateContext: MMUInitialise failed")); goto cleanup; @@ -966,7 +978,7 @@ BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode, return (IMG_HANDLE)pBMContext; cleanup: - (IMG_VOID)BM_DestroyContextCallBack(pBMContext, 0); + (IMG_VOID)BM_DestroyContextCallBack(pBMContext, 0, CLEANUP_WITH_POLL); return IMG_NULL; } @@ -1006,6 +1018,11 @@ BM_CreateHeap (IMG_HANDLE hBMContext, psDeviceNode = pBMContext->psDeviceNode; + + PVR_ASSERT((psDevMemHeapInfo->ui32HeapSize & (psDevMemHeapInfo->ui32DataPageSize - 1)) == 0); + PVR_ASSERT(psDevMemHeapInfo->ui32HeapSize > 0); + + @@ -1096,7 +1113,7 @@ ErrorExit: if (psBMHeap->pMMUHeap != IMG_NULL) { psDeviceNode->pfnMMUDelete (psBMHeap->pMMUHeap); - psDeviceNode->pfnMMUFinalise (pBMContext->psMMUContext); + } @@ -1379,6 +1396,11 @@ BM_Wrap ( IMG_HANDLE hDevMemHeap, return IMG_TRUE; } + else + { + + HASH_Remove(psBMContext->pBufferHash, (IMG_UINTPTR_T)sHashAddress.uiAddr); + } } @@ -1567,7 +1589,7 @@ DevMemoryAlloc (BM_CONTEXT *pBMContext, { PVRSRV_DEVICE_NODE *psDeviceNode; #ifdef PDUMP - IMG_UINT32 ui32PDumpSize = pMapping->uSize; + IMG_UINT32 ui32PDumpSize = (IMG_UINT32)pMapping->uSize; #endif psDeviceNode = pBMContext->psDeviceNode; @@ -1677,35 +1699,323 @@ static IMG_VOID DevMemoryFree (BM_MAPPING *pMapping) { PVRSRV_DEVICE_NODE *psDeviceNode; + IMG_DEV_PHYADDR sDevPAddr; #ifdef PDUMP IMG_UINT32 ui32PSize; #endif + psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; + sDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr); + + if (sDevPAddr.uiAddr != 0) + { #ifdef PDUMP + + if(pMapping->ui32Flags & PVRSRV_MEM_DUMMY) + { + + ui32PSize = pMapping->pBMHeap->sDevArena.ui32DataPageSize; + } + else + { + ui32PSize = (IMG_UINT32)pMapping->uSize; + } - if(pMapping->ui32Flags & PVRSRV_MEM_DUMMY) + PDUMPFREEPAGES(pMapping->pBMHeap, + pMapping->DevVAddr, + ui32PSize, + pMapping->pBMHeap->sDevArena.ui32DataPageSize, + (IMG_HANDLE)pMapping, + (pMapping->ui32Flags & PVRSRV_MEM_INTERLEAVED) ? IMG_TRUE : IMG_FALSE); +#endif + } + psDeviceNode->pfnMMUFree (pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr, IMG_CAST_TO_DEVVADDR_UINT(pMapping->uSize)); +} + +#ifndef XPROC_WORKAROUND_NUM_SHAREABLES +#define XPROC_WORKAROUND_NUM_SHAREABLES 200 +#endif + +#define XPROC_WORKAROUND_BAD_SHAREINDEX 0773407734 + +static IMG_UINT32 gXProcWorkaroundShareIndex = XPROC_WORKAROUND_BAD_SHAREINDEX; + + +static struct { + IMG_UINT32 ui32RefCount; + IMG_UINT32 ui32AllocFlags; + IMG_UINT32 ui32Size; + IMG_UINT32 ui32PageSize; + RA_ARENA *psArena; + IMG_SYS_PHYADDR sSysPAddr; + IMG_VOID *pvCpuVAddr; + IMG_HANDLE hOSMemHandle; +} gXProcWorkaroundShareData[XPROC_WORKAROUND_NUM_SHAREABLES] = {{0}}; + +PVRSRV_ERROR BM_XProcWorkaroundSetShareIndex(IMG_UINT32 ui32Index) +{ + + + + if (gXProcWorkaroundShareIndex != XPROC_WORKAROUND_BAD_SHAREINDEX) { - - ui32PSize = pMapping->pBMHeap->sDevArena.ui32DataPageSize; + PVR_DPF((PVR_DBG_ERROR, "No, it's already set!")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + gXProcWorkaroundShareIndex = ui32Index; + + return PVRSRV_OK; +} + +PVRSRV_ERROR BM_XProcWorkaroundUnsetShareIndex(IMG_UINT32 ui32Index) +{ + + + + if (gXProcWorkaroundShareIndex == XPROC_WORKAROUND_BAD_SHAREINDEX) + { + PVR_DPF((PVR_DBG_ERROR, "huh? how can it be bad??")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + if (gXProcWorkaroundShareIndex != ui32Index) + { + PVR_DPF((PVR_DBG_ERROR, "gXProcWorkaroundShareIndex == 0x%08x != 0x%08x == ui32Index", gXProcWorkaroundShareIndex, ui32Index)); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + gXProcWorkaroundShareIndex = XPROC_WORKAROUND_BAD_SHAREINDEX; + + return PVRSRV_OK; +} + +PVRSRV_ERROR BM_XProcWorkaroundFindNewBufferAndSetShareIndex(IMG_UINT32 *pui32Index) +{ + + + + if (gXProcWorkaroundShareIndex != XPROC_WORKAROUND_BAD_SHAREINDEX) + { + return PVRSRV_ERROR_INVALID_PARAMS; + } + + for (*pui32Index = 0; *pui32Index < XPROC_WORKAROUND_NUM_SHAREABLES; (*pui32Index)++) + { + if (gXProcWorkaroundShareData[*pui32Index].ui32RefCount == 0) + { + gXProcWorkaroundShareIndex = *pui32Index; + return PVRSRV_OK; + } + } + + PVR_DPF((PVR_DBG_ERROR, "ran out of shared buffers")); + return PVRSRV_ERROR_OUT_OF_MEMORY; +} + +static PVRSRV_ERROR +XProcWorkaroundAllocShareable(RA_ARENA *psArena, + IMG_UINT32 ui32AllocFlags, + IMG_UINT32 ui32Size, + IMG_UINT32 ui32PageSize, + IMG_VOID **ppvCpuVAddr, + IMG_HANDLE *phOSMemHandle) +{ + if ((ui32AllocFlags & PVRSRV_MEM_XPROC) == 0) + { + PVR_DPF((PVR_DBG_VERBOSE, "XProcWorkaroundAllocShareable: bad flags")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + if (gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount > 0) + { + PVR_DPF((PVR_DBG_VERBOSE, + "XProcWorkaroundAllocShareable: re-using previously allocated pages")); + + ui32AllocFlags &= ~PVRSRV_HAP_MAPTYPE_MASK; + ui32AllocFlags |= PVRSRV_HAP_SINGLE_PROCESS; + + if (ui32AllocFlags != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags) + { + PVR_DPF((PVR_DBG_ERROR, + "Can't! Flags don't match! (I had 0x%08x, you gave 0x%08x)", + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags, + ui32AllocFlags)); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + if (ui32Size != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32Size) + { + PVR_DPF((PVR_DBG_ERROR, + "Can't! Size doesn't match!")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + if (ui32PageSize != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32PageSize) + { + PVR_DPF((PVR_DBG_ERROR, + "Can't! Page Size doesn't match!")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + *ppvCpuVAddr = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr; + *phOSMemHandle = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle; + + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount ++; + + return PVRSRV_OK; } else { - ui32PSize = pMapping->uSize; + if (psArena != IMG_NULL) + { + IMG_CPU_PHYADDR sCpuPAddr; + IMG_SYS_PHYADDR sSysPAddr; + + PVR_DPF((PVR_DBG_VERBOSE, + "XProcWorkaroundAllocShareable: making a NEW allocation from local mem")); + + if (!RA_Alloc (psArena, + ui32Size, + IMG_NULL, + IMG_NULL, + 0, + ui32PageSize, + 0, + (IMG_UINTPTR_T *)&sSysPAddr.uiAddr)) + { + PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: RA_Alloc(0x%x) FAILED", ui32Size)); + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + + sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); + if(OSReservePhys(sCpuPAddr, + ui32Size, + ui32AllocFlags, + (IMG_VOID **)&gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr, + &gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: OSReservePhys failed")); + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].sSysPAddr = sSysPAddr; + } + else + { + PVR_DPF((PVR_DBG_VERBOSE, + "XProcWorkaroundAllocShareable: making a NEW allocation from OS")); + + ui32AllocFlags &= ~PVRSRV_HAP_MAPTYPE_MASK; + ui32AllocFlags |= PVRSRV_HAP_SINGLE_PROCESS; + + + if (OSAllocPages(ui32AllocFlags, + ui32Size, + ui32PageSize, + (IMG_VOID **)&gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr, + &gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "XProcWorkaroundAllocShareable: OSAllocPages(0x%x) failed", + ui32PageSize)); + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + } + + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].psArena = psArena; + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags = ui32AllocFlags; + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32Size = ui32Size; + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32PageSize = ui32PageSize; + + *ppvCpuVAddr = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr; + *phOSMemHandle = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle; + + gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount ++; + + return PVRSRV_OK; + } +} + +static PVRSRV_ERROR XProcWorkaroundHandleToSI(IMG_HANDLE hOSMemHandle, IMG_UINT32 *pui32SI) +{ + + IMG_UINT32 ui32SI; + IMG_BOOL bFound; + IMG_BOOL bErrorDups; + + bFound = IMG_FALSE; + bErrorDups = IMG_FALSE; + + for (ui32SI = 0; ui32SI < XPROC_WORKAROUND_NUM_SHAREABLES; ui32SI++) + { + if (gXProcWorkaroundShareData[ui32SI].ui32RefCount>0 && gXProcWorkaroundShareData[ui32SI].hOSMemHandle == hOSMemHandle) + { + if (bFound) + { + bErrorDups = IMG_TRUE; + } + else + { + *pui32SI = ui32SI; + bFound = IMG_TRUE; + } + } } - PDUMPFREEPAGES(pMapping->pBMHeap, - pMapping->DevVAddr, - ui32PSize, - pMapping->pBMHeap->sDevArena.ui32DataPageSize, - (IMG_HANDLE)pMapping, - (pMapping->ui32Flags & PVRSRV_MEM_INTERLEAVED) ? IMG_TRUE : IMG_FALSE); -#endif + if (bErrorDups || !bFound) + { + return PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE; + } - psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; + return PVRSRV_OK; +} - psDeviceNode->pfnMMUFree (pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr, IMG_CAST_TO_DEVVADDR_UINT(pMapping->uSize)); +static IMG_VOID XProcWorkaroundFreeShareable(IMG_HANDLE hOSMemHandle) +{ + IMG_UINT32 ui32SI = (IMG_UINT32)((IMG_UINTPTR_T)hOSMemHandle & 0xffffU); + PVRSRV_ERROR eError; + + eError = XProcWorkaroundHandleToSI(hOSMemHandle, &ui32SI); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "bad handle")); + return; + } + + gXProcWorkaroundShareData[ui32SI].ui32RefCount --; + + PVR_DPF((PVR_DBG_VERBOSE, "Reduced refcount of SI[%d] from %d to %d", + ui32SI, gXProcWorkaroundShareData[ui32SI].ui32RefCount+1, gXProcWorkaroundShareData[ui32SI].ui32RefCount)); + + if (gXProcWorkaroundShareData[ui32SI].ui32RefCount == 0) + { + if (gXProcWorkaroundShareData[ui32SI].psArena != IMG_NULL) + { + IMG_SYS_PHYADDR sSysPAddr; + + if (gXProcWorkaroundShareData[ui32SI].pvCpuVAddr != IMG_NULL) + { + OSUnReservePhys(gXProcWorkaroundShareData[ui32SI].pvCpuVAddr, + gXProcWorkaroundShareData[ui32SI].ui32Size, + gXProcWorkaroundShareData[ui32SI].ui32AllocFlags, + gXProcWorkaroundShareData[ui32SI].hOSMemHandle); + } + sSysPAddr = gXProcWorkaroundShareData[ui32SI].sSysPAddr; + RA_Free (gXProcWorkaroundShareData[ui32SI].psArena, + sSysPAddr.uiAddr, + IMG_FALSE); + } + else + { + PVR_DPF((PVR_DBG_VERBOSE, "freeing OS memory")); + OSFreePages(gXProcWorkaroundShareData[ui32SI].ui32AllocFlags, + gXProcWorkaroundShareData[ui32SI].ui32PageSize, + gXProcWorkaroundShareData[ui32SI].pvCpuVAddr, + gXProcWorkaroundShareData[ui32SI].hOSMemHandle); + } + } } + static IMG_BOOL BM_ImportMemory (IMG_VOID *pH, IMG_SIZE_T uRequestSize, @@ -1720,7 +2030,7 @@ BM_ImportMemory (IMG_VOID *pH, IMG_BOOL bResult; IMG_SIZE_T uSize; IMG_SIZE_T uPSize; - IMG_UINT32 uDevVAddrAlignment = 0; + IMG_SIZE_T uDevVAddrAlignment = 0; PVR_DPF ((PVR_DBG_MESSAGE, "BM_ImportMemory (pBMContext=0x%x, uRequestSize=0x%x, uFlags=0x%x, uAlign=0x%x)", @@ -1771,6 +2081,103 @@ BM_ImportMemory (IMG_VOID *pH, uPSize = pMapping->uSize; } + if (uFlags & PVRSRV_MEM_XPROC) + { + IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs | PVRSRV_MEM_XPROC; + IMG_BOOL bBadBackingStoreType; + + bBadBackingStoreType = IMG_TRUE; + + if ((ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) != 0) + { +#ifndef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + uDevVAddrAlignment = MAX(pBMHeap->sDevArena.ui32DataPageSize, HOST_PAGESIZE()); + + + if (uPSize % uDevVAddrAlignment != 0) + { + PVR_DPF((PVR_DBG_ERROR, "Cannot use use this memory sharing workaround with allocations that might be suballocated")); + goto fail_mapping_alloc; + } + uDevVAddrAlignment = 0; + + + if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) + { + ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; + ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); + } + + + if (XProcWorkaroundAllocShareable(IMG_NULL, + ui32Attribs, + (IMG_UINT32)uPSize, + pBMHeap->sDevArena.ui32DataPageSize, + (IMG_VOID **)&pMapping->CpuVAddr, + &pMapping->hOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "BM_ImportMemory: XProcWorkaroundAllocShareable(0x%x) failed", + uPSize)); + goto fail_mapping_alloc; + } + + + + + pMapping->eCpuMemoryOrigin = hm_env; + bBadBackingStoreType = IMG_FALSE; + } + + if ((ui32Attribs & PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG) != 0) + { + uDevVAddrAlignment = pBMHeap->sDevArena.ui32DataPageSize; + + if (uPSize % uDevVAddrAlignment != 0) + { + PVR_DPF((PVR_DBG_ERROR, "Cannot use use this memory sharing workaround with allocations that might be suballocated")); + goto fail_mapping_alloc; + } + uDevVAddrAlignment = 0; + + + if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) + { + ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; + ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); + } + + + if (XProcWorkaroundAllocShareable(pBMHeap->pLocalDevMemArena, + ui32Attribs, + (IMG_UINT32)uPSize, + pBMHeap->sDevArena.ui32DataPageSize, + (IMG_VOID **)&pMapping->CpuVAddr, + &pMapping->hOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "BM_ImportMemory: XProcWorkaroundAllocShareable(0x%x) failed", + uPSize)); + goto fail_mapping_alloc; + } + + + + + pMapping->eCpuMemoryOrigin = hm_env; + bBadBackingStoreType = IMG_FALSE; + } + + if (bBadBackingStoreType) + { + PVR_DPF((PVR_DBG_ERROR, "Cannot use this memory sharing workaround with this type of backing store")); + goto fail_mapping_alloc; + } + } + else + if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) @@ -1854,7 +2261,7 @@ BM_ImportMemory (IMG_VOID *pH, pMapping, IMG_NULL, uFlags, - uDevVAddrAlignment, + (IMG_UINT32)uDevVAddrAlignment, &pMapping->DevVAddr); if (!bResult) { @@ -1892,7 +2299,12 @@ fail_dev_mem_alloc: uPSize = pMapping->uSize; } - if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) + if (uFlags & PVRSRV_MEM_XPROC) + { + XProcWorkaroundFreeShareable(pMapping->hOSMemHandle); + } + else + if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) { OSFreePages(pBMHeap->ui32Attribs, uPSize, @@ -1959,7 +2371,12 @@ BM_FreeMemory (IMG_VOID *h, IMG_UINTPTR_T _base, BM_MAPPING *psMapping) uPSize = psMapping->uSize; } - if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) + if (psMapping->ui32Flags & PVRSRV_MEM_XPROC) + { + XProcWorkaroundFreeShareable(psMapping->hOSMemHandle); + } + else + if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) { OSFreePages(pBMHeap->ui32Attribs, uPSize, @@ -2002,6 +2419,7 @@ IMG_VOID BM_GetPhysPageAddr(PVRSRV_KERNEL_MEM_INFO *psMemInfo, PVR_ASSERT((sDevVPageAddr.uiAddr & 0xFFF) == 0); + psDeviceNode = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->pBMContext->psDeviceNode; *psDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->pMMUHeap, diff --git a/services4/srvkm/common/deviceclass.c b/services4/srvkm/common/deviceclass.c index 471ce0c..13bfa8d 100644 --- a/services4/srvkm/common/deviceclass.c +++ b/services4/srvkm/common/deviceclass.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -258,7 +258,7 @@ PVRSRV_ERROR PVRSRVRegisterDCDeviceKM (PVRSRV_DC_SRV2DISP_KMJTABLE *psFuncTable, *psDCInfo->psFuncTable = *psFuncTable; - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, + if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), (IMG_VOID **)&psDeviceNode, IMG_NULL, "Device Node") != PVRSRV_OK) @@ -420,7 +420,7 @@ PVRSRV_ERROR PVRSRVRegisterBCDeviceKM (PVRSRV_BC_SRV2BUFFER_KMJTABLE *psFuncTabl *psBCInfo->psFuncTable = *psFuncTable; - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, + if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), (IMG_VOID **)&psDeviceNode, IMG_NULL, "Device Node") != PVRSRV_OK) @@ -540,23 +540,37 @@ PVRSRV_ERROR PVRSRVCloseDCDeviceKM (IMG_HANDLE hDeviceKM, psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)hDeviceKM; - eError = ResManFreeResByPtr(psDCPerContextInfo->hResItem); + eError = ResManFreeResByPtr(psDCPerContextInfo->hResItem, CLEANUP_WITH_POLL); return eError; } -static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; PVRSRV_DISPLAYCLASS_INFO *psDCInfo; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)pvParam; psDCInfo = psDCPerContextInfo->psDCInfo; + if(psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount != 0) + { + PVR_DPF((PVR_DBG_ERROR,"CloseDCDeviceCallBack: system buffer (0x%p) still mapped (refcount = %d)", + &psDCInfo->sSystemBuffer.sDeviceClassBuffer, + psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount)); + +#if 0 + + return PVRSRV_ERROR_STILL_MAPPED; +#endif + } + psDCInfo->ui32RefCount--; if(psDCInfo->ui32RefCount == 0) { @@ -658,6 +672,7 @@ PVRSRV_ERROR PVRSRVOpenDCDeviceKM (PVRSRV_PER_PROCESS_DATA *psPerProc, } psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount++; + psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount = 0; } psDCPerContextInfo->psDCInfo = psDCInfo; @@ -800,7 +815,7 @@ PVRSRV_ERROR PVRSRVDestroyDCSwapChainKM(IMG_HANDLE hSwapChainRef) psSwapChainRef = hSwapChainRef; - eError = ResManFreeResByPtr(psSwapChainRef->hResItem); + eError = ResManFreeResByPtr(psSwapChainRef->hResItem, CLEANUP_WITH_POLL); return eError; } @@ -812,7 +827,6 @@ static PVRSRV_ERROR DestroyDCSwapChain(PVRSRV_DC_SWAPCHAIN *psSwapChain) PVRSRV_DISPLAYCLASS_INFO *psDCInfo = psSwapChain->psDCInfo; IMG_UINT32 i; - if( psDCInfo->psDCSwapChainShared ) { @@ -869,12 +883,30 @@ static PVRSRV_ERROR DestroyDCSwapChain(PVRSRV_DC_SWAPCHAIN *psSwapChain) } -static PVRSRV_ERROR DestroyDCSwapChainRefCallBack(IMG_PVOID pvParam, IMG_UINT32 ui32Param) +static PVRSRV_ERROR DestroyDCSwapChainRefCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF *) pvParam; PVRSRV_ERROR eError = PVRSRV_OK; + IMG_UINT32 i; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); + + for (i = 0; i < psSwapChainRef->psSwapChain->ui32BufferCount; i++) + { + if (psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount != 0) + { + PVR_DPF((PVR_DBG_ERROR, "DestroyDCSwapChainRefCallBack: swapchain (0x%p) still mapped (ui32MemMapRefCount = %d)", + &psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer, + psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount)); +#if 0 + + return PVRSRV_ERROR_STILL_MAPPED; +#endif + } + } if(--psSwapChainRef->psSwapChain->ui32RefCount == 0) { @@ -1313,6 +1345,7 @@ PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM, IMG_UINT32 ui32NumSrcSyncs = 1; PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[2]; PVRSRV_COMMAND *psCommand; + SYS_DATA *psSysData; if(!hDeviceKM || !hBuffer || !psClipRect) { @@ -1320,14 +1353,6 @@ PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM, return PVRSRV_ERROR_INVALID_PARAMS; } -#if defined(SUPPORT_LMA) - eError = PVRSRVPowerLock(KERNEL_ID, IMG_FALSE); - if(eError != PVRSRV_OK) - { - return eError; - } -#endif - psBuffer = (PVRSRV_DC_BUFFER*)hBuffer; psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); @@ -1427,28 +1452,15 @@ PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM, + SysAcquireData(&psSysData); + eError = OSScheduleMISR(psSysData); - - - - - - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) + if (eError != PVRSRV_OK) { - if(PVRSRVProcessQueues(KERNEL_ID, IMG_FALSE) != PVRSRV_ERROR_PROCESSING_BLOCKED) - { - goto ProcessedQueues; - } - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); - } END_LOOP_UNTIL_TIMEOUT(); - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to process queues")); - - eError = PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE; - goto Exit; + PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to schedule MISR")); + goto Exit; + } -ProcessedQueues: psBuffer->psSwapChain->psLastFlipBuffer = psBuffer; @@ -1459,9 +1471,6 @@ Exit: eError = PVRSRV_ERROR_RETRY; } -#if defined(SUPPORT_LMA) - PVRSRVPowerUnlock(KERNEL_ID); -#endif return eError; } @@ -1481,6 +1490,7 @@ PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM, PVRSRV_COMMAND *psCommand; IMG_BOOL bAddReferenceToLast = IMG_TRUE; IMG_UINT16 ui16SwapCommandID = DC_FLIP_COMMAND; + SYS_DATA *psSysData; if(!hDeviceKM || !hSwapChainRef) { @@ -1488,14 +1498,6 @@ PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM, return PVRSRV_ERROR_INVALID_PARAMS; } -#if defined(SUPPORT_LMA) - eError = PVRSRVPowerLock(KERNEL_ID, IMG_FALSE); - if(eError != PVRSRV_OK) - { - return eError; - } -#endif - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef; psSwapChain = psSwapChainRef->psSwapChain; @@ -1581,28 +1583,15 @@ PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM, } + SysAcquireData(&psSysData); + eError = OSScheduleMISR(psSysData); - - - - - - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) + if (eError != PVRSRV_OK) { - if(PVRSRVProcessQueues(KERNEL_ID, IMG_FALSE) != PVRSRV_ERROR_PROCESSING_BLOCKED) - { - goto ProcessedQueues; - } - - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); - } END_LOOP_UNTIL_TIMEOUT(); - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to process queues")); - eError = PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE; - goto Exit; + PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to schedule MISR")); + goto Exit; + } -ProcessedQueues: psSwapChain->psLastFlipBuffer = &psDCInfo->sSystemBuffer; @@ -1615,9 +1604,6 @@ Exit: eError = PVRSRV_ERROR_RETRY; } -#if defined(SUPPORT_LMA) - PVRSRVPowerUnlock(KERNEL_ID); -#endif return eError; } @@ -1725,28 +1711,42 @@ PVRSRV_ERROR PVRSRVCloseBCDeviceKM (IMG_HANDLE hDeviceKM, psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)hDeviceKM; - eError = ResManFreeResByPtr(psBCPerContextInfo->hResItem); + eError = ResManFreeResByPtr(psBCPerContextInfo->hResItem, CLEANUP_WITH_POLL); return eError; } -static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; PVRSRV_BUFFERCLASS_INFO *psBCInfo; + IMG_UINT32 i; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)pvParam; + psBCInfo = psBCPerContextInfo->psBCInfo; + for (i = 0; i < psBCInfo->ui32BufferCount; i++) + { + if (psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount != 0) + { + PVR_DPF((PVR_DBG_ERROR, "CloseBCDeviceCallBack: buffer %d (0x%p) still mapped (ui32MemMapRefCount = %d)", + i, + &psBCInfo->psBuffer[i].sDeviceClassBuffer, + psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount)); + return PVRSRV_ERROR_STILL_MAPPED; + } + } + psBCInfo->ui32RefCount--; if(psBCInfo->ui32RefCount == 0) { - IMG_UINT32 i; - psBCInfo->psFuncTable->pfnCloseBCDevice(psBCInfo->ui32DeviceID, psBCInfo->hExtDevice); @@ -1900,6 +1900,7 @@ PVRSRV_ERROR PVRSRVOpenBCDeviceKM (PVRSRV_PER_PROCESS_DATA *psPerProc, psBCInfo->psBuffer[i].sDeviceClassBuffer.pfnGetBufferAddr = psBCInfo->psFuncTable->pfnGetBufferAddr; psBCInfo->psBuffer[i].sDeviceClassBuffer.hDevMemContext = psBCInfo->hDevMemContext; psBCInfo->psBuffer[i].sDeviceClassBuffer.hExtDevice = psBCInfo->hExtDevice; + psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount = 0; } } diff --git a/services4/srvkm/common/deviceid.h b/services4/srvkm/common/deviceid.h index b6fe921..9a7bdb3 100644 --- a/services4/srvkm/common/deviceid.h +++ b/services4/srvkm/common/deviceid.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/common/devicemem.c b/services4/srvkm/common/devicemem.c index e607e58..b95d2f3 100644 --- a/services4/srvkm/common/devicemem.c +++ b/services4/srvkm/common/devicemem.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -30,6 +30,7 @@ #include "buffer_manager.h" #include "pdump_km.h" #include "pvr_bridge_km.h" +#include "osfunc.h" static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE hDevCookie, IMG_HANDLE hDevMemHeap, @@ -52,12 +53,18 @@ typedef struct _PVRSRV_DC_MAPINFO_ PVRSRV_DEVICE_NODE *psDeviceNode; IMG_UINT32 ui32RangeIndex; IMG_UINT32 ui32TilingStride; + PVRSRV_DEVICECLASS_BUFFER *psDeviceClassBuffer; } PVRSRV_DC_MAPINFO; +static IMG_UINT32 g_ui32SyncUID = 0; IMG_EXPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo) +#else PVRSRV_HEAP_INFO *psHeapInfo) +#endif { PVRSRV_DEVICE_NODE *psDeviceNode; IMG_UINT32 ui32HeapCount; @@ -105,7 +112,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCook PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_HANDLE *phDevMemContext, IMG_UINT32 *pui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo, +#else PVRSRV_HEAP_INFO *psHeapInfo, +#endif IMG_BOOL *pbCreated, IMG_BOOL *pbShared) { @@ -117,7 +128,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCook IMG_DEV_PHYADDR sPDDevPAddr; IMG_UINT32 i; -#if !defined(PVR_SECURE_HANDLES) +#if !defined(PVR_SECURE_HANDLES) && !defined (SUPPORT_SID_INTERFACE) PVR_UNREFERENCED_PARAMETER(pbShared); #endif @@ -164,7 +175,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCook psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) pbShared[ui32ClientHeapCount] = IMG_TRUE; #endif ui32ClientHeapCount++; @@ -172,8 +183,20 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCook } case DEVICE_MEMORY_HEAP_PERCONTEXT: { - hDevMemHeap = BM_CreateHeap(hDevMemContext, - &psDeviceMemoryHeap[i]); + if (psDeviceMemoryHeap[i].ui32HeapSize > 0) + { + hDevMemHeap = BM_CreateHeap(hDevMemContext, + &psDeviceMemoryHeap[i]); + if (hDevMemHeap == IMG_NULL) + { + BM_DestroyContext(hDevMemContext, IMG_NULL); + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + } + else + { + hDevMemHeap = IMG_NULL; + } psHeapInfo[ui32ClientHeapCount].ui32HeapID = psDeviceMemoryHeap[i].ui32HeapID; @@ -181,7 +204,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCook psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) pbShared[ui32ClientHeapCount] = IMG_FALSE; #endif @@ -215,7 +238,11 @@ IMG_EXPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie, IMG_HANDLE hDevMemContext, IMG_UINT32 *pui32ClientHeapCount, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *psHeapInfo, +#else PVRSRV_HEAP_INFO *psHeapInfo, +#endif IMG_BOOL *pbShared) { PVRSRV_DEVICE_NODE *psDeviceNode; @@ -224,7 +251,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie IMG_HANDLE hDevMemHeap; IMG_UINT32 i; -#if !defined(PVR_SECURE_HANDLES) +#if !defined(PVR_SECURE_HANDLES) && !defined (SUPPORT_SID_INTERFACE) PVR_UNREFERENCED_PARAMETER(pbShared); #endif @@ -259,7 +286,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) pbShared[ui32ClientHeapCount] = IMG_TRUE; #endif ui32ClientHeapCount++; @@ -267,8 +294,20 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie } case DEVICE_MEMORY_HEAP_PERCONTEXT: { - hDevMemHeap = BM_CreateHeap(hDevMemContext, - &psDeviceMemoryHeap[i]); + if (psDeviceMemoryHeap[i].ui32HeapSize > 0) + { + hDevMemHeap = BM_CreateHeap(hDevMemContext, + &psDeviceMemoryHeap[i]); + + if (hDevMemHeap == IMG_NULL) + { + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + } + else + { + hDevMemHeap = IMG_NULL; + } psHeapInfo[ui32ClientHeapCount].ui32HeapID = psDeviceMemoryHeap[i].ui32HeapID; @@ -276,7 +315,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) pbShared[ui32ClientHeapCount] = IMG_FALSE; #endif @@ -354,7 +393,7 @@ static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE hDevCookie, psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->ui32AllocSize = ui32Size; + psMemInfo->uAllocSize = ui32Size; psMemInfo->pvSysBackupBuffer = IMG_NULL; @@ -387,7 +426,7 @@ static PVRSRV_ERROR FreeDeviceMem2(PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_BOOL b if ((psMemInfo->pvSysBackupBuffer) && bFromAllocator) { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->ui32AllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->uAllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); psMemInfo->pvSysBackupBuffer = IMG_NULL; } @@ -415,7 +454,7 @@ static PVRSRV_ERROR FreeDeviceMem(PVRSRV_KERNEL_MEM_INFO *psMemInfo) if(psMemInfo->pvSysBackupBuffer) { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->ui32AllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->uAllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); psMemInfo->pvSysBackupBuffer = IMG_NULL; } @@ -492,13 +531,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE hDevCookie, PDUMPMEM(psKernelSyncInfo->psSyncDataMemInfoKM->pvLinAddrKM, psKernelSyncInfo->psSyncDataMemInfoKM, 0, - psKernelSyncInfo->psSyncDataMemInfoKM->ui32AllocSize, + (IMG_UINT32)psKernelSyncInfo->psSyncDataMemInfoKM->uAllocSize, PDUMP_FLAGS_CONTINUOUS, MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); #endif psKernelSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr = psKernelSyncInfo->psSyncDataMemInfoKM->sDevVAddr.uiAddr + offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete); psKernelSyncInfo->sReadOpsCompleteDevVAddr.uiAddr = psKernelSyncInfo->psSyncDataMemInfoKM->sDevVAddr.uiAddr + offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); + psKernelSyncInfo->ui32UID = g_ui32SyncUID++; psKernelSyncInfo->psSyncDataMemInfoKM->psKernelSyncInfo = IMG_NULL; @@ -514,14 +554,14 @@ IMG_EXPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo) { PVRSRV_ERROR eError; - + if (psKernelSyncInfo->ui32RefCount != 0) { PVR_DPF((PVR_DBG_ERROR, "oops: sync info ref count not zero at destruction")); return PVRSRV_ERROR_OUT_OF_MEMORY; } - + eError = FreeDeviceMem(psKernelSyncInfo->psSyncDataMemInfoKM); (IMG_VOID)OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_SYNC_INFO), psKernelSyncInfo, IMG_NULL); @@ -546,6 +586,113 @@ static IMG_VOID freeWrapped(PVRSRV_KERNEL_MEM_INFO *psMemInfo) } } + +#if defined (PVRSRV_FLUSH_KERNEL_OPS_LAST_ONLY) +static +PVRSRV_ERROR _PollUntilAtLeast(volatile IMG_UINT32* pui32WatchedValue, + IMG_UINT32 ui32MinimumValue, + IMG_UINT32 ui32Waitus, + IMG_UINT32 ui32Tries) +{ + PVRSRV_ERROR eError; + IMG_INT32 iDiff; + + for(;;) + { + SYS_DATA *psSysData = SysAcquireDataNoCheck(); + iDiff = *pui32WatchedValue - ui32MinimumValue; + + if (iDiff >= 0) + { + eError = PVRSRV_OK; + break; + } + + if(!ui32Tries) + { + eError = PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE; + break; + } + + ui32Tries--; + + + if (psSysData->psGlobalEventObject) + { + IMG_HANDLE hOSEventKM; + if(psSysData->psGlobalEventObject) + { + eError = OSEventObjectOpenKM(psSysData->psGlobalEventObject, &hOSEventKM); + if (eError |= PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "_PollUntilAtLeast: OSEventObjectOpen failed")); + goto Exit; + } + eError = OSEventObjectWaitKM(hOSEventKM); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "_PollUntilAtLeast: PVRSRVEventObjectWait failed")); + goto Exit; + } + eError = OSEventObjectCloseKM(psSysData->psGlobalEventObject, hOSEventKM); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "_PollUntilAtLeast: OSEventObjectClose failed")); + } + } + } + } +Exit: + return eError; +} + +static PVRSRV_ERROR FlushKernelOps(PVRSRV_SYNC_DATA *psSyncData) +{ + PVRSRV_ERROR eError; + + if(!psSyncData) + { + PVR_DPF((PVR_DBG_ERROR, "FlushKernelOps: invalid psSyncData")); + return PVRSRV_ERROR_INVALID_PARAMS; + } + + + + + + + + + + + eError = _PollUntilAtLeast(&psSyncData->ui32ReadOpsComplete, + psSyncData->ui32ReadOpsPending, + MAX_HW_TIME_US/WAIT_TRY_COUNT, + WAIT_TRY_COUNT); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "FlushClientOps: Read ops pending timeout")); + PVR_DBG_BREAK; + return eError; + } + + eError = _PollUntilAtLeast(&psSyncData->ui32WriteOpsComplete, + psSyncData->ui32WriteOpsPending, + MAX_HW_TIME_US/WAIT_TRY_COUNT, + WAIT_TRY_COUNT); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "FlushClientOps: Write ops pending timeout")); + PVR_DBG_BREAK; + } + + return eError; +} +#endif + static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_UINT32 ui32Param, IMG_BOOL bFromAllocator) @@ -558,9 +705,13 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, psMemInfo->ui32RefCount--; - if((psMemInfo->ui32Flags & PVRSRV_MEM_EXPORTED) && (bFromAllocator == IMG_TRUE)) + if(((psMemInfo->ui32Flags & PVRSRV_MEM_EXPORTED) != 0) && (bFromAllocator == IMG_TRUE)) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMemInfo = 0; +#else IMG_HANDLE hMemInfo = IMG_NULL; +#endif eError = PVRSRVFindHandle(KERNEL_HANDLE_BASE, @@ -587,6 +738,15 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, if (psMemInfo->ui32RefCount == 0) { +#if defined (PVRSRV_FLUSH_KERNEL_OPS_LAST_ONLY) + if (psMemInfo->psKernelSyncInfo) + { + if (psMemInfo->psKernelSyncInfo->ui32RefCount == 1) + { + FlushKernelOps(psMemInfo->psKernelSyncInfo->psSyncData); + } + } +#endif switch(psMemInfo->memType) { @@ -611,16 +771,21 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, } - - eError = FreeDeviceMem2(psMemInfo, bFromAllocator); + if (eError == PVRSRV_OK) + { + eError = FreeDeviceMem2(psMemInfo, bFromAllocator); + } return eError; } -static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; + + PVR_UNREFERENCED_PARAMETER(bDummy); return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); } @@ -641,12 +806,12 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE hDevCookie, if (psMemInfo->sMemBlk.hResItem != IMG_NULL) { - eError = ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); + eError = ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); } else { - eError = FreeDeviceMemCallBack(psMemInfo, 0); + eError = FreeDeviceMemCallBack(psMemInfo, 0, CLEANUP_WITH_POLL); } return eError; @@ -804,14 +969,17 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemoryKM (PVRSRV_KERNEL_MEM_INFO *psMem return PVRSRV_ERROR_INVALID_PARAMS; } - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); + return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); } -static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; + + PVR_UNREFERENCED_PARAMETER(bDummy); return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); } @@ -821,8 +989,8 @@ IMG_EXPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_HANDLE hDevMemContext, - IMG_SIZE_T ui32ByteSize, - IMG_SIZE_T ui32PageOffset, + IMG_SIZE_T uByteSize, + IMG_SIZE_T uPageOffset, IMG_BOOL bPhysContig, IMG_SYS_PHYADDR *psExtSysPAddr, IMG_VOID *pvLinAddr, @@ -842,11 +1010,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, IMG_VOID *pvPageAlignedCPUVAddr; IMG_SYS_PHYADDR *psIntSysPAddr = IMG_NULL; IMG_HANDLE hOSWrapMem = IMG_NULL; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; + DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; IMG_UINT32 i; - IMG_SIZE_T ui32PageCount = 0; - - + IMG_SIZE_T uPageCount = 0; + + psDeviceNode = (PVRSRV_DEVICE_NODE*)hDevCookie; PVR_ASSERT(psDeviceNode != IMG_NULL); @@ -859,15 +1027,15 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, if(pvLinAddr) { - ui32PageOffset = (IMG_UINTPTR_T)pvLinAddr & (ui32HostPageSize - 1); + uPageOffset = (IMG_UINTPTR_T)pvLinAddr & (ui32HostPageSize - 1); - ui32PageCount = HOST_PAGEALIGN(ui32ByteSize + ui32PageOffset) / ui32HostPageSize; - pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)pvLinAddr - ui32PageOffset); + uPageCount = HOST_PAGEALIGN(uByteSize + uPageOffset) / ui32HostPageSize; + pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)pvLinAddr - uPageOffset); if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageCount * sizeof(IMG_SYS_PHYADDR), + uPageCount * sizeof(IMG_SYS_PHYADDR), (IMG_VOID **)&psIntSysPAddr, IMG_NULL, "Array of Page Addresses") != PVRSRV_OK) { @@ -876,7 +1044,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, } eError = OSAcquirePhysPageAddr(pvPageAlignedCPUVAddr, - ui32PageCount * ui32HostPageSize, + uPageCount * ui32HostPageSize, psIntSysPAddr, &hOSWrapMem); if(eError != PVRSRV_OK) @@ -897,7 +1065,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, { } - + psDevMemoryInfo = &((BM_CONTEXT*)hDevMemContext)->psDeviceNode->sDevMemoryInfo; psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; @@ -908,7 +1076,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, if(psDeviceMemoryHeap[i].DevMemHeapType == DEVICE_MEMORY_HEAP_PERCONTEXT) { - hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); + if (psDeviceMemoryHeap[i].ui32HeapSize > 0) + { + hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); + } + else + { + hDevMemHeap = IMG_NULL; + } } else { @@ -941,8 +1116,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, psMemBlock = &(psMemInfo->sMemBlk); bBMError = BM_Wrap(hDevMemHeap, - ui32ByteSize, - ui32PageOffset, + uByteSize, + uPageOffset, bPhysContig, psExtSysPAddr, IMG_NULL, @@ -967,7 +1142,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, psMemInfo->pvLinAddrKM = BM_HandleToCpuVaddr(hBuffer); psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->ui32AllocSize = ui32ByteSize; + psMemInfo->uAllocSize = uByteSize; @@ -1033,10 +1208,10 @@ ErrorExitPhase2: ErrorExitPhase1: if(psIntSysPAddr) { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32PageCount * sizeof(IMG_SYS_PHYADDR), psIntSysPAddr, IMG_NULL); + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, uPageCount * sizeof(IMG_SYS_PHYADDR), psIntSysPAddr, IMG_NULL); } - + return eError; } @@ -1049,17 +1224,19 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemoryKM (PVRSRV_KERNEL_MEM_INFO *psM return PVRSRV_ERROR_INVALID_PARAMS; } - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); + return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); } -static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_ERROR eError; RESMAN_MAP_DEVICE_MEM_DATA *psMapData = pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); if(psMapData->psMemInfo->sMemBlk.psIntSysPAddr) { @@ -1067,7 +1244,7 @@ static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, psMapData->psMemInfo->sMemBlk.psIntSysPAddr = IMG_NULL; } - if( psMapData->psMemInfo->psKernelSyncInfo ) + if( psMapData->psMemInfo->psKernelSyncInfo ) { psMapData->psMemInfo->psKernelSyncInfo->ui32RefCount--; if (psMapData->psMemInfo->psKernelSyncInfo->ui32RefCount == 0) @@ -1080,7 +1257,7 @@ static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, } } } - + eError = FreeDeviceMem(psMapData->psMemInfo); if(eError != PVRSRV_OK) { @@ -1106,7 +1283,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer { PVRSRV_ERROR eError; IMG_UINT32 i; - IMG_SIZE_T ui32PageCount, ui32PageOffset; + IMG_SIZE_T uPageCount, uPageOffset; IMG_SIZE_T ui32HostPageSize = HOST_PAGESIZE(); IMG_SYS_PHYADDR *psSysPAddr = IMG_NULL; IMG_DEV_PHYADDR sDevPAddr; @@ -1130,16 +1307,16 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer *ppsDstMemInfo = IMG_NULL; - ui32PageOffset = psSrcMemInfo->sDevVAddr.uiAddr & (ui32HostPageSize - 1); - ui32PageCount = HOST_PAGEALIGN(psSrcMemInfo->ui32AllocSize + ui32PageOffset) / ui32HostPageSize; - pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)psSrcMemInfo->pvLinAddrKM - ui32PageOffset); + uPageOffset = psSrcMemInfo->sDevVAddr.uiAddr & (ui32HostPageSize - 1); + uPageCount = HOST_PAGEALIGN(psSrcMemInfo->uAllocSize + uPageOffset) / ui32HostPageSize; + pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)psSrcMemInfo->pvLinAddrKM - uPageOffset); if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageCount*sizeof(IMG_SYS_PHYADDR), + uPageCount*sizeof(IMG_SYS_PHYADDR), (IMG_VOID **)&psSysPAddr, IMG_NULL, "Array of Page Addresses") != PVRSRV_OK) { @@ -1153,8 +1330,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer psDeviceNode = psBuf->pMapping->pBMHeap->pBMContext->psDeviceNode; - sDevVAddr.uiAddr = psSrcMemInfo->sDevVAddr.uiAddr - IMG_CAST_TO_DEVVADDR_UINT(ui32PageOffset); - for(i=0; isDevVAddr.uiAddr - IMG_CAST_TO_DEVVADDR_UINT(uPageOffset); + for(i=0; isMemBlk); bBMError = BM_Wrap(hDstDevMemHeap, - psSrcMemInfo->ui32AllocSize, - ui32PageOffset, + psSrcMemInfo->uAllocSize, + uPageOffset, IMG_FALSE, psSysPAddr, pvPageAlignedCPUVAddr, @@ -1223,12 +1399,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->ui32AllocSize = psSrcMemInfo->ui32AllocSize; + psMemInfo->uAllocSize = psSrcMemInfo->uAllocSize; psMemInfo->psKernelSyncInfo = psSrcMemInfo->psKernelSyncInfo; - if( psMemInfo->psKernelSyncInfo ) + if(psMemInfo->psKernelSyncInfo) + { psMemInfo->psKernelSyncInfo->ui32RefCount++; + } @@ -1297,17 +1475,19 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO return PVRSRV_ERROR_INVALID_PARAMS; } - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); + return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); } -static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_DC_MAPINFO *psDCMapInfo = pvParam; PVRSRV_KERNEL_MEM_INFO *psMemInfo; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); psMemInfo = psDCMapInfo->psMemInfo; @@ -1324,6 +1504,8 @@ static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, } #endif + (psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)--; + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL); return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); @@ -1348,7 +1530,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * DEVICE_MEMORY_INFO *psDevMemoryInfo; DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; IMG_HANDLE hDevMemHeap = IMG_NULL; - IMG_SIZE_T ui32ByteSize; + IMG_SIZE_T uByteSize; IMG_SIZE_T ui32Offset; IMG_SIZE_T ui32PageSize = HOST_PAGESIZE(); BM_HANDLE hBuffer; @@ -1398,7 +1580,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * eError = psDeviceClassBuffer->pfnGetBufferAddr(psDeviceClassBuffer->hExtDevice, psDeviceClassBuffer->hExtBuffer, &psSysPAddr, - &ui32ByteSize, + &uByteSize, &pvCPUVAddr, phOSMapInfo, &bPhysContig, @@ -1421,7 +1603,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * if(psDeviceMemoryHeap[i].DevMemHeapType == DEVICE_MEMORY_HEAP_PERCONTEXT) { - hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); + if (psDeviceMemoryHeap[i].ui32HeapSize > 0) + { + hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); + } + else + { + hDevMemHeap = IMG_NULL; + } } else { @@ -1457,7 +1646,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * psMemBlock = &(psMemInfo->sMemBlk); bBMError = BM_Wrap(hDevMemHeap, - ui32ByteSize, + uByteSize, ui32Offset, bPhysContig, psSysPAddr, @@ -1486,7 +1675,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->ui32AllocSize = ui32ByteSize; + psMemInfo->uAllocSize = uByteSize; psMemInfo->psKernelSyncInfo = psDeviceClassBuffer->psKernelSyncInfo; @@ -1495,6 +1684,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * psDCMapInfo->psMemInfo = psMemInfo; + psDCMapInfo->psDeviceClassBuffer = psDeviceClassBuffer; #if defined(SUPPORT_MEMORY_TILING) psDCMapInfo->psDeviceNode = psDeviceNode; @@ -1521,6 +1711,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * 0, &UnmapDeviceClassMemoryCallBack); + (psDeviceClassBuffer->ui32MemMapRefCount)++; psMemInfo->ui32RefCount++; psMemInfo->memType = PVRSRV_MEMTYPE_DEVICECLASS; @@ -1531,7 +1722,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * #if defined(SUPPORT_PDUMP_MULTI_PROCESS) PDUMPCOMMENT("Dump display surface"); - PDUMPMEM(IMG_NULL, psMemInfo, ui32Offset, psMemInfo->ui32AllocSize, PDUMP_FLAGS_CONTINUOUS, ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping); + PDUMPMEM(IMG_NULL, psMemInfo, ui32Offset, psMemInfo->uAllocSize, PDUMP_FLAGS_CONTINUOUS, ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping); #endif return PVRSRV_OK; @@ -1562,3 +1753,29 @@ ErrorExitPhase1: return eError; } + +IMG_EXPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVChangeDeviceMemoryAttributesKM(IMG_HANDLE hKernelMemInfo, IMG_UINT32 ui32Attribs) +{ + PVRSRV_KERNEL_MEM_INFO *psKMMemInfo; + + if (hKernelMemInfo == IMG_NULL) + { + return PVRSRV_ERROR_INVALID_PARAMS; + } + + psKMMemInfo = (PVRSRV_KERNEL_MEM_INFO *)hKernelMemInfo; + + if (ui32Attribs & PVRSRV_CHANGEDEVMEM_ATTRIBS_CACHECOHERENT) + { + psKMMemInfo->ui32Flags |= PVRSRV_MEM_CACHE_CONSISTENT; + } + else + { + psKMMemInfo->ui32Flags &= ~PVRSRV_MEM_CACHE_CONSISTENT; + } + + return PVRSRV_OK; +} + + diff --git a/services4/srvkm/common/handle.c b/services4/srvkm/common/handle.c index 5e34af5..d911b38 100644 --- a/services4/srvkm/common/handle.c +++ b/services4/srvkm/common/handle.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -24,7 +24,7 @@ * ******************************************************************************/ -#ifdef PVR_SECURE_HANDLES +#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) #include #include "services_headers.h" @@ -47,8 +47,14 @@ #define INDEX_IS_VALID(psBase, i) ((i) < (psBase)->ui32TotalHandCount) -#define INDEX_TO_HANDLE(i) ((IMG_HANDLE)((i) + 1)) +#if defined (SUPPORT_SID_INTERFACE) +#define INDEX_TO_HANDLE(i) ((IMG_SID)((i) + 1)) #define HANDLE_TO_INDEX(h) ((IMG_UINT32)(h) - 1) +#else +#define INDEX_TO_HANDLE(i) ((IMG_HANDLE)((IMG_UINTPTR_T)(i) + 1)) +#define HANDLE_TO_INDEX(h) ((IMG_UINT32)(IMG_UINTPTR_T)(h) - 1) + +#endif #define INDEX_TO_BLOCK_INDEX(i) DIVIDE_BY_BLOCK_SIZE(i) #define BLOCK_INDEX_TO_INDEX(i) MULTIPLY_BY_BLOCK_SIZE(i) @@ -108,7 +114,11 @@ struct sHandleList { IMG_UINT32 ui32Prev; IMG_UINT32 ui32Next; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hParent; +#else IMG_HANDLE hParent; +#endif }; enum ePVRSRVInternalHandleFlag @@ -217,7 +227,11 @@ typedef IMG_UINTPTR_T HAND_KEY[HAND_KEY_LEN]; #pragma inline(HandleListInit) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_SID hParent) +#else IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_HANDLE hParent) +#endif { psList->ui32Next = ui32Index; psList->ui32Prev = ui32Index; @@ -259,7 +273,7 @@ IMG_BOOL HandleListIsEmpty(IMG_UINT32 ui32Index, struct sHandleList *psList) IMG_BOOL bIsEmpty2; bIsEmpty2 = (IMG_BOOL)(psList->ui32Prev == ui32Index); - PVR_ASSERT(bIsEmpty == bIsEmpty2); + PVR_ASSERT(bIsEmpty == bIsEmpty2) } #endif @@ -273,7 +287,7 @@ IMG_BOOL HandleListIsEmpty(IMG_UINT32 ui32Index, struct sHandleList *psList) static INLINE IMG_BOOL NoChildren(struct sHandle *psHandle) { - PVR_ASSERT(psHandle->sChildren.hParent == HANDLE_PTR_TO_HANDLE(psHandle)); + PVR_ASSERT(psHandle->sChildren.hParent == HANDLE_PTR_TO_HANDLE(psHandle)) return HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sChildren); } @@ -286,13 +300,13 @@ IMG_BOOL NoParent(struct sHandle *psHandle) { if (HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings)) { - PVR_ASSERT(psHandle->sSiblings.hParent == IMG_NULL); + PVR_ASSERT(psHandle->sSiblings.hParent == IMG_NULL) return IMG_TRUE; } else { - PVR_ASSERT(psHandle->sSiblings.hParent != IMG_NULL); + PVR_ASSERT(psHandle->sSiblings.hParent != IMG_NULL) } return IMG_FALSE; } @@ -301,7 +315,11 @@ IMG_BOOL NoParent(struct sHandle *psHandle) #pragma inline(ParentHandle) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +IMG_SID ParentHandle(struct sHandle *psHandle) +#else IMG_HANDLE ParentHandle(struct sHandle *psHandle) +#endif { return psHandle->sSiblings.hParent; } @@ -318,9 +336,9 @@ IMG_VOID HandleListInsertBefore(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32InsIn struct sHandleList *psPrevIns = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psIns->ui32Prev, ui32ParentIndex, uiParentOffset, uiEntryOffset); - PVR_ASSERT(psEntry->hParent == IMG_NULL); - PVR_ASSERT(ui32InsIndex == psPrevIns->ui32Next); - PVR_ASSERT(LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32ParentIndex, ui32ParentIndex, uiParentOffset, uiParentOffset)->hParent == INDEX_TO_HANDLE(ui32ParentIndex)); + PVR_ASSERT(psEntry->hParent == IMG_NULL) + PVR_ASSERT(ui32InsIndex == psPrevIns->ui32Next) + PVR_ASSERT(LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32ParentIndex, ui32ParentIndex, uiParentOffset, uiParentOffset)->hParent == INDEX_TO_HANDLE(ui32ParentIndex)) psEntry->ui32Prev = psIns->ui32Prev; psIns->ui32Prev = ui32EntryIndex; @@ -338,7 +356,7 @@ IMG_VOID AdoptChild(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psParent, struct { IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psParent->sChildren.hParent); - PVR_ASSERT(ui32Parent == HANDLE_PTR_TO_INDEX(psParent)); + PVR_ASSERT(ui32Parent == HANDLE_PTR_TO_INDEX(psParent)) HandleListInsertBefore(psBase, ui32Parent, &psParent->sChildren, offsetof(struct sHandle, sChildren), HANDLE_PTR_TO_INDEX(psChild), &psChild->sSiblings, offsetof(struct sHandle, sSiblings), ui32Parent); @@ -357,7 +375,7 @@ IMG_VOID HandleListRemove(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32EntryIndex, struct sHandleList *psNext = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psEntry->ui32Next, HANDLE_TO_INDEX(psEntry->hParent), uiParentOffset, uiEntryOffset); - PVR_ASSERT(psEntry->hParent != IMG_NULL); + PVR_ASSERT(psEntry->hParent != IMG_NULL) psPrev->ui32Next = psEntry->ui32Next; psNext->ui32Prev = psEntry->ui32Prev; @@ -384,7 +402,7 @@ PVRSRV_ERROR HandleListIterate(PVRSRV_HANDLE_BASE *psBase, struct sHandleList *p IMG_UINT32 ui32Index; IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psHead->hParent); - PVR_ASSERT(psHead->hParent != IMG_NULL); + PVR_ASSERT(psHead->hParent != IMG_NULL) for(ui32Index = psHead->ui32Next; ui32Index != ui32Parent; ) @@ -394,7 +412,7 @@ PVRSRV_ERROR HandleListIterate(PVRSRV_HANDLE_BASE *psBase, struct sHandleList *p struct sHandleList *psEntry = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32Index, ui32Parent, uiParentOffset, uiEntryOffset); PVRSRV_ERROR eError; - PVR_ASSERT(psEntry->hParent == psHead->hParent); + PVR_ASSERT(psEntry->hParent == psHead->hParent) ui32Index = psEntry->ui32Next; @@ -421,7 +439,11 @@ PVRSRV_ERROR IterateOverChildren(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psP #pragma inline(GetHandleStructure) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) +#endif { IMG_UINT32 ui32Index = HANDLE_TO_INDEX(hHandle); struct sHandle *psHandle; @@ -430,6 +452,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps if (!INDEX_IS_VALID(psBase, ui32Index)) { PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle index out of range (%u >= %u)", ui32Index, psBase->ui32TotalHandCount)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE; } @@ -437,6 +462,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps if (psHandle->eType == PVRSRV_HANDLE_TYPE_NONE) { PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle not allocated (index: %u)", ui32Index)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return PVRSRV_ERROR_HANDLE_NOT_ALLOCATED; } @@ -444,6 +472,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps if (eType != PVRSRV_HANDLE_TYPE_NONE && eType != psHandle->eType) { PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle type mismatch (%d != %d)", eType, psHandle->eType)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return PVRSRV_ERROR_HANDLE_TYPE_MISMATCH; } @@ -457,7 +488,11 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps #pragma inline(ParentIfPrivate) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +IMG_SID ParentIfPrivate(struct sHandle *psHandle) +#else IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) +#endif { return TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? ParentHandle(psHandle) : IMG_NULL; @@ -467,7 +502,11 @@ IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) #pragma inline(InitKey) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) +#else IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) +#endif { PVR_UNREFERENCED_PARAMETER(psBase); @@ -502,8 +541,8 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo if (((ui32OldCount % HANDLE_BLOCK_SIZE) != 0) || ((ui32NewCount % HANDLE_BLOCK_SIZE) != 0)) { - PVR_ASSERT((ui32OldCount % HANDLE_BLOCK_SIZE) == 0); - PVR_ASSERT((ui32NewCount % HANDLE_BLOCK_SIZE) == 0); + PVR_ASSERT((ui32OldCount % HANDLE_BLOCK_SIZE) == 0) + PVR_ASSERT((ui32NewCount % HANDLE_BLOCK_SIZE) == 0) return PVRSRV_ERROR_INVALID_PARAMS; } @@ -511,7 +550,7 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo if (ui32NewCount != 0) { - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, HANDLE_ARRAY_SIZE(ui32NewCount) * sizeof(struct sHandleIndex), (IMG_VOID **)&psNewArray, &hNewArrayBlockAlloc, @@ -550,7 +589,7 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psNewArray, ui32Index); - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, (IMG_VOID **)&psIndex->psHandle, &psIndex->hBlockAlloc, @@ -658,12 +697,12 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo } } - PVR_ASSERT(psBase->ui32FirstFreeIndex <= psBase->ui32TotalHandCount); + PVR_ASSERT(psBase->ui32FirstFreeIndex <= psBase->ui32TotalHandCount) return PVRSRV_OK; error: - PVR_ASSERT(eReturn != PVRSRV_OK); + PVR_ASSERT(eReturn != PVRSRV_OK) if (psNewArray != IMG_NULL) { @@ -714,11 +753,17 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan if (!TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_MULTI) && !BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle; + hHandle = (IMG_SID) HASH_Remove_Extended(psBase->psHashTab, aKey); +#else IMG_HANDLE hHandle; hHandle = (IMG_HANDLE) HASH_Remove_Extended(psBase->psHashTab, aKey); - PVR_ASSERT(hHandle != IMG_NULL); - PVR_ASSERT(hHandle == INDEX_TO_HANDLE(ui32Index)); +#endif + + PVR_ASSERT(hHandle != IMG_NULL) + PVR_ASSERT(hHandle == INDEX_TO_HANDLE(ui32Index)) PVR_UNREFERENCED_PARAMETER(hHandle); } @@ -749,20 +794,20 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan { if (psBase->ui32FreeHandCount == 0) { - PVR_ASSERT(psBase->ui32FirstFreeIndex == 0); - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0); + PVR_ASSERT(psBase->ui32FirstFreeIndex == 0) + PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0) psBase->ui32FirstFreeIndex = ui32Index; } else { - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0); - PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0); + PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0) + PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0) INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne = ui32Index + 1; } - PVR_ASSERT(psHandle->ui32NextIndexPlusOne == 0); + PVR_ASSERT(psHandle->ui32NextIndexPlusOne == 0) psBase->ui32LastFreeIndexPlusOne = ui32Index + 1; @@ -771,7 +816,7 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan psBase->ui32FreeHandCount++; INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)++; - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)<= HANDLE_BLOCK_SIZE); + PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)<= HANDLE_BLOCK_SIZE) #ifdef DEBUG { @@ -783,7 +828,7 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan ui32FreeHandCount += INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32BlockedIndex); } - PVR_ASSERT(ui32FreeHandCount == psBase->ui32FreeHandCount); + PVR_ASSERT(ui32FreeHandCount == psBase->ui32FreeHandCount) } #endif @@ -875,15 +920,23 @@ static PVRSRV_ERROR FreeHandleBase(PVRSRV_HANDLE_BASE *psBase) #pragma inline(FindHandle) #endif static INLINE +#if defined (SUPPORT_SID_INTERFACE) +IMG_SID FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) +#else IMG_HANDLE FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) +#endif { HAND_KEY aKey; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) InitKey(aKey, psBase, pvData, eType, hParent); +#if defined (SUPPORT_SID_INTERFACE) + return (IMG_SID) HASH_Retrieve_Extended(psBase->psHashTab, aKey); +#else return (IMG_HANDLE) HASH_Retrieve_Extended(psBase->psHashTab, aKey); +#endif } static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Delta) @@ -893,7 +946,7 @@ static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT IMG_UINT32 ui32NewTotalHandCount = psBase->ui32TotalHandCount + ui32DeltaAdjusted; ; - PVR_ASSERT(ui32Delta != 0); + PVR_ASSERT(ui32Delta != 0) if (ui32NewTotalHandCount > psBase->ui32MaxIndexPlusOne || ui32NewTotalHandCount <= psBase->ui32TotalHandCount) @@ -909,7 +962,7 @@ static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT } } - PVR_ASSERT(ui32DeltaAdjusted >= ui32Delta); + PVR_ASSERT(ui32DeltaAdjusted >= ui32Delta) eError = ReallocHandleArray(psBase, ui32NewTotalHandCount); @@ -941,28 +994,36 @@ static PVRSRV_ERROR EnsureFreeHandles(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui3 return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) +#else static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) +#endif { IMG_UINT32 ui32NewIndex = DEFAULT_MAX_INDEX_PLUS_ONE; struct sHandle *psNewHandle = IMG_NULL; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle; +#else IMG_HANDLE hHandle; +#endif HAND_KEY aKey; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); - PVR_ASSERT(psBase != IMG_NULL); - PVR_ASSERT(psBase->psHashTab != IMG_NULL); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) + PVR_ASSERT(psBase != IMG_NULL) + PVR_ASSERT(psBase->psHashTab != IMG_NULL) if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) { - PVR_ASSERT(FindHandle(psBase, pvData, eType, hParent) == IMG_NULL); + PVR_ASSERT(FindHandle(psBase, pvData, eType, hParent) == IMG_NULL) } if (psBase->ui32FreeHandCount == 0 && HANDLES_BATCHED(psBase)) { - PVR_DPF((PVR_DBG_WARNING, "AllocHandle: Handle batch size (%u) was too small, allocating additional space", psBase->ui32HandBatchSize)); + PVR_DPF((PVR_DBG_WARNING, "AllocHandle: Handle batch size (%u) was too small, allocating additional space", psBase->ui32HandBatchSize)); } @@ -988,7 +1049,7 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle - PVR_ASSERT((psBase->ui32FirstFreeIndex % HANDLE_BLOCK_SIZE) == 0); + PVR_ASSERT((psBase->ui32FirstFreeIndex % HANDLE_BLOCK_SIZE) == 0) for (ui32BlockedIndex = ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(psBase->ui32FirstFreeIndex); ui32BlockedIndex < psBase->ui32TotalHandCount; ui32BlockedIndex += HANDLE_BLOCK_SIZE) { @@ -1009,9 +1070,9 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle } } psBase->ui32FirstFreeIndex = 0; - PVR_ASSERT(ui32NewIndex < psBase->ui32TotalHandCount); + PVR_ASSERT(ui32NewIndex < psBase->ui32TotalHandCount) } - PVR_ASSERT(psNewHandle != IMG_NULL); + PVR_ASSERT(psNewHandle != IMG_NULL) hHandle = INDEX_TO_HANDLE(ui32NewIndex); @@ -1033,8 +1094,8 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle psBase->ui32FreeHandCount--; - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) <= HANDLE_BLOCK_SIZE); - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) > 0); + PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) <= HANDLE_BLOCK_SIZE) + PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) > 0) INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex)--; @@ -1044,8 +1105,8 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle if (psBase->ui32FreeHandCount == 0) { - PVR_ASSERT(psBase->ui32FirstFreeIndex == ui32NewIndex); - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == (ui32NewIndex + 1)); + PVR_ASSERT(psBase->ui32FirstFreeIndex == ui32NewIndex) + PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == (ui32NewIndex + 1)) psBase->ui32LastFreeIndexPlusOne = 0; psBase->ui32FirstFreeIndex = 0; @@ -1060,7 +1121,7 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle } - PVR_ASSERT(psNewHandle->ui32Index == ui32NewIndex); + PVR_ASSERT(psNewHandle->ui32Index == ui32NewIndex) psNewHandle->eType = eType; @@ -1070,12 +1131,12 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle InitParentList(psNewHandle); #if defined(DEBUG) - PVR_ASSERT(NoChildren(psNewHandle)); + PVR_ASSERT(NoChildren(psNewHandle)) #endif InitChildEntry(psNewHandle); #if defined(DEBUG) - PVR_ASSERT(NoParent(psNewHandle)); + PVR_ASSERT(NoParent(psNewHandle)) #endif if (HANDLES_BATCHED(psBase)) @@ -1099,12 +1160,24 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) +#else PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) +#endif { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle; +#else IMG_HANDLE hHandle; +#endif PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + *phHandle = 0; +#else *phHandle = IMG_NULL; +#endif if (HANDLES_BATCHED(psBase)) { @@ -1113,13 +1186,17 @@ PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, } - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) { hHandle = FindHandle(psBase, pvData, eType, IMG_NULL); +#if defined (SUPPORT_SID_INTERFACE) + if (hHandle != 0) +#else if (hHandle != IMG_NULL) +#endif { struct sHandle *psHandle; @@ -1137,12 +1214,16 @@ PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, eError = PVRSRV_OK; goto exit_ok; } + +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; } } eError = AllocHandle(psBase, phHandle, pvData, eType, eFlag, IMG_NULL); - + exit_ok: if (HANDLES_BATCHED(psBase) && (eError == PVRSRV_OK)) { @@ -1152,15 +1233,26 @@ exit_ok: return eError; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) +#else PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) +#endif { struct sHandle *psPHand; struct sHandle *psCHand; PVRSRV_ERROR eError; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hParentKey; + IMG_SID hHandle; + + *phHandle = 0; +#else IMG_HANDLE hParentKey; IMG_HANDLE hHandle; *phHandle = IMG_NULL; +#endif if (HANDLES_BATCHED(psBase)) { @@ -1169,7 +1261,7 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand } - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) hParentKey = TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? hParent : IMG_NULL; @@ -1185,7 +1277,11 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand { hHandle = FindHandle(psBase, pvData, eType, hParentKey); +#if defined (SUPPORT_SID_INTERFACE) + if (hHandle != 0) +#else if (hHandle != IMG_NULL) +#endif { struct sHandle *psCHandle; PVRSRV_ERROR eErr; @@ -1197,7 +1293,7 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand return eErr; } - PVR_ASSERT(hParentKey != IMG_NULL && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent); + PVR_ASSERT(hParentKey != IMG_NULL && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) if (TEST_FLAG(psCHandle->eFlag & eFlag, PVRSRV_HANDLE_ALLOC_FLAG_SHARED) && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) @@ -1205,6 +1301,9 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand *phHandle = hHandle; goto exit_ok; } +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; } } @@ -1233,14 +1332,26 @@ exit_ok: return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) +#endif { +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hHandle; +#else IMG_HANDLE hHandle; +#endif - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) +#if defined (SUPPORT_SID_INTERFACE) + hHandle = (IMG_SID) FindHandle(psBase, pvData, eType, IMG_NULL); +#else hHandle = (IMG_HANDLE) FindHandle(psBase, pvData, eType, IMG_NULL); +#endif if (hHandle == IMG_NULL) { return PVRSRV_ERROR_HANDLE_NOT_FOUND; @@ -1251,7 +1362,11 @@ PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_SID hHandle) +#else PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle) +#endif { struct sHandle *psHandle; PVRSRV_ERROR eError; @@ -1260,6 +1375,9 @@ PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *pp if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandleAnyType: Error looking up handle (%d)", eError)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return eError; } @@ -1269,17 +1387,27 @@ PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *pp return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) +#endif { struct sHandle *psHandle; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) +#if defined (SUPPORT_SID_INTERFACE) + PVR_ASSERT(hHandle != 0) +#endif eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandle: Error looking up handle (%d)", eError)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return eError; } @@ -1288,13 +1416,20 @@ PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType, IMG_SID hAncestor) +#else PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor) +#endif { struct sHandle *psPHand; struct sHandle *psCHand; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) +#if defined (SUPPORT_SID_INTERFACE) + PVR_ASSERT(hHandle != 0) +#endif eError = GetHandleStructure(psBase, &psCHand, hHandle, eType); if (eError != PVRSRV_OK) @@ -1319,12 +1454,16 @@ PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvDat return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phParent, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) +#endif { struct sHandle *psHandle; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); if (eError != PVRSRV_OK) @@ -1338,17 +1477,24 @@ PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phPare return PVRSRV_OK; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) +#endif { struct sHandle *psHandle; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupAndReleaseHandle: Error looking up handle (%d)", eError)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#endif return eError; } @@ -1359,12 +1505,16 @@ PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID return eError; } +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) +#else PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) +#endif { struct sHandle *psHandle; PVRSRV_ERROR eError; - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); + PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); if (eError != PVRSRV_OK) @@ -1406,11 +1556,11 @@ PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Bat psBase->ui32TotalHandCountPreBatch = psBase->ui32TotalHandCount; - PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0); + PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0) - PVR_ASSERT(psBase->ui32FirstBatchIndexPlusOne == 0); + PVR_ASSERT(psBase->ui32FirstBatchIndexPlusOne == 0) - PVR_ASSERT(HANDLES_BATCHED(psBase)); + PVR_ASSERT(HANDLES_BATCHED(psBase)) return PVRSRV_OK; } @@ -1437,14 +1587,14 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, bCommitBatch = IMG_FALSE; } - PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0 || !bCommit); + PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0 || !bCommit) ui32IndexPlusOne = psBase->ui32FirstBatchIndexPlusOne; while(ui32IndexPlusOne != 0) { struct sHandle *psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32IndexPlusOne - 1); IMG_UINT32 ui32NextIndexPlusOne = psHandle->ui32NextIndexPlusOne; - PVR_ASSERT(BATCHED_HANDLE(psHandle)); + PVR_ASSERT(BATCHED_HANDLE(psHandle)) psHandle->ui32NextIndexPlusOne = 0; @@ -1464,7 +1614,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, { PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: Error freeing handle (%d)", eError)); } - PVR_ASSERT(eError == PVRSRV_OK); + PVR_ASSERT(eError == PVRSRV_OK) } else { @@ -1480,7 +1630,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, { IMG_UINT32 ui32Delta = psBase->ui32TotalHandCount - psBase->ui32TotalHandCountPreBatch; - PVR_ASSERT(psBase->ui32TotalHandCount > psBase->ui32TotalHandCountPreBatch); + PVR_ASSERT(psBase->ui32TotalHandCount > psBase->ui32TotalHandCountPreBatch) PVR_DPF((PVR_DBG_WARNING, "PVRSRVHandleBatchCommitOrRelease: The batch size was too small. Batch size was %u, but needs to be %u", psBase->ui32HandBatchSize, psBase->ui32HandBatchSize + ui32Delta)); @@ -1494,7 +1644,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, if (psBase->ui32BatchHandAllocFailures != 0 && bCommit) { - PVR_ASSERT(!bCommitBatch); + PVR_ASSERT(!bCommitBatch) return PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE; } @@ -1546,9 +1696,9 @@ PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHa psBase->ui32MaxIndexPlusOne = ui32MaxHandleRounded; } - PVR_ASSERT(psBase->ui32MaxIndexPlusOne != 0); - PVR_ASSERT(psBase->ui32MaxIndexPlusOne <= DEFAULT_MAX_INDEX_PLUS_ONE); - PVR_ASSERT((psBase->ui32MaxIndexPlusOne % HANDLE_BLOCK_SIZE) == 0); + PVR_ASSERT(psBase->ui32MaxIndexPlusOne != 0) + PVR_ASSERT(psBase->ui32MaxIndexPlusOne <= DEFAULT_MAX_INDEX_PLUS_ONE) + PVR_ASSERT((psBase->ui32MaxIndexPlusOne % HANDLE_BLOCK_SIZE) == 0) return PVRSRV_OK; } @@ -1595,7 +1745,7 @@ PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase) return PVRSRV_ERROR_INVALID_PARAMS; } - PVR_ASSERT((psBase->ui32TotalHandCount % HANDLE_BLOCK_SIZE) == 0); + PVR_ASSERT((psBase->ui32TotalHandCount % HANDLE_BLOCK_SIZE) == 0) for (ui32BlockIndex = INDEX_TO_BLOCK_INDEX(psBase->ui32TotalHandCount); ui32BlockIndex != 0; ui32BlockIndex--) { @@ -1629,7 +1779,7 @@ PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase) IMG_HANDLE hBlockAlloc; PVRSRV_ERROR eError; - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(*psBase), (IMG_PVOID *)&psBase, &hBlockAlloc, @@ -1663,7 +1813,7 @@ PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase) { PVRSRV_ERROR eError; - PVR_ASSERT(psBase != gpsKernelHandleBase); + PVR_ASSERT(psBase != gpsKernelHandleBase) eError = FreeHandleBase(psBase); if (eError != PVRSRV_OK) @@ -1678,7 +1828,7 @@ PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) { PVRSRV_ERROR eError; - PVR_ASSERT(gpsKernelHandleBase == IMG_NULL); + PVR_ASSERT(gpsKernelHandleBase == IMG_NULL) eError = PVRSRVAllocHandleBase(&gpsKernelHandleBase); if (eError != PVRSRV_OK) diff --git a/services4/srvkm/common/hash.c b/services4/srvkm/common/hash.c index 32b0779..78eab44 100644 --- a/services4/srvkm/common/hash.c +++ b/services4/srvkm/common/hash.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -80,7 +80,7 @@ IMG_UINT32 HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen) { IMG_UINTPTR_T *p = (IMG_UINTPTR_T *)pKey; - IMG_UINT32 uKeyLen = uKeySize / sizeof(IMG_UINTPTR_T); + IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T)); IMG_UINT32 ui; IMG_UINT32 uHashKey = 0; @@ -112,7 +112,7 @@ HASH_Key_Comp_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2) { IMG_UINTPTR_T *p1 = (IMG_UINTPTR_T *)pKey1; IMG_UINTPTR_T *p2 = (IMG_UINTPTR_T *)pKey2; - IMG_UINT32 uKeyLen = uKeySize / sizeof(IMG_UINTPTR_T); + IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T)); IMG_UINT32 ui; PVR_ASSERT((uKeySize % sizeof(IMG_UINTPTR_T)) == 0); @@ -228,7 +228,7 @@ HASH_TABLE * HASH_Create_Extended (IMG_UINT32 uInitialLen, IMG_SIZE_T uKeySize, pHash->uCount = 0; pHash->uSize = uInitialLen; pHash->uMinimumSize = uInitialLen; - pHash->uKeySize = uKeySize; + pHash->uKeySize = (IMG_UINT32)uKeySize; pHash->pfnHashFunc = pfnHashFunc; pHash->pfnKeyComp = pfnKeyComp; @@ -305,6 +305,9 @@ HASH_Insert_Extended (HASH_TABLE *pHash, IMG_VOID *pKey, IMG_UINTPTR_T v) OSMemCopy(pBucket->k, pKey, pHash->uKeySize); if (_ChainInsert (pHash, pBucket, pHash->ppBucketTable, pHash->uSize) != PVRSRV_OK) { + OSFreeMem(PVRSRV_PAGEABLE_SELECT, + sizeof(BUCKET) + pHash->uKeySize, + pBucket, IMG_NULL); return IMG_FALSE; } @@ -444,6 +447,31 @@ HASH_Retrieve (HASH_TABLE *pHash, IMG_UINTPTR_T k) return HASH_Retrieve_Extended(pHash, &k); } +PVRSRV_ERROR +HASH_Iterate(HASH_TABLE *pHash, HASH_pfnCallback pfnCallback) +{ + IMG_UINT32 uIndex; + for (uIndex=0; uIndex < pHash->uSize; uIndex++) + { + BUCKET *pBucket; + pBucket = pHash->ppBucketTable[uIndex]; + while (pBucket != IMG_NULL) + { + PVRSRV_ERROR eError; + BUCKET *pNextBucket = pBucket->pNext; + + eError = pfnCallback((IMG_UINTPTR_T) ((IMG_VOID *) *(pBucket->k)), (IMG_UINTPTR_T) pBucket->v); + + + if (eError != PVRSRV_OK) + return eError; + + pBucket = pNextBucket; + } + } + return PVRSRV_OK; +} + #ifdef HASH_TRACE IMG_VOID HASH_Dump (HASH_TABLE *pHash) diff --git a/services4/srvkm/common/lists.c b/services4/srvkm/common/lists.c index 58389bf..1081781 100644 --- a/services4/srvkm/common/lists.c +++ b/services4/srvkm/common/lists.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/common/mem.c b/services4/srvkm/common/mem.c index a2673d5..5b5d1ac 100644 --- a/services4/srvkm/common/mem.c +++ b/services4/srvkm/common/mem.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,15 +29,17 @@ static PVRSRV_ERROR -FreeSharedSysMemCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) +FreeSharedSysMemCallBack(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bDummy) { PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); OSFreePages(psKernelMemInfo->ui32Flags, - psKernelMemInfo->ui32AllocSize, + psKernelMemInfo->uAllocSize, psKernelMemInfo->pvLinAddrKM, psKernelMemInfo->sMemBlk.hOSMemHandle); @@ -54,7 +56,7 @@ FreeSharedSysMemCallBack(IMG_PVOID pvParam, IMG_EXPORT PVRSRV_ERROR PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, + IMG_SIZE_T uSize, PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo) { PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; @@ -73,11 +75,11 @@ PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, ui32Flags &= ~PVRSRV_HAP_MAPTYPE_MASK; ui32Flags |= PVRSRV_HAP_MULTI_PROCESS; psKernelMemInfo->ui32Flags = ui32Flags; - psKernelMemInfo->ui32AllocSize = ui32Size; + psKernelMemInfo->uAllocSize = uSize; if(OSAllocPages(psKernelMemInfo->ui32Flags, - psKernelMemInfo->ui32AllocSize, - HOST_PAGESIZE(), + psKernelMemInfo->uAllocSize, + (IMG_UINT32)HOST_PAGESIZE(), &psKernelMemInfo->pvLinAddrKM, &psKernelMemInfo->sMemBlk.hOSMemHandle) != PVRSRV_OK) @@ -111,11 +113,11 @@ PVRSRVFreeSharedSysMemoryKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo) if(psKernelMemInfo->sMemBlk.hResItem) { - eError = ResManFreeResByPtr(psKernelMemInfo->sMemBlk.hResItem); + eError = ResManFreeResByPtr(psKernelMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); } else { - eError = FreeSharedSysMemCallBack(psKernelMemInfo, 0); + eError = FreeSharedSysMemCallBack(psKernelMemInfo, 0, CLEANUP_WITH_POLL); } return eError; diff --git a/services4/srvkm/common/mem_debug.c b/services4/srvkm/common/mem_debug.c index cbe9912..e721fb3 100644 --- a/services4/srvkm/common/mem_debug.c +++ b/services4/srvkm/common/mem_debug.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/common/metrics.c b/services4/srvkm/common/metrics.c index fcba425..640eb04 100644 --- a/services4/srvkm/common/metrics.c +++ b/services4/srvkm/common/metrics.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -77,8 +77,6 @@ IMG_UINT32 PVRSRVTimeNow(IMG_VOID) static IMG_UINT32 PVRSRVGetCPUFreq(IMG_VOID) { - - IMG_UINT32 ui32Time1, ui32Time2; ui32Time1 = PVRSRVTimeNow(); @@ -95,7 +93,6 @@ static IMG_UINT32 PVRSRVGetCPUFreq(IMG_VOID) IMG_VOID PVRSRVSetupMetricTimers(IMG_VOID *pvDevInfo) { - IMG_UINT32 ui32Loop; PVR_UNREFERENCED_PARAMETER(pvDevInfo); diff --git a/services4/srvkm/common/osfunc_common.c b/services4/srvkm/common/osfunc_common.c index 25ac667..e0a46da 100644 --- a/services4/srvkm/common/osfunc_common.c +++ b/services4/srvkm/common/osfunc_common.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/common/pdump_common.c b/services4/srvkm/common/pdump_common.c index 9c9b730..4d6c429 100644 --- a/services4/srvkm/common/pdump_common.c +++ b/services4/srvkm/common/pdump_common.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -28,9 +28,6 @@ #include #include "services_headers.h" -#if defined(SUPPORT_SGX) -#include "sgxdefs.h" -#endif #include "perproc.h" #include "pdump_km.h" @@ -46,8 +43,6 @@ #define PDUMP_DBG(a) #endif -#define PDUMP_DATAMASTER_PIXEL (1) -#define PDUMP_DATAMASTER_EDM (3) #define PTR_PLUS(t, p, x) ((t)(((IMG_CHAR *)(p)) + (x))) #define VPTR_PLUS(p, x) PTR_PLUS(IMG_VOID *, p, x) @@ -68,6 +63,7 @@ static INLINE IMG_BOOL _PDumpIsPersistent(IMG_VOID) { PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); + if(psPerProc == IMG_NULL) { @@ -77,6 +73,8 @@ IMG_BOOL _PDumpIsPersistent(IMG_VOID) } #if defined(SUPPORT_PDUMP_MULTI_PROCESS) + + static INLINE IMG_BOOL _PDumpIsProcessActive(IMG_VOID) { @@ -88,6 +86,7 @@ IMG_BOOL _PDumpIsProcessActive(IMG_VOID) } return psPerProc->bPDumpActive; } + #endif #if defined(PDUMP_DEBUG_OUTFILES) @@ -192,7 +191,6 @@ PVRSRV_ERROR PDumpSetFrameKM(IMG_UINT32 ui32Frame) #endif } - PVRSRV_ERROR PDumpRegWithFlagsKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Data, @@ -224,7 +222,8 @@ PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Flags) + IMG_UINT32 ui32Flags, + PDUMP_POLL_OPERATOR eOperator) { #define POLL_DELAY 1000U @@ -260,7 +259,7 @@ PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_CHAR *pszPDumpRegName, eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "POL :%s:0x%08X 0x%08X 0x%08X %d %u %d\r\n", pszPDumpRegName, ui32RegAddr, ui32RegValue, - ui32Mask, 0, ui32PollCount, POLL_DELAY); + ui32Mask, eOperator, ui32PollCount, POLL_DELAY); if(eErr != PVRSRV_OK) { return eErr; @@ -271,9 +270,9 @@ PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_CHAR *pszPDumpRegName, } -PVRSRV_ERROR PDumpRegPolKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask) +PVRSRV_ERROR PDumpRegPolKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask, PDUMP_POLL_OPERATOR eOperator) { - return PDumpRegPolWithFlagsKM(pszPDumpRegName, ui32RegAddr, ui32RegValue, ui32Mask, PDUMP_FLAGS_CONTINUOUS); + return PDumpRegPolWithFlagsKM(pszPDumpRegName, ui32RegAddr, ui32RegValue, ui32Mask, PDUMP_FLAGS_CONTINUOUS, eOperator); } PVRSRV_ERROR PDumpMallocPages (PVRSRV_DEVICE_IDENTIFIER *psDevID, @@ -366,23 +365,24 @@ PVRSRV_ERROR PDumpMallocPages (PVRSRV_DEVICE_IDENTIFIER *psDevID, return PVRSRV_OK; } + PVRSRV_ERROR PDumpMallocPageTable (PVRSRV_DEVICE_IDENTIFIER *psDevId, IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Offset, - IMG_CPU_VIRTADDR pvLinAddr, + IMG_CPU_VIRTADDR pvLinAddr, IMG_UINT32 ui32PTSize, IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) + IMG_HANDLE hUniqueTag) { PVRSRV_ERROR eErr; IMG_DEV_PHYADDR sDevPAddr; PDUMP_GET_SCRIPT_STRING(); - PVR_ASSERT(((IMG_UINTPTR_T)pvLinAddr & (ui32PTSize - 1)) == 0); + PVR_ASSERT(((IMG_UINTPTR_T)pvLinAddr & (ui32PTSize - 1)) == 0); ui32Flags |= PDUMP_FLAGS_CONTINUOUS; ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; - + eErr = PDumpOSBufprintf(hScript, @@ -478,15 +478,16 @@ PVRSRV_ERROR PDumpFreePages (BM_HEAP *psBMHeap, if (!bInterleaved || (ui32PageCounter % 2) == 0) { sDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(psBMHeap->pMMUHeap, sDevVAddr); + + PVR_ASSERT(sDevPAddr.uiAddr != 0) + + eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "FREE :%s:PA_%08X%08X\r\n", + psDeviceNode->sDevId.pszPDumpDevName, (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, sDevPAddr.uiAddr); + if(eErr != PVRSRV_OK) { - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "FREE :%s:PA_%08X%08X\r\n", - psDeviceNode->sDevId.pszPDumpDevName, (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, sDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); + return eErr; } + PDumpOSWriteString2(hScript, ui32Flags); } else { @@ -652,6 +653,12 @@ PVRSRV_ERROR PDumpMemPolKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, PDUMP_MMU_ATTRIB *psMMUAttrib; PDUMP_GET_SCRIPT_STRING(); + + if (PDumpOSIsSuspended()) + { + return PVRSRV_OK; + } + if ( _PDumpIsPersistent() ) { @@ -659,7 +666,7 @@ PVRSRV_ERROR PDumpMemPolKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, } - PVR_ASSERT((ui32Offset + sizeof(IMG_UINT32)) <= psMemInfo->ui32AllocSize); + PVR_ASSERT((ui32Offset + sizeof(IMG_UINT32)) <= psMemInfo->uAllocSize); psMMUAttrib = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; @@ -750,23 +757,23 @@ PVRSRV_ERROR PDumpMemKM(IMG_PVOID pvAltLinAddr, PDUMP_GET_SCRIPT_AND_FILE_STRING(); + + if (ui32Bytes == 0 || PDumpOSIsSuspended()) + { + return PVRSRV_OK; + } + psMMUAttrib = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - PVR_ASSERT((ui32Offset + ui32Bytes) <= psMemInfo->ui32AllocSize); + PVR_ASSERT((ui32Offset + ui32Bytes) <= psMemInfo->uAllocSize); if (!PDumpOSJTInitialised()) { return PVRSRV_ERROR_PDUMP_NOT_AVAILABLE; } - - if (ui32Bytes == 0 || PDumpOSIsSuspended()) - { - return PVRSRV_OK; - } - #if defined(SUPPORT_PDUMP_MULTI_PROCESS) { @@ -936,7 +943,7 @@ PVRSRV_ERROR PDumpMemPDEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, sMMUAttrib = *psMMUAttrib; - sMMUAttrib.ui32PTSize = HOST_PAGESIZE(); + sMMUAttrib.ui32PTSize = (IMG_UINT32)HOST_PAGESIZE(); return PDumpMemPTEntriesKM( &sMMUAttrib, hOSMemHandle, pvLinAddr, @@ -970,6 +977,11 @@ PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, PDUMP_GET_SCRIPT_AND_FILE_STRING(); ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; + if (PDumpOSIsSuspended()) + { + return PVRSRV_OK; + } + if (!PDumpOSJTInitialised()) { return PVRSRV_ERROR_PDUMP_NOT_AVAILABLE; @@ -980,11 +992,6 @@ PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, return PVRSRV_ERROR_INVALID_PARAMS; } - if (PDumpOSIsSuspended()) - { - return PVRSRV_OK; - } - PDumpOSCheckForSplitting(PDumpOSGetStream(PDUMP_STREAM_PARAM2), ui32Bytes, ui32Flags); ui32ParamOutPos = PDumpOSGetStreamOffset(PDUMP_STREAM_PARAM2); @@ -1079,7 +1086,7 @@ PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, { for (ui32Offset = 0; ui32Offset < ui32BlockBytes; ui32Offset += sizeof(IMG_UINT32)) { - IMG_UINT32 ui32PTE = *((IMG_UINT32 *) (pui8LinAddr + ui32Offset)); + IMG_UINT32 ui32PTE = *((IMG_UINT32 *)(IMG_UINTPTR_T)(pui8LinAddr + ui32Offset)); if ((ui32PTE & psMMUAttrib->ui32PDEMask) != 0) { @@ -1148,7 +1155,9 @@ PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, } else { +#if !defined(FIX_HW_BRN_31620) PVR_ASSERT((ui32PTE & psMMUAttrib->ui32PTEValid) == 0UL); +#endif eErr = PDumpOSBufprintf(hScript, ui32MaxLenScript, "WRW :%s:PA_%08X%08X:0x%08X 0x%08X%08X\r\n", @@ -1359,6 +1368,9 @@ PVRSRV_ERROR PDumpPDDevPAddrKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, return PVRSRV_OK; } + + + PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags) { PVRSRV_ERROR eErr; @@ -1380,20 +1392,38 @@ PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags) ui32LenCommentPrefix = PDumpOSBuflen(pszCommentPrefix, sizeof(pszCommentPrefix)); + if (!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_SCRIPT2), (IMG_UINT8*)pszCommentPrefix, ui32LenCommentPrefix, ui32Flags)) { +#if defined(PDUMP_DEBUG_OUTFILES) if(ui32Flags & PDUMP_FLAGS_CONTINUOUS) { + PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s (continuous set)", + g_ui32EveryLineCounter, pszComment)); return PVRSRV_ERROR_PDUMP_BUFFER_FULL; } + else if(ui32Flags & PDUMP_FLAGS_PERSISTENT) + { + PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s (persistent set)", + g_ui32EveryLineCounter, pszComment)); + return PVRSRV_ERROR_CMD_NOT_PROCESSED; + } else { + PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s", + g_ui32EveryLineCounter, pszComment)); return PVRSRV_ERROR_CMD_NOT_PROCESSED; } +#else + PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %s", + pszComment)); + return PVRSRV_ERROR_CMD_NOT_PROCESSED; +#endif } + #if defined(PDUMP_DEBUG_OUTFILES) eErr = PDumpOSSprintf(pszTemp, 256, "%d-%d %s", @@ -1417,6 +1447,7 @@ PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags) return PVRSRV_OK; } + PVRSRV_ERROR PDumpCommentWithFlags(IMG_UINT32 ui32Flags, IMG_CHAR * pszFormat, ...) { PVRSRV_ERROR eErr; @@ -1501,7 +1532,7 @@ PVRSRV_ERROR PDumpBitmapKM( PVRSRV_DEVICE_NODE *psDeviceNode, IMG_UINT32 ui32PDumpFlags) { PVRSRV_DEVICE_IDENTIFIER *psDevId = &psDeviceNode->sDevId; - + IMG_UINT32 ui32MMUContextID; PVRSRV_ERROR eErr; PDUMP_GET_SCRIPT_STRING(); @@ -1513,19 +1544,15 @@ PVRSRV_ERROR PDumpBitmapKM( PVRSRV_DEVICE_NODE *psDeviceNode, PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump bitmap of render\r\n"); - - - PVR_UNREFERENCED_PARAMETER(hDevMemContext); - -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - + ui32MMUContextID = psDeviceNode->pfnMMUGetContextID( hDevMemContext ); + eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "SII %s %s.bin :%s:v%x:0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X\r\n", pszFileName, pszFileName, psDevId->pszPDumpDevName, - PDUMP_DATAMASTER_PIXEL, + ui32MMUContextID, sDevBaseAddr.uiAddr, ui32Size, ui32FileOffset, @@ -1534,22 +1561,6 @@ PVRSRV_ERROR PDumpBitmapKM( PVRSRV_DEVICE_NODE *psDeviceNode, ui32Height, ui32StrideInBytes, eMemFormat); -#else - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "SII %s %s.bin :%s:v:0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X\r\n", - pszFileName, - pszFileName, - psDevId->pszPDumpDevName, - sDevBaseAddr.uiAddr, - ui32Size, - ui32FileOffset, - ePixelFormat, - ui32Width, - ui32Height, - ui32StrideInBytes, - eMemFormat); -#endif if(eErr != PVRSRV_OK) { return eErr; @@ -1762,26 +1773,17 @@ PVRSRV_ERROR PDumpSaveMemKM (PVRSRV_DEVICE_IDENTIFIER *psDevId, IMG_UINT32 ui32FileOffset, IMG_DEV_VIRTADDR sDevBaseAddr, IMG_UINT32 ui32Size, - IMG_UINT32 ui32DataMaster, + IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32PDumpFlags) { PVRSRV_ERROR eErr; PDUMP_GET_SCRIPT_STRING(); -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - PVR_UNREFERENCED_PARAMETER(ui32DataMaster); -#endif - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) "SAB :%s:v%x:0x%08X 0x%08X 0x%08X %s.bin\r\n", psDevId->pszPDumpDevName, - ui32DataMaster, -#else - "SAB :%s:v:0x%08X 0x%08X 0x%08X %s.bin\r\n", - psDevId->pszPDumpDevName, -#endif + ui32MMUContextID, sDevBaseAddr.uiAddr, ui32Size, ui32FileOffset, @@ -1820,6 +1822,7 @@ PVRSRV_ERROR PDumpSignatureBuffer (PVRSRV_DEVICE_IDENTIFIER *psDevId, IMG_UINT32 ui32FileOffset, IMG_DEV_VIRTADDR sDevBaseAddr, IMG_UINT32 ui32Size, + IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32PDumpFlags) { PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump microkernel %s signature Buffer\r\n", @@ -1831,7 +1834,7 @@ PVRSRV_ERROR PDumpSignatureBuffer (PVRSRV_DEVICE_IDENTIFIER *psDevId, PDumpCommentWithFlags(ui32PDumpFlags, "\tSignature sample values (number of samples * number of signatures)\r\n"); PDumpCommentWithFlags(ui32PDumpFlags, "Note: If buffer is full, last sample is final state after test completed\r\n"); return PDumpSaveMemKM(psDevId, pszFileName, ui32FileOffset, sDevBaseAddr, ui32Size, - PDUMP_DATAMASTER_EDM, ui32PDumpFlags); + ui32MMUContextID, ui32PDumpFlags); } @@ -1840,11 +1843,12 @@ PVRSRV_ERROR PDumpHWPerfCBKM (PVRSRV_DEVICE_IDENTIFIER *psDevId, IMG_UINT32 ui32FileOffset, IMG_DEV_VIRTADDR sDevBaseAddr, IMG_UINT32 ui32Size, + IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32PDumpFlags) { PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump Hardware Performance Circular Buffer\r\n"); return PDumpSaveMemKM(psDevId, pszFileName, ui32FileOffset, sDevBaseAddr, ui32Size, - PDUMP_DATAMASTER_EDM, ui32PDumpFlags); + ui32MMUContextID, ui32PDumpFlags); } @@ -1870,7 +1874,7 @@ PVRSRV_ERROR PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo, psMMUAttrib = ((BM_BUF*)psROffMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - PVR_ASSERT((ui32ROffOffset + sizeof(IMG_UINT32)) <= psROffMemInfo->ui32AllocSize); + PVR_ASSERT((ui32ROffOffset + sizeof(IMG_UINT32)) <= psROffMemInfo->uAllocSize); pui8LinAddr = psROffMemInfo->pvLinAddrKM; sDevVAddr = psROffMemInfo->sDevVAddr; @@ -2073,13 +2077,14 @@ PVRSRV_ERROR PDumpSetMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, IMG_CPU_PHYADDR sCpuPAddr; IMG_DEV_PHYADDR sDevPAddr; IMG_UINT32 ui32MMUContextID; - PVRSRV_ERROR eError; + PVRSRV_ERROR eErr; + PDUMP_GET_SCRIPT_STRING(); - eError = _PdumpAllocMMUContext(&ui32MMUContextID); - if(eError != PVRSRV_OK) + eErr = _PdumpAllocMMUContext(&ui32MMUContextID); + if(eErr != PVRSRV_OK) { - PVR_DPF((PVR_DBG_ERROR, "PDumpSetMMUContext: _PdumpAllocMMUContext failed: %d", eError)); - return eError; + PVR_DPF((PVR_DBG_ERROR, "PDumpSetMMUContext: _PdumpAllocMMUContext failed: %d", eErr)); + return eErr; } @@ -2089,15 +2094,20 @@ PVRSRV_ERROR PDumpSetMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, sDevPAddr.uiAddr &= ~((PVRSRV_4K_PAGE_SIZE) -1); - PDumpComment("Set MMU Context\r\n"); - - PDumpComment("MMU :%s:v%d %d :%s:PA_%08X%08X\r\n", + eErr = PDumpOSBufprintf(hScript, + ui32MaxLen, + "MMU :%s:v%d %d :%s:PA_%08X%08X\r\n", pszMemSpace, ui32MMUContextID, ui32MMUType, pszMemSpace, (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, sDevPAddr.uiAddr); + if(eErr != PVRSRV_OK) + { + return eErr; + } + PDumpOSWriteString2(hScript, PDUMP_FLAGS_CONTINUOUS); *pui32MMUContextID = ui32MMUContextID; @@ -2111,23 +2121,29 @@ PVRSRV_ERROR PDumpClearMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32MMUType) { - PVRSRV_ERROR eError; - + PVRSRV_ERROR eErr; + PDUMP_GET_SCRIPT_STRING(); PVR_UNREFERENCED_PARAMETER(eDeviceType); + PVR_UNREFERENCED_PARAMETER(ui32MMUType); PDumpComment("Clear MMU Context for memory space %s\r\n", pszMemSpace); - - PDumpComment("MMU :%s:v%d %d\r\n", + eErr = PDumpOSBufprintf(hScript, + ui32MaxLen, + "MMU :%s:v%d\r\n", pszMemSpace, - ui32MMUContextID, - ui32MMUType); + ui32MMUContextID); + if(eErr != PVRSRV_OK) + { + return eErr; + } + PDumpOSWriteString2(hScript, PDUMP_FLAGS_CONTINUOUS); - eError = _PdumpFreeMMUContext(ui32MMUContextID); - if(eError != PVRSRV_OK) + eErr = _PdumpFreeMMUContext(ui32MMUContextID); + if(eErr != PVRSRV_OK) { - PVR_DPF((PVR_DBG_ERROR, "PDumpClearMMUContext: _PdumpFreeMMUContext failed: %d", eError)); - return eError; + PVR_DPF((PVR_DBG_ERROR, "PDumpClearMMUContext: _PdumpFreeMMUContext failed: %d", eErr)); + return eErr; } return PVRSRV_OK; @@ -2151,7 +2167,7 @@ PVRSRV_ERROR PDumpStoreMemToFile(PDUMP_MMU_ATTRIB *psMMUAttrib, - ui32PageOffset = (IMG_UINT32)psMemInfo->pvLinAddrKM & psMMUAttrib->ui32DataPageMask; + ui32PageOffset = (IMG_UINT32)((IMG_UINTPTR_T)psMemInfo->pvLinAddrKM & psMMUAttrib->ui32DataPageMask); sDevVPageAddr.uiAddr = uiAddr - ui32PageOffset; @@ -2201,6 +2217,7 @@ PVRSRV_ERROR PDumpRegBasedCBP(IMG_CHAR *pszPDumpRegName, } + #include "syscommon.h" IMG_EXPORT IMG_VOID PDumpConnectionNotify(IMG_VOID) @@ -2235,7 +2252,7 @@ IMG_UINT32 DbgWrite(PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32BC { return ui32BCount; } - + #if defined(SUPPORT_PDUMP_MULTI_PROCESS) if ( (_PDumpIsProcessActive() == IMG_FALSE ) && @@ -2248,7 +2265,7 @@ IMG_UINT32 DbgWrite(PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32BC if ( ((ui32Flags & PDUMP_FLAGS_PERSISTENT) != 0) && (psCtrl->bInitPhaseComplete) ) { - while (((IMG_UINT32) ui32BCount > 0) && (ui32BytesWritten != 0xFFFFFFFFU)) + while (ui32BCount > 0) { diff --git a/services4/srvkm/common/perproc.c b/services4/srvkm/common/perproc.c index eb2530c..eb73166 100644 --- a/services4/srvkm/common/perproc.c +++ b/services4/srvkm/common/perproc.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,6 +29,9 @@ #include "handle.h" #include "perproc.h" #include "osperproc.h" +#if defined(TTRACE) +#include "ttrace.h" +#endif #define HASH_TAB_INIT_SIZE 32 @@ -124,7 +127,10 @@ PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flag IMG_HANDLE hBlockAlloc; PVRSRV_ERROR eError = PVRSRV_OK; - PVR_ASSERT(psHashTab != IMG_NULL); + if (psHashTab == IMG_NULL) + { + return PVRSRV_ERROR_INIT_FAILURE; + } psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); @@ -161,7 +167,7 @@ PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flag psPerProc->bPDumpActive = IMG_TRUE; } #else - PVR_UNREFERENCED_PARAMETER(ui32Flags); + PVR_UNREFERENCED_PARAMETER(ui32Flags); #endif @@ -207,6 +213,9 @@ PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flag PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't register with the resource manager")); goto failure; } +#if defined (TTRACE) + PVRSRVTimeTraceBufferCreate(ui32PID); +#endif } psPerProc->ui32RefCount++; @@ -242,6 +251,10 @@ IMG_VOID PVRSRVPerProcessDataDisconnect(IMG_UINT32 ui32PID) PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVPerProcessDataDisconnect: " "Last close from process 0x%x received", ui32PID)); +#if defined (TTRACE) + PVRSRVTimeTraceBufferDestroy(ui32PID); +#endif + PVRSRVResManDisconnect(psPerProc->hResManContext, IMG_FALSE); diff --git a/services4/srvkm/common/power.c b/services4/srvkm/common/power.c index ba0eced..21d7ad4 100644 --- a/services4/srvkm/common/power.c +++ b/services4/srvkm/common/power.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -93,23 +93,18 @@ PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32 ui32CallerID, IMG_BOOL bSystemPowerEvent) { PVRSRV_ERROR eError; - SYS_DATA *psSysData; - IMG_UINT32 ui32Timeout = 1000000; - -#if defined(SUPPORT_LMA) - - ui32Timeout *= 60; -#endif + SYS_DATA *psSysData; + IMG_UINT32 ui32Timeout = 1000000; + IMG_BOOL bTryLock = (ui32CallerID == ISR_ID); SysAcquireData(&psSysData); -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - eError = SysPowerLockWrap(psSysData); + eError = OSPowerLockWrap(bTryLock); if (eError != PVRSRV_OK) { return eError; } -#endif + do { eError = OSLockResource(&psSysData->sPowerStateChangeResource, @@ -118,7 +113,7 @@ PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32 ui32CallerID, { break; } - else if (ui32CallerID == ISR_ID) + else if (bTryLock) { @@ -130,12 +125,11 @@ PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32 ui32CallerID, ui32Timeout--; } while (ui32Timeout > 0); -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) if (eError != PVRSRV_OK) { - SysPowerLockUnwrap(psSysData); + OSPowerLockUnwrap(); } -#endif + if ((eError == PVRSRV_OK) && !bSystemPowerEvent && @@ -154,9 +148,7 @@ IMG_EXPORT IMG_VOID PVRSRVPowerUnlock(IMG_UINT32 ui32CallerID) { OSUnlockResource(&gpsSysData->sPowerStateChangeResource, ui32CallerID); -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - SysPowerLockUnwrap(gpsSysData); -#endif + OSPowerLockUnwrap(); } @@ -560,7 +552,7 @@ PVRSRV_ERROR PVRSRVRegisterPowerDevice(IMG_UINT32 ui32DeviceIndex, SysAcquireData(&psSysData); - eError = OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, + eError = OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_POWER_DEV), (IMG_VOID **)&psPowerDevice, IMG_NULL, "Power Device"); diff --git a/services4/srvkm/common/pvrsrv.c b/services4/srvkm/common/pvrsrv.c index 9194966..6feccd2 100644 --- a/services4/srvkm/common/pvrsrv.c +++ b/services4/srvkm/common/pvrsrv.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -32,6 +32,9 @@ #include "pdump_km.h" #include "deviceid.h" #include "ra.h" +#if defined(TTRACE) +#include "ttrace.h" +#endif #include "pvrversion.h" @@ -40,6 +43,7 @@ IMG_UINT32 g_ui32InitFlags; #define INIT_DATA_ENABLE_PDUMPINIT 0x1U +#define INIT_DATA_ENABLE_TTARCE 0x2U PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID) { @@ -238,12 +242,24 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) goto Error; } - if(OSEventObjectCreate("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) + if(OSEventObjectCreateKM("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) { goto Error; } + psSysData->pfnHighResTimerCreate = OSFuncHighResTimerCreate; + psSysData->pfnHighResTimerGetus = OSFuncHighResTimerGetus; + psSysData->pfnHighResTimerDestroy = OSFuncHighResTimerDestroy; + +#if defined(TTRACE) + eError = PVRSRVTimeTraceInit(); + if (eError != PVRSRV_OK) + goto Error; + g_ui32InitFlags |= INIT_DATA_ENABLE_TTARCE; +#endif + + PDUMPINIT(); g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT; @@ -267,7 +283,13 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed - invalid param")); return; } - +#if defined(TTRACE) + + if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTARCE) > 0) + { + PVRSRVTimeTraceDeinit(); + } +#endif if( (g_ui32InitFlags & INIT_DATA_ENABLE_PDUMPINIT) > 0) { @@ -277,7 +299,7 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) if(psSysData->psGlobalEventObject) { - OSEventObjectDestroy(psSysData->psGlobalEventObject); + OSEventObjectDestroyKM(psSysData->psGlobalEventObject); OSFreeMem( PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_EVENTOBJECT), psSysData->psGlobalEventObject, @@ -464,7 +486,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccessful) +#if !defined(__QNXNTO__) PDUMPENDINITPHASE(); +#endif return PVRSRV_OK; } @@ -620,6 +644,31 @@ PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, IMG_UINT32 ui32PollPeriodus, IMG_BOOL bAllowPreemption) { +#if defined (EMULATOR) + { + PVR_UNREFERENCED_PARAMETER(bAllowPreemption); + #if !defined(__linux__) + PVR_UNREFERENCED_PARAMETER(ui32PollPeriodus); + #endif + + + + do + { + if((*pui32LinMemAddr & ui32Mask) == ui32Value) + { + return PVRSRV_OK; + } + + #if defined(__linux__) + OSWaitus(ui32PollPeriodus); + #else + OSReleaseThreadQuanta(); + #endif + + } while (ui32Timeoutus); + } +#else { IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; @@ -650,6 +699,7 @@ PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, PVR_DPF((PVR_DBG_ERROR,"PollForValueKM: Timeout. Expected 0x%x but found 0x%x (mask 0x%x).", ui32Value, ui32ActualValue, ui32Mask)); } +#endif return PVRSRV_ERROR_TIMEOUT; } @@ -762,7 +812,11 @@ static PVRSRV_ERROR PVRSRVGetMiscInfoKM_Device_AnyVaCb(PVRSRV_DEVICE_NODE *psDev IMG_EXPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo) +#else PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) +#endif { SYS_DATA *psSysData; @@ -857,7 +911,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } - if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) + if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0) && psMiscInfo->pszMemoryStr) { IMG_CHAR *pszStr; @@ -929,6 +983,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT) != 0UL) { + psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT; + if(psMiscInfo->sCacheOpCtl.bDeferOp) { @@ -936,10 +992,16 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } else { +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = psMiscInfo->sCacheOpCtl.psKernelMemInfo; + + if(!psMiscInfo->sCacheOpCtl.psKernelMemInfo) +#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; PVRSRV_PER_PROCESS_DATA *psPerProc; if(!psMiscInfo->sCacheOpCtl.u.psKernelMemInfo) +#endif { PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " "Ignoring non-deferred cache op with no meminfo")); @@ -953,6 +1015,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) "to combine deferred cache ops with immediate ones")); } +#if defined (SUPPORT_SID_INTERFACE) + PVR_DBG_BREAK +#else psPerProc = PVRSRVFindPerProcessData(); @@ -965,6 +1030,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) "Can't find kernel meminfo")); return PVRSRV_ERROR_INVALID_PARAMS; } +#endif if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) { @@ -1109,9 +1175,9 @@ IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) &PVRSRVMISR_ForEachCb); - if (PVRSRVProcessQueues(ISR_ID, IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) + if (PVRSRVProcessQueues(IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) { - PVRSRVProcessQueues(ISR_ID, IMG_FALSE); + PVRSRVProcessQueues(IMG_FALSE); } @@ -1120,7 +1186,7 @@ IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) IMG_HANDLE hOSEventKM = psSysData->psGlobalEventObject->hOSEventKM; if(hOSEventKM) { - OSEventObjectSignal(hOSEventKM); + OSEventObjectSignalKM(hOSEventKM); } } } diff --git a/services4/srvkm/common/queue.c b/services4/srvkm/common/queue.c index b6c4cda..8925d3c 100644 --- a/services4/srvkm/common/queue.c +++ b/services4/srvkm/common/queue.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,7 +27,7 @@ #include "services_headers.h" #include "lists.h" - +#include "ttrace.h" #define DC_NUM_COMMANDS_PER_TYPE 1 @@ -71,13 +71,29 @@ void ProcSeqShowQueue(struct seq_file *sfile,void* el) (IMG_UINTPTR_T)psCmd, psCmd->ui32ProcessID, psCmd->CommandType, - psCmd->ui32CmdSize, + psCmd->uCmdSize, psCmd->ui32DevIndex, psCmd->ui32DstSyncCount, psCmd->ui32SrcSyncCount, - psCmd->ui32DataSize); + psCmd->uDataSize); + { + IMG_UINT32 i; + for (i = 0; i < psCmd->ui32SrcSyncCount; i++) + { + PVRSRV_SYNC_DATA *psSyncData = psCmd->psSrcSync[i].psKernelSyncInfoKM->psSyncData; + seq_printf(sfile, " Sync %u: ROP/ROC: 0x%x/0x%x WOP/WOC: 0x%x/0x%x ROC-VA: 0x%x WOC-VA: 0x%x\n", + i, + psCmd->psSrcSync[i].ui32ReadOpsPending, + psSyncData->ui32ReadOpsComplete, + psCmd->psSrcSync[i].ui32WriteOpsPending, + psSyncData->ui32WriteOpsComplete, + psCmd->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, + psCmd->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr); + } + } + - ui32ReadOffset += psCmd->ui32CmdSize; + ui32ReadOffset += psCmd->uCmdSize; ui32ReadOffset &= psQueue->ui32QueueSize - 1; cmds++; } @@ -512,7 +528,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, psCommand->ui32ProcessID = OSGetCurrentProcessIDKM(); - psCommand->ui32CmdSize = ui32CommandSize; + psCommand->uCmdSize = ui32CommandSize; psCommand->ui32DevIndex = ui32DevIndex; psCommand->CommandType = CommandType; psCommand->ui32DstSyncCount = ui32DstSyncCount; @@ -527,11 +543,18 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, psCommand->pvData = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand->psSrcSync) + (ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - psCommand->ui32DataSize = ui32DataByteSize; + psCommand->uDataSize = ui32DataByteSize; + + PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_START, QUEUE_TOKEN_INSERTKM); + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_NONE, + QUEUE_TOKEN_COMMAND_TYPE, CommandType); for (i=0; ipsDstSync[i].psKernelSyncInfoKM = apsDstSync[i]; psCommand->psDstSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsDstSync[i], IMG_FALSE); psCommand->psDstSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE); @@ -546,6 +569,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, for (i=0; ipsSrcSync[i].psKernelSyncInfoKM = apsSrcSync[i]; psCommand->psSrcSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsSrcSync[i], IMG_TRUE); psCommand->psSrcSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE); @@ -556,6 +582,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, psCommand->psSrcSync[i].ui32ReadOpsPending, psCommand->psSrcSync[i].ui32WriteOpsPending)); } + PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_END, QUEUE_TOKEN_INSERTKM); *ppsCommand = psCommand; @@ -590,7 +617,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVSubmitCommandKM(PVRSRV_QUEUE_INFO *psQueue, + (psCommand->ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - UPDATE_QUEUE_WOFF(psQueue, psCommand->ui32CmdSize); + UPDATE_QUEUE_WOFF(psQueue, psCommand->uCmdSize); return PVRSRV_OK; } @@ -730,7 +757,7 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA *psSysData, if (psDeviceCommandData[psCommand->CommandType].pfnCmdProc((IMG_HANDLE)psCmdCompleteData, - psCommand->ui32DataSize, + (IMG_UINT32)psCommand->uDataSize, psCommand->pvData) == IMG_FALSE) { @@ -757,48 +784,20 @@ static IMG_VOID PVRSRVProcessQueues_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) } IMG_EXPORT -PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, - IMG_BOOL bFlush) +PVRSRV_ERROR PVRSRVProcessQueues(IMG_BOOL bFlush) { PVRSRV_QUEUE_INFO *psQueue; SYS_DATA *psSysData; PVRSRV_COMMAND *psCommand; - PVRSRV_ERROR eError; - SysAcquireData(&psSysData); - psSysData->bReProcessQueues = IMG_FALSE; - - eError = OSLockResource(&psSysData->sQProcessResource, - ui32CallerID); - if(eError != PVRSRV_OK) + while (OSLockResource(&psSysData->sQProcessResource, ISR_ID) != PVRSRV_OK) { - - psSysData->bReProcessQueues = IMG_TRUE; - - - if(ui32CallerID == ISR_ID) - { - if (bFlush) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVProcessQueues: Couldn't acquire queue processing lock for FLUSH")); - } - else - { - PVR_DPF((PVR_DBG_MESSAGE,"PVRSRVProcessQueues: Couldn't acquire queue processing lock")); - } - } - else - { - PVR_DPF((PVR_DBG_MESSAGE,"PVRSRVProcessQueues: Queue processing lock-acquire failed when called from the Services driver.")); - PVR_DPF((PVR_DBG_MESSAGE," This is due to MISR queue processing being interrupted by the Services driver.")); - } - - return PVRSRV_OK; - } - + OSWaitus(1); + }; + psQueue = psSysData->psQueueList; if(!psQueue) @@ -820,8 +819,7 @@ PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, if (PVRSRVProcessCommand(psSysData, psCommand, bFlush) == PVRSRV_OK) { - UPDATE_QUEUE_ROFF(psQueue, psCommand->ui32CmdSize) - + UPDATE_QUEUE_ROFF(psQueue, psCommand->uCmdSize) continue; } @@ -839,15 +837,7 @@ PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, &PVRSRVProcessQueues_ForEachCb); - - - OSUnlockResource(&psSysData->sQProcessResource, ui32CallerID); - - - if(psSysData->bReProcessQueues) - { - return PVRSRV_ERROR_PROCESSING_BLOCKED; - } + OSUnlockResource(&psSysData->sQProcessResource, ISR_ID); return PVRSRV_OK; } @@ -887,11 +877,18 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, SysAcquireData(&psSysData); + PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_START, + QUEUE_TOKEN_COMMAND_COMPLETE); + for (i=0; iui32DstSyncCount; i++) { psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete++; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_DST, + psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM, + PVRSRV_SYNCOP_COMPLETE); + PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, @@ -904,6 +901,10 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, { psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete++; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_SRC, + psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM, + PVRSRV_SYNCOP_COMPLETE); + PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, @@ -911,6 +912,9 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending)); } + PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_END, + QUEUE_TOKEN_COMMAND_COMPLETE); + psCmdCompleteData->bInUse = IMG_FALSE; @@ -1003,7 +1007,7 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, (((IMG_UINTPTR_T)psCmdCompleteData->psDstSync) + (sizeof(PVRSRV_SYNC_OBJECT) * ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0])); - psCmdCompleteData->ui32AllocSize = ui32AllocSize; + psCmdCompleteData->ui32AllocSize = (IMG_UINT32)ui32AllocSize; } } @@ -1012,14 +1016,13 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, ErrorExit: - - if (PVRSRVRemoveCmdProcListKM(ui32DevIndex, ui32CmdCount) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVRegisterCmdProcListKM: Failed to clean up after error, device 0x%x", - ui32DevIndex)); - } - + if (PVRSRVRemoveCmdProcListKM(ui32DevIndex, ui32CmdCount) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, + "PVRSRVRegisterCmdProcListKM: Failed to clean up after error, device 0x%x", + ui32DevIndex)); + } + return eError; } diff --git a/services4/srvkm/common/ra.c b/services4/srvkm/common/ra.c index 191be84..e93f05f 100644 --- a/services4/srvkm/common/ra.c +++ b/services4/srvkm/common/ra.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -142,7 +142,7 @@ struct _RA_ARENA_ #endif #if defined(CONFIG_PROC_FS) && defined(DEBUG) -#define PROC_NAME_SIZE 32 +#define PROC_NAME_SIZE 64 struct proc_dir_entry* pProcInfo; struct proc_dir_entry* pProcSegs; diff --git a/services4/srvkm/common/resman.c b/services4/srvkm/common/resman.c index bc127ac..5088c7f 100644 --- a/services4/srvkm/common/resman.c +++ b/services4/srvkm/common/resman.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,11 +27,12 @@ #include "services_headers.h" #include "resman.h" -#include #ifdef __linux__ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -42,26 +43,34 @@ #include #endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +#include +#else #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) #include #else #include #endif +#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) -static DEFINE_SEMAPHORE(lock); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +static DEFINE_MUTEX(lock); +#define DOWN(m) mutex_lock(m) +#define UP(m) mutex_unlock(m) #else - static DECLARE_MUTEX(lock); +static DECLARE_MUTEX(lock); +#define DOWN(m) down(m) +#define UP(m) up(m) #endif #define ACQUIRE_SYNC_OBJ do { \ if (in_interrupt()) { \ - printk ("ISR cannot take RESMAN mutex\n"); \ + printk("ISR cannot take RESMAN mutex\n"); \ BUG(); \ } \ - else down (&lock); \ + else DOWN(&lock); \ } while (0) -#define RELEASE_SYNC_OBJ up (&lock) +#define RELEASE_SYNC_OBJ UP(&lock) #else @@ -128,7 +137,7 @@ static IMPLEMENT_LIST_INSERT(RESMAN_CONTEXT) #define PRINT_RESLIST(x, y, z) -static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback); +static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback, IMG_BOOL bForceCleanup); static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, IMG_UINT32 ui32SearchCriteria, @@ -255,6 +264,9 @@ IMG_VOID PVRSRVResManDisconnect(PRESMAN_CONTEXT psResManContext, FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_OS_USERMODE_MAPPING, 0, 0, IMG_TRUE); + FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DMA_CLIENT_FIFO_DATA, 0, 0, IMG_TRUE); + + FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_EVENT_OBJECT, 0, 0, IMG_TRUE); @@ -270,15 +282,8 @@ IMG_VOID PVRSRVResManDisconnect(PRESMAN_CONTEXT psResManContext, FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_TRANSFER_CONTEXT, 0, 0, IMG_TRUE); FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_PB_DESC_CREATE_LOCK, 0, 0, IMG_TRUE); FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_PB_DESC, 0, 0, IMG_TRUE); - - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_SWAPCHAIN_REF, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_DEVICE, 0, 0, IMG_TRUE); - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_BUFFERCLASS_DEVICE, 0, 0, IMG_TRUE); FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SYNC_INFO, 0, 0, IMG_TRUE); @@ -289,6 +294,13 @@ IMG_VOID PVRSRVResManDisconnect(PRESMAN_CONTEXT psResManContext, FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_ALLOCATION, 0, 0, IMG_TRUE); FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_CONTEXT, 0, 0, IMG_TRUE); FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_MEM_INFO, 0, 0, IMG_TRUE); + + + FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_SWAPCHAIN_REF, 0, 0, IMG_TRUE); + FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_DEVICE, 0, 0, IMG_TRUE); + + + FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_BUFFERCLASS_DEVICE, 0, 0, IMG_TRUE); } @@ -382,7 +394,7 @@ PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT psResManContext, return(psNewResItem); } -PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) +PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem, IMG_BOOL bForceCleanup) { PVRSRV_ERROR eError; @@ -404,7 +416,7 @@ PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) VALIDATERESLIST(); - eError = FreeResourceByPtr(psResItem, IMG_TRUE); + eError = FreeResourceByPtr(psResItem, IMG_TRUE, bForceCleanup); VALIDATERESLIST(); @@ -481,7 +493,7 @@ PVRSRV_ERROR ResManDissociateRes(RESMAN_ITEM *psResItem, } else { - eError = FreeResourceByPtr(psResItem, IMG_FALSE); + eError = FreeResourceByPtr(psResItem, IMG_FALSE, CLEANUP_WITH_POLL); if(eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer")); @@ -557,9 +569,10 @@ IMG_INTERNAL PVRSRV_ERROR ResManFindResourceByPtr(PRESMAN_CONTEXT psResManContex } static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, - IMG_BOOL bExecuteCallback) + IMG_BOOL bExecuteCallback, + IMG_BOOL bForceCleanup) { - PVRSRV_ERROR eError; + PVRSRV_ERROR eError = PVRSRV_OK; PVR_ASSERT(psItem != IMG_NULL); @@ -594,7 +607,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, if (bExecuteCallback) { - eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param); + eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param, bForceCleanup); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function")); @@ -605,11 +618,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, ACQUIRE_SYNC_OBJ; - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR freeing resource list item memory")); - } + OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); return(eError); } @@ -670,7 +679,7 @@ static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psResManContext, ui32Param)) != IMG_NULL && eError == PVRSRV_OK) { - eError = FreeResourceByPtr(psCurItem, bExecuteCallback); + eError = FreeResourceByPtr(psCurItem, bExecuteCallback, CLEANUP_WITH_POLL); } return eError; diff --git a/services4/srvkm/devices/sgx/mmu.c b/services4/srvkm/devices/sgx/mmu.c index e7d19fe..22b9ffb 100644 --- a/services4/srvkm/devices/sgx/mmu.c +++ b/services4/srvkm/devices/sgx/mmu.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -37,16 +37,51 @@ #include "mmu.h" #include "sgxconfig.h" #include "sgx_bridge_km.h" +#include "pdump_osfunc.h" #define UINT32_MAX_VALUE 0xFFFFFFFFUL #define SGX_MAX_PD_ENTRIES (1<<(SGX_FEATURE_ADDRESS_SPACE_SIZE - SGX_MMU_PT_SHIFT - SGX_MMU_PAGE_SHIFT)) +#if defined(FIX_HW_BRN_31620) +#define SGX_MMU_PDE_DUMMY_PAGE (0) +#define SGX_MMU_PTE_DUMMY_PAGE (0) + +#define BRN31620_PT_ADDRESS_RANGE_SHIFT 22 +#define BRN31620_PT_ADDRESS_RANGE_SIZE (1 << BRN31620_PT_ADDRESS_RANGE_SHIFT) + +#define BRN31620_PDE_CACHE_FILL_SHIFT 26 +#define BRN31620_PDE_CACHE_FILL_SIZE (1 << BRN31620_PDE_CACHE_FILL_SHIFT) +#define BRN31620_PDE_CACHE_FILL_MASK (BRN31620_PDE_CACHE_FILL_SIZE - 1) + +#define BRN31620_PDES_PER_CACHE_LINE_SHIFT (BRN31620_PDE_CACHE_FILL_SHIFT - BRN31620_PT_ADDRESS_RANGE_SHIFT) +#define BRN31620_PDES_PER_CACHE_LINE_SIZE (1 << BRN31620_PDES_PER_CACHE_LINE_SHIFT) +#define BRN31620_PDES_PER_CACHE_LINE_MASK (BRN31620_PDES_PER_CACHE_LINE_SIZE - 1) + +#define BRN31620_DUMMY_PAGE_OFFSET (1 * SGX_MMU_PAGE_SIZE) +#define BRN31620_DUMMY_PDE_INDEX (BRN31620_DUMMY_PAGE_OFFSET / BRN31620_PT_ADDRESS_RANGE_SIZE) +#define BRN31620_DUMMY_PTE_INDEX ((BRN31620_DUMMY_PAGE_OFFSET - (BRN31620_DUMMY_PDE_INDEX * BRN31620_PT_ADDRESS_RANGE_SIZE))/SGX_MMU_PAGE_SIZE) + +#define BRN31620_CACHE_FLUSH_SHIFT (32 - BRN31620_PDE_CACHE_FILL_SHIFT) +#define BRN31620_CACHE_FLUSH_SIZE (1 << BRN31620_CACHE_FLUSH_SHIFT) + +#define BRN31620_CACHE_FLUSH_BITS_SHIFT 5 +#define BRN31620_CACHE_FLUSH_BITS_SIZE (1 << BRN31620_CACHE_FLUSH_BITS_SHIFT) +#define BRN31620_CACHE_FLUSH_BITS_MASK (BRN31620_CACHE_FLUSH_BITS_SIZE - 1) + +#define BRN31620_CACHE_FLUSH_INDEX_BITS (BRN31620_CACHE_FLUSH_SHIFT - BRN31620_CACHE_FLUSH_BITS_SHIFT) +#define BRN31620_CACHE_FLUSH_INDEX_SIZE (1 << BRN31620_CACHE_FLUSH_INDEX_BITS) + +#define BRN31620_DUMMY_PAGE_SIGNATURE 0xFEEBEE01 +#endif + typedef struct _MMU_PT_INFO_ { IMG_VOID *hPTPageOSMemHandle; IMG_CPU_VIRTADDR PTPageCpuVAddr; + + IMG_UINT32 ui32ValidPTECount; } MMU_PT_INFO; @@ -73,6 +108,11 @@ struct _MMU_CONTEXT_ #endif #endif +#if defined (FIX_HW_BRN_31620) + IMG_UINT32 ui32PDChangeMask[BRN31620_CACHE_FLUSH_INDEX_SIZE]; + IMG_UINT32 ui32PDCacheRangeRefCount[BRN31620_CACHE_FLUSH_SIZE]; + MMU_PT_INFO *apsPTInfoListSave[SGX_MAX_PD_ENTRIES]; +#endif struct _MMU_CONTEXT_ *psNext; }; @@ -88,7 +128,7 @@ struct _MMU_HEAP_ IMG_UINT32 ui32PageTableCount; - IMG_UINT32 ui32PTETotal; + IMG_UINT32 ui32PTETotalUsable; IMG_UINT32 ui32PDEPageSizeCtrl; @@ -112,7 +152,9 @@ struct _MMU_HEAP_ IMG_UINT32 ui32PTSize; - IMG_UINT32 ui32PTECount; + IMG_UINT32 ui32PTNumEntriesAllocated; + + IMG_UINT32 ui32PTNumEntriesUsable; @@ -138,6 +180,9 @@ struct _MMU_HEAP_ #define DUMMY_DATA_PAGE_SIGNATURE 0xDEADBEEF #endif +static IMG_VOID +_DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOSFreePT); + #if defined(PDUMP) static IMG_VOID MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, @@ -285,6 +330,105 @@ static IMG_VOID MMU_InvalidatePageTableCache(PVRSRV_SGXDEV_INFO *psDevInfo) #endif } +#if defined(FIX_HW_BRN_31620) +static IMG_VOID BRN31620InvalidatePageTableEntry(MMU_CONTEXT *psMMUContext, IMG_UINT32 ui32PDIndex, IMG_UINT32 ui32PTIndex, IMG_UINT32 *pui32PTE) +{ + PVRSRV_SGXDEV_INFO *psDevInfo = psMMUContext->psDevInfo; + + + if (((ui32PDIndex % (BRN31620_PDE_CACHE_FILL_SIZE/BRN31620_PT_ADDRESS_RANGE_SIZE)) == BRN31620_DUMMY_PDE_INDEX) + && (ui32PTIndex == BRN31620_DUMMY_PTE_INDEX)) + { + *pui32PTE = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) + | SGX_MMU_PTE_DUMMY_PAGE + | SGX_MMU_PTE_READONLY + | SGX_MMU_PTE_VALID; + } + else + { + *pui32PTE = 0; + } +} + +static IMG_BOOL BRN31620FreePageTable(MMU_HEAP *psMMUHeap, IMG_UINT32 ui32PDIndex) +{ + MMU_CONTEXT *psMMUContext = psMMUHeap->psMMUContext; + PVRSRV_SGXDEV_INFO *psDevInfo = psMMUContext->psDevInfo; + IMG_UINT32 ui32PDCacheLine = ui32PDIndex >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; + IMG_UINT32 bFreePTs = IMG_FALSE; + IMG_UINT32 *pui32Tmp; + + PVR_ASSERT(psMMUHeap != IMG_NULL); + + + PVR_ASSERT(psMMUContext->apsPTInfoListSave[ui32PDIndex] == IMG_NULL); + + psMMUContext->apsPTInfoListSave[ui32PDIndex] = psMMUContext->apsPTInfoList[ui32PDIndex]; + psMMUContext->apsPTInfoList[ui32PDIndex] = IMG_NULL; + + + if (--psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine] == 0) + { + IMG_UINT32 i; + IMG_UINT32 ui32PDIndexStart = ui32PDCacheLine * BRN31620_PDES_PER_CACHE_LINE_SIZE; + IMG_UINT32 ui32PDIndexEnd = ui32PDIndexStart + BRN31620_PDES_PER_CACHE_LINE_SIZE; + IMG_UINT32 ui32PDBitMaskIndex, ui32PDBitMaskShift; + + + for (i=ui32PDIndexStart;iapsPTInfoList[i] = psMMUContext->apsPTInfoListSave[i]; + psMMUContext->apsPTInfoListSave[i] = IMG_NULL; + _DeferredFreePageTable(psMMUHeap, i - psMMUHeap->ui32PDBaseIndex, IMG_TRUE); + } + + ui32PDBitMaskIndex = ui32PDCacheLine >> BRN31620_CACHE_FLUSH_BITS_SHIFT; + ui32PDBitMaskShift = ui32PDCacheLine & BRN31620_CACHE_FLUSH_BITS_MASK; + + + if (MMU_IsHeapShared(psMMUHeap)) + { + + MMU_CONTEXT *psMMUContextWalker = (MMU_CONTEXT*) psMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; + + while(psMMUContextWalker) + { + psMMUContextWalker->ui32PDChangeMask[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; + + + pui32Tmp = (IMG_UINT32 *) psMMUContextWalker->pvPDCpuVAddr; + pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX] = (psDevInfo->sBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) + | SGX_MMU_PDE_PAGE_SIZE_4K + | SGX_MMU_PDE_DUMMY_PAGE + | SGX_MMU_PDE_VALID; + + PDUMPCOMMENT("BRN31620 Re-wire dummy PT due to releasing PT allocation block"); + PDUMPPDENTRIES(&psMMUHeap->sMMUAttrib, psMMUContextWalker->hPDOSMemHandle, (IMG_VOID*)&pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); + psMMUContextWalker = psMMUContextWalker->psNext; + } + } + else + { + psMMUContext->ui32PDChangeMask[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; + + + pui32Tmp = (IMG_UINT32 *) psMMUContext->pvPDCpuVAddr; + pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX] = (psDevInfo->sBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) + | SGX_MMU_PDE_PAGE_SIZE_4K + | SGX_MMU_PDE_DUMMY_PAGE + | SGX_MMU_PDE_VALID; + + PDUMPCOMMENT("BRN31620 Re-wire dummy PT due to releasing PT allocation block"); + PDUMPPDENTRIES(&psMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); + } + + bFreePTs = IMG_TRUE; + } + + return bFreePTs; +} +#endif static IMG_BOOL _AllocPageTableMemory (MMU_HEAP *pMMUHeap, @@ -373,11 +517,16 @@ _AllocPageTableMemory (MMU_HEAP *pMMUHeap, pui32Tmp = (IMG_UINT32*)psPTInfoList->PTPageCpuVAddr; - for(i=0; iui32PTECount; i++) + for(i=0; iui32PTNumEntriesUsable; i++) { pui32Tmp[i] = (pMMUHeap->psMMUContext->psDevInfo->sDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) | SGX_MMU_PTE_VALID; } + + for(; iui32PTNumEntriesAllocated; i++) + { + pui32Tmp[i] = 0; + } } #else @@ -575,9 +724,10 @@ _DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOS for(i=0; - (iui32PTETotal) && (iui32PTECount); + (iui32PTETotalUsable) && (iui32PTNumEntriesUsable); i++) { + pui32Tmp[i] = 0; } @@ -591,12 +741,12 @@ _DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOS - pMMUHeap->ui32PTETotal -= i; + pMMUHeap->ui32PTETotalUsable -= i; } else { - pMMUHeap->ui32PTETotal -= pMMUHeap->ui32PTECount; + pMMUHeap->ui32PTETotalUsable -= pMMUHeap->ui32PTNumEntriesUsable; } if(bOSFreePT) @@ -612,7 +762,7 @@ _DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOS else { - pMMUHeap->ui32PTETotal -= pMMUHeap->ui32PTECount; + pMMUHeap->ui32PTETotalUsable -= pMMUHeap->ui32PTNumEntriesUsable; } PDUMPCOMMENT("Finished free page table (page count == %08X)", pMMUHeap->ui32PageTableCount); @@ -622,17 +772,59 @@ static IMG_VOID _DeferredFreePageTables (MMU_HEAP *pMMUHeap) { IMG_UINT32 i; +#if defined(FIX_HW_BRN_31620) + MMU_CONTEXT *psMMUContext = pMMUHeap->psMMUContext; + IMG_BOOL bInvalidateDirectoryCache = IMG_FALSE; + IMG_UINT32 ui32PDIndex; + IMG_UINT32 *pui32Tmp; + IMG_UINT32 j; +#endif #if defined(PDUMP) PDUMPCOMMENT("Free PTs (MMU Context ID == %u, PDBaseIndex == %u, PT count == 0x%x)", pMMUHeap->psMMUContext->ui32PDumpMMUContextID, pMMUHeap->ui32PDBaseIndex, pMMUHeap->ui32PageTableCount); #endif +#if defined(FIX_HW_BRN_31620) + for(i=0; iui32PageTableCount; i++) + { + ui32PDIndex = (pMMUHeap->ui32PDBaseIndex + i); + + if (psMMUContext->apsPTInfoList[ui32PDIndex]) + { + if (psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr) + { + + for (j=0;japsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; + BRN31620InvalidatePageTableEntry(psMMUContext, ui32PDIndex, j, &pui32Tmp[j]); + } + } + + if (BRN31620FreePageTable(pMMUHeap, ui32PDIndex) == IMG_TRUE) + { + bInvalidateDirectoryCache = IMG_TRUE; + } + } + } + + + if (bInvalidateDirectoryCache) + { + MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); + } + else + { + MMU_InvalidatePageTableCache(pMMUHeap->psMMUContext->psDevInfo); + } +#else for(i=0; iui32PageTableCount; i++) { _DeferredFreePageTable(pMMUHeap, i, IMG_TRUE); } MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); +#endif } @@ -646,6 +838,15 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT MMU_PT_INFO **ppsPTInfoList; SYS_DATA *psSysData; IMG_DEV_VIRTADDR sHighDevVAddr; +#if defined(FIX_HW_BRN_31620) + IMG_BOOL bFlushSystemCache = IMG_FALSE; + IMG_BOOL bSharedPT = IMG_FALSE; + IMG_DEV_VIRTADDR sDevVAddrRequestStart; + IMG_DEV_VIRTADDR sDevVAddrRequestEnd; + IMG_UINT32 ui32PDRequestStart; + IMG_UINT32 ui32PDRequestEnd; + IMG_UINT32 ui32ModifiedCachelines[BRN31620_CACHE_FLUSH_INDEX_SIZE]; +#endif #if SGX_FEATURE_ADDRESS_SPACE_SIZE < 32 @@ -676,6 +877,38 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT ui32PageTableCount = sHighDevVAddr.uiAddr >> pMMUHeap->ui32PDShift; + + if (ui32PageTableCount == 0) + ui32PageTableCount = 1024; + +#if defined(FIX_HW_BRN_31620) + for (i=0;i> pMMUHeap->ui32PDShift; + ui32PageTableCount = sHighDevVAddr.uiAddr >> pMMUHeap->ui32PDShift; + + + if (ui32PageTableCount == 0) + ui32PageTableCount = 1024; +#endif + ui32PageTableCount -= ui32PDIndex; @@ -686,18 +919,45 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; #if defined(PDUMP) - PDUMPCOMMENT("Alloc PTs (MMU Context ID == %u, PDBaseIndex == %u, Size == 0x%x)", - pMMUHeap->psMMUContext->ui32PDumpMMUContextID, - pMMUHeap->ui32PDBaseIndex, - ui32Size); - PDUMPCOMMENT("Alloc page table (page count == %08X)", ui32PageTableCount); - PDUMPCOMMENT("Page directory mods (page count == %08X)", ui32PageTableCount); + { + IMG_UINT32 ui32Flags = 0; + + + if( MMU_IsHeapShared(pMMUHeap) ) + { + ui32Flags |= PDUMP_FLAGS_CONTINUOUS; + } + PDUMPCOMMENTWITHFLAGS(ui32Flags, "Alloc PTs (MMU Context ID == %u, PDBaseIndex == %u, Size == 0x%x)", + pMMUHeap->psMMUContext->ui32PDumpMMUContextID, + pMMUHeap->ui32PDBaseIndex, + ui32Size); + PDUMPCOMMENTWITHFLAGS(ui32Flags, "Alloc page table (page count == %08X)", ui32PageTableCount); + PDUMPCOMMENTWITHFLAGS(ui32Flags, "Page directory mods (page count == %08X)", ui32PageTableCount); + } #endif for(i=0; ipsMMUContext->apsPTInfoListSave[ui32PDIndex + i]) + { + + if (((ui32PDIndex + i) >= ui32PDRequestStart) && ((ui32PDIndex + i) <= ui32PDRequestEnd)) + { + IMG_UINT32 ui32PDCacheLine = (ui32PDIndex + i) >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; + + ppsPTInfoList[i] = pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i]; + pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i] = IMG_NULL; + + pMMUHeap->psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine]++; + } + } + else + { +#endif OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof (MMU_PT_INFO), (IMG_VOID **)&ppsPTInfoList[i], IMG_NULL, @@ -708,8 +968,15 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT return IMG_FALSE; } OSMemSet (ppsPTInfoList[i], 0, sizeof(MMU_PT_INFO)); +#if defined(FIX_HW_BRN_31620) + } +#endif } - +#if defined(FIX_HW_BRN_31620) + + if (ppsPTInfoList[i]) + { +#endif if(ppsPTInfoList[i]->hPTPageOSMemHandle == IMG_NULL && ppsPTInfoList[i]->PTPageCpuVAddr == IMG_NULL) { @@ -718,16 +985,43 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT IMG_UINT32 *pui32Tmp; IMG_UINT32 j; #else +#if !defined(FIX_HW_BRN_31620) PVR_ASSERT(pui32PDEntry[i] == 0); #endif - +#endif if(_AllocPageTableMemory (pMMUHeap, ppsPTInfoList[i], &sDevPAddr) != IMG_TRUE) { PVR_DPF((PVR_DBG_ERROR, "_DeferredAllocPagetables: ERROR call to _AllocPageTableMemory failed")); return IMG_FALSE; } +#if defined(FIX_HW_BRN_31620) + bFlushSystemCache = IMG_TRUE; + + { + IMG_UINT32 ui32PD; + IMG_UINT32 ui32PDCacheLine; + IMG_UINT32 ui32PDBitMaskIndex; + IMG_UINT32 ui32PDBitMaskShift; + ui32PD = ui32PDIndex + i; + ui32PDCacheLine = ui32PD >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; + ui32PDBitMaskIndex = ui32PDCacheLine >> BRN31620_CACHE_FLUSH_BITS_SHIFT; + ui32PDBitMaskShift = ui32PDCacheLine & BRN31620_CACHE_FLUSH_BITS_MASK; + ui32ModifiedCachelines[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; + + + if ((pMMUHeap->ui32PDBaseIndex + pMMUHeap->ui32PageTableCount) < (ui32PD + 1)) + { + pMMUHeap->ui32PageTableCount = (ui32PD + 1) - pMMUHeap->ui32PDBaseIndex; + } + + if (((ui32PDIndex + i) >= ui32PDRequestStart) && ((ui32PDIndex + i) <= ui32PDRequestEnd)) + { + pMMUHeap->psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine]++; + } + } +#endif switch(pMMUHeap->psDevArena->DevMemHeapType) { case DEVICE_MEMORY_HEAP_SHARED : @@ -746,7 +1040,6 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT pui32PDEntry[i] = (sDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) | pMMUHeap->ui32PDEPageSizeCtrl | SGX_MMU_PDE_VALID; - #if defined(PDUMP) #if defined(SUPPORT_PDUMP_MULTI_PROCESS) @@ -757,10 +1050,12 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); } #endif - psMMUContext = psMMUContext->psNext; } +#if defined(FIX_HW_BRN_31620) + bSharedPT = IMG_TRUE; +#endif break; } case DEVICE_MEMORY_HEAP_PERCONTEXT : @@ -772,6 +1067,7 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT | SGX_MMU_PDE_VALID; + PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, pMMUHeap->psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); break; } @@ -788,18 +1084,113 @@ _DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); +#endif +#if defined(FIX_HW_BRN_31620) + + if (((ui32PDIndex + i) < ui32PDRequestStart) || ((ui32PDIndex + i) > ui32PDRequestEnd)) + { + pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i] = ppsPTInfoList[i]; + ppsPTInfoList[i] = IMG_NULL; + } #endif } else { +#if !defined(FIX_HW_BRN_31620) PVR_ASSERT(pui32PDEntry[i] != 0); +#endif + } +#if defined(FIX_HW_BRN_31620) } +#endif } #if defined(SGX_FEATURE_SYSTEM_CACHE) + #if defined(FIX_HW_BRN_31620) + + if (bFlushSystemCache) + { + #endif + MMU_InvalidateSystemLevelCache(pMMUHeap->psMMUContext->psDevInfo); #endif + #if defined(FIX_HW_BRN_31620) + } + + + sHighDevVAddr.uiAddr = sHighDevVAddr.uiAddr - 1; + + + if (bFlushSystemCache) + { + MMU_CONTEXT *psMMUContext; + + if (bSharedPT) + { + MMU_CONTEXT *psMMUContext = (MMU_CONTEXT*)pMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; + + while(psMMUContext) + { + for (i=0;iui32PDChangeMask[i] |= ui32ModifiedCachelines[i]; + } + + + psMMUContext = psMMUContext->psNext; + } + } + else + { + for (i=0;ipsMMUContext->ui32PDChangeMask[i] |= ui32ModifiedCachelines[i]; + } + } + + + psMMUContext = pMMUHeap->psMMUContext; + for (i=0;ipsDevInfo; + MMU_PT_INFO *psTempPTInfo = IMG_NULL; + IMG_UINT32 *pui32Tmp; + + ui32PDIndex = (((i * BRN31620_CACHE_FLUSH_BITS_SIZE) + j) * BRN31620_PDES_PER_CACHE_LINE_SIZE) + BRN31620_DUMMY_PDE_INDEX; + + + if (psMMUContext->apsPTInfoList[ui32PDIndex]) + { + psTempPTInfo = psMMUContext->apsPTInfoList[ui32PDIndex]; + } + else + { + psTempPTInfo = psMMUContext->apsPTInfoListSave[ui32PDIndex]; + } + + PVR_ASSERT(psTempPTInfo != IMG_NULL); + + pui32Tmp = (IMG_UINT32 *) psTempPTInfo->PTPageCpuVAddr; + PVR_ASSERT(pui32Tmp != IMG_NULL); + pui32Tmp[BRN31620_DUMMY_PTE_INDEX] = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) + | SGX_MMU_PTE_DUMMY_PAGE + | SGX_MMU_PTE_READONLY + | SGX_MMU_PTE_VALID; + + PDUMPCOMMENT("BRN31620 Dump PTE for dummy page after wireing up new PT"); + PDUMPMEMPTENTRIES(&pMMUHeap->sMMUAttrib, psTempPTInfo->hPTPageOSMemHandle, (IMG_VOID *) &pui32Tmp[BRN31620_DUMMY_PTE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); + } + } + } + } + #endif return IMG_TRUE; } @@ -810,6 +1201,7 @@ IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext) { BM_CONTEXT *pBMContext = hDevMemContext; PVR_ASSERT(pBMContext); + return pBMContext->psMMUContext->ui32PDumpMMUContextID; } @@ -842,7 +1234,7 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I IMG_DEV_PHYADDR sPDDevPAddr; IMG_CPU_PHYADDR sCpuPAddr; MMU_CONTEXT *psMMUContext; - IMG_HANDLE hPDOSMemHandle; + IMG_HANDLE hPDOSMemHandle = IMG_NULL; SYS_DATA *psSysData; PVRSRV_SGXDEV_INFO *psDevInfo; #if defined(PDUMP) @@ -956,6 +1348,69 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I psDevInfo->sDummyDataDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); } #endif +#if defined(FIX_HW_BRN_31620) + + if(!psDevInfo->pvMMUContextList) + { + IMG_UINT32 j; + + if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, + SGX_MMU_PAGE_SIZE, + SGX_MMU_PAGE_SIZE, + &psDevInfo->pvBRN31620DummyPageCpuVAddr, + &psDevInfo->hBRN31620DummyPageOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); + return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; + } + + + if(psDevInfo->pvBRN31620DummyPageCpuVAddr) + { + sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPageOSMemHandle, + psDevInfo->pvBRN31620DummyPageCpuVAddr); + } + else + { + sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hBRN31620DummyPageOSMemHandle, 0); + } + + pui32Tmp = (IMG_UINT32 *)psDevInfo->pvBRN31620DummyPageCpuVAddr; + for(j=0; j<(SGX_MMU_PAGE_SIZE/4); j++) + { + pui32Tmp[j] = BRN31620_DUMMY_PAGE_SIGNATURE; + } + + psDevInfo->sBRN31620DummyPageDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); + PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, 0, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + + + if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, + SGX_MMU_PAGE_SIZE, + SGX_MMU_PAGE_SIZE, + &psDevInfo->pvBRN31620DummyPTCpuVAddr, + &psDevInfo->hBRN31620DummyPTOSMemHandle) != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); + return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; + } + + + if(psDevInfo->pvBRN31620DummyPTCpuVAddr) + { + sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPTOSMemHandle, + psDevInfo->pvBRN31620DummyPTCpuVAddr); + } + else + { + sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hBRN31620DummyPTOSMemHandle, 0); + } + + OSMemSet(psDevInfo->pvBRN31620DummyPTCpuVAddr,0,SGX_MMU_PAGE_SIZE); + psDevInfo->sBRN31620DummyPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); + PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, 0, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + } +#endif } else { @@ -987,15 +1442,75 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; } - - #if PAGE_TEST - PageTest(pvPDCpuVAddr, sPDDevPAddr); - #endif - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) + + #if PAGE_TEST + PageTest(pvPDCpuVAddr, sPDDevPAddr); + #endif + +#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) + + if(!psDevInfo->pvMMUContextList) + { + + if(RA_Alloc(psDeviceNode->psLocalDevMemArena, + SGX_MMU_PAGE_SIZE, + IMG_NULL, + IMG_NULL, + 0, + SGX_MMU_PAGE_SIZE, + 0, + &(sSysPAddr.uiAddr))!= IMG_TRUE) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); + return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; + } + + + sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); + psDevInfo->sDummyPTDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); + psDevInfo->pvDummyPTPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, + SGX_MMU_PAGE_SIZE, + PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, + &psDevInfo->hDummyPTPageOSMemHandle); + if(!psDevInfo->pvDummyPTPageCpuVAddr) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); + return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; + } + + + if(RA_Alloc(psDeviceNode->psLocalDevMemArena, + SGX_MMU_PAGE_SIZE, + IMG_NULL, + IMG_NULL, + 0, + SGX_MMU_PAGE_SIZE, + 0, + &(sSysPAddr.uiAddr))!= IMG_TRUE) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); + return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; + } + + + sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); + psDevInfo->sDummyDataDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); + psDevInfo->pvDummyDataPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, + SGX_MMU_PAGE_SIZE, + PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, + &psDevInfo->hDummyDataPageOSMemHandle); + if(!psDevInfo->pvDummyDataPageCpuVAddr) + { + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); + return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; + } + } +#endif +#if defined(FIX_HW_BRN_31620) if(!psDevInfo->pvMMUContextList) { + IMG_UINT32 j; if(RA_Alloc(psDeviceNode->psLocalDevMemArena, SGX_MMU_PAGE_SIZE, @@ -1012,17 +1527,24 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sDummyPTDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvDummyPTPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, + psDevInfo->sBRN31620DummyPageDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); + psDevInfo->pvBRN31620DummyPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, SGX_MMU_PAGE_SIZE, PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hDummyPTPageOSMemHandle); - if(!psDevInfo->pvDummyPTPageCpuVAddr) + &psDevInfo->hBRN31620DummyPageOSMemHandle); + if(!psDevInfo->pvBRN31620DummyPageCpuVAddr) { PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; } + pui32Tmp = (IMG_UINT32 *)psDevInfo->pvBRN31620DummyPageCpuVAddr; + for(j=0; j<(SGX_MMU_PAGE_SIZE/4); j++) + { + pui32Tmp[j] = BRN31620_DUMMY_PAGE_SIGNATURE; + } + PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, 0, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + if(RA_Alloc(psDeviceNode->psLocalDevMemArena, SGX_MMU_PAGE_SIZE, @@ -1039,20 +1561,33 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sDummyDataDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvDummyDataPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, + psDevInfo->sBRN31620DummyPTDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); + psDevInfo->pvBRN31620DummyPTCpuVAddr = OSMapPhysToLin(sCpuPAddr, SGX_MMU_PAGE_SIZE, PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hDummyDataPageOSMemHandle); - if(!psDevInfo->pvDummyDataPageCpuVAddr) + &psDevInfo->hBRN31620DummyPTOSMemHandle); + + if(!psDevInfo->pvBRN31620DummyPTCpuVAddr) { PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; } + + OSMemSet(psDevInfo->pvBRN31620DummyPTCpuVAddr,0,SGX_MMU_PAGE_SIZE); + PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, 0, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); } #endif } +#if defined(FIX_HW_BRN_31620) + if (!psDevInfo->pvMMUContextList) + { + + psDevInfo->hKernelMMUContext = psMMUContext; + PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: saving kernel mmu context: %p", psMMUContext)); + } +#endif + #if defined(PDUMP) #if defined(SUPPORT_PDUMP_MULTI_PROCESS) @@ -1079,6 +1614,7 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I #endif PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, hPDOSMemHandle, 0, pvPDCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PD_UNIQUETAG); #endif + #ifdef SUPPORT_SGX_MMU_BYPASS EnableHostAccess(psMMUContext); #endif @@ -1093,6 +1629,7 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I return PVRSRV_ERROR_INVALID_CPU_ADDR; } + #if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) for(i=0; ipvBRN31620DummyPTCpuVAddr; + pui32PT[BRN31620_DUMMY_PTE_INDEX] = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) + | SGX_MMU_PTE_DUMMY_PAGE + | SGX_MMU_PTE_READONLY + | SGX_MMU_PTE_VALID; + + +#if defined(PDUMP) + + PDUMPCOMMENT("BRN31620 Dump dummy PT contents"); + PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); + PDUMPCOMMENT("BRN31620 Dump dummy page contents"); + PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); + + + for(i=0;ihBRN31620DummyPTOSMemHandle, &pui32PT[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); + } +#endif + PDUMPCOMMENT("BRN31620 Dump PDE wire up"); + + for(i=0;isBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) + | SGX_MMU_PDE_PAGE_SIZE_4K + | SGX_MMU_PDE_DUMMY_PAGE + | SGX_MMU_PDE_VALID; + } + PDUMPMEMPTENTRIES(&sMMUAttrib, hPDOSMemHandle, (IMG_VOID *) &pui32Tmp[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); + ui32PDCount++; + if (ui32PDCount == BRN31620_PDES_PER_CACHE_LINE_SIZE) + { + + ui32PDCount = 0; + } + } + + + + PDUMPCOMMENT("BRN31620 dummy Page table contents"); + PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); + } +#endif +#if defined(PDUMP) { PVRSRV_ERROR eError; @@ -1179,6 +1774,22 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I PDUMPCOMMENT("Set MMU context complete (MMU Context ID == %u)", psMMUContext->ui32PDumpMMUContextID); #endif +#if defined(FIX_HW_BRN_31620) + for(i=0;iui32PDChangeMask[i] = 0; + } + + for(i=0;iui32PDCacheRangeRefCount[i] = 0; + } + + for(i=0;iapsPTInfoListSave[i] = IMG_NULL; + } +#endif psMMUContext->pvPDCpuVAddr = pvPDCpuVAddr; psMMUContext->sPDDevPAddr = sPDDevPAddr; @@ -1207,7 +1818,7 @@ MMU_Finalise (MMU_CONTEXT *psMMUContext) IMG_UINT32 *pui32Tmp, i; SYS_DATA *psSysData; MMU_CONTEXT **ppsMMUContext; -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) +#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) || defined(FIX_HW_BRN_31620) PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psMMUContext->psDevInfo; MMU_CONTEXT *psMMUContextList = (MMU_CONTEXT*)psDevInfo->pvMMUContextList; #endif @@ -1250,11 +1861,32 @@ MMU_Finalise (MMU_CONTEXT *psMMUContext) if(psMMUContext->psDeviceNode->psLocalDevMemArena == IMG_NULL) { +#if defined(FIX_HW_BRN_31620) + PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psMMUContext->psDevInfo; +#endif OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, SGX_MMU_PAGE_SIZE, psMMUContext->pvPDCpuVAddr, psMMUContext->hPDOSMemHandle); +#if defined(FIX_HW_BRN_31620) + + if (!psMMUContextList->psNext) + { + PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, + SGX_MMU_PAGE_SIZE, + psDevInfo->pvBRN31620DummyPageCpuVAddr, + psDevInfo->hBRN31620DummyPageOSMemHandle); + + PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, + SGX_MMU_PAGE_SIZE, + psDevInfo->pvBRN31620DummyPTCpuVAddr, + psDevInfo->hBRN31620DummyPTOSMemHandle); + + } +#endif #if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) if(!psMMUContextList->psNext) @@ -1319,6 +1951,41 @@ MMU_Finalise (MMU_CONTEXT *psMMUContext) RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); } #endif +#if defined(FIX_HW_BRN_31620) + + if(!psMMUContextList->psNext) + { + + PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + + sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPageOSMemHandle, + psDevInfo->pvBRN31620DummyPageCpuVAddr); + sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); + + + OSUnMapPhysToLin(psDevInfo->pvBRN31620DummyPageCpuVAddr, + SGX_MMU_PAGE_SIZE, + PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, + psDevInfo->hBRN31620DummyPageOSMemHandle); + + RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); + + + PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + + sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPTOSMemHandle, + psDevInfo->pvBRN31620DummyPTCpuVAddr); + sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); + + + OSUnMapPhysToLin(psDevInfo->pvBRN31620DummyPTCpuVAddr, + SGX_MMU_PAGE_SIZE, + PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, + psDevInfo->hBRN31620DummyPTOSMemHandle); + + RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); + } +#endif } PVR_DPF ((PVR_DBG_MESSAGE, "MMU_Finalise")); @@ -1374,7 +2041,7 @@ MMU_InsertHeap(MMU_CONTEXT *psMMUContext, MMU_HEAP *psMMUHeap) for (ui32PDEntry = 0; ui32PDEntry < psMMUHeap->ui32PageTableCount; ui32PDEntry++) { -#if !defined(SUPPORT_SGX_MMU_DUMMY_PAGE) +#if (!defined(SUPPORT_SGX_MMU_DUMMY_PAGE)) && (!defined(FIX_HW_BRN_31620)) PVR_ASSERT(pui32PDCpuVAddr[ui32PDEntry] == 0); #endif @@ -1491,7 +2158,11 @@ MMU_UnmapPagesAndFreePTs (MMU_HEAP *psMMUHeap, | SGX_MMU_PTE_VALID; #else +#if defined(FIX_HW_BRN_31620) + BRN31620InvalidatePageTableEntry(psMMUHeap->psMMUContext, ui32PDIndex, ui32PTIndex, &pui32Tmp[ui32PTIndex]); +#else pui32Tmp[ui32PTIndex] = 0; +#endif #endif CheckPT(ppsPTInfoList[0]); @@ -1499,10 +2170,18 @@ MMU_UnmapPagesAndFreePTs (MMU_HEAP *psMMUHeap, - if (ppsPTInfoList[0] && ppsPTInfoList[0]->ui32ValidPTECount == 0) + if (ppsPTInfoList[0] && (ppsPTInfoList[0]->ui32ValidPTECount == 0) + ) { +#if defined(FIX_HW_BRN_31620) + if (BRN31620FreePageTable(psMMUHeap, ui32PDIndex) == IMG_TRUE) + { + bInvalidateDirectoryCache = IMG_TRUE; + } +#else _DeferredFreePageTable(psMMUHeap, ui32PDIndex - psMMUHeap->ui32PDBaseIndex, IMG_TRUE); bInvalidateDirectoryCache = IMG_TRUE; +#endif } @@ -1536,9 +2215,9 @@ static IMG_VOID MMU_FreePageTables(IMG_PVOID pvMMUHeap, MMU_HEAP *pMMUHeap = (MMU_HEAP*)pvMMUHeap; IMG_DEV_VIRTADDR Start; - Start.uiAddr = ui32Start; + Start.uiAddr = (IMG_UINT32)ui32Start; - MMU_UnmapPagesAndFreePTs(pMMUHeap, Start, (ui32End - ui32Start) >> pMMUHeap->ui32PTShift, hUniqueTag); + MMU_UnmapPagesAndFreePTs(pMMUHeap, Start, (IMG_UINT32)((ui32End - ui32Start) >> pMMUHeap->ui32PTShift), hUniqueTag); } MMU_HEAP * @@ -1618,12 +2297,16 @@ MMU_Create (MMU_CONTEXT *psMMUContext, pMMUHeap->ui32PTBitWidth = SGX_MMU_PT_SHIFT - ui32ScaleSize; pMMUHeap->ui32PTMask = SGX_MMU_PT_MASK & (SGX_MMU_PT_MASK<ui32PTSize = (IMG_UINT32)(1UL<ui32PTBitWidth) * sizeof(IMG_UINT32); + if(pMMUHeap->ui32PTSize < 4 * sizeof(IMG_UINT32)) { pMMUHeap->ui32PTSize = 4 * sizeof(IMG_UINT32); } - pMMUHeap->ui32PTECount = pMMUHeap->ui32PTSize >> 2; + pMMUHeap->ui32PTNumEntriesAllocated = pMMUHeap->ui32PTSize >> 2; + + + pMMUHeap->ui32PTNumEntriesUsable = (IMG_UINT32)(1UL << pMMUHeap->ui32PTBitWidth); pMMUHeap->ui32PDShift = pMMUHeap->ui32PTBitWidth + pMMUHeap->ui32PTShift; @@ -1631,6 +2314,8 @@ MMU_Create (MMU_CONTEXT *psMMUContext, pMMUHeap->ui32PDMask = SGX_MMU_PD_MASK & (SGX_MMU_PD_MASK>>(32-SGX_FEATURE_ADDRESS_SPACE_SIZE)); +#if !defined (SUPPORT_EXTERNAL_SYSTEM_CACHE) + @@ -1643,9 +2328,9 @@ MMU_Create (MMU_CONTEXT *psMMUContext, & (pMMUHeap->ui32DataPageMask | pMMUHeap->ui32PTMask)) == 0); } - +#endif - pMMUHeap->ui32PTETotal = pMMUHeap->psDevArena->ui32Size >> pMMUHeap->ui32PTShift; + pMMUHeap->ui32PTETotalUsable = pMMUHeap->psDevArena->ui32Size >> pMMUHeap->ui32PTShift; pMMUHeap->ui32PDBaseIndex = (pMMUHeap->psDevArena->BaseDevVAddr.uiAddr & pMMUHeap->ui32PDMask) >> pMMUHeap->ui32PDShift; @@ -1653,8 +2338,9 @@ MMU_Create (MMU_CONTEXT *psMMUContext, - pMMUHeap->ui32PageTableCount = (pMMUHeap->ui32PTETotal + pMMUHeap->ui32PTECount - 1) + pMMUHeap->ui32PageTableCount = (pMMUHeap->ui32PTETotalUsable + pMMUHeap->ui32PTNumEntriesUsable - 1) >> pMMUHeap->ui32PTBitWidth; + PVR_ASSERT(pMMUHeap->ui32PageTableCount > 0); pMMUHeap->psVMArena = RA_Create(psDevArena->pszName, @@ -1808,7 +2494,7 @@ MMU_Alloc (MMU_HEAP *pMMUHeap, #endif - bStatus = _DeferredAllocPagetables(pMMUHeap, *psDevVAddr, uSize); + bStatus = _DeferredAllocPagetables(pMMUHeap, *psDevVAddr, (IMG_UINT32)uSize); #ifdef SUPPORT_SGX_MMU_BYPASS DisableHostAccess(pMMUHeap->psMMUContext); @@ -1874,6 +2560,26 @@ MMU_Disable (MMU_HEAP *pMMUHeap) } +#if defined(FIX_HW_BRN_31620) +IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask) +{ + IMG_UINT32 i; + + for (i=0;iui32PDChangeMask[i]; + + + pMMUContext->ui32PDChangeMask[i] = 0; + } +} + +IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr) +{ + *psDevPAddr = pMMUContext->sPDDevPAddr; +} + +#endif #if defined(PDUMP) static IMG_VOID MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, @@ -1891,7 +2597,7 @@ MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTDumpCount; - ui32NumPTEntries = (uSize + pMMUHeap->ui32DataPageMask) >> pMMUHeap->ui32PTShift; + ui32NumPTEntries = (IMG_UINT32)((uSize + pMMUHeap->ui32DataPageMask) >> pMMUHeap->ui32PTShift); ui32PDIndex = DevVAddr.uiAddr >> pMMUHeap->ui32PDShift; @@ -1910,13 +2616,13 @@ MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, { MMU_PT_INFO* psPTInfo = *ppsPTInfoList++; - if(ui32NumPTEntries <= pMMUHeap->ui32PTECount - ui32PTIndex) + if(ui32NumPTEntries <= pMMUHeap->ui32PTNumEntriesUsable - ui32PTIndex) { ui32PTDumpCount = ui32NumPTEntries; } else { - ui32PTDumpCount = pMMUHeap->ui32PTECount - ui32PTIndex; + ui32PTDumpCount = pMMUHeap->ui32PTNumEntriesUsable - ui32PTIndex; } if (psPTInfo) @@ -2009,7 +2715,12 @@ MMU_MapPage (MMU_HEAP *pMMUHeap, IMG_UINT32 uTmp = pui32Tmp[ui32Index]; - if (uTmp & SGX_MMU_PTE_VALID) +#if defined(FIX_HW_BRN_31620) + if ((uTmp & SGX_MMU_PTE_VALID) && ((DevVAddr.uiAddr & BRN31620_PDE_CACHE_FILL_MASK) != BRN31620_DUMMY_PAGE_OFFSET)) +#else + if ((uTmp & SGX_MMU_PTE_VALID) != 0) +#endif + { PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Page is already valid for alloc at VAddr:0x%08X PDIdx:%u PTIdx:%u", DevVAddr.uiAddr, @@ -2018,8 +2729,9 @@ MMU_MapPage (MMU_HEAP *pMMUHeap, PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Page table entry value: 0x%08X", uTmp)); PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Physical page to map: 0x%08X", DevPAddr.uiAddr)); } - +#if !defined(FIX_HW_BRN_31620) PVR_ASSERT((uTmp & SGX_MMU_PTE_VALID) == 0); +#endif } #endif @@ -2322,7 +3034,11 @@ MMU_UnmapPages (MMU_HEAP *psMMUHeap, | SGX_MMU_PTE_VALID; #else +#if defined(FIX_HW_BRN_31620) + BRN31620InvalidatePageTableEntry(psMMUHeap->psMMUContext, ui32PDIndex, ui32PTIndex, &pui32Tmp[ui32PTIndex]); +#else pui32Tmp[ui32PTIndex] = 0; +#endif #endif CheckPT(ppsPTInfoList[0]); @@ -2809,110 +3525,73 @@ IMG_VOID WorkaroundBRN22997Free(PVRSRV_DEVICE_NODE *psDeviceNode) #if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) PVRSRV_ERROR MMU_MapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode) { - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - IMG_HANDLE hPTPageOSMemHandle = IMG_NULL; - IMG_UINT32 *pui32PD; - IMG_UINT32 *pui32PT = IMG_NULL; - IMG_CPU_PHYADDR sCpuPAddr; - IMG_DEV_PHYADDR sPTDevPAddr; + IMG_UINT32 *pui32PT; PVRSRV_SGXDEV_INFO *psDevInfo; IMG_UINT32 ui32PDIndex; IMG_UINT32 ui32PTIndex; + PDUMP_MMU_ATTRIB sMMUAttrib; psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - pui32PD = (IMG_UINT32*)psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->pvPDCpuVAddr; - - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - if(psLocalDevMemArena == IMG_NULL) - { - - eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - (IMG_VOID **)&pui32PT, - &hPTPageOSMemHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_MapExtSystemCacheRegs: ERROR call to OSAllocPages failed")); - return eError; - } + sMMUAttrib = psDevInfo->sMMUAttrib; +#if defined(PDUMP) + MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode, + SGX_MMU_PAGE_MASK, + SGX_MMU_PT_SIZE * sizeof(IMG_UINT32)); +#endif - - if(pui32PT) - { - sCpuPAddr = OSMapLinToCPUPhys(hPTPageOSMemHandle, - pui32PT); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(hPTPageOSMemHandle, 0); - } - sPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - } - else +#if defined(PDUMP) { - IMG_SYS_PHYADDR sSysPAddr; - - - if(RA_Alloc(psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_MapExtSystemCacheRegs: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - pui32PT = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &hPTPageOSMemHandle); - if(!pui32PT) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_MapExtSystemCacheRegs: ERROR failed to map page tables")); - return PVRSRV_ERROR_BAD_MAPPING; - } - - - sPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); + IMG_CHAR szScript[128]; - - psDevInfo->sExtSystemCacheRegsPTSysPAddr = sSysPAddr; + sprintf(szScript, "MALLOC :EXTSYSCACHE:PA_%08X%08X %u %u 0x%08X\r\n", 0, psDevInfo->sExtSysCacheRegsDevPBase.uiAddr, SGX_MMU_PAGE_SIZE, SGX_MMU_PAGE_SIZE, psDevInfo->sExtSysCacheRegsDevPBase.uiAddr); + PDumpOSWriteString2(szScript, PDUMP_FLAGS_CONTINUOUS); } - - OSMemSet(pui32PT, 0, SGX_MMU_PAGE_SIZE); +#endif ui32PDIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PD_MASK) >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); ui32PTIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - - pui32PD[ui32PDIndex] = (sPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_VALID; + pui32PT = (IMG_UINT32 *) psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; + pui32PT[ui32PTIndex] = (psDevInfo->sExtSysCacheRegsDevPBase.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) | SGX_MMU_PTE_VALID; +#if defined(PDUMP) - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevID, hPTPageOSMemHandle, 0, pui32PT, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(PVRSRV_DEVICE_TYPE_SGX, hPDPageOSMemHandle, pui32PD, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(PVRSRV_DEVICE_TYPE_SGX, hPTPageOSMemHandle, pui32PT, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PT_UNIQUETAG, PDUMP_PD_UNIQUETAG); - - - psDevInfo->pui32ExtSystemCacheRegsPT = pui32PT; - psDevInfo->hExtSystemCacheRegsPTPageOSMemHandle = hPTPageOSMemHandle; + { + IMG_DEV_PHYADDR sDevPAddr; + IMG_CPU_PHYADDR sCpuPAddr; + IMG_UINT32 ui32PageMask; + IMG_UINT32 ui32PTE; + PVRSRV_ERROR eErr; + + PDUMP_GET_SCRIPT_AND_FILE_STRING(); + + ui32PageMask = sMMUAttrib.ui32PTSize - 1; + sCpuPAddr = OSMapLinToCPUPhys(psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->hPTPageOSMemHandle, &pui32PT[ui32PTIndex]); + sDevPAddr = SysCpuPAddrToDevPAddr(sMMUAttrib.sDevId.eDeviceType, sCpuPAddr); + ui32PTE = *((IMG_UINT32 *) (&pui32PT[ui32PTIndex])); + + eErr = PDumpOSBufprintf(hScript, + ui32MaxLenScript, + "WRW :%s:PA_%08X%08X:0x%08X :%s:PA_%08X%08X:0x%08X\r\n", + sMMUAttrib.sDevId.pszPDumpDevName, + (IMG_UINT32)(IMG_UINTPTR_T)PDUMP_PT_UNIQUETAG, + (sDevPAddr.uiAddr) & ~ui32PageMask, + (sDevPAddr.uiAddr) & ui32PageMask, + "EXTSYSCACHE", + (IMG_UINT32)(IMG_UINTPTR_T)PDUMP_PD_UNIQUETAG, + (ui32PTE & sMMUAttrib.ui32PDEMask) << sMMUAttrib.ui32PTEAlignShift, + ui32PTE & ~sMMUAttrib.ui32PDEMask); + if(eErr != PVRSRV_OK) + { + return eErr; + } + PDumpOSWriteString2(hScript, PDUMP_FLAGS_CONTINUOUS); + } +#endif return PVRSRV_OK; } @@ -2924,45 +3603,39 @@ PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode) RA_ARENA *psLocalDevMemArena; PVRSRV_SGXDEV_INFO *psDevInfo; IMG_UINT32 ui32PDIndex; - IMG_UINT32 *pui32PD; + IMG_UINT32 ui32PTIndex; + IMG_UINT32 *pui32PT; + PDUMP_MMU_ATTRIB sMMUAttrib; psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - pui32PD = (IMG_UINT32*)psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->pvPDCpuVAddr; + sMMUAttrib = psDevInfo->sMMUAttrib; + +#if defined(PDUMP) + MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode, + SGX_MMU_PAGE_MASK, + SGX_MMU_PT_SIZE * sizeof(IMG_UINT32)); +#endif SysAcquireData(&psSysData); psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; ui32PDIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PD_MASK) >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); - pui32PD[ui32PDIndex] = 0; - - PDUMPMEMPTENTRIES(PVRSRV_DEVICE_TYPE_SGX, psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->hPDOSMemHandle, pui32PD, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPFREEPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hExtSystemCacheRegsPTPageOSMemHandle, psDevInfo->pui32ExtSystemCacheRegsPT, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); + ui32PTIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - if(psLocalDevMemArena == IMG_NULL) + if (psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]) { - if (psDevInfo->pui32ExtSystemCacheRegsPT != IMG_NULL) + if (psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr) { - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pui32ExtSystemCacheRegsPT, - psDevInfo->hExtSystemCacheRegsPTPageOSMemHandle); + pui32PT = (IMG_UINT32 *) psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; } } - else - { - if (psDevInfo->pui32ExtSystemCacheRegsPT != IMG_NULL) - { - OSUnMapPhysToLin(psDevInfo->pui32ExtSystemCacheRegsPT, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hExtSystemCacheRegsPTPageOSMemHandle); - RA_Free(psLocalDevMemArena, psDevInfo->sExtSystemCacheRegsPTSysPAddr.uiAddr, IMG_FALSE); - } - } + pui32PT[ui32PTIndex] = 0; + + PDUMPMEMPTENTRIES(&sMMUAttrib, psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->hPDOSMemHandle, &pui32PT[ui32PTIndex], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); return PVRSRV_OK; } diff --git a/services4/srvkm/devices/sgx/mmu.h b/services4/srvkm/devices/sgx/mmu.h index e92b4e0..59b24c4 100644 --- a/services4/srvkm/devices/sgx/mmu.h +++ b/services4/srvkm/devices/sgx/mmu.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -139,6 +139,14 @@ PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode); IMG_BOOL MMU_IsHeapShared(MMU_HEAP* pMMU_Heap); +#if defined(FIX_HW_BRN_31620) +IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask); + +IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); + +#endif + + #if defined(PDUMP) IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext); #endif diff --git a/services4/srvkm/devices/sgx/pb.c b/services4/srvkm/devices/sgx/pb.c index f9e8b19..ab6523a 100644 --- a/services4/srvkm/devices/sgx/pb.c +++ b/services4/srvkm/devices/sgx/pb.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -47,8 +47,8 @@ static IMPLEMENT_LIST_REMOVE(PVRSRV_STUB_PBDESC) static PRESMAN_ITEM psResItemCreateSharedPB = IMG_NULL; static PVRSRV_PER_PROCESS_DATA *psPerProcCreateSharedPB = IMG_NULL; -static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param); -static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param); +static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); +static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); IMG_EXPORT PVRSRV_ERROR SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, @@ -185,6 +185,7 @@ SGXCleanupSharedPBDescKM(PVRSRV_STUB_PBDESC *psStubPBDescIn) psStubPBDescIn->ui32RefCount--; if (psStubPBDescIn->ui32RefCount == 0) { + IMG_DEV_VIRTADDR sHWPBDescDevVAddr = psStubPBDescIn->sHWPBDescDevVAddr; List_PVRSRV_STUB_PBDESC_Remove(psStubPBDescIn); for(i=0 ; iui32SubKernelMemInfosCount; i++) { @@ -215,23 +216,25 @@ SGXCleanupSharedPBDescKM(PVRSRV_STUB_PBDESC *psStubPBDescIn) SGXCleanupRequest(psDeviceNode, - IMG_NULL, - PVRSRV_CLEANUPCMD_PB); + &sHWPBDescDevVAddr, + PVRSRV_CLEANUPCMD_PB, + CLEANUP_WITH_POLL); } return PVRSRV_OK; } -static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) +static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) { PVRSRV_STUB_PBDESC *psStubPBDesc = (PVRSRV_STUB_PBDESC *)pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); return SGXCleanupSharedPBDescKM(psStubPBDesc); } -static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) +static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) { #ifdef DEBUG PVRSRV_PER_PROCESS_DATA *psPerProc = (PVRSRV_PER_PROCESS_DATA *)pvParam; @@ -241,6 +244,7 @@ static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, #endif PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bDummy); psPerProcCreateSharedPB = IMG_NULL; psResItemCreateSharedPB = IMG_NULL; @@ -254,7 +258,7 @@ SGXUnrefSharedPBDescKM(IMG_HANDLE hSharedPBDesc) { PVR_ASSERT(hSharedPBDesc != IMG_NULL); - return ResManFreeResByPtr(hSharedPBDesc); + return ResManFreeResByPtr(hSharedPBDesc, CLEANUP_WITH_POLL); } @@ -268,7 +272,8 @@ SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_UINT32 ui32TotalPBSize, IMG_HANDLE *phSharedPBDesc, PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescSubKernelMemInfos, - IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount) + IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount, + IMG_DEV_VIRTADDR sHWPBDescDevVAddr) { PVRSRV_STUB_PBDESC *psStubPBDesc=IMG_NULL; PVRSRV_ERROR eRet = PVRSRV_ERROR_INVALID_PERPROC; @@ -285,7 +290,7 @@ SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, { PVR_ASSERT(psResItemCreateSharedPB != IMG_NULL); - ResManFreeResByPtr(psResItemCreateSharedPB); + ResManFreeResByPtr(psResItemCreateSharedPB, CLEANUP_WITH_POLL); PVR_ASSERT(psResItemCreateSharedPB == IMG_NULL); PVR_ASSERT(psPerProcCreateSharedPB == IMG_NULL); @@ -402,6 +407,8 @@ SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, } } + psStubPBDesc->sHWPBDescDevVAddr = sHWPBDescDevVAddr; + psResItem = ResManRegisterRes(psPerProc->hResManContext, RESMAN_TYPE_SHARED_PB_DESC, psStubPBDesc, diff --git a/services4/srvkm/devices/sgx/sgx_bridge_km.h b/services4/srvkm/devices/sgx/sgx_bridge_km.h index 7738be1..8fb3002 100644 --- a/services4/srvkm/devices/sgx/sgx_bridge_km.h +++ b/services4/srvkm/devices/sgx/sgx_bridge_km.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -39,16 +39,28 @@ extern "C" { #endif IMG_IMPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK_KM *psKick); +#else PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK *psKick); +#endif #if defined(SGX_FEATURE_2D_HARDWARE) IMG_IMPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK_KM *psKick); +#else PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK *psKick); #endif +#endif IMG_IMPORT PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, +#if defined (SUPPORT_SID_INTERFACE) + SGX_CCB_KICK_KM *psCCBKick); +#else SGX_CCB_KICK *psCCBKick); +#endif IMG_IMPORT PVRSRV_ERROR SGXGetPhysPageAddrKM(IMG_HANDLE hDevMemHeap, @@ -86,12 +98,21 @@ PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_IMPORT PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_HEAP_INFO_KM *pasHeapInfo, + IMG_DEV_PHYADDR *psPDDevPAddr); +#else SGX_BRIDGE_INFO_FOR_SRVINIT *psInitInfo); +#endif IMG_IMPORT PVRSRV_ERROR DevInitSGXPart2KM(PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_HANDLE hDevHandle, +#if defined (SUPPORT_SID_INTERFACE) + SGX_BRIDGE_INIT_INFO_KM *psInitInfo); +#else SGX_BRIDGE_INIT_INFO *psInitInfo); +#endif IMG_IMPORT PVRSRV_ERROR SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, @@ -119,12 +140,17 @@ SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_UINT32 ui32TotalPBSize, IMG_HANDLE *phSharedPBDesc, PVRSRV_KERNEL_MEM_INFO **psSharedPBDescSubKernelMemInfos, - IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount); + IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount, + IMG_DEV_VIRTADDR sHWPBDescDevVAddr); IMG_IMPORT PVRSRV_ERROR SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, +#if defined (SUPPORT_SID_INTERFACE) + SGX_INTERNAL_DEVINFO_KM *psSGXInternalDevInfo); +#else SGX_INTERNAL_DEVINFO *psSGXInternalDevInfo); +#endif #if defined (__cplusplus) } diff --git a/services4/srvkm/devices/sgx/sgxconfig.h b/services4/srvkm/devices/sgx/sgxconfig.h index f8e467d..5e38cd5 100644 --- a/services4/srvkm/devices/sgx/sgxconfig.h +++ b/services4/srvkm/devices/sgx/sgxconfig.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -35,7 +35,77 @@ #define DEV_MAJOR_VERSION 1 #define DEV_MINOR_VERSION 0 +#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) +#define SGX_KERNEL_DATA_HEAP_OFFSET 0x00001000 +#else +#define SGX_KERNEL_DATA_HEAP_OFFSET 0x00000000 +#endif + #if SGX_FEATURE_ADDRESS_SPACE_SIZE == 32 +#if defined(FIX_HW_BRN_31620) + #if defined(SGX_FEATURE_2D_HARDWARE) + #define SGX_2D_HEAP_BASE 0x04000000 + #define SGX_2D_HEAP_SIZE (0x08000000-0x04000000-0x00001000) + #endif + + #define SGX_GENERAL_HEAP_BASE 0x08000000 + #define SGX_GENERAL_HEAP_SIZE (0xB8000000-0x00001000) + + + #define SGX_3DPARAMETERS_HEAP_SIZE 0x10000000 + + +#if !defined(HYBRID_SHARED_PB_SIZE) + #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) +#endif +#if defined(SUPPORT_HYBRID_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) +#else +#if defined(SUPPORT_PERCONTEXT_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE 0 + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) +#endif +#if defined(SUPPORT_SHARED_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 +#endif +#endif + + #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0xC0000000 + + + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) + + + #define SGX_TADATA_HEAP_BASE 0xD0000000 + #define SGX_TADATA_HEAP_SIZE (0x0D000000-0x00001000) + + #define SGX_SYNCINFO_HEAP_BASE 0xE0000000 + #define SGX_SYNCINFO_HEAP_SIZE (0x01000000-0x00001000) + + #define SGX_PDSPIXEL_CODEDATA_HEAP_BASE 0xE4000000 + #define SGX_PDSPIXEL_CODEDATA_HEAP_SIZE (0x02000000-0x00001000) + + #define SGX_KERNEL_CODE_HEAP_BASE 0xE8000000 + #define SGX_KERNEL_CODE_HEAP_SIZE (0x00080000-0x00001000) + + #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0xEC000000 + #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x01C00000-0x00001000) + + #define SGX_KERNEL_DATA_HEAP_BASE (0xF0000000+SGX_KERNEL_DATA_HEAP_OFFSET) + #define SGX_KERNEL_DATA_HEAP_SIZE (0x03000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) + + + #define SGX_PIXELSHADER_HEAP_BASE 0xF4000000 + #define SGX_PIXELSHADER_HEAP_SIZE (0x05000000-0x00001000) + + #define SGX_VERTEXSHADER_HEAP_BASE 0xFC000000 + #define SGX_VERTEXSHADER_HEAP_SIZE (0x02000000-0x00001000) +#else #if defined(SGX_FEATURE_2D_HARDWARE) #define SGX_2D_HEAP_BASE 0x00100000 #define SGX_2D_HEAP_SIZE (0x08000000-0x00100000-0x00001000) @@ -54,8 +124,35 @@ #define SGX_GENERAL_HEAP_BASE 0x10000000 #define SGX_GENERAL_HEAP_SIZE (0xC2000000-0x00001000) - #define SGX_3DPARAMETERS_HEAP_BASE 0xD2000000 - #define SGX_3DPARAMETERS_HEAP_SIZE (0x10000000-0x00001000) + + #define SGX_3DPARAMETERS_HEAP_SIZE 0x10000000 + + +#if !defined(HYBRID_SHARED_PB_SIZE) + #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) +#endif +#if defined(SUPPORT_HYBRID_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) +#else +#if defined(SUPPORT_PERCONTEXT_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE 0 + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) +#endif +#if defined(SUPPORT_SHARED_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 +#endif +#endif + + #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0xD2000000 + + + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) + #define SGX_TADATA_HEAP_BASE 0xE2000000 #define SGX_TADATA_HEAP_SIZE (0x0D000000-0x00001000) @@ -72,8 +169,8 @@ #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0xF2400000 #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x01C00000-0x00001000) - #define SGX_KERNEL_DATA_HEAP_BASE 0xF4000000 - #define SGX_KERNEL_DATA_HEAP_SIZE (0x05000000-0x00001000) + #define SGX_KERNEL_DATA_HEAP_BASE (0xF4000000+SGX_KERNEL_DATA_HEAP_OFFSET) + #define SGX_KERNEL_DATA_HEAP_SIZE (0x05000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) #define SGX_PIXELSHADER_HEAP_BASE 0xF9000000 @@ -81,7 +178,7 @@ #define SGX_VERTEXSHADER_HEAP_BASE 0xFE000000 #define SGX_VERTEXSHADER_HEAP_SIZE (0x02000000-0x00001000) - +#endif #define SGX_CORE_IDENTIFIED #endif @@ -100,8 +197,34 @@ #define SGX_GENERAL_HEAP_SIZE (0x08800000-0x00001000-0x00001000) #endif - #define SGX_3DPARAMETERS_HEAP_BASE 0x08800000 - #define SGX_3DPARAMETERS_HEAP_SIZE (0x04000000-0x00001000) + #define SGX_3DPARAMETERS_HEAP_SIZE 0x04000000 + + +#if !defined(HYBRID_SHARED_PB_SIZE) + #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) +#endif +#if defined(SUPPORT_HYBRID_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) +#else +#if defined(SUPPORT_PERCONTEXT_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE 0 + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) +#endif +#if defined(SUPPORT_SHARED_PB) + #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE + #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 +#endif +#endif + + #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0x08800000 + + + #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) + #define SGX_TADATA_HEAP_BASE 0x0C800000 #define SGX_TADATA_HEAP_SIZE (0x01000000-0x00001000) @@ -118,8 +241,8 @@ #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0x0E800000 #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x00800000-0x00001000) - #define SGX_KERNEL_DATA_HEAP_BASE 0x0F000000 - #define SGX_KERNEL_DATA_HEAP_SIZE (0x00400000-0x00001000) + #define SGX_KERNEL_DATA_HEAP_BASE (0x0F000000+SGX_KERNEL_DATA_HEAP_OFFSET) + #define SGX_KERNEL_DATA_HEAP_SIZE (0x00400000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) #define SGX_PIXELSHADER_HEAP_BASE 0x0F400000 #define SGX_PIXELSHADER_HEAP_SIZE (0x00500000-0x00001000) @@ -188,12 +311,18 @@ #endif #endif -#if ((SGX_GENERAL_HEAP_BASE + SGX_GENERAL_HEAP_SIZE) >= SGX_3DPARAMETERS_HEAP_BASE) +#if defined(SUPPORT_HYBRID_PB) + #if ((HYBRID_SHARED_PB_SIZE + 0x000001000) > SGX_3DPARAMETERS_HEAP_SIZE) + #error "sgxconfig.h: ERROR: HYBRID_SHARED_PB_SIZE too large" + #endif +#endif + +#if ((SGX_GENERAL_HEAP_BASE + SGX_GENERAL_HEAP_SIZE) >= SGX_SHARED_3DPARAMETERS_HEAP_BASE) #error "sgxconfig.h: ERROR: SGX_GENERAL_HEAP overlaps SGX_3DPARAMETERS_HEAP" #endif -#if ((SGX_3DPARAMETERS_HEAP_BASE + SGX_3DPARAMETERS_HEAP_SIZE) >= SGX_TADATA_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_3DPARAMETERS_HEAP overlaps SGX_TADATA_HEAP" +#if (((SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE + SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE) >= SGX_TADATA_HEAP_BASE) && (SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE > 0)) + #error "sgxconfig.h: ERROR: SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE overlaps SGX_TADATA_HEAP" #endif #if ((SGX_TADATA_HEAP_BASE + SGX_TADATA_HEAP_SIZE) >= SGX_SYNCINFO_HEAP_BASE) diff --git a/services4/srvkm/devices/sgx/sgxinfokm.h b/services4/srvkm/devices/sgx/sgxinfokm.h index 056db35..55bc9e4 100644 --- a/services4/srvkm/devices/sgx/sgxinfokm.h +++ b/services4/srvkm/devices/sgx/sgxinfokm.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -126,16 +126,20 @@ typedef struct _PVRSRV_SGXDEV_INFO_ #if defined(FIX_HW_BRN_29823) PPVRSRV_KERNEL_MEM_INFO psKernelDummyTermStreamMemInfo; #endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) + PPVRSRV_KERNEL_MEM_INFO psKernelVDMSnapShotBufferMemInfo; + PPVRSRV_KERNEL_MEM_INFO psKernelVDMCtrlStreamBufferMemInfo; +#endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) + PPVRSRV_KERNEL_MEM_INFO psKernelVDMStateUpdateBufferMemInfo; +#endif #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) PPVRSRV_KERNEL_MEM_INFO psKernelEDMStatusBufferMemInfo; #endif #if defined(SGX_FEATURE_OVERLAPPED_SPM) PPVRSRV_KERNEL_MEM_INFO psKernelTmpRgnHeaderMemInfo; #endif -#if defined(SGX_FEATURE_SPM_MODE_0) - PPVRSRV_KERNEL_MEM_INFO psKernelTmpDPMStateMemInfo; -#endif - IMG_UINT32 ui32ClientRefCount; @@ -159,6 +163,8 @@ typedef struct _PVRSRV_SGXDEV_INFO_ IMG_UINT32 ui32EDMTaskReg0; IMG_UINT32 ui32EDMTaskReg1; + IMG_UINT32 ui32ClkGateCtl; + IMG_UINT32 ui32ClkGateCtl2; IMG_UINT32 ui32ClkGateStatusReg; IMG_UINT32 ui32ClkGateStatusMask; #if defined(SGX_FEATURE_MP) @@ -205,6 +211,10 @@ typedef struct _PVRSRV_SGXDEV_INFO_ PVRSRV_KERNEL_MEM_INFO *psKernelSGXTA3DCtlMemInfo; +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + PVRSRV_KERNEL_MEM_INFO *psKernelSGXPTLAWriteBackMemInfo; +#endif + IMG_UINT32 ui32Flags; @@ -228,6 +238,20 @@ typedef struct _PVRSRV_SGXDEV_INFO_ #endif IMG_UINT32 asSGXDevData[SGX_MAX_DEV_DATA]; +#if defined(FIX_HW_BRN_31620) + + IMG_VOID *pvBRN31620DummyPageCpuVAddr; + IMG_HANDLE hBRN31620DummyPageOSMemHandle; + IMG_DEV_PHYADDR sBRN31620DummyPageDevPAddr; + + + IMG_VOID *pvBRN31620DummyPTCpuVAddr; + IMG_HANDLE hBRN31620DummyPTOSMemHandle; + IMG_DEV_PHYADDR sBRN31620DummyPTDevPAddr; + + IMG_HANDLE hKernelMMUContext; +#endif + } PVRSRV_SGXDEV_INFO; @@ -292,6 +316,7 @@ struct _PVRSRV_STUB_PBDESC_ IMG_HANDLE hDevCookie; PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo; PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo; + IMG_DEV_VIRTADDR sHWPBDescDevVAddr; PVRSRV_STUB_PBDESC *psNext; PVRSRV_STUB_PBDESC **ppsThis; }; @@ -308,6 +333,183 @@ typedef struct _PVRSRV_SGX_CCB_INFO_ #endif } PVRSRV_SGX_CCB_INFO; + +typedef struct _SGX_BRIDGE_INIT_INFO_KM_ +{ + IMG_HANDLE hKernelCCBMemInfo; + IMG_HANDLE hKernelCCBCtlMemInfo; + IMG_HANDLE hKernelCCBEventKickerMemInfo; + IMG_HANDLE hKernelSGXHostCtlMemInfo; + IMG_HANDLE hKernelSGXTA3DCtlMemInfo; +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + IMG_HANDLE hKernelSGXPTLAWriteBackMemInfo; +#endif + IMG_HANDLE hKernelSGXMiscMemInfo; + + IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX]; + + SGX_INIT_SCRIPTS sScripts; + + IMG_UINT32 ui32ClientBuildOptions; + SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; + +#if defined(SGX_SUPPORT_HWPROFILING) + IMG_HANDLE hKernelHWProfilingMemInfo; +#endif +#if defined(SUPPORT_SGX_HWPERF) + IMG_HANDLE hKernelHWPerfCBMemInfo; +#endif + IMG_HANDLE hKernelTASigBufferMemInfo; + IMG_HANDLE hKernel3DSigBufferMemInfo; + +#if defined(FIX_HW_BRN_29702) + IMG_HANDLE hKernelCFIMemInfo; +#endif +#if defined(FIX_HW_BRN_29823) + IMG_HANDLE hKernelDummyTermStreamMemInfo; +#endif +#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) + IMG_HANDLE hKernelEDMStatusBufferMemInfo; +#endif +#if defined(SGX_FEATURE_OVERLAPPED_SPM) + IMG_HANDLE hKernelTmpRgnHeaderMemInfo; +#endif + + IMG_UINT32 ui32EDMTaskReg0; + IMG_UINT32 ui32EDMTaskReg1; + + IMG_UINT32 ui32ClkGateStatusReg; + IMG_UINT32 ui32ClkGateStatusMask; +#if defined(SGX_FEATURE_MP) +#endif + + IMG_UINT32 ui32CacheControl; + + IMG_UINT32 asInitDevData[SGX_MAX_DEV_DATA]; + IMG_HANDLE asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; + +} SGX_BRIDGE_INIT_INFO_KM; + + +typedef struct _SGX_INTERNEL_STATUS_UPDATE_KM_ +{ + CTL_STATUS sCtlStatus; + IMG_HANDLE hKernelMemInfo; +} SGX_INTERNEL_STATUS_UPDATE_KM; + + +typedef struct _SGX_CCB_KICK_KM_ +{ + SGXMKIF_COMMAND sCommand; + IMG_HANDLE hCCBKernelMemInfo; + + IMG_UINT32 ui32NumDstSyncObjects; + IMG_HANDLE hKernelHWSyncListMemInfo; + + + IMG_HANDLE *pahDstSyncHandles; + + IMG_UINT32 ui32NumTAStatusVals; + IMG_UINT32 ui32Num3DStatusVals; + +#if defined(SUPPORT_SGX_NEW_STATUS_VALS) + SGX_INTERNEL_STATUS_UPDATE_KM asTAStatusUpdate[SGX_MAX_TA_STATUS_VALS]; + SGX_INTERNEL_STATUS_UPDATE_KM as3DStatusUpdate[SGX_MAX_3D_STATUS_VALS]; +#else + IMG_HANDLE ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; + IMG_HANDLE ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; +#endif + + IMG_BOOL bFirstKickOrResume; +#if (defined(NO_HARDWARE) || defined(PDUMP)) + IMG_BOOL bTerminateOrAbort; +#endif + + + IMG_UINT32 ui32CCBOffset; + +#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) + + IMG_UINT32 ui32NumTASrcSyncs; + IMG_HANDLE ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; + IMG_UINT32 ui32NumTADstSyncs; + IMG_HANDLE ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; + IMG_UINT32 ui32Num3DSrcSyncs; + IMG_HANDLE ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; +#else + + IMG_UINT32 ui32NumSrcSyncs; + IMG_HANDLE ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; +#endif + + + IMG_BOOL bTADependency; + IMG_HANDLE hTA3DSyncInfo; + + IMG_HANDLE hTASyncInfo; + IMG_HANDLE h3DSyncInfo; +#if defined(PDUMP) + IMG_UINT32 ui32CCBDumpWOff; +#endif +#if defined(NO_HARDWARE) + IMG_UINT32 ui32WriteOpsPendingVal; +#endif +} SGX_CCB_KICK_KM; + + +#if defined(TRANSFER_QUEUE) +typedef struct _PVRSRV_TRANSFER_SGX_KICK_KM_ +{ + IMG_HANDLE hCCBMemInfo; + IMG_UINT32 ui32SharedCmdCCBOffset; + + IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; + + IMG_HANDLE hTASyncInfo; + IMG_HANDLE h3DSyncInfo; + + IMG_UINT32 ui32NumSrcSync; + IMG_HANDLE ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; + + IMG_UINT32 ui32NumDstSync; + IMG_HANDLE ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; + + IMG_UINT32 ui32Flags; + + IMG_UINT32 ui32PDumpFlags; +#if defined(PDUMP) + IMG_UINT32 ui32CCBDumpWOff; +#endif +} PVRSRV_TRANSFER_SGX_KICK_KM, *PPVRSRV_TRANSFER_SGX_KICK_KM; + +#if defined(SGX_FEATURE_2D_HARDWARE) +typedef struct _PVRSRV_2D_SGX_KICK_KM_ +{ + IMG_HANDLE hCCBMemInfo; + IMG_UINT32 ui32SharedCmdCCBOffset; + + IMG_DEV_VIRTADDR sHW2DContextDevVAddr; + + IMG_UINT32 ui32NumSrcSync; + IMG_HANDLE ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; + + + IMG_HANDLE hDstSyncInfo; + + + IMG_HANDLE hTASyncInfo; + + + IMG_HANDLE h3DSyncInfo; + + IMG_UINT32 ui32PDumpFlags; +#if defined(PDUMP) + IMG_UINT32 ui32CCBDumpWOff; +#endif +} PVRSRV_2D_SGX_KICK_KM, *PPVRSRV_2D_SGX_KICK_KM; +#endif +#endif + PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode); IMG_VOID SGXOSTimer(IMG_VOID *pvData); @@ -316,6 +518,9 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_BOOL bHardwareRecovery, IMG_UINT32 ui32PDUMPFlags); +IMG_VOID SGXInitClocks(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_UINT32 ui32PDUMPFlags); + PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_BOOL bHardwareRecovery); PVRSRV_ERROR SGXDeinitialise(IMG_HANDLE hDevCookie); diff --git a/services4/srvkm/devices/sgx/sgxinit.c b/services4/srvkm/devices/sgx/sgxinit.c index 052618d..46a27a5 100644 --- a/services4/srvkm/devices/sgx/sgxinit.c +++ b/services4/srvkm/devices/sgx/sgxinit.c @@ -1,6 +1,6 @@ -/**********************************************************************DPLLJ +/********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,6 +27,7 @@ #include #include #include + #include "sgxdefs.h" #include "sgxmmu.h" #include "services_headers.h" @@ -52,30 +53,31 @@ #include "lists.h" #include "srvkm.h" - +#include "ttrace.h" #define WR_MEM_32(addr, data) *(unsigned int*)(addr) = data -#define RD_MEM_32(addr) *(unsigned int*)(addr) -#define UWORD32 unsigned int +#define RD_MEM_32(addr) *(unsigned int*)(addr) +#define UWORD32 unsigned int #ifdef PLAT_TI81xx #define SGX_TI81xx_CLK_DVDR_ADDR 0x481803b0 -#define CLKCTRL 0x4 -#define TENABLE 0x8 -#define TENABLEDIV 0xC -#define M2NDIV 0x10 -#define MN2DIV 0x14 -#define STATUS 0x24 -#define PLL_BASE_ADDRESS 0x481C5000 +#define CLKCTRL 0x4 +#define TENABLE 0x8 +#define TENABLEDIV 0xC +#define M2NDIV 0x10 +#define MN2DIV 0x14 +#define STATUS 0x24 +#define PLL_BASE_ADDRESS 0x481C5000 #define SGX_PLL_BASE (PLL_BASE_ADDRESS+0x0B0) -#define OSC_0 20 +#define OSC_0 20 #define SGX_DIVIDER_ADDR 0x481803B0 // ADPLLJ_CLKCRTL_Register Value Configurations // ADPLLJ_CLKCRTL_Register SPEC bug bit 19,bit29 -- CLKLDOEN,CLKDCOEN -#define ADPLLJ_CLKCRTL_HS2 0x00000801 //HS2 Mode,TINTZ =1 --used by all PLL's except HDMI +#define ADPLLJ_CLKCRTL_HS2 0x00000801 //HS2 Mode,TINTZ =1 --used by all PLL's except HDMI #endif + #define VAR(x) #x @@ -98,7 +100,8 @@ IMG_BOOL SGX_ISRHandler(IMG_VOID *pvData); static PVRSRV_ERROR SGXGetMiscInfoUkernel(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_DEVICE_NODE *psDeviceNode); + PVRSRV_DEVICE_NODE *psDeviceNode, + IMG_HANDLE hDevMemContext); #if defined(PDUMP) static PVRSRV_ERROR SGXResetPDump(PVRSRV_DEVICE_NODE *psDeviceNode); @@ -135,7 +138,11 @@ static IMG_UINT32 DeinitDevInfo(PVRSRV_SGXDEV_INFO *psDevInfo) static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, PVRSRV_DEVICE_NODE *psDeviceNode, +#if defined (SUPPORT_SID_INTERFACE) + SGX_BRIDGE_INIT_INFO_KM *psInitInfo) +#else SGX_BRIDGE_INIT_INFO *psInitInfo) +#endif { PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; PVRSRV_ERROR eError; @@ -159,7 +166,11 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, psDevInfo->psKernelSGXTA3DCtlMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXTA3DCtlMemInfo; - psDevInfo->psKernelSGXMiscMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXMiscMemInfo; +#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) + psDevInfo->psKernelSGXPTLAWriteBackMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXPTLAWriteBackMemInfo; +#endif + + psDevInfo->psKernelSGXMiscMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXMiscMemInfo; #if defined(SGX_SUPPORT_HWPROFILING) psDevInfo->psKernelHWProfilingMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelHWProfilingMemInfo; @@ -175,6 +186,14 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, #if defined(FIX_HW_BRN_29823) psDevInfo->psKernelDummyTermStreamMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelDummyTermStreamMemInfo; #endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) + psDevInfo->psKernelVDMSnapShotBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMSnapShotBufferMemInfo; + psDevInfo->psKernelVDMCtrlStreamBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMCtrlStreamBufferMemInfo; +#endif +#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ + defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) + psDevInfo->psKernelVDMStateUpdateBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMStateUpdateBufferMemInfo; +#endif #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) psDevInfo->psKernelEDMStatusBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelEDMStatusBufferMemInfo; #endif @@ -192,7 +211,7 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, + eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_SGX_CCB_INFO), (IMG_VOID **)&psKernelCCBInfo, 0, "SGX Circular Command Buffer Info"); @@ -222,6 +241,8 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, psDevInfo->ui32EDMTaskReg0 = psInitInfo->ui32EDMTaskReg0; psDevInfo->ui32EDMTaskReg1 = psInitInfo->ui32EDMTaskReg1; + psDevInfo->ui32ClkGateCtl = psInitInfo->ui32ClkGateCtl; + psDevInfo->ui32ClkGateCtl2 = psInitInfo->ui32ClkGateCtl2; psDevInfo->ui32ClkGateStatusReg = psInitInfo->ui32ClkGateStatusReg; psDevInfo->ui32ClkGateStatusMask = psInitInfo->ui32ClkGateStatusMask; #if defined(SGX_FEATURE_MP) @@ -297,30 +318,30 @@ void PLL_Clocks_Config(UWORD32 Base_Address,UWORD32 OSC_FREQ,UWORD32 N,UWORD32 M UWORD32 m2nval,mn2val,read_clkctrl; m2nval = (M2<<16) | N; mn2val = M; - WR_MEM_32((Base_Address+M2NDIV ),m2nval); - msleep(100); - WR_MEM_32((Base_Address+MN2DIV ),mn2val); - msleep(100); - WR_MEM_32((Base_Address+TENABLEDIV),0x1); - msleep(100); - WR_MEM_32((Base_Address+TENABLEDIV),0x0); - msleep(100); - WR_MEM_32((Base_Address+TENABLE ),0x1); - msleep(100); - WR_MEM_32((Base_Address+TENABLE ),0x0); - msleep(100); - read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL); - //configure the TINITZ(bit0) and CLKDCO BITS IF REQUIRED - WR_MEM_32(Base_Address+CLKCTRL,(read_clkctrl & 0xff7fe3ff) | CLKCTRL_VAL); - msleep(100); - read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL); - - // poll for the freq,phase lock to occur - while (( (RD_MEM_32(Base_Address+STATUS)) & 0x00000600) != 0x00000600); - //wait fot the clocks to get stabized - msleep(10); + WR_MEM_32((Base_Address+M2NDIV ),m2nval); + msleep(100); + WR_MEM_32((Base_Address+MN2DIV ),mn2val); + msleep(100); + WR_MEM_32((Base_Address+TENABLEDIV),0x1); + msleep(100); + WR_MEM_32((Base_Address+TENABLEDIV),0x0); + msleep(100); + WR_MEM_32((Base_Address+TENABLE ),0x1); + msleep(100); + WR_MEM_32((Base_Address+TENABLE ),0x0); + msleep(100); + read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL); + //configure the TINITZ(bit0) and CLKDCO BITS IF REQUIRED + WR_MEM_32(Base_Address+CLKCTRL,(read_clkctrl & 0xff7fe3ff) | CLKCTRL_VAL); + msleep(100); + read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL); + + // poll for the freq,phase lock to occur + while (( (RD_MEM_32(Base_Address+STATUS)) & 0x00000600) != 0x00000600); + //wait fot the clocks to get stabized + msleep(10); } -#endif +#endif @@ -331,12 +352,20 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, PVRSRV_KERNEL_MEM_INFO *psSGXHostCtlMemInfo = psDevInfo->psKernelSGXHostCtlMemInfo; SGXMKIF_HOST_CTL *psSGXHostCtl = psSGXHostCtlMemInfo->pvLinAddrKM; static IMG_BOOL bFirstTime = IMG_TRUE; - void __iomem *pll_base; - void __iomem *div_base; +#ifdef CONFIG_THRU_PLL + void __iomem *pll_base; + void __iomem *div_base; +#endif #if defined(PDUMP) IMG_BOOL bPDumpIsSuspended = PDumpIsSuspended(); #endif +#if defined(SGX_FEATURE_MP) + +#else + SGXInitClocks(psDevInfo, PDUMP_FLAGS_CONTINUOUS); +#endif + PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "SGX initialisation script part 1\n"); @@ -349,6 +378,7 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "End of SGX initialisation script part 1\n"); + psDevInfo->ui32NumResets++; SGXReset(psDevInfo, bFirstTime || bHardwareRecovery, PDUMP_FLAGS_CONTINUOUS); #if defined(EUR_CR_POWER) @@ -390,10 +420,10 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, return eError; } PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "End of SGX initialisation script part 2\n"); - - // OSWriteHWReg(psDevInfo->pvRegsBaseKM, 0xFF08, 0x80000000);//OCP Bypass mode #ifdef PLAT_TI81xx - OSWriteHWReg(psDevInfo->pvRegsBaseKM, 0xFF08, 0x80000000);//OCP Bypass mode + OSWriteHWReg(psDevInfo->pvRegsBaseKM, 0xFF08, 0x80000000);//OCP Bypass mode + +#ifdef CONFIG_THRU_PLL if(cpu_is_ti816x()) { div_base = ioremap(SGX_TI81xx_CLK_DVDR_ADDR,0x100); WR_MEM_32((div_base),0x2); @@ -403,16 +433,17 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, div_base = ioremap(SGX_TI81xx_CLK_DVDR_ADDR,0x100); WR_MEM_32((div_base),0x0); pll_base = ioremap(SGX_PLL_BASE,0x100); - PLL_Clocks_Config((UWORD32)pll_base,OSC_0,19,800,4,ADPLLJ_CLKCRTL_HS2); + PLL_Clocks_Config((UWORD32)pll_base,OSC_0,19,800,4,ADPLLJ_CLKCRTL_HS2); iounmap (div_base); iounmap (pll_base); } +#endif #else if(!(cpu_is_omap3530() || cpu_is_omap3517())) - { + { OSWriteHWReg(psDevInfo->pvRegsBaseKM, 0xFF08, 0x80000000);//OCP Bypass mode - } + } #endif @@ -469,20 +500,14 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, #endif #if !defined(NO_HARDWARE) - - if (PollForValueKM(&psSGXHostCtl->ui32InitStatus, - PVRSRV_USSE_EDM_INIT_COMPLETE, - PVRSRV_USSE_EDM_INIT_COMPLETE, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) -// if (PollForValueKM(&psSGXHostCtl->ui32InitStatus, -// PVRSRV_USSE_EDM_INIT_COMPLETE, -// PVRSRV_USSE_EDM_INIT_COMPLETE, -// MAX_HW_TIME_US/WAIT_TRY_COUNT, -// WAIT_TRY_COUNT) != PVRSRV_OK) + if (PollForValueKM(&psSGXHostCtl->ui32InitStatus, + PVRSRV_USSE_EDM_INIT_COMPLETE, + PVRSRV_USSE_EDM_INIT_COMPLETE, + MAX_HW_TIME_US, + MAX_HW_TIME_US/WAIT_TRY_COUNT, + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "SGXInitialise: Wait for uKernel initialisation failed")); #if !defined(FIX_HW_BRN_23281) @@ -556,7 +581,11 @@ static PVRSRV_ERROR DevInitSGXPart1 (IMG_VOID *pvDeviceNode) PDUMPCOMMENT("SGX Core Version Information: %s", SGX_CORE_FRIENDLY_NAME); #if defined(SGX_FEATURE_MP) + #if !defined(SGX_FEATURE_MP_PLUS) PDUMPCOMMENT("SGX Multi-processor: %d cores", SGX_FEATURE_MP_CORE_COUNT); + #else + PDUMPCOMMENT("SGX Multi-processor: %d TA cores, %d 3D cores", SGX_FEATURE_MP_CORE_COUNT_TA, SGX_FEATURE_MP_CORE_COUNT_3D); + #endif #endif #if (SGX_CORE_REV == 0) @@ -617,12 +646,16 @@ static PVRSRV_ERROR DevInitSGXPart1 (IMG_VOID *pvDeviceNode) case DEVICE_MEMORY_HEAP_SHARED: case DEVICE_MEMORY_HEAP_SHARED_EXPORTED: { - hDevMemHeap = BM_CreateHeap (hKernelDevMemContext, - &psDeviceMemoryHeap[i]); + if (psDeviceMemoryHeap[i].ui32HeapSize > 0) + { + hDevMemHeap = BM_CreateHeap (hKernelDevMemContext, + &psDeviceMemoryHeap[i]); + - psDeviceMemoryHeap[i].hDevMemHeap = hDevMemHeap; + psDeviceMemoryHeap[i].hDevMemHeap = hDevMemHeap; + } break; } } @@ -645,7 +678,11 @@ static PVRSRV_ERROR DevInitSGXPart1 (IMG_VOID *pvDeviceNode) } IMG_EXPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, PVRSRV_HEAP_INFO_KM *pasHeapInfo, IMG_DEV_PHYADDR *psPDDevPAddr) +#else PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, SGX_BRIDGE_INFO_FOR_SRVINIT *psInitInfo) +#endif { PVRSRV_DEVICE_NODE *psDeviceNode; PVRSRV_SGXDEV_INFO *psDevInfo; @@ -656,9 +693,15 @@ PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, SGX_BRIDGE_INFO_FOR_S psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevHandle; psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; +#if defined (SUPPORT_SID_INTERFACE) + *psPDDevPAddr = psDevInfo->sKernelPDDevPAddr; + + eError = PVRSRVGetDeviceMemHeapsKM(hDevHandle, pasHeapInfo); +#else psInitInfo->sPDDevPAddr = psDevInfo->sKernelPDDevPAddr; eError = PVRSRVGetDeviceMemHeapsKM(hDevHandle, &psInitInfo->asHeapInfo[0]); +#endif if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXGetInfoForSrvinit: PVRSRVGetDeviceMemHeapsKM failed (%d)", eError)); @@ -671,7 +714,11 @@ PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, SGX_BRIDGE_INFO_FOR_S IMG_EXPORT PVRSRV_ERROR DevInitSGXPart2KM (PVRSRV_PER_PROCESS_DATA *psPerProc, IMG_HANDLE hDevHandle, +#if defined (SUPPORT_SID_INTERFACE) + SGX_BRIDGE_INIT_INFO_KM *psInitInfo) +#else SGX_BRIDGE_INIT_INFO *psInitInfo) +#endif { PVRSRV_DEVICE_NODE *psDeviceNode; PVRSRV_SGXDEV_INFO *psDevInfo; @@ -968,9 +1015,12 @@ static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO *psDevInfo, PVR_DPF((PVR_DBG_ERROR,"SGX Register Base Address (Linear): 0x%08X", (IMG_UINTPTR_T)psDevInfo->pvRegsBaseKM)); PVR_DPF((PVR_DBG_ERROR,"SGX Register Base Address (Physical): 0x%08X", psDevInfo->sRegsPhysBase.uiAddr)); - for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT; ui32CoreNum++) + SGXDumpDebugReg(psDevInfo, 0, "EUR_CR_CORE_ID: ", EUR_CR_CORE_ID); + SGXDumpDebugReg(psDevInfo, 0, "EUR_CR_CORE_REVISION: ", EUR_CR_CORE_REVISION); + + for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT_3D; ui32CoreNum++) { - + SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_EVENT_STATUS: ", EUR_CR_EVENT_STATUS); SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_EVENT_STATUS2: ", EUR_CR_EVENT_STATUS2); SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_CTRL: ", EUR_CR_BIF_CTRL); @@ -994,8 +1044,15 @@ static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO *psDevInfo, { - IMG_UINT32 *pui32HostCtlBuffer = (IMG_UINT32 *)psDevInfo->psSGXHostCtl; - IMG_UINT32 ui32LoopCounter; + SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; + IMG_UINT32 *pui32HostCtlBuffer = (IMG_UINT32 *)psSGXHostCtl; + IMG_UINT32 ui32LoopCounter; + + if (psSGXHostCtl->ui32AssertFail != 0) + { + PVR_LOG(("SGX Microkernel assert fail: 0x%08X", psSGXHostCtl->ui32AssertFail)); + psSGXHostCtl->ui32AssertFail = 0; + } PVR_LOG(("SGX Host control:")); @@ -1018,7 +1075,7 @@ static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO *psDevInfo, PVR_LOG(("SGX TA/3D control:")); for (ui32LoopCounter = 0; - ui32LoopCounter < psDevInfo->psKernelSGXTA3DCtlMemInfo->ui32AllocSize / sizeof(*pui32TA3DCtlBuffer); + ui32LoopCounter < psDevInfo->psKernelSGXTA3DCtlMemInfo->uAllocSize / sizeof(*pui32TA3DCtlBuffer); ui32LoopCounter += 4) { PVR_LOG(("\t(T3C-%X) 0x%08X 0x%08X 0x%08X 0x%08X", ui32LoopCounter * sizeof(*pui32TA3DCtlBuffer), @@ -1086,6 +1143,10 @@ static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO *psDevInfo, } #endif } + #if defined (TTRACE) + PVRSRVDumpTimeTraceBuffers(); + #endif + } @@ -1128,9 +1189,8 @@ IMG_VOID HWRecoveryResetSGX (PVRSRV_DEVICE_NODE *psDeviceNode, for (eError = PVRSRV_ERROR_RETRY; eError == PVRSRV_ERROR_RETRY;) #endif { - eError = SGXInitialise(psDevInfo, IMG_TRUE); + eError = SGXInitialise(psDevInfo, IMG_TRUE); } - if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"HWRecoveryResetSGX: SGXInitialise failed (%d)", eError)); @@ -1146,7 +1206,7 @@ IMG_VOID HWRecoveryResetSGX (PVRSRV_DEVICE_NODE *psDeviceNode, - PVRSRVProcessQueues(ui32CallerID, IMG_TRUE); + PVRSRVProcessQueues(IMG_TRUE); } #endif @@ -1158,11 +1218,13 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData) PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; static IMG_UINT32 ui32EDMTasks = 0; static IMG_UINT32 ui32LockupCounter = 0; + static IMG_UINT32 ui32OpenCLDelayCounter = 0; static IMG_UINT32 ui32NumResets = 0; #if defined(FIX_HW_BRN_31093) static IMG_BOOL bBRN31093Inval = IMG_FALSE; #endif IMG_UINT32 ui32CurrentEDMTasks; + IMG_UINT32 ui32CurrentOpenCLDelayCounter=0; IMG_BOOL bLockup = IMG_FALSE; IMG_BOOL bPoweredDown; @@ -1199,7 +1261,19 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData) if (ui32LockupCounter == 3) { ui32LockupCounter = 0; - + ui32CurrentOpenCLDelayCounter = (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount; + if(0 != ui32CurrentOpenCLDelayCounter) + { + if(ui32OpenCLDelayCounter != ui32CurrentOpenCLDelayCounter){ + ui32OpenCLDelayCounter = ui32CurrentOpenCLDelayCounter; + }else{ + ui32OpenCLDelayCounter -= 1; + (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount = ui32OpenCLDelayCounter; + } + goto SGX_NoUKernel_LockUp; + } + + #if defined(FIX_HW_BRN_31093) if (bBRN31093Inval == IMG_FALSE) { @@ -1227,9 +1301,10 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData) else #endif { - PVR_DPF((PVR_DBG_ERROR, "SGXOSTimer() detected SGX lockup (0x%x tasks)", ui32EDMTasks)); + PVR_DPF((PVR_DBG_ERROR, "SGXOSTimer() detected SGX lockup (0x%x tasks)", ui32EDMTasks)); bLockup = IMG_TRUE; + (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount = 0; } } } @@ -1243,6 +1318,7 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData) ui32NumResets = psDevInfo->ui32NumResets; } } +SGX_NoUKernel_LockUp: if (bLockup) { @@ -1252,7 +1328,7 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData) psSGXHostCtl->ui32HostDetectedLockups ++; - HWRecoveryResetSGX(psDeviceNode, 0, KERNEL_ID); + HWRecoveryResetSGX(psDeviceNode, 0, ISR_ID); } } #endif @@ -1395,7 +1471,7 @@ RangeAllocated: ui32Offset = EUR_CR_BIF_TILE0 + (i<<2); ui32Start = psMemInfo->sDevVAddr.uiAddr; - ui32End = ui32Start + psMemInfo->ui32AllocSize + SGX_MMU_PAGE_SIZE - 1; + ui32End = ui32Start + psMemInfo->uAllocSize + SGX_MMU_PAGE_SIZE - 1; ui32Val = ((ui32TilingStride << EUR_CR_BIF_TILE0_CFG_SHIFT) & EUR_CR_BIF_TILE0_CFG_MASK) | (((ui32End>>20) << EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK) @@ -1463,6 +1539,16 @@ PVRSRV_ERROR SGX_FreeMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode, } #endif +static IMG_VOID SGXCacheInvalidate(PVRSRV_DEVICE_NODE *psDeviceNode) +{ + PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; + + #if defined(SGX_FEATURE_MP) + psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_SL; + #else + PVR_UNREFERENCED_PARAMETER(psDevInfo); + #endif +} PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) { @@ -1512,7 +1598,13 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) #if defined(SUPPORT_PDUMP_MULTI_PROCESS) psDeviceNode->pfnMMUIsHeapShared = &MMU_IsHeapShared; #endif - +#if defined(FIX_HW_BRN_31620) + psDeviceNode->pfnMMUGetCacheFlushRange = &MMU_GetCacheFlushRange; + psDeviceNode->pfnMMUGetPDPhysAddr = &MMU_GetPDPhysAddr; +#else + psDeviceNode->pfnMMUGetCacheFlushRange = IMG_NULL; + psDeviceNode->pfnMMUGetPDPhysAddr = IMG_NULL; +#endif #if defined (SYS_USING_INTERRUPTS) @@ -1529,6 +1621,8 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) psDeviceNode->pfnDeviceCommandComplete = &SGXCommandComplete; + psDeviceNode->pfnCacheInvalidate = SGXCacheInvalidate; + psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; @@ -1705,22 +1799,30 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_3DPARAMETERS_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_3DPARAMETERS_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_3DPARAMETERS_HEAP_SIZE; - psDeviceMemoryHeap->pszName = "3DParameters"; - psDeviceMemoryHeap->pszBSName = "3DParameters BS"; -#if defined(SUPPORT_PERCONTEXT_PB) - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; -#else + psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_SHARED_3DPARAMETERS_HEAP_ID); + psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_SHARED_3DPARAMETERS_HEAP_BASE; + psDeviceMemoryHeap->ui32HeapSize = SGX_SHARED_3DPARAMETERS_HEAP_SIZE; + psDeviceMemoryHeap->pszName = "Shared 3DParameters"; + psDeviceMemoryHeap->pszBSName = "Shared 3DParameters BS"; psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE | PVRSRV_MEM_RAM_BACKED_ALLOCATION | PVRSRV_HAP_MULTI_PROCESS; psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; -#endif + + + psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; + psDeviceMemoryHeap++; + + + psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID); + psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE; + psDeviceMemoryHeap->ui32HeapSize = SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE; + psDeviceMemoryHeap->pszName = "Percontext 3DParameters"; + psDeviceMemoryHeap->pszBSName = "Percontext 3DParameters BS"; + psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE + | PVRSRV_MEM_RAM_BACKED_ALLOCATION + | PVRSRV_HAP_SINGLE_PROCESS; + psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; psDeviceMemoryHeap++; @@ -1731,7 +1833,9 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_GENERAL_MAPPING_HEAP_ID); psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_GENERAL_MAPPING_HEAP_BASE; psDeviceMemoryHeap->ui32HeapSize = SGX_GENERAL_MAPPING_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_MULTI_PROCESS; + psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE + | PVRSRV_MEM_RAM_BACKED_ALLOCATION + | PVRSRV_HAP_MULTI_PROCESS; psDeviceMemoryHeap->pszName = "GeneralMapping"; psDeviceMemoryHeap->pszBSName = "GeneralMapping BS"; #if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) && defined(FIX_HW_BRN_23410) @@ -1907,7 +2011,7 @@ PVRSRV_ERROR SGXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode) psSGXMiscInfoInt = psMemInfo->pvLinAddrKM; psSGXMiscInfoInt->ui32MiscInfoFlags = 0; psSGXMiscInfoInt->ui32MiscInfoFlags |= PVRSRV_USSE_MISCINFO_GET_STRUCT_SIZES; - eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode); + eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode, IMG_NULL); if(eError != PVRSRV_OK) @@ -2048,7 +2152,8 @@ chk_exit: static PVRSRV_ERROR SGXGetMiscInfoUkernel(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_DEVICE_NODE *psDeviceNode) + PVRSRV_DEVICE_NODE *psDeviceNode, + IMG_HANDLE hDevMemContext) { PVRSRV_ERROR eError; SGXMKIF_COMMAND sCommandData; @@ -2077,19 +2182,13 @@ PVRSRV_ERROR SGXGetMiscInfoUkernel(PVRSRV_SGXDEV_INFO *psDevInfo, sCommandData.ui32Data[1] = psMemInfo->sDevVAddr.uiAddr; PDUMPCOMMENT("Microkernel kick for SGXGetMiscInfo"); -/* eError = SGXScheduleCCBCommandKM(psDeviceNode, + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_GETMISCINFO, &sCommandData, KERNEL_ID, - 0); -*/ - - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_GETMISCINFO, - &sCommandData, - KERNEL_ID, - 0, - IMG_FALSE); + 0, + hDevMemContext, + IMG_FALSE); if (eError != PVRSRV_OK) { @@ -2195,19 +2294,13 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, psDevInfo->psSGXHostCtl->ui32BPSetClearSignal = 0; PDUMPCOMMENT("Microkernel kick for setting a data breakpoint"); -/* eError = SGXScheduleCCBCommandKM(psDeviceNode, + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_DATABREAKPOINT, &sCommandData, KERNEL_ID, - 0); -*/ - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_DATABREAKPOINT, - &sCommandData, - KERNEL_ID, - 0, - IMG_FALSE); - + 0, + hDevMemContext, + IMG_FALSE); if (eError != PVRSRV_OK) { @@ -2246,37 +2339,6 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, return PVRSRV_OK; } - case SGX_MISC_INFO_REQUEST_WAIT_FOR_BREAKPOINT: - { - - - PDUMPCOMMENT("Wait for data breakpoint hit"); - -#if defined(NO_HARDWARE) && defined(PDUMP) - { - PDUMPREGPOL(SGX_PDUMPREG_NAME, - EUR_CR_EVENT_STATUS2, - EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK, - EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK); - - PDUMPREG(SGX_PDUMPREG_NAME, - EUR_CR_EVENT_HOST_CLEAR2, - EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_MASK); - - PDUMPCOMMENT("Breakpoint detected. Wait a bit to show that pipeline stops in simulation"); - PDUMPIDL(2000); - - PDUMPCOMMENT("Now we can resume"); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BREAKPOINT_TRAP, EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_BREAKPOINT_TRAP_CONTINUE_MASK); - } -#else - { - - } -#endif - return PVRSRV_OK; - } - case SGX_MISC_INFO_REQUEST_POLL_BREAKPOINT: { @@ -2287,40 +2349,114 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, #if !defined(NO_HARDWARE) +#if defined(SGX_FEATURE_MP) IMG_BOOL bTrappedBPMaster; - IMG_BOOL abTrappedBPPerCore[SGX_FEATURE_MP_CORE_COUNT]; IMG_UINT32 ui32CoreNum, ui32TrappedBPCoreNum; +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + IMG_UINT32 ui32PipeNum, ui32TrappedBPPipeNum; +#define NUM_PIPES_PLUS_ONE (SGX_FEATURE_PERPIPE_BKPT_REGS_NUMPIPES+1) +#endif IMG_BOOL bTrappedBPAny; +#endif + IMG_BOOL bFoundOne; +#if defined(SGX_FEATURE_MP) ui32TrappedBPCoreNum = 0; bTrappedBPMaster = !!(EUR_CR_MASTER_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BREAKPOINT)); bTrappedBPAny = bTrappedBPMaster; - for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT; ui32CoreNum++) +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + ui32TrappedBPPipeNum = 0; +#endif + for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT_3D; ui32CoreNum++) { - abTrappedBPPerCore[ui32CoreNum] = !!(EUR_CR_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum))); - if (abTrappedBPPerCore[ui32CoreNum]) +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + + + +#define SGX_MP_CORE_PIPE_SELECT(r,c,p) \ + ((SGX_MP_CORE_SELECT(EUR_CR_PARTITION_##r,c) + p*(EUR_CR_PIPE0_##r-EUR_CR_PARTITION_##r))) + for (ui32PipeNum = 0; ui32PipeNum < NUM_PIPES_PLUS_ONE; ui32PipeNum++) + { + bFoundOne = + 0 != (EUR_CR_PARTITION_BREAKPOINT_TRAPPED_MASK & + OSReadHWReg(psDevInfo->pvRegsBaseKM, + SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, + ui32CoreNum, + ui32PipeNum))); + if (bFoundOne) + { + bTrappedBPAny = IMG_TRUE; + ui32TrappedBPCoreNum = ui32CoreNum; + ui32TrappedBPPipeNum = ui32PipeNum; + } + } +#else + bFoundOne = !!(EUR_CR_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum))); + if (bFoundOne) { bTrappedBPAny = IMG_TRUE; ui32TrappedBPCoreNum = ui32CoreNum; } +#endif } psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP = bTrappedBPAny; +#else +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + #error Not yet considered the case for per-pipe regs in non-mp case +#endif + psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP = 0 != (EUR_CR_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT)); +#endif if (psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP) { IMG_UINT32 ui32Info0, ui32Info1; +#if defined(SGX_FEATURE_MP) +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0:SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP_INFO0, ui32TrappedBPCoreNum, ui32TrappedBPPipeNum)); + ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1:SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP_INFO1, ui32TrappedBPCoreNum, ui32TrappedBPPipeNum)); +#else ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0:SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP_INFO0, ui32TrappedBPCoreNum)); ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1:SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP_INFO1, ui32TrappedBPCoreNum)); +#endif +#else + ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT_TRAP_INFO0); + ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT_TRAP_INFO1); +#endif +#ifdef SGX_FEATURE_PERPIPE_BKPT_REGS + psMiscInfo->uData.sSGXBreakpointInfo.ui32BPIndex = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT; + psMiscInfo->uData.sSGXBreakpointInfo.sTrappedBPDevVAddr.uiAddr = ui32Info0 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK; + psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPBurstLength = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT; + psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBPRead = !!(ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_MASK); + psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPDataMaster = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT; + psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPTag = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SHIFT; +#else psMiscInfo->uData.sSGXBreakpointInfo.ui32BPIndex = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT; psMiscInfo->uData.sSGXBreakpointInfo.sTrappedBPDevVAddr.uiAddr = ui32Info0 & EUR_CR_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK; psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPBurstLength = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT; psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBPRead = !!(ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_RNW_MASK); psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPDataMaster = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT; psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPTag = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_SHIFT; +#endif +#if defined(SGX_FEATURE_MP) +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + + psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = bTrappedBPMaster?65535:(ui32TrappedBPCoreNum + (ui32TrappedBPPipeNum<<10)); +#else + psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = bTrappedBPMaster?65535:ui32TrappedBPCoreNum; +#endif +#else +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + +#error non-mp perpipe regs not yet supported +#else + + psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = 65534; +#endif +#endif } #endif return PVRSRV_OK; @@ -2332,12 +2468,24 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, #if !defined(NO_HARDWARE) +#if defined(SGX_FEATURE_MP) IMG_UINT32 ui32CoreNum; IMG_BOOL bMaster; +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + IMG_UINT32 ui32PipeNum; +#endif +#endif IMG_UINT32 ui32OldSeqNum, ui32NewSeqNum; +#if defined(SGX_FEATURE_MP) +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + ui32PipeNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum >> 10; + ui32CoreNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum & 1023; + bMaster = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum > 32767; +#else ui32CoreNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum; - bMaster = ui32CoreNum > SGX_FEATURE_MP_CORE_COUNT; + bMaster = ui32CoreNum > SGX_FEATURE_MP_CORE_COUNT_3D; +#endif if (bMaster) { @@ -2351,8 +2499,18 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, while (ui32OldSeqNum == ui32NewSeqNum); } else +#endif { +#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) + ui32OldSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, ui32CoreNum, ui32PipeNum)); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP, ui32CoreNum, ui32PipeNum), EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_MASK); + do + { + ui32NewSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, ui32CoreNum, ui32PipeNum)); + } + while (ui32OldSeqNum == ui32NewSeqNum); +#else ui32OldSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum)); OSWriteHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP, ui32CoreNum), EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_BREAKPOINT_TRAP_CONTINUE_MASK); do @@ -2360,6 +2518,7 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, ui32NewSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum)); } while (ui32OldSeqNum == ui32NewSeqNum); +#endif } #endif return PVRSRV_OK; @@ -2399,7 +2558,7 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, case SGX_MISC_INFO_REQUEST_SGXREV: { PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode); + eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode, hDevMemContext); if(eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "An error occurred in SGXGetMiscInfoUkernel: %d\n", @@ -2584,19 +2743,13 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, sCommandData.ui32Data[0] = psSetHWPerfStatus->ui32NewHWPerfStatus; -/* eError = SGXScheduleCCBCommandKM(psDeviceNode, + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_SETHWPERFSTATUS, &sCommandData, KERNEL_ID, - 0); -*/ - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_SETHWPERFSTATUS, - &sCommandData, - KERNEL_ID, - 0, - IMG_FALSE); - + 0, + hDevMemContext, + IMG_FALSE); return eError; } #endif @@ -2650,6 +2803,8 @@ PVRSRV_ERROR SGXReadHWPerfCBKM(IMG_HANDLE hDevHandle, SGXMKIF_HWPERF_CB_ENTRY *psMKPerfEntry = &psHWPerfCB->psHWPerfCBData[psHWPerfCB->ui32Roff]; psClientHWPerfEntry[i].ui32FrameNo = psMKPerfEntry->ui32FrameNo; + psClientHWPerfEntry[i].ui32PID = psMKPerfEntry->ui32PID; + psClientHWPerfEntry[i].ui32RTData = psMKPerfEntry->ui32RTData; psClientHWPerfEntry[i].ui32Type = psMKPerfEntry->ui32Type; psClientHWPerfEntry[i].ui32Ordinal = psMKPerfEntry->ui32Ordinal; psClientHWPerfEntry[i].ui32Info = psMKPerfEntry->ui32Info; @@ -2660,6 +2815,10 @@ PVRSRV_ERROR SGXReadHWPerfCBKM(IMG_HANDLE hDevHandle, &psMKPerfEntry->ui32Counters[0][0], sizeof(psMKPerfEntry->ui32Counters)); + OSMemCopy(&psClientHWPerfEntry[i].ui32MiscCounters[0][0], + &psMKPerfEntry->ui32MiscCounters[0][0], + sizeof(psMKPerfEntry->ui32MiscCounters)); + psHWPerfCB->ui32Roff = (psHWPerfCB->ui32Roff + 1) & (SGXMKIF_HWPERF_CB_SIZE - 1); } diff --git a/services4/srvkm/devices/sgx/sgxkick.c b/services4/srvkm/devices/sgx/sgxkick.c index 581640b..d1220cf 100644 --- a/services4/srvkm/devices/sgx/sgxkick.c +++ b/services4/srvkm/devices/sgx/sgxkick.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -36,29 +36,48 @@ #include "osfunc.h" #include "pvr_debug.h" #include "sgxutils.h" +#include "ttrace.h" IMG_EXPORT +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK_KM *psCCBKick) +#else PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) +#endif { PVRSRV_ERROR eError; PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *) psCCBKick->hCCBKernelMemInfo; SGXMKIF_CMDTA_SHARED *psTACmd; IMG_UINT32 i; + IMG_HANDLE hDevMemContext = IMG_NULL; +#if defined(FIX_HW_BRN_31620) + hDevMemContext = psCCBKick->hDevMemContext; +#endif + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, KICK_TOKEN_DOKICK); if (!CCB_OFFSET_IS_VALID(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset)) { PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: Invalid CCB offset")); + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, KICK_TOKEN_DOKICK); return PVRSRV_ERROR_INVALID_PARAMS; } psTACmd = CCB_DATA_FROM_OFFSET(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset); + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CMD_START, KICK_TOKEN_DOKICK); + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CCB, + KICK_TOKEN_CCB_OFFSET, psCCBKick->ui32CCBOffset); + if (psCCBKick->hTA3DSyncInfo) { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo; + + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_TA3D_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psTACmd->sTA3DDependency.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; psTACmd->sTA3DDependency.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; @@ -73,6 +92,9 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_TA_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psTACmd->sTATQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; psTACmd->sTATQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; @@ -84,6 +106,9 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_3D_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psTACmd->s3DTQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; psTACmd->s3DTQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; @@ -174,6 +199,9 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_SRC_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psTACmd->asSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; psTACmd->asSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; @@ -191,7 +219,7 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) SGXMKIF_HWDEVICE_SYNC_LIST *psHWDeviceSyncList = psHWDstSyncListMemInfo->pvLinAddrKM; IMG_UINT32 ui32NumDstSyncs = psCCBKick->ui32NumDstSyncObjects; - PVR_ASSERT(((PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo)->ui32AllocSize >= (sizeof(SGXMKIF_HWDEVICE_SYNC_LIST) + + PVR_ASSERT(((PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo)->uAllocSize >= (sizeof(SGXMKIF_HWDEVICE_SYNC_LIST) + (sizeof(PVRSRV_DEVICE_SYNC_OBJECT) * ui32NumDstSyncs))); psHWDeviceSyncList->ui32NumSyncObjects = ui32NumDstSyncs; @@ -214,6 +242,10 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) if (psSyncInfo) { + + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_DST_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; @@ -518,6 +550,37 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) 0, MAKEUNIQUETAG(psCCBMemInfo)); } + + if (psCCBKick->hTASyncInfo != IMG_NULL) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; + + PDUMPCOMMENT("Modify TA/TQ ROpPendingVal\r\n"); + + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, + psCCBMemInfo, + psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, ui32TATQSyncReadOpsPendingVal), + sizeof(IMG_UINT32), + 0, + MAKEUNIQUETAG(psCCBMemInfo)); + psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; + } + + if (psCCBKick->h3DSyncInfo != IMG_NULL) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; + + PDUMPCOMMENT("Modify 3D/TQ ROpPendingVal\r\n"); + + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, + psCCBMemInfo, + psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, ui323DTQSyncReadOpsPendingVal), + sizeof(IMG_UINT32), + 0, + MAKEUNIQUETAG(psCCBMemInfo)); + psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; + } + #endif for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) @@ -550,7 +613,10 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) } #endif - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TA, &psCCBKick->sCommand, KERNEL_ID, 0, psCCBKick->bLastInScene); + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CMD_END, + KICK_TOKEN_DOKICK); + + eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TA, &psCCBKick->sCommand, KERNEL_ID, 0, hDevMemContext, psCCBKick->bLastInScene); if (eError == PVRSRV_ERROR_RETRY) { if (psCCBKick->bFirstKickOrResume && psCCBKick->ui32NumDstSyncObjects > 0) @@ -597,11 +663,15 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) } #endif + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + KICK_TOKEN_DOKICK); return eError; } else if (PVRSRV_OK != eError) { PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: SGXScheduleCCBCommandKM failed.")); + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + KICK_TOKEN_DOKICK); return eError; } @@ -707,7 +777,8 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) } } #endif - + PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + KICK_TOKEN_DOKICK); return eError; } diff --git a/services4/srvkm/devices/sgx/sgxpower.c b/services4/srvkm/devices/sgx/sgxpower.c index 427cb50..3947cdd 100644 --- a/services4/srvkm/devices/sgx/sgxpower.c +++ b/services4/srvkm/devices/sgx/sgxpower.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -207,7 +207,7 @@ static IMG_VOID SGXPollForClockGating (PVRSRV_SGXDEV_INFO *psDevInfo, #endif PDUMPCOMMENT("%s", pszComment); - PDUMPREGPOL(SGX_PDUMPREG_NAME, ui32Register, 0, ui32RegisterValue); + PDUMPREGPOL(SGX_PDUMPREG_NAME, ui32Register, 0, ui32RegisterValue, PDUMP_POLL_OPERATOR_EQUAL); } @@ -224,6 +224,7 @@ PVRSRV_ERROR SGXPrePowerState (IMG_HANDLE hDevHandle, IMG_UINT32 ui32PowerCmd, ui32CompleteStatus; SGXMKIF_COMMAND sCommand = {0}; IMG_UINT32 ui32Core; + IMG_UINT32 ui32CoresEnabled; #if defined(SUPPORT_HW_RECOVERY) @@ -252,7 +253,7 @@ PVRSRV_ERROR SGXPrePowerState (IMG_HANDLE hDevHandle, sCommand.ui32Data[1] = ui32PowerCmd; - eError = SGXScheduleCCBCommand(psDevInfo, SGXMKIF_CMD_POWER, &sCommand, KERNEL_ID, 0, IMG_FALSE); + eError = SGXScheduleCCBCommand(psDeviceNode, SGXMKIF_CMD_POWER, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: Failed to submit power down command")); @@ -284,7 +285,13 @@ PVRSRV_ERROR SGXPrePowerState (IMG_HANDLE hDevHandle, MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); #endif - for (ui32Core = 0; ui32Core < SGX_FEATURE_MP_CORE_COUNT; ui32Core++) +#if defined(SGX_FEATURE_MP) + ui32CoresEnabled = ((OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE) & EUR_CR_MASTER_CORE_ENABLE_MASK) >> EUR_CR_MASTER_CORE_ENABLE_SHIFT) + 1; +#else + ui32CoresEnabled = 1; +#endif + + for (ui32Core = 0; ui32Core < ui32CoresEnabled; ui32Core++) { SGXPollForClockGating(psDevInfo, @@ -373,7 +380,7 @@ PVRSRV_ERROR SGXPostPowerState (IMG_HANDLE hDevHandle, SGXMKIF_COMMAND sCommand = {0}; sCommand.ui32Data[1] = PVRSRV_POWERCMD_RESUME; - eError = SGXScheduleCCBCommand(psDevInfo, SGXMKIF_CMD_POWER, &sCommand, ISR_ID, 0, IMG_FALSE); + eError = SGXScheduleCCBCommand(psDeviceNode, SGXMKIF_CMD_POWER, &sCommand, ISR_ID, 0, IMG_NULL, IMG_FALSE); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXPostPowerState failed to schedule CCB command: %u", eError)); diff --git a/services4/srvkm/devices/sgx/sgxreset.c b/services4/srvkm/devices/sgx/sgxreset.c index 847ca24..c645025 100644 --- a/services4/srvkm/devices/sgx/sgxreset.c +++ b/services4/srvkm/devices/sgx/sgxreset.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -33,38 +33,167 @@ #include "pdump_km.h" -static IMG_VOID SGXResetSoftReset(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bResetBIF, - IMG_UINT32 ui32PDUMPFlags, - IMG_BOOL bPDump) +IMG_VOID SGXInitClocks(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_UINT32 ui32PDUMPFlags) { - IMG_UINT32 ui32SoftResetRegVal; + IMG_UINT32 ui32RegVal; + +#if !defined(PDUMP) + PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); +#endif + + ui32RegVal = psDevInfo->ui32ClkGateCtl; + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_CLKGATECTL, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_CLKGATECTL, ui32RegVal, ui32PDUMPFlags); + +#if defined(EUR_CR_CLKGATECTL2) + ui32RegVal = psDevInfo->ui32ClkGateCtl2; + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_CLKGATECTL2, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_CLKGATECTL2, ui32RegVal, ui32PDUMPFlags); +#endif +} -#if defined(SGX_FEATURE_MP) - ui32SoftResetRegVal = - EUR_CR_MASTER_SOFT_RESET_IPF_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_DPM_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_VDM_RESET_MASK; -#if defined(SGX_FEATURE_PTLA) - ui32SoftResetRegVal |= EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_MASK; -#endif -#if defined(SGX_FEATURE_SYSTEM_CACHE) - ui32SoftResetRegVal |= EUR_CR_MASTER_SOFT_RESET_SLC_RESET_MASK; -#endif +static IMG_VOID SGXResetInitBIFContexts(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_UINT32 ui32PDUMPFlags) +{ + IMG_UINT32 ui32RegVal; - if (bResetBIF) +#if !defined(PDUMP) + PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); +#endif + + ui32RegVal = 0; + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); + +#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the BIF bank settings\r\n"); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK_SET, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK_SET, ui32RegVal, ui32PDUMPFlags); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); +#endif + + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the BIF directory list\r\n"); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal, ui32PDUMPFlags); + +#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) { - ui32SoftResetRegVal |= EUR_CR_MASTER_SOFT_RESET_BIF_RESET_MASK; + IMG_UINT32 ui32DirList, ui32DirListReg; + + for (ui32DirList = 1; + ui32DirList < SGX_FEATURE_BIF_NUM_DIRLISTS; + ui32DirList++) + { + ui32DirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (ui32DirList - 1); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32DirListReg, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, ui32DirListReg, ui32RegVal, ui32PDUMPFlags); + } } +#endif +} + + +static IMG_VOID SGXResetSetupBIFContexts(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_UINT32 ui32PDUMPFlags) +{ + IMG_UINT32 ui32RegVal; + +#if !defined(PDUMP) + PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); +#endif + + #if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) + + ui32RegVal = (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT); + + #if defined(SGX_FEATURE_2D_HARDWARE) && !defined(SGX_FEATURE_PTLA) + + ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_2D_SHIFT); + #endif + + #if defined(FIX_HW_BRN_23410) + + ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_TA_SHIFT); + #endif + + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Set up EDM requestor page table in BIF\r\n"); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); + #endif - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32SoftResetRegVal); - if (bPDump) { - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32SoftResetRegVal, ui32PDUMPFlags); + IMG_UINT32 ui32EDMDirListReg; + + + #if (SGX_BIF_DIR_LIST_INDEX_EDM == 0) + ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE0; + #else + + ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (SGX_BIF_DIR_LIST_INDEX_EDM - 1); + #endif + + ui32RegVal = psDevInfo->sKernelPDDevPAddr.uiAddr >> SGX_MMU_PDE_ADDR_ALIGNSHIFT; + +#if defined(FIX_HW_BRN_28011) + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); + PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); +#endif + + OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32EDMDirListReg, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the EDM's directory list base\r\n"); + PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, ui32EDMDirListReg, ui32RegVal, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); } +} + + +static IMG_VOID SGXResetSleep(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_UINT32 ui32PDUMPFlags, + IMG_BOOL bPDump) +{ +#if defined(PDUMP) || defined(EMULATOR) + IMG_UINT32 ui32ReadRegister; + + #if defined(SGX_FEATURE_MP) + ui32ReadRegister = EUR_CR_MASTER_SOFT_RESET; + #else + ui32ReadRegister = EUR_CR_SOFT_RESET; + #endif +#endif + +#if !defined(PDUMP) + PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); #endif + + OSWaitus(100 * 1000000 / psDevInfo->ui32CoreClockSpeed); + if (bPDump) + { + PDUMPIDLWITHFLAGS(30, ui32PDUMPFlags); +#if defined(PDUMP) + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Read back to flush the register writes\r\n"); + PDumpRegRead(SGX_PDUMPREG_NAME, ui32ReadRegister, ui32PDUMPFlags); +#endif + } + +#if defined(EMULATOR) + + + OSReadHWReg(psDevInfo->pvRegsBaseKM, ui32ReadRegister); +#endif +} + + +#if !defined(SGX_FEATURE_MP) +static IMG_VOID SGXResetSoftReset(PVRSRV_SGXDEV_INFO *psDevInfo, + IMG_BOOL bResetBIF, + IMG_UINT32 ui32PDUMPFlags, + IMG_BOOL bPDump) +{ + IMG_UINT32 ui32SoftResetRegVal; + ui32SoftResetRegVal = EUR_CR_SOFT_RESET_DPM_RESET_MASK | @@ -139,27 +268,6 @@ static IMG_VOID SGXResetSoftReset(PVRSRV_SGXDEV_INFO *psDevInfo, } -static IMG_VOID SGXResetSleep(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags, - IMG_BOOL bPDump) -{ -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - - OSWaitus(100 * 1000000 / psDevInfo->ui32CoreClockSpeed); - if (bPDump) - { - PDUMPIDLWITHFLAGS(30, ui32PDUMPFlags); -#if defined(PDUMP) - PDumpRegRead(SGX_PDUMPREG_NAME, EUR_CR_SOFT_RESET, ui32PDUMPFlags); -#endif - } - -} - - static IMG_VOID SGXResetInvalDC(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_UINT32 ui32PDUMPFlags, IMG_BOOL bPDump) @@ -209,16 +317,18 @@ static IMG_VOID SGXResetInvalDC(PVRSRV_SGXDEV_INFO *psDevInfo, if (bPDump) { - PDUMPREGPOLWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_MEM_REQ_STAT, 0, EUR_CR_BIF_MEM_REQ_STAT_READS_MASK, ui32PDUMPFlags); + PDUMPREGPOLWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_MEM_REQ_STAT, 0, EUR_CR_BIF_MEM_REQ_STAT_READS_MASK, ui32PDUMPFlags, PDUMP_POLL_OPERATOR_EQUAL); } } #endif } +#endif IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_BOOL bHardwareRecovery, IMG_UINT32 ui32PDUMPFlags) +#if !defined(SGX_FEATURE_MP) { IMG_UINT32 ui32RegVal; #if defined(EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK) @@ -227,12 +337,10 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, const IMG_UINT32 ui32BifFaultMask = EUR_CR_BIF_INT_STAT_FAULT_MASK; #endif -#ifndef PDUMP +#if !defined(PDUMP) PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); #endif - psDevInfo->ui32NumResets++; - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Start of SGX reset sequence\r\n"); #if defined(FIX_HW_BRN_23944) @@ -274,37 +382,7 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_36BIT_ADDRESSING, EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_MASK, ui32PDUMPFlags); #endif - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); -#if defined(SGX_FEATURE_MP) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); -#endif -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK_SET, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK_SET, ui32RegVal, ui32PDUMPFlags); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); -#endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal, ui32PDUMPFlags); - -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - { - IMG_UINT32 ui32DirList, ui32DirListReg; - - for (ui32DirList = 1; - ui32DirList < SGX_FEATURE_BIF_NUM_DIRLISTS; - ui32DirList++) - { - ui32DirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (ui32DirList - 1); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32DirListReg, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, ui32DirListReg, ui32RegVal, ui32PDUMPFlags); - } - } -#endif + SGXResetInitBIFContexts(psDevInfo, ui32PDUMPFlags); #if defined(EUR_CR_BIF_MEM_ARB_CONFIG) @@ -317,30 +395,6 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, #endif #if defined(SGX_FEATURE_SYSTEM_CACHE) -#if defined(SGX_FEATURE_MP) - #if defined(SGX_BYPASS_SYSTEM_CACHE) - #error SGX_BYPASS_SYSTEM_CACHE not supported - #else - ui32RegVal = EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_MASK | - #if defined(FIX_HW_BRN_30954) - EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_MASK | - #endif - (0xC << EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SHIFT); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); - - ui32RegVal = EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_MASK; - #if defined(FIX_HW_BRN_31195) - ui32RegVal |= EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_MASK; - #endif - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); - #endif -#else #if defined(SGX_BYPASS_SYSTEM_CACHE) ui32RegVal = MNE_CR_CTRL_BYPASS_ALL_MASK; @@ -351,10 +405,13 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, ui32RegVal = MNE_CR_CTRL_BYP_CC_MASK; #endif + #if defined(FIX_HW_BRN_34028) + + ui32RegVal |= (8 << MNE_CR_CTRL_BYPASS_SHIFT); + #endif #endif OSWriteHWReg(psDevInfo->pvRegsBaseKM, MNE_CR_CTRL, ui32RegVal); PDUMPREG(SGX_PDUMPREG_NAME, MNE_CR_CTRL, ui32RegVal); -#endif #endif if (bHardwareRecovery) @@ -439,43 +496,7 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, - #if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - - ui32RegVal = (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT); - - #if defined(SGX_FEATURE_2D_HARDWARE) && !defined(SGX_FEATURE_PTLA) - - ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_2D_SHIFT); - #endif - - #if defined(FIX_HW_BRN_23410) - - ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_TA_SHIFT); - #endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); - #endif - - { - IMG_UINT32 ui32EDMDirListReg; - - - #if (SGX_BIF_DIR_LIST_INDEX_EDM == 0) - ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE0; - #else - - ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (SGX_BIF_DIR_LIST_INDEX_EDM - 1); - #endif - -#if defined(FIX_HW_BRN_28011) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, psDevInfo->sKernelPDDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT); - PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, EUR_CR_BIF_DIR_LIST_BASE0, psDevInfo->sKernelPDDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); -#endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32EDMDirListReg, psDevInfo->sKernelPDDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT); - PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, ui32EDMDirListReg, psDevInfo->sKernelPDDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); - } + SGXResetSetupBIFContexts(psDevInfo, ui32PDUMPFlags); #if defined(SGX_FEATURE_2D_HARDWARE) && !defined(SGX_FEATURE_PTLA) @@ -494,10 +515,6 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, ui32RegVal = 0; -#if defined(SGX_FEATURE_MP) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); -#endif OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_SOFT_RESET, ui32RegVal); PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); @@ -507,4 +524,143 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "End of SGX reset sequence\r\n"); } +#else + +{ + IMG_UINT32 ui32RegVal; + + PVR_UNREFERENCED_PARAMETER(bHardwareRecovery); + +#if !defined(PDUMP) + PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); +#endif + + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Start of SGX MP reset sequence\r\n"); + + + ui32RegVal = EUR_CR_MASTER_SOFT_RESET_BIF_RESET_MASK | + EUR_CR_MASTER_SOFT_RESET_IPF_RESET_MASK | + EUR_CR_MASTER_SOFT_RESET_DPM_RESET_MASK | + EUR_CR_MASTER_SOFT_RESET_VDM_RESET_MASK; + +#if defined(SGX_FEATURE_PTLA) + ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_MASK; +#endif +#if defined(SGX_FEATURE_SYSTEM_CACHE) + ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_SLC_RESET_MASK; +#endif + + + ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(0) | + EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(1) | + EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(2) | + EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(3); + + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Soft reset hydra partition, hard reset the cores\r\n"); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); + + SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); + + ui32RegVal = 0; + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BIF_CTRL, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra BIF control\r\n"); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); + +#if defined(SGX_FEATURE_SYSTEM_CACHE) + #if defined(SGX_BYPASS_SYSTEM_CACHE) + #error SGX_BYPASS_SYSTEM_CACHE not supported + #else + ui32RegVal = EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_MASK | + #if defined(FIX_HW_BRN_30954) + EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_MASK | + #endif + #if defined(PVR_SLC_8KB_ADDRESS_MODE) + (4 << EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SHIFT) | + #endif + (0xC << EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SHIFT); + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra SLC control\r\n"); + PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); + + ui32RegVal = EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_MASK; + #if defined(FIX_HW_BRN_31620) + ui32RegVal |= EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_MASK; + #endif + #if defined(FIX_HW_BRN_31195) + ui32RegVal |= EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_MASK | + EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_MASK | + EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_MASK | + EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_MASK | + EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_MASK; + #endif + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra SLC bypass control\r\n"); + PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); + #endif +#endif + + SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); + + + ui32RegVal = 0; + OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32RegVal); + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Remove the resets from all of SGX\r\n"); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); + + SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); + + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Turn on the slave cores' clock gating\r\n"); + SGXInitClocks(psDevInfo, ui32PDUMPFlags); + + SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); + + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the slave BIFs\r\n"); + +#if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_31620) || defined(FIX_HW_BRN_31671) || defined(FIX_HW_BRN_32085) + #if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_32085) + + ui32RegVal = (1<pvRegsBaseKM, EUR_CR_MASTER_BIF_MMU_CTRL, ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_BIF_MMU_CTRL, ui32RegVal, ui32PDUMPFlags); + + #if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_32085) + + ui32RegVal = (1<pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BIF_MMU_CTRL, ui32Core), ui32RegVal); + PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_BIF_MMU_CTRL, ui32Core), ui32RegVal, ui32PDUMPFlags); + } + } +#endif + + SGXResetInitBIFContexts(psDevInfo, ui32PDUMPFlags); + SGXResetSetupBIFContexts(psDevInfo, ui32PDUMPFlags); + + PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "End of SGX MP reset sequence\r\n"); +} +#endif + diff --git a/services4/srvkm/devices/sgx/sgxtransfer.c b/services4/srvkm/devices/sgx/sgxtransfer.c index 1624eb2..8a9415f 100644 --- a/services4/srvkm/devices/sgx/sgxtransfer.c +++ b/services4/srvkm/devices/sgx/sgxtransfer.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -33,7 +33,6 @@ #include "buffer_manager.h" #include "sgxinfo.h" #include "sysconfig.h" -#include "regpaths.h" #include "pdump_km.h" #include "mmu.h" #include "pvr_bridge.h" @@ -42,15 +41,27 @@ #include "osfunc.h" #include "pvr_debug.h" #include "sgxutils.h" +#include "ttrace.h" +#if defined (SUPPORT_SID_INTERFACE) +IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK_KM *psKick) +#else IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK *psKick) +#endif { - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psKick->hCCBMemInfo; - SGXMKIF_COMMAND sCommand = {0}; + PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psKick->hCCBMemInfo; + SGXMKIF_COMMAND sCommand = {0}; SGXMKIF_TRANSFERCMD_SHARED *psSharedTransferCmd; - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - IMG_UINT32 loop; + PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; + PVRSRV_ERROR eError; + IMG_UINT32 loop; + IMG_HANDLE hDevMemContext = IMG_NULL; + IMG_BOOL abSrcSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS]; + IMG_UINT32 ui32RealSrcSyncNum = 0; + IMG_BOOL abDstSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS]; + IMG_UINT32 ui32RealDstSyncNum = 0; + + #if defined(PDUMP) IMG_BOOL bPersistentProcess = IMG_FALSE; @@ -62,20 +73,39 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF } } #endif +#if defined(FIX_HW_BRN_31620) + hDevMemContext = psKick->hDevMemContext; +#endif + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, TRANSFER_TOKEN_SUBMIT); + + for (loop = 0; loop < SGX_MAX_TRANSFER_SYNC_OPS; loop++) + { + abSrcSyncEnable[loop] = IMG_TRUE; + abDstSyncEnable[loop] = IMG_TRUE; + } if (!CCB_OFFSET_IS_VALID(SGXMKIF_TRANSFERCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset)) { PVR_DPF((PVR_DBG_ERROR, "SGXSubmitTransferKM: Invalid CCB offset")); + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + TRANSFER_TOKEN_SUBMIT); return PVRSRV_ERROR_INVALID_PARAMS; } psSharedTransferCmd = CCB_DATA_FROM_OFFSET(SGXMKIF_TRANSFERCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset); + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CMD_START, TRANSFER_TOKEN_SUBMIT); + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CCB, + TRANSFER_TOKEN_CCB_OFFSET, psKick->ui32SharedCmdCCBOffset); + if (psKick->hTASyncInfo != IMG_NULL) { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_TA_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psSharedTransferCmd->ui32TASyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; psSharedTransferCmd->ui32TASyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; @@ -92,6 +122,9 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF { psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_3D_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); + psSharedTransferCmd->ui323DSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; psSharedTransferCmd->ui323DSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; @@ -104,43 +137,120 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF psSharedTransferCmd->s3DSyncReadOpsCompleteDevVAddr.uiAddr = 0; } - psSharedTransferCmd->ui32NumSrcSyncs = psKick->ui32NumSrcSync; - psSharedTransferCmd->ui32NumDstSyncs = psKick->ui32NumDstSync; + + for (loop = 0; loop < MIN(SGX_MAX_TRANSFER_SYNC_OPS, psKick->ui32NumSrcSync); loop++) + { + IMG_UINT32 i; + + PVRSRV_KERNEL_SYNC_INFO * psMySyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + + for (i = 0; i < loop; i++) + { + if (abSrcSyncEnable[i]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[i]; + + if (psSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr == psMySyncInfo->sWriteOpsCompleteDevVAddr.uiAddr) + { + PVR_DPF((PVR_DBG_WARNING, "SGXSubmitTransferKM : Same src synchronized multiple times!")); + abSrcSyncEnable[loop] = IMG_FALSE; + break; + } + } + } + if (abSrcSyncEnable[loop]) + { + ui32RealSrcSyncNum++; + } + } + for (loop = 0; loop < MIN(SGX_MAX_TRANSFER_SYNC_OPS, psKick->ui32NumDstSync); loop++) + { + IMG_UINT32 i; + + PVRSRV_KERNEL_SYNC_INFO * psMySyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; + + for (i = 0; i < loop; i++) + { + if (abDstSyncEnable[i]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[i]; + + if (psSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr == psMySyncInfo->sWriteOpsCompleteDevVAddr.uiAddr) + { + PVR_DPF((PVR_DBG_WARNING, "SGXSubmitTransferKM : Same dst synchronized multiple times!")); + abDstSyncEnable[loop] = IMG_FALSE; + break; + } + } + } + if (abDstSyncEnable[loop]) + { + ui32RealDstSyncNum++; + } + } + + psSharedTransferCmd->ui32NumSrcSyncs = ui32RealSrcSyncNum; + psSharedTransferCmd->ui32NumDstSyncs = ui32RealDstSyncNum; + if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) { - for (loop=0; loopui32NumSrcSync; loop++) + IMG_UINT32 i = 0; + + for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + if (abSrcSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSharedTransferCmd->asSrcSyncs[loop].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - psSharedTransferCmd->asSrcSyncs[loop].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_SRC_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - psSharedTransferCmd->asSrcSyncs[loop].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->asSrcSyncs[loop].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; + psSharedTransferCmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; + psSharedTransferCmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; + psSharedTransferCmd->asSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; + psSharedTransferCmd->asSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; + i++; + } } - for (loop=0; loopui32NumDstSync; loop++) + PVR_ASSERT(i == ui32RealSrcSyncNum); + + i = 0; + for (loop = 0; loop < psKick->ui32NumDstSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; + if (abDstSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - psSharedTransferCmd->asDstSyncs[loop].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - psSharedTransferCmd->asDstSyncs[loop].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; + PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_DST_SYNC, + psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - psSharedTransferCmd->asDstSyncs[loop].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->asDstSyncs[loop].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; + psSharedTransferCmd->asDstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; + psSharedTransferCmd->asDstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; + psSharedTransferCmd->asDstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; + psSharedTransferCmd->asDstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; + i++; + } } + PVR_ASSERT(i == ui32RealDstSyncNum); - for (loop=0; loopui32NumSrcSync; loop++) + for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32ReadOpsPending++; + if (abSrcSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + psSyncInfo->psSyncData->ui32ReadOpsPending++; + } } - for (loop=0; loopui32NumDstSync; loop++) + for (loop = 0; loop < psKick->ui32NumDstSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - psSyncInfo->psSyncData->ui32WriteOpsPending++; + if (abDstSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; + psSyncInfo->psSyncData->ui32WriteOpsPending++; + } } } @@ -159,109 +269,153 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) { - for (loop=0; loopui32NumSrcSync ; loop++) + IMG_UINT32 i = 0; + + for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) { - psSyncInfo = psKick->ahSrcSyncInfo[loop]; - - PDUMPCOMMENT("Hack src surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + loop * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack src surface read op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + loop * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - + if (abSrcSyncEnable[loop]) + { + psSyncInfo = psKick->ahSrcSyncInfo[loop]; + + PDUMPCOMMENT("Hack src surface write op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + + PDUMPCOMMENT("Hack src surface read op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + i++; + } } - } - if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) - { - for (loop=0; loop< psKick->ui32NumDstSync; loop++) + + i = 0; + for (loop = 0; loop < psKick->ui32NumDstSync; loop++) { - psSyncInfo = psKick->ahDstSyncInfo[loop]; - - PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + loop * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal) , - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack dest surface read op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + loop * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - + if (abDstSyncEnable[i]) + { + psSyncInfo = psKick->ahDstSyncInfo[loop]; + + PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + + PDUMPCOMMENT("Hack dest surface read op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + i++; + } } - } - - if((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING)== 0UL) - { - for (loop=0; loop<(psKick->ui32NumSrcSync); loop++) + + for (loop = 0; loop < (psKick->ui32NumSrcSync); loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; + if (abSrcSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; + } } - } - if((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) - { - for (loop=0; loop<(psKick->ui32NumDstSync); loop++) + for (loop = 0; loop < (psKick->ui32NumDstSync); loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; - psSyncInfo->psSyncData->ui32LastOpDumpVal++; + if (abDstSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; + psSyncInfo->psSyncData->ui32LastOpDumpVal++; + } } } - } + + if (psKick->hTASyncInfo != IMG_NULL) + { + psSyncInfo = psKick->hTASyncInfo; + + PDUMPCOMMENT("Tweak TA/TQ surface write op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, ui32TASyncWriteOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + + psSyncInfo->psSyncData->ui32LastOpDumpVal++; + } + + if (psKick->h3DSyncInfo != IMG_NULL) + { + psSyncInfo = psKick->h3DSyncInfo; + + PDUMPCOMMENT("Tweak 3D/TQ surface write op in transfer cmd\r\n"); + PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, + psCCBMemInfo, + psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, ui323DSyncWriteOpsPendingVal)), + sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), + psKick->ui32PDumpFlags, + MAKEUNIQUETAG(psCCBMemInfo)); + + psSyncInfo->psSyncData->ui32LastOpDumpVal++; + } + } #endif sCommand.ui32Data[1] = psKick->sHWTransferContextDevVAddr.uiAddr; - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TRANSFER, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, IMG_FALSE); + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CMD_END, + TRANSFER_TOKEN_SUBMIT); + + eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TRANSFER, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, hDevMemContext, IMG_FALSE); if (eError == PVRSRV_ERROR_RETRY) { if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) { - if (psKick->ui32NumSrcSync > 0) + for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[0]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } - if (psKick->ui32NumDstSync > 0) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM() - || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - { - if (psKick->ui32NumSrcSync > 0) + if (abSrcSyncEnable[loop]) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[0]; - psSyncInfo->psSyncData->ui32LastReadOpDumpVal--; + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + psSyncInfo->psSyncData->ui32ReadOpsPending--; +#if defined(PDUMP) + if (PDumpIsCaptureFrameKM() + || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) + { + psSyncInfo->psSyncData->ui32LastReadOpDumpVal--; + } +#endif } - if (psKick->ui32NumDstSync > 0) + } + for (loop = 0; loop < psKick->ui32NumDstSync; loop++) + { + if (abDstSyncEnable[loop]) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; - psSyncInfo->psSyncData->ui32LastOpDumpVal--; + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; + psSyncInfo->psSyncData->ui32WriteOpsPending--; +#if defined(PDUMP) + if (PDumpIsCaptureFrameKM() + || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) + { + psSyncInfo->psSyncData->ui32LastOpDumpVal--; + } +#endif } } -#endif } @@ -282,6 +436,8 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF else if (PVRSRV_OK != eError) { PVR_DPF((PVR_DBG_ERROR, "SGXSubmitTransferKM: SGXScheduleCCBCommandKM failed.")); + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + TRANSFER_TOKEN_SUBMIT); return eError; } @@ -289,20 +445,23 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF #if defined(NO_HARDWARE) if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_NOSYNCUPDATE) == 0) { - IMG_UINT32 i; - - for(i = 0; i < psKick->ui32NumSrcSync; i++) + for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; + if (abSrcSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; + psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; + } } - for(i = 0; i < psKick->ui32NumDstSync; i++) + for (loop = 0; loop < psKick->ui32NumDstSync; loop++) { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[i]; - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - + if (abDstSyncEnable[loop]) + { + psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; + psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; + } } if (psKick->hTASyncInfo != IMG_NULL) @@ -320,12 +479,17 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF } } #endif - + PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, + TRANSFER_TOKEN_SUBMIT); return eError; } #if defined(SGX_FEATURE_2D_HARDWARE) +#if defined (SUPPORT_SID_INTERFACE) +IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK_KM *psKick) +#else IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK *psKick) +#endif { PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psKick->hCCBMemInfo; @@ -334,6 +498,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; PVRSRV_ERROR eError; IMG_UINT32 i; + IMG_HANDLE hDevMemContext = IMG_NULL; #if defined(PDUMP) IMG_BOOL bPersistentProcess = IMG_FALSE; @@ -345,6 +510,9 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK } } #endif +#if defined(FIX_HW_BRN_31620) + hDevMemContext = psKick->hDevMemContext; +#endif if (!CCB_OFFSET_IS_VALID(SGXMKIF_2DCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset)) { @@ -439,7 +607,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK PDUMPCOMMENT("Hack src surface write op in 2D cmd\r\n"); PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32WriteOpsPendingVal), + psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32WriteOpsPendingVal), sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), psKick->ui32PDumpFlags, MAKEUNIQUETAG(psCCBMemInfo)); @@ -447,7 +615,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK PDUMPCOMMENT("Hack src surface read op in 2D cmd\r\n"); PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32ReadOpsPendingVal), + psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32ReadOpsPendingVal), sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), psKick->ui32PDumpFlags, MAKEUNIQUETAG(psCCBMemInfo)); @@ -460,7 +628,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK PDUMPCOMMENT("Hack dest surface write op in 2D cmd\r\n"); PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32WriteOpsPendingVal), + psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32WriteOpsPendingVal), sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), psKick->ui32PDumpFlags, MAKEUNIQUETAG(psCCBMemInfo)); @@ -468,7 +636,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK PDUMPCOMMENT("Hack dest surface read op in 2D cmd\r\n"); PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, psCCBMemInfo, - psKick->ui32CCBDumpWOff + offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32ReadOpsPendingVal), + psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32ReadOpsPendingVal), sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), psKick->ui32PDumpFlags, MAKEUNIQUETAG(psCCBMemInfo)); @@ -491,7 +659,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK sCommand.ui32Data[1] = psKick->sHW2DContextDevVAddr.uiAddr; - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_2D, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, IMG_FALSE); + eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_2D, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, hDevMemContext, IMG_FALSE); if (eError == PVRSRV_ERROR_RETRY) { diff --git a/services4/srvkm/devices/sgx/sgxutils.c b/services4/srvkm/devices/sgx/sgxutils.c index 6952571..d6d76da 100644 --- a/services4/srvkm/devices/sgx/sgxutils.c +++ b/services4/srvkm/devices/sgx/sgxutils.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -40,6 +40,7 @@ #include "osfunc.h" #include "pvr_debug.h" #include "sgxutils.h" +#include "ttrace.h" #ifdef __linux__ #include @@ -149,16 +150,23 @@ static INLINE SGXMKIF_COMMAND * SGXAcquireKernelCCBSlot(PVRSRV_SGX_CCB_INFO *psC return IMG_NULL; } -PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, +PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, SGXMKIF_CMD_TYPE eCmdType, SGXMKIF_COMMAND *psCommandData, IMG_UINT32 ui32CallerID, IMG_UINT32 ui32PDumpFlags, - IMG_BOOL bLastInScene) + IMG_HANDLE hDevMemContext, + IMG_BOOL bLastInScene) { PVRSRV_SGX_CCB_INFO *psKernelCCB; PVRSRV_ERROR eError = PVRSRV_OK; SGXMKIF_COMMAND *psSGXCommand; + PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; +#if defined(FIX_HW_BRN_31620) + IMG_UINT32 ui32CacheMasks[4]; + IMG_UINT32 i; + MMU_CONTEXT *psMMUContext; +#endif #if defined(PDUMP) IMG_VOID *pvDumpCommand; IMG_BOOL bPDumpIsSuspended = PDumpIsSuspended(); @@ -168,12 +176,37 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, PVR_UNREFERENCED_PARAMETER(ui32PDumpFlags); #endif +#if defined(FIX_HW_BRN_31620) + for(i=0;i<4;i++) + { + ui32CacheMasks[i] = 0; + } + + psMMUContext = psDevInfo->hKernelMMUContext; + psDeviceNode->pfnMMUGetCacheFlushRange(psMMUContext, &ui32CacheMasks[0]); + + + if (hDevMemContext) + { + BM_CONTEXT *psBMContext = (BM_CONTEXT *) hDevMemContext; + + psMMUContext = psBMContext->psMMUContext; + psDeviceNode->pfnMMUGetCacheFlushRange(psMMUContext, &ui32CacheMasks[2]); + } + + + if (ui32CacheMasks[0] || ui32CacheMasks[1] || ui32CacheMasks[2] || ui32CacheMasks[3]) + { + psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_PD; + } +#endif + #if defined(FIX_HW_BRN_28889) - if ( (eCmdType != SGXMKIF_CMD_PROCESS_QUEUES) && + if ( (eCmdType != SGXMKIF_CMD_PROCESS_QUEUES) && ((psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_DATA) != 0) && ((psDevInfo->ui32CacheControl & (SGXMKIF_CC_INVAL_BIF_PT | SGXMKIF_CC_INVAL_BIF_PD)) != 0)) { @@ -183,17 +216,18 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; SGXMKIF_COMMAND sCacheCommand = {0}; - eError = SGXScheduleCCBCommand(psDevInfo, + eError = SGXScheduleCCBCommand(psDeviceNode, SGXMKIF_CMD_PROCESS_QUEUES, &sCacheCommand, ui32CallerID, ui32PDumpFlags, + hDevMemContext, bLastInScene); if (eError != PVRSRV_OK) { goto Exit; } - + #if !defined(NO_HARDWARE) if(PollForValueKM(&psSGXHostCtl->ui32InvalStatus, @@ -207,7 +241,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, PVR_DBG_BREAK; } #endif - + #if defined(PDUMP) PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for BIF cache invalidate request to complete"); @@ -219,12 +253,60 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); #endif - + psSGXHostCtl->ui32InvalStatus &= ~(PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE); PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); } +#else + PVR_UNREFERENCED_PARAMETER(hDevMemContext); +#endif + +#if defined(FIX_HW_BRN_31620) + if ((eCmdType != SGXMKIF_CMD_FLUSHPDCACHE) && (psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_BIF_PD)) + { + SGXMKIF_COMMAND sPDECacheCommand = {0}; + IMG_DEV_PHYADDR sDevPAddr; + + + psMMUContext = psDevInfo->hKernelMMUContext; + + psDeviceNode->pfnMMUGetPDPhysAddr(psMMUContext, &sDevPAddr); + sPDECacheCommand.ui32Data[0] = sDevPAddr.uiAddr | 1; + sPDECacheCommand.ui32Data[1] = ui32CacheMasks[0]; + sPDECacheCommand.ui32Data[2] = ui32CacheMasks[1]; + + + if (hDevMemContext) + { + BM_CONTEXT *psBMContext = (BM_CONTEXT *) hDevMemContext; + + psMMUContext = psBMContext->psMMUContext; + + psDeviceNode->pfnMMUGetPDPhysAddr(psMMUContext, &sDevPAddr); + + sPDECacheCommand.ui32Data[3] = sDevPAddr.uiAddr | 1; + sPDECacheCommand.ui32Data[4] = ui32CacheMasks[2]; + sPDECacheCommand.ui32Data[5] = ui32CacheMasks[3]; + } + + + if (sPDECacheCommand.ui32Data[1] | sPDECacheCommand.ui32Data[2] | sPDECacheCommand.ui32Data[4] | + sPDECacheCommand.ui32Data[5]) + { + eError = SGXScheduleCCBCommand(psDeviceNode, + SGXMKIF_CMD_FLUSHPDCACHE, + &sPDECacheCommand, + ui32CallerID, + ui32PDumpFlags, + hDevMemContext, + bLastInScene); + if (eError != PVRSRV_OK) + { + goto Exit; + } + } + } #endif - #if defined(PDUMP) { @@ -242,6 +324,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, if(!psSGXCommand) { + PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Wait for CCB space timed out")) ; eError = PVRSRV_ERROR_TIMEOUT; goto Exit; } @@ -262,19 +345,19 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, if (eCmdType >= SGXMKIF_CMD_MAX) { - PVR_DPF((PVR_DBG_ERROR,"SGXScheduleCCBCommandKM: Unknown command type: %d", eCmdType)) ; + PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Unknown command type: %d", eCmdType)) ; eError = PVRSRV_ERROR_INVALID_CCB_COMMAND; goto Exit; } - if((eCmdType == SGXMKIF_CMD_TA) && bLastInScene) + if ((eCmdType == SGXMKIF_CMD_TA) && bLastInScene) { SYS_DATA *psSysData; SysAcquireData(&psSysData); - if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) + if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) { OSFlushCPUCacheKM(); } @@ -342,6 +425,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_FALSE); if (eError != PVRSRV_OK) { + PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Timeout waiting for previous command to be read")) ; eError = PVRSRV_ERROR_TIMEOUT; goto Exit; } @@ -400,6 +484,15 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, OSWriteMemoryBarrier(); + + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, + MKSYNC_TOKEN_KERNEL_CCB_OFFSET, *psKernelCCB->pui32WriteOffset); + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, + MKSYNC_TOKEN_CORE_CLK, psDevInfo->ui32CoreClockSpeed); + PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, + MKSYNC_TOKEN_UKERNEL_CLK, psDevInfo->ui32uKernelTimerClock); + + #if defined(FIX_HW_BRN_26620) && defined(SGX_FEATURE_SYSTEM_CACHE) && !defined(SGX_BYPASS_SYSTEM_CACHE) OSWriteHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK2, 0), @@ -427,10 +520,10 @@ PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE *psDeviceNode, SGXMKIF_COMMAND *psCommandData, IMG_UINT32 ui32CallerID, IMG_UINT32 ui32PDumpFlags, + IMG_HANDLE hDevMemContext, IMG_BOOL bLastInScene) { PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; PDUMPSUSPEND(); @@ -474,19 +567,9 @@ PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE *psDeviceNode, return eError; } - eError = SGXScheduleCCBCommand(psDevInfo, eCmdType, psCommandData, ui32CallerID, ui32PDumpFlags, bLastInScene); + eError = SGXScheduleCCBCommand(psDeviceNode, eCmdType, psCommandData, ui32CallerID, ui32PDumpFlags, hDevMemContext, bLastInScene); PVRSRVPowerUnlock(ui32CallerID); - - - if (ui32CallerID != ISR_ID) - { - - - - SGXTestActivePowerEvent(psDeviceNode, ui32CallerID); - } - return eError; } @@ -496,7 +579,7 @@ PVRSRV_ERROR SGXScheduleProcessQueuesKM(PVRSRV_DEVICE_NODE *psDeviceNode) PVRSRV_ERROR eError; PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; SGXMKIF_HOST_CTL *psHostCtl = psDevInfo->psKernelSGXHostCtlMemInfo->pvLinAddrKM; - IMG_UINT32 ui32PowerStatus; + IMG_UINT32 ui32PowerStatus; SGXMKIF_COMMAND sCommand = {0}; ui32PowerStatus = psHostCtl->ui32PowerStatus; @@ -506,7 +589,7 @@ PVRSRV_ERROR SGXScheduleProcessQueuesKM(PVRSRV_DEVICE_NODE *psDeviceNode) return PVRSRV_OK; } - eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_PROCESS_QUEUES, &sCommand, ISR_ID, 0, IMG_FALSE); + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_PROCESS_QUEUES, &sCommand, ISR_ID, 0, IMG_NULL, IMG_FALSE); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXScheduleProcessQueuesKM failed to schedule CCB command: %u", eError)); @@ -524,7 +607,11 @@ IMG_BOOL SGXIsDevicePowered(PVRSRV_DEVICE_NODE *psDeviceNode) IMG_EXPORT PVRSRV_ERROR SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, +#if defined (SUPPORT_SID_INTERFACE) + SGX_INTERNAL_DEVINFO_KM *psSGXInternalDevInfo) +#else SGX_INTERNAL_DEVINFO *psSGXInternalDevInfo) +#endif { PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookie)->pvDevice; @@ -539,37 +626,36 @@ PVRSRV_ERROR SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, } -IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_VIRTADDR *psHWDataDevVAddr, - IMG_UINT32 ui32CleanupType) +PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, + IMG_DEV_VIRTADDR *psHWDataDevVAddr, + IMG_UINT32 ui32CleanupType, + IMG_BOOL bForceCleanup) { PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psSGXDevInfo = psDeviceNode->pvDevice; - PVRSRV_KERNEL_MEM_INFO *psSGXHostCtlMemInfo = psSGXDevInfo->psKernelSGXHostCtlMemInfo; - SGXMKIF_HOST_CTL *psSGXHostCtl = psSGXHostCtlMemInfo->pvLinAddrKM; + PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; + PVRSRV_KERNEL_MEM_INFO *psHostCtlMemInfo = psDevInfo->psKernelSGXHostCtlMemInfo; + SGXMKIF_HOST_CTL *psHostCtl = psHostCtlMemInfo->pvLinAddrKM; + + SGXMKIF_COMMAND sCommand = {0}; - if ((psSGXHostCtl->ui32PowerStatus & PVRSRV_USSE_EDM_POWMAN_NO_WORK) != 0) - { - - } - else - { - SGXMKIF_COMMAND sCommand = {0}; - PDUMPCOMMENTWITHFLAGS(0, "Request ukernel resouce clean-up"); + if (bForceCleanup != FORCE_CLEANUP) + { sCommand.ui32Data[0] = ui32CleanupType; sCommand.ui32Data[1] = (psHWDataDevVAddr == IMG_NULL) ? 0 : psHWDataDevVAddr->uiAddr; - - eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CLEANUP, &sCommand, KERNEL_ID, 0, IMG_FALSE); + PDUMPCOMMENTWITHFLAGS(0, "Request ukernel resource clean-up, Type %u, Data 0x%X", sCommand.ui32Data[0], sCommand.ui32Data[1]); + + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CLEANUP, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); if (eError != PVRSRV_OK) { - PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command")); - PVR_DBG_BREAK; + PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command")); + PVR_DBG_BREAK; + return eError; } - + #if !defined(NO_HARDWARE) - if(PollForValueKM(&psSGXHostCtl->ui32CleanupStatus, + if(PollForValueKM(&psHostCtl->ui32CleanupStatus, PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, 10 * MAX_HW_TIME_US, @@ -577,32 +663,39 @@ IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_TRUE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType)); + eError = PVRSRV_ERROR_TIMEOUT; PVR_DBG_BREAK; } #endif - + #if defined(PDUMP) PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for clean-up request to complete"); - PDUMPMEMPOL(psSGXHostCtlMemInfo, + PDUMPMEMPOL(psHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, PDUMP_POLL_OPERATOR_EQUAL, 0, - MAKEUNIQUETAG(psSGXHostCtlMemInfo)); + MAKEUNIQUETAG(psHostCtlMemInfo)); #endif - - psSGXHostCtl->ui32CleanupStatus &= ~(PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE); - PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); - - - #if defined(SGX_FEATURE_SYSTEM_CACHE) - psSGXDevInfo->ui32CacheControl |= (SGXMKIF_CC_INVAL_BIF_SL | SGXMKIF_CC_INVAL_DATA); - #else - psSGXDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_DATA; - #endif + + if (eError != PVRSRV_OK) + { + return eError; + } } + + psHostCtl->ui32CleanupStatus &= ~(PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE); + PDUMPMEM(IMG_NULL, psHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psHostCtlMemInfo)); + + +#if defined(SGX_FEATURE_SYSTEM_CACHE) + psDevInfo->ui32CacheControl |= (SGXMKIF_CC_INVAL_BIF_SL | SGXMKIF_CC_INVAL_DATA); +#else + psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_DATA; +#endif + return PVRSRV_OK; } @@ -616,15 +709,18 @@ typedef struct _SGX_HW_RENDER_CONTEXT_CLEANUP_ static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) + IMG_UINT32 ui32Param, + IMG_BOOL bForceCleanup) { + PVRSRV_ERROR eError; SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup = pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); - SGXCleanupRequest(psCleanup->psDeviceNode, + eError = SGXCleanupRequest(psCleanup->psDeviceNode, &psCleanup->sHWRenderContextDevVAddr, - PVRSRV_CLEANUPCMD_RC); + PVRSRV_CLEANUPCMD_RC, + bForceCleanup); OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), @@ -632,7 +728,7 @@ static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, psCleanup->hBlockAlloc); - return PVRSRV_OK; + return eError; } typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ @@ -645,15 +741,18 @@ typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param) + IMG_UINT32 ui32Param, + IMG_BOOL bForceCleanup) { + PVRSRV_ERROR eError; SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup = (SGX_HW_TRANSFER_CONTEXT_CLEANUP *)pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); - SGXCleanupRequest(psCleanup->psDeviceNode, + eError = SGXCleanupRequest(psCleanup->psDeviceNode, &psCleanup->sHWTransferContextDevVAddr, - PVRSRV_CLEANUPCMD_TC); + PVRSRV_CLEANUPCMD_TC, + bForceCleanup); OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), @@ -661,7 +760,7 @@ static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, psCleanup->hBlockAlloc); - return PVRSRV_OK; + return eError; } IMG_EXPORT @@ -714,7 +813,7 @@ IMG_HANDLE SGXRegisterHWRenderContextKM(IMG_HANDLE psDeviceNode, } IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext) +PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup) { PVRSRV_ERROR eError; SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup; @@ -729,7 +828,7 @@ PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext) return PVRSRV_ERROR_INVALID_PARAMS; } - eError = ResManFreeResByPtr(psCleanup->psResItem); + eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); return eError; } @@ -785,7 +884,7 @@ IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, } IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext) +PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup) { PVRSRV_ERROR eError; SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup; @@ -800,7 +899,7 @@ PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext) return PVRSRV_ERROR_INVALID_PARAMS; } - eError = ResManFreeResByPtr(psCleanup->psResItem); + eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); return eError; } @@ -814,15 +913,19 @@ typedef struct _SGX_HW_2D_CONTEXT_CLEANUP_ PRESMAN_ITEM psResItem; } SGX_HW_2D_CONTEXT_CLEANUP; -static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) +static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, + IMG_UINT32 ui32Param, + IMG_BOOL bForceCleanup) { + PVRSRV_ERROR eError; SGX_HW_2D_CONTEXT_CLEANUP *psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)pvParam; PVR_UNREFERENCED_PARAMETER(ui32Param); - SGXCleanupRequest(psCleanup->psDeviceNode, + eError = SGXCleanupRequest(psCleanup->psDeviceNode, &psCleanup->sHW2DContextDevVAddr, - PVRSRV_CLEANUPCMD_2DC); + PVRSRV_CLEANUPCMD_2DC, + bForceCleanup); OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(SGX_HW_2D_CONTEXT_CLEANUP), @@ -830,7 +933,7 @@ static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, IMG_UINT32 psCleanup->hBlockAlloc); - return PVRSRV_OK; + return eError; } IMG_EXPORT @@ -883,7 +986,7 @@ IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, } IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext) +PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup) { PVRSRV_ERROR eError; SGX_HW_2D_CONTEXT_CLEANUP *psCleanup; @@ -897,7 +1000,7 @@ PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext) psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)hHW2DContext; - eError = ResManFreeResByPtr(psCleanup->psResItem); + eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); return eError; } @@ -986,13 +1089,16 @@ PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_EXPORT -IMG_VOID SGXFlushHWRenderTargetKM(IMG_HANDLE psDeviceNode, IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr) +PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psDeviceNode, + IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr, + IMG_BOOL bForceCleanup) { PVR_ASSERT(sHWRTDataSetDevVAddr.uiAddr != IMG_NULL); - SGXCleanupRequest(psDeviceNode, + return SGXCleanupRequest(psDeviceNode, &sHWRTDataSetDevVAddr, - PVRSRV_CLEANUPCMD_RT); + PVRSRV_CLEANUPCMD_RT, + bForceCleanup); } @@ -1018,3 +1124,40 @@ IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, +IMG_EXPORT +PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, + IMG_UINT32 *pui32SGXCoreID) +{ + PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; + SGX_MISC_INFO sMiscInfo; + PVRSRV_ERROR eError; + + sMiscInfo.eRequest = SGX_MISC_INFO_REQUEST_SGXREV; + eError = SGXGetMiscInfoKM(psDevInfo, &sMiscInfo, psDeviceNode, NULL); + + *pui32SGXCoreRev = sMiscInfo.uData.sSGXFeatures.ui32CoreRev; + *pui32SGXCoreID = sMiscInfo.uData.sSGXFeatures.ui32CoreID; + return eError; +} + + +PVRSRV_ERROR SGXContextSuspend(PVRSRV_DEVICE_NODE *psDeviceNode, + IMG_DEV_VIRTADDR *psHWContextDevVAddr, + IMG_BOOL bResume) +{ + PVRSRV_ERROR eError; + SGXMKIF_COMMAND sCommand = {0}; + + sCommand.ui32Data[0] = psHWContextDevVAddr->uiAddr; + sCommand.ui32Data[1] = bResume ? PVRSRV_CTXSUSPCMD_RESUME : PVRSRV_CTXSUSPCMD_SUSPEND; + + eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CONTEXTSUSPEND, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); + if (eError != PVRSRV_OK) + { + PVR_DPF((PVR_DBG_ERROR,"SGXContextSuspend: Failed to submit context suspend command")); + return eError; + } + + return eError; +} + diff --git a/services4/srvkm/devices/sgx/sgxutils.h b/services4/srvkm/devices/sgx/sgxutils.h index abf9dc2..bc60fdd 100644 --- a/services4/srvkm/devices/sgx/sgxutils.h +++ b/services4/srvkm/devices/sgx/sgxutils.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,8 +29,8 @@ #define CCB_OFFSET_IS_VALID(type, psCCBMemInfo, psCCBKick, offset) \ - ((sizeof(type) <= (psCCBMemInfo)->ui32AllocSize) && \ - ((psCCBKick)->offset <= (psCCBMemInfo)->ui32AllocSize - sizeof(type))) + ((sizeof(type) <= (psCCBMemInfo)->uAllocSize) && \ + ((psCCBKick)->offset <= (psCCBMemInfo)->uAllocSize - sizeof(type))) #define CCB_DATA_FROM_OFFSET(type, psCCBMemInfo, psCCBKick, offset) \ ((type *)(((IMG_CHAR *)(psCCBMemInfo)->pvLinAddrKM) + \ @@ -42,18 +42,20 @@ IMG_VOID SGXTestActivePowerEvent(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_UINT32 ui32CallerID); IMG_IMPORT -PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, +PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, SGXMKIF_CMD_TYPE eCommandType, SGXMKIF_COMMAND *psCommandData, IMG_UINT32 ui32CallerID, IMG_UINT32 ui32PDumpFlags, - IMG_BOOL bLastInScene); + IMG_HANDLE hDevMemContext, + IMG_BOOL bLastInScene); IMG_IMPORT PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE *psDeviceNode, SGXMKIF_CMD_TYPE eCommandType, SGXMKIF_COMMAND *psCommandData, IMG_UINT32 ui32CallerID, IMG_UINT32 ui32PDumpFlags, + IMG_HANDLE hDevMemContext, IMG_BOOL bLastInScene); IMG_IMPORT @@ -73,13 +75,15 @@ IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, PVRSRV_PER_PROCESS_DATA *psPerProc); IMG_IMPORT -IMG_VOID SGXFlushHWRenderTargetKM(IMG_HANDLE psSGXDevInfo, IMG_DEV_VIRTADDR psHWRTDataSetDevVAddr); +PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psSGXDevInfo, + IMG_DEV_VIRTADDR psHWRTDataSetDevVAddr, + IMG_BOOL bForceCleanup); IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext); +PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup); IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext); +PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup); #if defined(SGX_FEATURE_2D_HARDWARE) IMG_IMPORT @@ -88,15 +92,23 @@ IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, PVRSRV_PER_PROCESS_DATA *psPerProc); IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext); +PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup); #endif IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_UINT32 ui32TimeWraps, IMG_UINT32 ui32Time); -IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, +PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_DEV_VIRTADDR *psHWDataDevVAddr, - IMG_UINT32 ui32CleanupType); + IMG_UINT32 ui32CleanupType, + IMG_BOOL bForceCleanup); +IMG_IMPORT +PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, + IMG_UINT32 *pui32SGXCoreID); + +PVRSRV_ERROR SGXContextSuspend(PVRSRV_DEVICE_NODE *psDeviceNode, + IMG_DEV_VIRTADDR *psHWContextDevVAddr, + IMG_BOOL bResume); diff --git a/services4/srvkm/env/linux/Kbuild.mk b/services4/srvkm/env/linux/Kbuild.mk new file mode 100644 index 0000000..65e71d1 --- /dev/null +++ b/services4/srvkm/env/linux/Kbuild.mk @@ -0,0 +1,132 @@ +# +# Copyright (C) Imagination Technologies Ltd. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful but, except +# as otherwise stated in writing, without any warranty; without even the +# implied warranty of merchantability or fitness for a particular purpose. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information: +# Imagination Technologies Ltd. +# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK +# + +pvrsrvkm-y += \ + services4/srvkm/env/linux/osfunc.o \ + services4/srvkm/env/linux/mutils.o \ + services4/srvkm/env/linux/mmap.o \ + services4/srvkm/env/linux/module.o \ + services4/srvkm/env/linux/pdump.o \ + services4/srvkm/env/linux/proc.o \ + services4/srvkm/env/linux/pvr_bridge_k.o \ + services4/srvkm/env/linux/pvr_debug.o \ + services4/srvkm/env/linux/mm.o \ + services4/srvkm/env/linux/mutex.o \ + services4/srvkm/env/linux/event.o \ + services4/srvkm/env/linux/osperproc.o \ + services4/srvkm/common/buffer_manager.o \ + services4/srvkm/common/devicemem.o \ + services4/srvkm/common/deviceclass.o \ + services4/srvkm/common/handle.o \ + services4/srvkm/common/hash.o \ + services4/srvkm/common/metrics.o \ + services4/srvkm/common/pvrsrv.o \ + services4/srvkm/common/queue.o \ + services4/srvkm/common/ra.o \ + services4/srvkm/common/resman.o \ + services4/srvkm/common/power.o \ + services4/srvkm/common/mem.o \ + services4/srvkm/common/pdump_common.o \ + services4/srvkm/bridged/bridged_support.o \ + services4/srvkm/bridged/bridged_pvr_bridge.o \ + services4/srvkm/common/perproc.o \ + services4/system/$(PVR_SYSTEM)/sysconfig.o \ + services4/system/$(PVR_SYSTEM)/sysutils.o \ + services4/srvkm/common/lists.o \ + services4/srvkm/common/mem_debug.o \ + services4/srvkm/common/osfunc_common.o + +ifneq ($(W),1) +CFLAGS_osfunc.o := -Werror +CFLAGS_mutils.o := -Werror +CFLAGS_mmap.o := -Werror +CFLAGS_module.o := -Werror +CFLAGS_pdump.o := -Werror +CFLAGS_proc.o := -Werror +CFLAGS_pvr_bridge_k.o := -Werror +CFLAGS_pvr_debug.o := -Werror +CFLAGS_mm.o := -Werror +CFLAGS_mutex.o := -Werror +CFLAGS_event.o := -Werror +CFLAGS_osperproc.o := -Werror +CFLAGS_buffer_manager.o := -Werror +CFLAGS_devicemem.o := -Werror +CFLAGS_deviceclass.o := -Werror +CFLAGS_handle.o := -Werror +CFLAGS_hash.o := -Werror +CFLAGS_metrics.o := -Werror +CFLAGS_pvrsrv.o := -Werror +CFLAGS_queue.o := -Werror +CFLAGS_ra.o := -Werror +CFLAGS_resman.o := -Werror +CFLAGS_power.o := -Werror +CFLAGS_mem.o := -Werror +CFLAGS_pdump_common.o := -Werror +CFLAGS_bridged_support.o := -Werror +CFLAGS_bridged_pvr_bridge.o := -Werror +CFLAGS_perproc.o := -Werror +CFLAGS_lists.o := -Werror +CFLAGS_mem_debug.o := -Werror +CFLAGS_osfunc_common.o := -Werror +endif + +# SUPPORT_SGX==1 only + +pvrsrvkm-y += \ + services4/srvkm/bridged/sgx/bridged_sgx_bridge.o \ + services4/srvkm/devices/sgx/sgxinit.o \ + services4/srvkm/devices/sgx/sgxpower.o \ + services4/srvkm/devices/sgx/sgxreset.o \ + services4/srvkm/devices/sgx/sgxutils.o \ + services4/srvkm/devices/sgx/sgxkick.o \ + services4/srvkm/devices/sgx/sgxtransfer.o \ + services4/srvkm/devices/sgx/mmu.o \ + services4/srvkm/devices/sgx/pb.o + +ifneq ($(W),1) +CFLAGS_bridged_sgx_bridge.o := -Werror +CFLAGS_sgxinit.o := -Werror +CFLAGS_sgxpower.o := -Werror +CFLAGS_sgxreset.o := -Werror +CFLAGS_sgxutils.o := -Werror +CFLAGS_sgxkick.o := -Werror +CFLAGS_sgxtransfer.o := -Werror +CFLAGS_mmu.o := -Werror +CFLAGS_pb.o := -Werror +endif + +ifeq ($(SUPPORT_DRI_DRM),1) + +pvrsrvkm-y += \ + services4/srvkm/env/linux/pvr_drm.o + +ccflags-y += \ + -I$(KERNELDIR)/include/drm \ + -I$(TOP)/services4/include/env/linux \ + +ifeq ($(PVR_DRI_DRM_NOT_PCI),1) +ccflags-y += -I$(TOP)/services4/3rdparty/linux_drm +endif + +endif # SUPPORT_DRI_DRM diff --git a/eurasiacon/build/linux/omap3430_linux/makefile.core b/services4/srvkm/env/linux/Linux.mk similarity index 76% rename from eurasiacon/build/linux/omap3430_linux/makefile.core rename to services4/srvkm/env/linux/Linux.mk index eea2327..7eee6bc 100644 --- a/eurasiacon/build/linux/omap3430_linux/makefile.core +++ b/services4/srvkm/env/linux/Linux.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -23,15 +23,8 @@ # # -CORE = -DSGX$(SGXCORE) -DSUPPORT_SGX$(SGXCORE) - -ifeq ("$(SGXCOREREV)","") -ifeq ("$(SGXCORE)","530") -CORE += -DSGX_CORE_REV=121 -else -CORE += -DUSE_SGX_CORE_REV_HEAD -endif -else -CORE += -DSGX_CORE_REV=$(SGXCOREREV) -endif +modules := srvkm +srvkm_type := kernel_module +srvkm_target := pvrsrvkm.ko +srvkm_makefile := $(THIS_DIR)/Kbuild.mk diff --git a/services4/srvkm/env/linux/env_data.h b/services4/srvkm/env/linux/env_data.h index 3d41219..7716529 100644 --- a/services4/srvkm/env/linux/env_data.h +++ b/services4/srvkm/env/linux/env_data.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/env_perproc.h b/services4/srvkm/env/linux/env_perproc.h index a6e49db..dabf1e3 100644 --- a/services4/srvkm/env/linux/env_perproc.h +++ b/services4/srvkm/env/linux/env_perproc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/event.c b/services4/srvkm/env/linux/event.c index f8e8acb..7e160c3 100644 --- a/services4/srvkm/env/linux/event.c +++ b/services4/srvkm/env/linux/event.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,9 +25,10 @@ ******************************************************************************/ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -142,7 +143,7 @@ PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hO #if defined(DEBUG) PVR_DPF((PVR_DBG_MESSAGE, "LinuxEventObjectListDelete: Event object waits: %u", psLinuxEventObject->ui32Stats)); #endif - if(ResManFreeResByPtr(psLinuxEventObject->hResItem) != PVRSRV_OK) + if(ResManFreeResByPtr(psLinuxEventObject->hResItem, CLEANUP_WITH_POLL) != PVRSRV_OK) { return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; } @@ -154,13 +155,14 @@ PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hO } -static PVRSRV_ERROR LinuxEventObjectDeleteCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) +static PVRSRV_ERROR LinuxEventObjectDeleteCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup) { PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = pvParam; PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = psLinuxEventObject->psLinuxEventObjectList; unsigned long ulLockFlags; PVR_UNREFERENCED_PARAMETER(ui32Param); + PVR_UNREFERENCED_PARAMETER(bForceCleanup); write_lock_irqsave(&psLinuxEventObjectList->sLock, ulLockFlags); list_del(&psLinuxEventObject->sList); diff --git a/services4/srvkm/env/linux/event.h b/services4/srvkm/env/linux/event.h index d07bc97..3035283 100644 --- a/services4/srvkm/env/linux/event.h +++ b/services4/srvkm/env/linux/event.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/kbuild/Makefile b/services4/srvkm/env/linux/kbuild/Makefile deleted file mode 100644 index cd38db1..0000000 --- a/services4/srvkm/env/linux/kbuild/Makefile +++ /dev/null @@ -1,158 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# - -MODULE ?= $(PVRSRV_MODNAME) - -MODULE_CFLAGS = - -ifeq ($(PVR_KBUILD_IN_KERNEL),1) -# PVRKROOT is the relative path to the PVR sources. -# DRVKROOT should point to the non-PVR sources, if any. -PVRKROOT ?= . -KBUILDROOT = $(PVRKROOT)/services4 -else -KBUILDROOT = ../../../.. -endif - -clean-dirs := - -INCLUDES = -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/services4/include \ - -I$(EURASIAROOT)/services4/srvkm/env/linux \ - -I$(EURASIAROOT)/services4/srvkm/include \ - -I$(EURASIAROOT)/services4/srvkm/bridged \ - -I$(EURASIAROOT)/services4/system/$(PVR_SYSTEM) \ - -I$(EURASIAROOT)/services4/system/include - - -SOURCES = $(KBUILDROOT)/srvkm/env/linux/osfunc.c \ - $(KBUILDROOT)/srvkm/env/linux/mutils.c \ - $(KBUILDROOT)/srvkm/env/linux/mmap.c \ - $(KBUILDROOT)/srvkm/env/linux/module.c \ - $(KBUILDROOT)/srvkm/env/linux/pdump.c \ - $(KBUILDROOT)/srvkm/env/linux/proc.c \ - $(KBUILDROOT)/srvkm/env/linux/pvr_bridge_k.c \ - $(KBUILDROOT)/srvkm/env/linux/pvr_debug.c \ - $(KBUILDROOT)/srvkm/env/linux/mm.c \ - $(KBUILDROOT)/srvkm/env/linux/mutex.c \ - $(KBUILDROOT)/srvkm/env/linux/event.c \ - $(KBUILDROOT)/srvkm/env/linux/osperproc.c - -SOURCES += $(KBUILDROOT)/srvkm/common/buffer_manager.c \ - $(KBUILDROOT)/srvkm/common/devicemem.c \ - $(KBUILDROOT)/srvkm/common/deviceclass.c \ - $(KBUILDROOT)/srvkm/common/handle.c \ - $(KBUILDROOT)/srvkm/common/hash.c \ - $(KBUILDROOT)/srvkm/common/metrics.c \ - $(KBUILDROOT)/srvkm/common/pvrsrv.c \ - $(KBUILDROOT)/srvkm/common/queue.c \ - $(KBUILDROOT)/srvkm/common/ra.c \ - $(KBUILDROOT)/srvkm/common/resman.c \ - $(KBUILDROOT)/srvkm/common/power.c \ - $(KBUILDROOT)/srvkm/common/mem.c \ - $(KBUILDROOT)/srvkm/common/pdump_common.c \ - $(KBUILDROOT)/srvkm/bridged/bridged_support.c \ - $(KBUILDROOT)/srvkm/bridged/bridged_pvr_bridge.c \ - $(KBUILDROOT)/srvkm/common/perproc.c \ - $(KBUILDROOT)/../services4/system/$(PVR_SYSTEM)/sysconfig.c \ - $(KBUILDROOT)/../services4/system/$(PVR_SYSTEM)/sysutils.c \ - $(KBUILDROOT)/srvkm/common/lists.c \ - $(KBUILDROOT)/srvkm/common/mem_debug.c \ - $(KBUILDROOT)/srvkm/common/osfunc_common.c - -INCLUDES += -I$(EURASIAROOT)/services4/srvkm/hwdefs - -SYM_VERS_DEPS = $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux - - -# -# Device dependent -# - -ifeq ($(SUPPORT_SGX), 1) - -INCLUDES += -I$(EURASIAROOT)/services4/srvkm/bridged/sgx \ - -I$(EURASIAROOT)/services4/srvkm/devices/sgx - -SOURCES += $(KBUILDROOT)/srvkm/bridged/sgx/bridged_sgx_bridge.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxinit.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxpower.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxreset.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxutils.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxkick.c \ - $(KBUILDROOT)/srvkm/devices/sgx/sgxtransfer.c \ - $(KBUILDROOT)/srvkm/devices/sgx/mmu.c \ - $(KBUILDROOT)/srvkm/devices/sgx/pb.c - -else - -ifeq ($(SUPPORT_VGX), 1) - -INCLUDES += -I$(EURASIAROOT)/services4/srvkm/bridged/vgx \ - -I$(EURASIAROOT)/services4/srvkm/devices/vgx - -#FIXME: We need to cerate a subset of vgxdefs.h from $(EURASIAROOT)/hwdefs -# and put it into srvkm/hwdefs for GPL compliance -INCLUDES += -I$(EURASIAROOT)/hwdefs - -SOURCES += $(KBUILDROOT)/srvkm/bridged/vgx/bridged_vgx_bridge.c \ - $(KBUILDROOT)/srvkm/devices/vgx/vgxinit.c \ - $(KBUILDROOT)/srvkm/devices/vgx/vgxreset.c \ - $(KBUILDROOT)/srvkm/devices/vgx/mmu.c \ - $(KBUILDROOT)/srvkm/devices/vgx/pb.c \ - $(KBUILDROOT)/srvkm/devices/vgx/dma.c \ - $(KBUILDROOT)/srvkm/devices/vgx/dmacbuff.c \ - $(KBUILDROOT)/srvkm/devices/vgx/linkedlist.c -endif - -endif # SUPPORT_SGX - -ifeq ($(SUPPORT_DRI_DRM),1) - SOURCES += $(KBUILDROOT)/srvkm/env/linux/pvr_drm.c - INCLUDES += -I$(KERNELDIR)/include/drm \ - -I$(EURASIAROOT)/services4/include/env/linux - -ifneq ("$(DISPLAY_CONTROLLER_DIR)","") -include $(EURASIAROOT)/services4/$(DISPLAY_CONTROLLER_DIR)/makefile.linux.common -endif - -ifeq ($(PDUMP),1) -include $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux/makefile.linux.common -endif - -ifeq ($(SUPPORT_DRI_DRM_NOT_PCI),1) - INCLUDES += -I$(EURASIAROOT)/services4/3rdparty/linux_drm - KBUILD_EXTRA_SYMBOLS = $(EURASIAROOT)/services4/3rdparty/linux_drm/kbuild/Module.symvers -endif - -endif - -ifeq ($(PVR_MODULE_TEST),1) -INCLUDES += -I$(EURASIAROOT)/moduletests/include -SOURCES += $(KBUILDROOT)/../moduletests/services_test/kern_test.c -SYS_CFLAGS += -DMODULE_TEST -endif - -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/services4/srvkm/env/linux/linkage.h b/services4/srvkm/env/linux/linkage.h index 7e6d09a..e64012c 100644 --- a/services4/srvkm/env/linux/linkage.h +++ b/services4/srvkm/env/linux/linkage.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/lock.h b/services4/srvkm/env/linux/lock.h index e0bf5ee..a0854c3 100644 --- a/services4/srvkm/env/linux/lock.h +++ b/services4/srvkm/env/linux/lock.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/mm.c b/services4/srvkm/env/linux/mm.c index 8211d4a..3b59aec 100644 --- a/services4/srvkm/env/linux/mm.c +++ b/services4/srvkm/env/linux/mm.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,9 +25,10 @@ ******************************************************************************/ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -337,10 +338,10 @@ LinuxMMCleanup(IMG_VOID) IMG_VOID * -_KMallocWrapper(IMG_UINT32 ui32ByteSize, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) +_KMallocWrapper(IMG_UINT32 ui32ByteSize, gfp_t uFlags, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) { IMG_VOID *pvRet; - pvRet = kmalloc(ui32ByteSize, GFP_KERNEL); + pvRet = kmalloc(ui32ByteSize, uFlags); #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) if(pvRet) { @@ -397,7 +398,7 @@ DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE eAllocType, psRecord->pvCpuVAddr = pvCpuVAddr; psRecord->ulCpuPAddr = ulCpuPAddr; psRecord->pvPrivateData = pvPrivateData; - psRecord->pid = current->pid; + psRecord->pid = OSGetCurrentProcessIDKM(); psRecord->ui32Bytes = ui32Bytes; psRecord->pszFileName = pszFileName; psRecord->ui32Line = ui32Line; @@ -1320,7 +1321,7 @@ DebugLinuxMemAreaRecordAdd(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32Flags) psNewRecord->psLinuxMemArea = psLinuxMemArea; psNewRecord->ui32Flags = ui32Flags; - psNewRecord->pid = current->pid; + psNewRecord->pid = OSGetCurrentProcessIDKM(); List_DEBUG_LINUX_MEM_AREA_REC_Insert(&g_LinuxMemAreaRecords, psNewRecord); } diff --git a/services4/srvkm/env/linux/mm.h b/services4/srvkm/env/linux/mm.h index 21f295f..b32f5e8 100644 --- a/services4/srvkm/env/linux/mm.h +++ b/services4/srvkm/env/linux/mm.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,12 +27,11 @@ #ifndef __IMG_LINUX_MM_H__ #define __IMG_LINUX_MM_H__ - #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -164,11 +163,11 @@ IMG_VOID LinuxMMCleanup(IMG_VOID); #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define KMallocWrapper(ui32ByteSize) _KMallocWrapper(ui32ByteSize, __FILE__, __LINE__) +#define KMallocWrapper(ui32ByteSize, uFlags) _KMallocWrapper(ui32ByteSize, uFlags, __FILE__, __LINE__) #else -#define KMallocWrapper(ui32ByteSize) _KMallocWrapper(ui32ByteSize, NULL, 0) +#define KMallocWrapper(ui32ByteSize, uFlags) _KMallocWrapper(ui32ByteSize, uFlags, NULL, 0) #endif -IMG_VOID *_KMallocWrapper(IMG_UINT32 ui32ByteSize, IMG_CHAR *szFileName, IMG_UINT32 ui32Line); +IMG_VOID *_KMallocWrapper(IMG_UINT32 ui32ByteSize, gfp_t uFlags, IMG_CHAR *szFileName, IMG_UINT32 ui32Line); #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) diff --git a/services4/srvkm/env/linux/mmap.c b/services4/srvkm/env/linux/mmap.c index 2359c71..00c8b9d 100644 --- a/services4/srvkm/env/linux/mmap.c +++ b/services4/srvkm/env/linux/mmap.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,9 +26,9 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -70,7 +70,7 @@ #include "pvr_drm.h" #endif -#if !defined(PVR_SECURE_HANDLES) +#if !defined(PVR_SECURE_HANDLES) && !defined (SUPPORT_SID_INTERFACE) #error "The mmap code requires PVR_SECURE_HANDLES" #endif @@ -149,7 +149,11 @@ MMapOffsetToHandle(IMG_UINT32 pfn) #endif static inline IMG_UINT32 +#if defined (SUPPORT_SID_INTERFACE) +HandleToMMapOffset(IMG_SID hHandle) +#else HandleToMMapOffset(IMG_HANDLE hHandle) +#endif { IMG_UINT32 ulHandle = (IMG_UINT32)hHandle; @@ -273,11 +277,15 @@ DetermineUsersSizeAndByteOffset(LinuxMemArea *psLinuxMemArea, PVRSRV_ERROR PVRMMapOSMemHandleToMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hMHandle, - IMG_UINT32 *pui32MMapOffset, - IMG_UINT32 *pui32ByteOffset, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32UserVAddr) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle, +#else + IMG_HANDLE hMHandle, +#endif + IMG_UINT32 *pui32MMapOffset, + IMG_UINT32 *pui32ByteOffset, + IMG_UINT32 *pui32RealByteSize, + IMG_UINT32 *pui32UserVAddr) { LinuxMemArea *psLinuxMemArea; PKV_OFFSET_STRUCT psOffsetStruct; @@ -291,9 +299,13 @@ PVRMMapOSMemHandleToMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, eError = PVRSRVLookupOSMemHandle(psPerProc->psHandleBase, &hOSMemHandle, hMHandle); if (eError != PVRSRV_OK) { - PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %p failed", __FUNCTION__, hMHandle)); +#if defined (SUPPORT_SID_INTERFACE) + PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %x failed", __FUNCTION__, hMHandle)); +#else + PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %p failed", __FUNCTION__, hMHandle)); +#endif - goto exit_unlock; + goto exit_unlock; } psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; @@ -367,7 +379,11 @@ exit_unlock: PVRSRV_ERROR PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle, +#else IMG_HANDLE hMHandle, +#endif IMG_BOOL *pbMUnmap, IMG_UINT32 *pui32RealByteSize, IMG_UINT32 *pui32UserVAddr) @@ -385,7 +401,11 @@ PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, eError = PVRSRVLookupOSMemHandle(psPerProc->psHandleBase, &hOSMemHandle, hMHandle); if (eError != PVRSRV_OK) { +#if defined (SUPPORT_SID_INTERFACE) + PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %x failed", __FUNCTION__, hMHandle)); +#else PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %p failed", __FUNCTION__, hMHandle)); +#endif goto exit_unlock; } @@ -417,7 +437,11 @@ PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, } +#if defined (SUPPORT_SID_INTERFACE) + PVR_DPF((PVR_DBG_ERROR, "%s: Mapping data not found for handle %x (memory area %p)", __FUNCTION__, hMHandle, psLinuxMemArea)); +#else PVR_DPF((PVR_DBG_ERROR, "%s: Mapping data not found for handle %p (memory area %p)", __FUNCTION__, hMHandle, psLinuxMemArea)); +#endif eError = PVRSRV_ERROR_MAPPING_NOT_FOUND; @@ -593,10 +617,6 @@ MMapVOpenNoLock(struct vm_area_struct* ps_vma) psOffsetStruct->ui32MMapOffset, psOffsetStruct->ui32Mapped)); #endif - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) - MOD_INC_USE_COUNT; -#endif } @@ -640,10 +660,6 @@ MMapVCloseNoLock(struct vm_area_struct* ps_vma) } ps_vma->vm_private_data = NULL; - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) - MOD_DEC_USE_COUNT; -#endif } static void diff --git a/services4/srvkm/env/linux/mmap.h b/services4/srvkm/env/linux/mmap.h index 486154a..224e652 100644 --- a/services4/srvkm/env/linux/mmap.h +++ b/services4/srvkm/env/linux/mmap.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -94,14 +94,23 @@ PVRSRV_ERROR PVRMMapRemoveRegisteredArea(LinuxMemArea *psLinuxMemArea); PVRSRV_ERROR PVRMMapOSMemHandleToMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hMHandle, - IMG_UINT32 *pui32MMapOffset, - IMG_UINT32 *pui32ByteOffset, - IMG_UINT32 *pui32RealByteSize, IMG_UINT32 *pui32UserVAddr); +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle, +#else + IMG_HANDLE hMHandle, +#endif + IMG_UINT32 *pui32MMapOffset, + IMG_UINT32 *pui32ByteOffset, + IMG_UINT32 *pui32RealByteSize, + IMG_UINT32 *pui32UserVAddr); PVRSRV_ERROR PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hMHandle, +#else IMG_HANDLE hMHandle, +#endif IMG_BOOL *pbMUnmap, IMG_UINT32 *pui32RealByteSize, IMG_UINT32 *pui32UserVAddr); diff --git a/services4/srvkm/env/linux/module.c b/services4/srvkm/env/linux/module.c index 305db3a..1a96e7c 100644 --- a/services4/srvkm/env/linux/module.c +++ b/services4/srvkm/env/linux/module.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,14 +26,15 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif - -#if !defined(SUPPORT_DRI_DRM) +#if defined(SUPPORT_DRI_DRM) +#define PVR_MOD_STATIC +#else #if defined(LDM_PLATFORM) #define PVR_LDM_PLATFORM_MODULE @@ -44,6 +45,13 @@ #define PVR_LDM_MODULE #endif #endif +#define PVR_MOD_STATIC static +#endif + +#if defined(PVR_LDM_PLATFORM_PRE_REGISTERED) +#if !defined(NO_HARDWARE) +#define PVR_USE_PRE_REGISTERED_PLATFORM_DEV +#endif #endif #include @@ -129,11 +137,11 @@ static int PVRSRVRelease(struct inode* pInode, struct file* pFile); static struct file_operations pvrsrv_fops = { - .owner = THIS_MODULE, + .owner=THIS_MODULE, .unlocked_ioctl = PVRSRV_BridgeDispatchKM, - .open = PVRSRVOpen, - .release = PVRSRVRelease, - .mmap = PVRMMap, + .open=PVRSRVOpen, + .release=PVRSRVRelease, + .mmap=PVRMMap, }; #endif @@ -156,7 +164,6 @@ static IMG_UINT32 gPVRPowerLevel; #define LDM_DEV struct pci_dev #define LDM_DRV struct pci_driver #endif - #if defined(PVR_LDM_PLATFORM_MODULE) static int PVRSRVDriverRemove(LDM_DEV *device); static int PVRSRVDriverProbe(LDM_DEV *device); @@ -171,16 +178,23 @@ static int PVRSRVDriverResume(LDM_DEV *device); #if defined(PVR_LDM_PCI_MODULE) struct pci_device_id powervr_id_table[] __devinitdata = { - { PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID) }, + {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID)}, #if defined (SYS_SGX_DEV1_DEVICE_ID) - { PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID) }, + {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID)}, #endif - { 0 } + {0} }; MODULE_DEVICE_TABLE(pci, powervr_id_table); #endif +#if defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) +static struct platform_device_id powervr_id_table[] __devinitdata = { + {SYS_SGX_DEV_NAME, 0}, + {} +}; +#endif + static LDM_DRV powervr_driver = { #if defined(PVR_LDM_PLATFORM_MODULE) .driver = { @@ -189,6 +203,8 @@ static LDM_DRV powervr_driver = { #endif #if defined(PVR_LDM_PCI_MODULE) .name = DRVNAME, +#endif +#if defined(PVR_LDM_PCI_MODULE) || defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) .id_table = powervr_id_table, #endif .probe = PVRSRVDriverProbe, @@ -205,9 +221,9 @@ static LDM_DRV powervr_driver = { LDM_DEV *gpsPVRLDMDev; -#if defined(MODULE) && defined(PVR_LDM_PLATFORM_MODULE) - -static IMG_VOID PVRSRVDeviceRelease(struct device unref__ *pDevice) +#if defined(MODULE) && defined(PVR_LDM_PLATFORM_MODULE) && \ + !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) +static void PVRSRVDeviceRelease(struct device unref__ *pDevice) { } @@ -218,8 +234,7 @@ static struct platform_device powervr_device = { .release = PVRSRVDeviceRelease } }; - -#endif +#endif #if defined(PVR_LDM_PLATFORM_MODULE) static int PVRSRVDriverProbe(LDM_DEV *pDevice) @@ -277,7 +292,7 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice) } } #endif - (IMG_VOID)SysDeinitialise(psSysData); + (void) SysDeinitialise(psSysData); gpsPVRLDMDev = IMG_NULL; @@ -295,23 +310,25 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice) return; #endif } +#endif -static IMG_VOID PVRSRVDriverShutdown(LDM_DEV *pDevice) +#if defined(PVR_LDM_MODULE) || defined(PVR_DRI_DRM_PLATFORM_DEV) +PVR_MOD_STATIC void PVRSRVDriverShutdown(LDM_DEV *pDevice) { PVR_TRACE(("PVRSRVDriverShutdown(pDevice=%p)", pDevice)); - (IMG_VOID) PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3); + (void) PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3); } #endif #if defined(PVR_LDM_MODULE) || defined(SUPPORT_DRI_DRM) -#if defined(SUPPORT_DRI_DRM) +#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state) #else -static int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) +PVR_MOD_STATIC int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) #endif { #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) @@ -326,10 +343,10 @@ static int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) } -#if defined(SUPPORT_DRI_DRM) +#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) int PVRSRVDriverResume(struct drm_device *pDevice) #else -static int PVRSRVDriverResume(LDM_DEV *pDevice) +PVR_MOD_STATIC int PVRSRVDriverResume(LDM_DEV *pDevice) #endif { #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) @@ -432,7 +449,9 @@ static int PVRSRVOpen(struct inode unref__ * pInode, struct file *pFile) if(eError != PVRSRV_OK) goto err_unlock; -#if defined(PVR_SECURE_FD_EXPORT) +#if defined (SUPPORT_SID_INTERFACE) + psPrivateData->hKernelMemInfo = 0; +#else psPrivateData->hKernelMemInfo = NULL; #endif #if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) @@ -494,9 +513,9 @@ static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile) #if defined(SUPPORT_DRI_DRM) -int PVRCore_Init(IMG_VOID) +int PVRCore_Init(void) #else -static int __init PVRCore_Init(IMG_VOID) +static int __init PVRCore_Init(void) #endif { int error; @@ -548,7 +567,7 @@ static int __init PVRCore_Init(IMG_VOID) goto init_failed; } -#if defined(MODULE) +#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) if ((error = platform_device_register(&powervr_device)) != 0) { platform_driver_unregister(&powervr_driver); @@ -640,7 +659,7 @@ sys_deinit: #endif #if defined (PVR_LDM_PLATFORM_MODULE) -#if defined (MODULE) +#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) platform_device_unregister(&powervr_device); #endif platform_driver_unregister(&powervr_driver); @@ -654,7 +673,7 @@ sys_deinit: psSysData = SysAcquireDataNoCheck(); if (psSysData != IMG_NULL) { - (IMG_VOID)SysDeinitialise(psSysData); + (void) SysDeinitialise(psSysData); } } #endif @@ -676,11 +695,14 @@ void PVRCore_Cleanup(void) static void __exit PVRCore_Cleanup(void) #endif { +#if !defined(PVR_LDM_MODULE) SYS_DATA *psSysData; - +#endif PVR_TRACE(("PVRCore_Cleanup")); +#if !defined(PVR_LDM_MODULE) SysAcquireData(&psSysData); +#endif #if defined(PVR_LDM_MODULE) device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0)); @@ -709,7 +731,7 @@ static void __exit PVRCore_Cleanup(void) #endif #if defined (PVR_LDM_PLATFORM_MODULE) -#if defined (MODULE) +#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) platform_device_unregister(&powervr_device); #endif platform_driver_unregister(&powervr_driver); diff --git a/services4/srvkm/env/linux/mutex.c b/services4/srvkm/env/linux/mutex.c index 09963ad..742fa03 100644 --- a/services4/srvkm/env/linux/mutex.c +++ b/services4/srvkm/env/linux/mutex.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/mutex.h b/services4/srvkm/env/linux/mutex.h index b24a599..5e787b7 100644 --- a/services4/srvkm/env/linux/mutex.h +++ b/services4/srvkm/env/linux/mutex.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/mutils.c b/services4/srvkm/env/linux/mutils.c index 0a7cad1..a012cf5 100644 --- a/services4/srvkm/env/linux/mutils.c +++ b/services4/srvkm/env/linux/mutils.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,7 +25,8 @@ ******************************************************************************/ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED #include #endif diff --git a/services4/srvkm/env/linux/mutils.h b/services4/srvkm/env/linux/mutils.h index cdde900..b2a8ba0 100644 --- a/services4/srvkm/env/linux/mutils.h +++ b/services4/srvkm/env/linux/mutils.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,7 +29,7 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED #include #endif diff --git a/services4/srvkm/env/linux/osfunc.c b/services4/srvkm/env/linux/osfunc.c index ad39b05..8ad838a 100644 --- a/services4/srvkm/env/linux/osfunc.c +++ b/services4/srvkm/env/linux/osfunc.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,9 +26,9 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -80,14 +80,12 @@ #define ON_EACH_CPU(func, info, wait) on_each_cpu(func, info, 0, wait) #endif -#if defined(PVR_LINUX_USING_WORKQUEUES) && !defined(CONFIG_PREEMPT) -//#error "A preemptible Linux kernel is required when using workqueues" -#endif +#if defined(EMULATOR) +#define EVENT_OBJECT_TIMEOUT_MS (2000) +#else #define EVENT_OBJECT_TIMEOUT_MS (100) - -#define HOST_ALLOC_MEM_USING_KMALLOC ((IMG_HANDLE)0) -#define HOST_ALLOC_MEM_USING_VMALLOC ((IMG_HANDLE)1) +#endif #if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID *ppvCpuVAddr, IMG_HANDLE *phBlockAlloc) @@ -96,40 +94,30 @@ PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOI #endif { PVR_UNREFERENCED_PARAMETER(ui32Flags); + PVR_UNREFERENCED_PARAMETER(phBlockAlloc); + if (ui32Size > PAGE_SIZE) + { + #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - *ppvCpuVAddr = _KMallocWrapper(ui32Size, pszFilename, ui32Line); + *ppvCpuVAddr = _VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED, pszFilename, ui32Line); #else - *ppvCpuVAddr = KMallocWrapper(ui32Size); + *ppvCpuVAddr = VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED); #endif - if(*ppvCpuVAddr) - { - if (phBlockAlloc) - { - - *phBlockAlloc = HOST_ALLOC_MEM_USING_KMALLOC; - } - } - else - { - if (!phBlockAlloc) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; + if (*ppvCpuVAddr) + { + return PVRSRV_OK; + } } - #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - *ppvCpuVAddr = _VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED, pszFilename, ui32Line); + *ppvCpuVAddr = _KMallocWrapper(ui32Size, GFP_KERNEL | __GFP_NOWARN, pszFilename, ui32Line); #else - *ppvCpuVAddr = VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED); + *ppvCpuVAddr = KMallocWrapper(ui32Size, GFP_KERNEL | __GFP_NOWARN); #endif if (!*ppvCpuVAddr) { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - *phBlockAlloc = HOST_ALLOC_MEM_USING_VMALLOC; + return PVRSRV_ERROR_OUT_OF_MEMORY; } return PVRSRV_OK; @@ -153,19 +141,20 @@ PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID { PVR_UNREFERENCED_PARAMETER(ui32Flags); PVR_UNREFERENCED_PARAMETER(ui32Size); + PVR_UNREFERENCED_PARAMETER(hBlockAlloc); - if (hBlockAlloc == HOST_ALLOC_MEM_USING_VMALLOC) + if (is_vmalloc_addr(pvCpuVAddr)) { #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - _VFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); + _VFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); #else - VFreeWrapper(pvCpuVAddr); + VFreeWrapper(pvCpuVAddr); #endif } else { #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - _KFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); + _KFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); #else KFreeWrapper(pvCpuVAddr); #endif @@ -317,7 +306,7 @@ OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, eError = PVRMMapRegisterArea(psLinuxMemArea); if(eError != PVRSRV_OK) - { + { goto failed_register_area; } @@ -536,6 +525,25 @@ IMG_VOID OSSleepms(IMG_UINT32 ui32Timems) } + +IMG_HANDLE OSFuncHighResTimerCreate(IMG_VOID) +{ + + return (IMG_HANDLE) 1; +} + + +IMG_UINT32 OSFuncHighResTimerGetus(IMG_HANDLE hTimer) +{ + return (IMG_UINT32) jiffies_to_usecs(jiffies); +} + + +IMG_VOID OSFuncHighResTimerDestroy(IMG_HANDLE hTimer) +{ + PVR_UNREFERENCED_PARAMETER(hTimer); +} + IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID) { if (in_interrupt()) @@ -1014,7 +1022,7 @@ PVRSRV_ERROR OSUnlockResource (PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID) if(psResource->ui32ID == ui32ID) { psResource->ui32ID = 0; - smp_mb(); + smp_mb(); *pui32Access = 0; } else @@ -1044,6 +1052,20 @@ IMG_BOOL OSIsResourceLocked (PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID) } +#if !defined(SYS_CUSTOM_POWERLOCK_WRAP) +PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock) +{ + PVR_UNREFERENCED_PARAMETER(bTryLock); + + return PVRSRV_OK; +} + +IMG_VOID OSPowerLockUnwrap (IMG_VOID) +{ +} +#endif + + IMG_CPU_PHYADDR OSMapLinToCPUPhys(IMG_HANDLE hOSMemHandle, IMG_VOID *pvLinAddr) { @@ -1394,9 +1416,9 @@ PVRSRV_ERROR OSBaseAllocContigMemory(IMG_UINT32 ui32Size, IMG_CPU_VIRTADDR *pvLi IMG_VOID *pvKernLinAddr; #if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - pvKernLinAddr = _KMallocWrapper(ui32Size, __FILE__, __LINE__); + pvKernLinAddr = _KMallocWrapper(ui32Size, GFP_KERNEL, __FILE__, __LINE__); #else - pvKernLinAddr = KMallocWrapper(ui32Size); + pvKernLinAddr = KMallocWrapper(ui32Size, GFP_KERNEL); #endif if (!pvKernLinAddr) { @@ -1717,12 +1739,16 @@ PVRSRV_ERROR OSPCIResumeDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI) return PVRSRV_ERROR_UNKNOWN_POWER_STATE; } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) + pci_restore_state(psPVRPCI->psPCIDev); +#else err = pci_restore_state(psPVRPCI->psPCIDev); if (err != 0) { PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: pci_restore_state failed (%d)", err)); return PVRSRV_ERROR_PCI_CALL_FAILED; } +#endif err = pci_enable_device(psPVRPCI->psPCIDev); if (err != 0) @@ -1964,7 +1990,11 @@ PVRSRV_ERROR OSDisableTimer (IMG_HANDLE hTimer) } -PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *psEventObject) +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT_KM *psEventObject) +#else +PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *psEventObject) +#endif { PVRSRV_ERROR eError = PVRSRV_OK; @@ -1980,7 +2010,11 @@ PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *ps { static IMG_UINT16 ui16NameIndex = 0; +#if defined (SUPPORT_SID_INTERFACE) + snprintf(psEventObject->szName, EVENTOBJNAME_MAXLENGTH, "PVRSRV_EVENTOBJECT_KM_%d", ui16NameIndex++); +#else snprintf(psEventObject->szName, EVENTOBJNAME_MAXLENGTH, "PVRSRV_EVENTOBJECT_%d", ui16NameIndex++); +#endif } if(LinuxEventObjectListCreate(&psEventObject->hOSEventKM) != PVRSRV_OK) @@ -1991,7 +2025,7 @@ PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *ps } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreate: psEventObject is not a valid pointer")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreateKM: psEventObject is not a valid pointer")); eError = PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT; } @@ -2000,7 +2034,11 @@ PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *ps } -PVRSRV_ERROR OSEventObjectDestroy(PVRSRV_EVENTOBJECT *psEventObject) +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT_KM *psEventObject) +#else +PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT *psEventObject) +#endif { PVRSRV_ERROR eError = PVRSRV_OK; @@ -2012,20 +2050,20 @@ PVRSRV_ERROR OSEventObjectDestroy(PVRSRV_EVENTOBJECT *psEventObject) } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroy: hOSEventKM is not a valid pointer")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: hOSEventKM is not a valid pointer")); eError = PVRSRV_ERROR_INVALID_PARAMS; } } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroy: psEventObject is not a valid pointer")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: psEventObject is not a valid pointer")); eError = PVRSRV_ERROR_INVALID_PARAMS; } return eError; } -PVRSRV_ERROR OSEventObjectWait(IMG_HANDLE hOSEventKM) +PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM) { PVRSRV_ERROR eError; @@ -2035,14 +2073,18 @@ PVRSRV_ERROR OSEventObjectWait(IMG_HANDLE hOSEventKM) } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectWait: hOSEventKM is not a valid handle")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectWaitKM: hOSEventKM is not a valid handle")); eError = PVRSRV_ERROR_INVALID_PARAMS; } return eError; } -PVRSRV_ERROR OSEventObjectOpen(PVRSRV_EVENTOBJECT *psEventObject, +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT_KM *psEventObject, +#else +PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT *psEventObject, +#endif IMG_HANDLE *phOSEvent) { PVRSRV_ERROR eError = PVRSRV_OK; @@ -2058,14 +2100,18 @@ PVRSRV_ERROR OSEventObjectOpen(PVRSRV_EVENTOBJECT *psEventObject, } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreate: psEventObject is not a valid pointer")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreateKM: psEventObject is not a valid pointer")); eError = PVRSRV_ERROR_INVALID_PARAMS; } return eError; } -PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject, +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT_KM *psEventObject, +#else +PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT *psEventObject, +#endif IMG_HANDLE hOSEventKM) { PVRSRV_ERROR eError = PVRSRV_OK; @@ -2081,7 +2127,7 @@ PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject, } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroy: psEventObject is not a valid pointer")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: psEventObject is not a valid pointer")); eError = PVRSRV_ERROR_INVALID_PARAMS; } @@ -2089,7 +2135,7 @@ PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject, } -PVRSRV_ERROR OSEventObjectSignal(IMG_HANDLE hOSEventKM) +PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM) { PVRSRV_ERROR eError; @@ -2099,7 +2145,7 @@ PVRSRV_ERROR OSEventObjectSignal(IMG_HANDLE hOSEventKM) } else { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectSignal: hOSEventKM is not a valid handle")); + PVR_DPF((PVR_DBG_ERROR, "OSEventObjectSignalKM: hOSEventKM is not a valid handle")); eError = PVRSRV_ERROR_INVALID_PARAMS; } @@ -2926,50 +2972,52 @@ IMG_VOID OSFlushCPUCacheKM(IMG_VOID) outer_flush_all(); #endif } + static inline size_t pvr_dmac_range_len(const void *pvStart, const void *pvEnd) { - return (size_t)((char *)pvEnd - (char *)pvStart); + return (size_t)((char *)pvEnd - (char *)pvStart); } - static void pvr_dmac_inv_range(const void *pvStart, const void *pvEnd) { #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) - dmac_inv_range(pvStart, pvEnd); + dmac_inv_range(pvStart, pvEnd); #else - dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_FROM_DEVICE); + dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_FROM_DEVICE); #endif } static void pvr_dmac_clean_range(const void *pvStart, const void *pvEnd) { #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) - dmac_clean_range(pvStart, pvEnd); + dmac_clean_range(pvStart, pvEnd); #else - dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_TO_DEVICE); + dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_TO_DEVICE); #endif } - IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length,dmac_flush_range, (OuterCacheOp_t)outer_flush_range); + return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, + dmac_flush_range, (OuterCacheOp_t)outer_flush_range); } IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length,pvr_dmac_clean_range, (OuterCacheOp_t)outer_clean_range); + return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, + pvr_dmac_clean_range, (OuterCacheOp_t)outer_clean_range); } IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length,pvr_dmac_inv_range, (OuterCacheOp_t)outer_inv_range); + return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, + pvr_dmac_inv_range, (OuterCacheOp_t)outer_inv_range); } #else @@ -2991,7 +3039,8 @@ IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } @@ -2999,7 +3048,8 @@ IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } @@ -3007,7 +3057,8 @@ IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } diff --git a/services4/srvkm/env/linux/osperproc.c b/services4/srvkm/env/linux/osperproc.c index 011c8f3..6b57dfc 100644 --- a/services4/srvkm/env/linux/osperproc.c +++ b/services4/srvkm/env/linux/osperproc.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/pdump.c b/services4/srvkm/env/linux/pdump.c index 0b932b0..13d9b0d 100644 --- a/services4/srvkm/env/linux/pdump.c +++ b/services4/srvkm/env/linux/pdump.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -431,7 +431,7 @@ IMG_VOID PDumpInit(IMG_VOID) } PDUMPCOMMENT("Driver Product Name: %s", VS_PRODUCT_NAME); - PDUMPCOMMENT("Driver Product Version: %s (%s)", PVRVERSION_STRING, PVRVERSION_FILE); + PDUMPCOMMENT("Driver Product Version: %s (%s)", PVRVERSION_STRING, PVRVERSION_FAMILY); PDUMPCOMMENT("Start of Init Phase"); } diff --git a/services4/srvkm/env/linux/private_data.h b/services4/srvkm/env/linux/private_data.h index 49974b8..b8751d3 100644 --- a/services4/srvkm/env/linux/private_data.h +++ b/services4/srvkm/env/linux/private_data.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -32,36 +32,24 @@ #include #endif -#if defined(SUPPORT_DRI_DRM) && defined(PVR_LINUX_USING_WORKQUEUES) -#include -#endif - typedef struct { IMG_UINT32 ui32OpenPID; -#if defined(PVR_SECURE_FD_EXPORT) +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hKernelMemInfo; +#else IMG_HANDLE hKernelMemInfo; -#endif - -#if defined(SUPPORT_DRI_DRM) -#if defined(PVR_SECURE_DRM_AUTH_EXPORT) - struct drm_file *psDRMFile; +#endif +#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) struct list_head sDRMAuthListItem; -#endif -#if defined(PVR_LINUX_USING_WORKQUEUES) - struct work_struct sReleaseWork; -#endif - -#if defined(SUPPORT_DRI_DRM_EXT) - IMG_PVOID pPriv; + struct drm_file *psDRMFile; #endif -#endif #if defined(SUPPORT_MEMINFO_IDS) @@ -70,6 +58,10 @@ typedef struct IMG_HANDLE hBlockAlloc; + +#if defined(SUPPORT_DRI_DRM_EXT) + IMG_PVOID pPriv; +#endif } PVRSRV_FILE_PRIVATE_DATA; diff --git a/services4/srvkm/env/linux/proc.c b/services4/srvkm/env/linux/proc.c index 27078ef..1df8aff 100644 --- a/services4/srvkm/env/linux/proc.c +++ b/services4/srvkm/env/linux/proc.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,9 +26,9 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif diff --git a/services4/srvkm/env/linux/proc.h b/services4/srvkm/env/linux/proc.h index 823b666..2066d71 100644 --- a/services4/srvkm/env/linux/proc.h +++ b/services4/srvkm/env/linux/proc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/env/linux/pvr_bridge_k.c b/services4/srvkm/env/linux/pvr_bridge_k.c index 3a59ce0..f0aae8d 100644 --- a/services4/srvkm/env/linux/pvr_bridge_k.c +++ b/services4/srvkm/env/linux/pvr_bridge_k.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -35,6 +35,7 @@ #include "private_data.h" #include "linkage.h" #include "pvr_bridge_km.h" +#include "pvr_uaccess.h" #if defined(SUPPORT_DRI_DRM) #include @@ -54,12 +55,6 @@ #include "bridged_pvr_bridge.h" -#ifdef MODULE_TEST -#include "pvr_test_bridge.h" -#include "kern_test.h" -#endif - - #if defined(SUPPORT_DRI_DRM) #define PRIVATE_DATA(pFile) ((pFile)->driver_priv) #else @@ -234,150 +229,6 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig #endif cmd = psBridgePackageKM->ui32BridgeID; - -#if defined(MODULE_TEST) - switch (cmd) - { - case PVRSRV_BRIDGE_SERVICES_TEST_MEM1: - { - PVRSRV_ERROR eError = MemTest1(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - case PVRSRV_BRIDGE_SERVICES_TEST_MEM2: - { - PVRSRV_ERROR eError = MemTest2(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_RESOURCE: - { - PVRSRV_ERROR eError = ResourceTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_EVENTOBJECT: - { - PVRSRV_ERROR eError = EventObjectTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_MEMMAPPING: - { - PVRSRV_ERROR eError = MemMappingTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_PROCESSID: - { - PVRSRV_ERROR eError = ProcessIDTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_CLOCKUSWAITUS: - { - PVRSRV_ERROR eError = ClockusWaitusTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_TIMER: - { - PVRSRV_ERROR eError = TimerTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - case PVRSRV_BRIDGE_SERVICES_TEST_PRIVSRV: - { - PVRSRV_ERROR eError = PrivSrvTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - case PVRSRV_BRIDGE_SERVICES_TEST_COPYDATA: - { - IMG_UINT32 ui32PID; - PVRSRV_PER_PROCESS_DATA *psPerProc; - PVRSRV_ERROR eError; - - ui32PID = OSGetCurrentProcessIDKM(); - - PVRSRVTrace("PVRSRV_BRIDGE_SERVICES_TEST_COPYDATA %d", ui32PID); - - psPerProc = PVRSRVPerProcessData(ui32PID); - - eError = CopyDataTest(psBridgePackageKM->pvParamIn, psBridgePackageKM->pvParamOut, psPerProc); - - *(PVRSRV_ERROR*)psBridgePackageKM->pvParamOut = eError; - err = 0; - goto unlock_and_return; - } - - - case PVRSRV_BRIDGE_SERVICES_TEST_POWERMGMT: - { - PVRSRV_ERROR eError = PowerMgmtTest(); - if (psBridgePackageKM->ui32OutBufferSize == sizeof(PVRSRV_BRIDGE_RETURN)) - { - PVRSRV_BRIDGE_RETURN* pReturn = (PVRSRV_BRIDGE_RETURN*)psBridgePackageKM->pvParamOut ; - pReturn->eError = eError; - } - } - err = 0; - goto unlock_and_return; - - } -#endif if(cmd != PVRSRV_BRIDGE_CONNECT_SERVICES) { @@ -416,10 +267,9 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig psBridgePackageKM->ui32BridgeID = PVRSRV_GET_BRIDGE_ID(psBridgePackageKM->ui32BridgeID); -#if defined(PVR_SECURE_FD_EXPORT) switch(cmd) { - case PVRSRV_BRIDGE_EXPORT_DEVICEMEM: + case PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2: { PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); @@ -432,7 +282,8 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig } break; } - case PVRSRV_BRIDGE_MAP_DEV_MEMORY: + + case PVRSRV_BRIDGE_MAP_DEV_MEMORY_2: { PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *psMapDevMemIN = (PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *)psBridgePackageKM->pvParamIn; @@ -446,7 +297,11 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig goto unlock_and_return; } - psMapDevMemIN->hKernelMemInfo = psPrivateData->hKernelMemInfo; + if (pvr_put_user(psPrivateData->hKernelMemInfo, &psMapDevMemIN->hKernelMemInfo) != 0) + { + err = -EFAULT; + goto unlock_and_return; + } break; } @@ -463,7 +318,7 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig break; } } -#endif + #if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) switch(cmd) { @@ -521,8 +376,7 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig switch(cmd) { -#if defined(PVR_SECURE_FD_EXPORT) - case PVRSRV_BRIDGE_EXPORT_DEVICEMEM: + case PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2: { PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT = (PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *)psBridgePackageKM->pvParamOut; @@ -530,11 +384,17 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig psPrivateData->hKernelMemInfo = psExportDeviceMemOUT->hMemInfo; #if defined(SUPPORT_MEMINFO_IDS) - psExportDeviceMemOUT->ui64Stamp = psPrivateData->ui64Stamp = ++ui64Stamp; + psPrivateData->ui64Stamp = ++ui64Stamp; + + psExportDeviceMemOUT->ui64Stamp = psPrivateData->ui64Stamp; + if (pvr_put_user(psPrivateData->ui64Stamp, &psExportDeviceMemOUT->ui64Stamp) != 0) + { + err = -EFAULT; + goto unlock_and_return; + } #endif break; } -#endif #if defined(SUPPORT_MEMINFO_IDS) case PVRSRV_BRIDGE_MAP_DEV_MEMORY: @@ -542,7 +402,11 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *psMapDeviceMemoryOUT = (PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *)psBridgePackageKM->pvParamOut; PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - psMapDeviceMemoryOUT->sDstClientMemInfo.ui64Stamp = psPrivateData->ui64Stamp; + if (pvr_put_user(psPrivateData->ui64Stamp, &psMapDeviceMemoryOUT->sDstClientMemInfo.ui64Stamp) != 0) + { + err = -EFAULT; + goto unlock_and_return; + } break; } @@ -550,7 +414,11 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig { PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *psDeviceClassMemoryOUT = (PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *)psBridgePackageKM->pvParamOut; - psDeviceClassMemoryOUT->sClientMemInfo.ui64Stamp = ++ui64Stamp; + if (pvr_put_user(++ui64Stamp, &psDeviceClassMemoryOUT->sClientMemInfo.ui64Stamp) != 0) + { + err = -EFAULT; + goto unlock_and_return; + } break; } #endif diff --git a/services4/srvkm/env/linux/pvr_debug.c b/services4/srvkm/env/linux/pvr_debug.c index 476319c..d57a37f 100644 --- a/services4/srvkm/env/linux/pvr_debug.c +++ b/services4/srvkm/env/linux/pvr_debug.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,9 +25,10 @@ ******************************************************************************/ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -74,9 +75,8 @@ static IMG_CHAR gszBufferIRQ[PVR_MAX_MSG_LEN + 1]; static PVRSRV_LINUX_MUTEX gsDebugMutexNonIRQ; - +static DEFINE_SPINLOCK(gsDebugLockIRQ); //static spinlock_t gsDebugLockIRQ = SPIN_LOCK_UNLOCKED; -static DEFINE_SPINLOCK(gsDebugLockIRQ); #if !defined (USE_SPIN_LOCK) #define USE_SPIN_LOCK (in_interrupt() || !preemptible()) @@ -316,7 +316,8 @@ IMG_VOID PVRSRVDebugPrintf ( IMG_CHAR* pszTruncBackInter; - pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; + if (strlen(pszFullFileName) > strlen(DEBUG_LOG_PATH_TRUNCATE)+1) + pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); diff --git a/services4/srvkm/env/linux/pvr_drm.c b/services4/srvkm/env/linux/pvr_drm.c index c7eecb3..5528070 100644 --- a/services4/srvkm/env/linux/pvr_drm.c +++ b/services4/srvkm/env/linux/pvr_drm.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -27,9 +27,10 @@ #if defined(SUPPORT_DRI_DRM) #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -78,8 +79,12 @@ IMG_BOOL bInitComplete; IMG_BOOL bInitFailed; #if !defined(PVR_DRI_DRM_NOT_PCI) +#if defined(PVR_DRI_DRM_PLATFORM_DEV) +struct platform_device *gpsPVRLDMDev; +#else struct pci_dev *gpsPVRLDMDev; #endif +#endif struct drm_device *gpsPVRDRMDev; @@ -90,6 +95,14 @@ struct drm_device *gpsPVRDRMDev; #define PVR_DRM_FILE struct drm_file * #if !defined(SUPPORT_DRI_DRM_EXT) +#if defined(PVR_DRI_DRM_PLATFORM_DEV) +#if defined(PVR_LDM_PLATFORM_PRE_REGISTERED) +static struct platform_device_id asPlatIdList[] = { + {SYS_SGX_DEV_NAME, 0}, + {} +}; +#endif +#else static struct pci_device_id asPciIdList[] = { #if defined(PVR_DRI_DRM_NOT_PCI) {1, 1, 1, 1, 0, 0, 0}, @@ -102,18 +115,23 @@ static struct pci_device_id asPciIdList[] = { {0} }; #endif +#endif DRI_DRM_STATIC int PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags) { - int iRes=0; + int iRes = 0; PVR_TRACE(("PVRSRVDrmLoad")); gpsPVRDRMDev = dev; #if !defined(PVR_DRI_DRM_NOT_PCI) +#if defined(PVR_DRI_DRM_PLATFORM_DEV) + gpsPVRLDMDev = dev->platformdev; +#else gpsPVRLDMDev = dev->pdev; #endif +#endif #if defined(PDUMP) iRes = dbgdrv_init(); @@ -136,8 +154,8 @@ PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags) goto exit_pvrcore_cleanup; } #endif -// return 0; - goto exit; + goto exit; + #if defined(DISPLAY_CONTROLLER) exit_pvrcore_cleanup: PVRCore_Cleanup(); @@ -155,7 +173,6 @@ exit: wake_up_interruptible(&sWaitForInit); - return iRes; } @@ -180,7 +197,7 @@ PVRSRVDrmUnload(struct drm_device *dev) DRI_DRM_STATIC int PVRSRVDrmOpen(struct drm_device *dev, struct drm_file *file) { -while (!bInitComplete) + while (!bInitComplete) { DEFINE_WAIT(sWait); @@ -207,7 +224,6 @@ while (!bInitComplete) return -EINVAL; } - return PVRSRVOpen(dev, file); } @@ -309,56 +325,54 @@ PVRDRM_Display_ioctl(struct drm_device *dev, void *arg, struct drm_file *pFile) #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) #define PVR_DRM_FOPS_IOCTL .unlocked_ioctl #define PVR_DRM_UNLOCKED DRM_UNLOCKED -#define DRM_IOCTL_PVR_DRM_SRVKM_IOCTL PVR_DRM_SRVKM_IOCTL -#define DRM_PVR_DRM_SRVKM_IOCTL PVR_DRM_SRVKM_IOCTL -#define DRM_PVR_DRM_IS_MASTER_IOCTL PVR_DRM_IS_MASTER_IOCTL -#define DRM_IOCTL_PVR_DRM_IS_MASTER_IOCTL PVR_DRM_IS_MASTER_IOCTL -#define DRM_PVR_DRM_UNPRIV_IOCTL PVR_DRM_UNPRIV_IOCTL -#define DRM_IOCTL_PVR_DRM_UNPRIV_IOCTL PVR_DRM_UNPRIV_IOCTL #else #define PVR_DRM_FOPS_IOCTL .ioctl #define PVR_DRM_UNLOCKED 0 #endif #if !defined(SUPPORT_DRI_DRM_EXT) -struct drm_ioctl_desc sPVRDrmIoctls[] = { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) - DRM_IOCTL_DEF_DRV(PVR_DRM_SRVKM_IOCTL, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), - DRM_IOCTL_DEF_DRV(PVR_DRM_IS_MASTER_IOCTL, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), - DRM_IOCTL_DEF_DRV(PVR_DRM_UNPRIV_IOCTL, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), + +#if defined(DRM_IOCTL_DEF) +#define PVR_DRM_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(DRM_##ioctl, _func, _flags) #else - DRM_IOCTL_DEF(PVR_DRM_SRVKM_IOCTL, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), - DRM_IOCTL_DEF(PVR_DRM_IS_MASTER_IOCTL, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), - DRM_IOCTL_DEF(PVR_DRM_UNPRIV_IOCTL, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), +#define PVR_DRM_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) #endif + +struct drm_ioctl_desc sPVRDrmIoctls[] = { + PVR_DRM_IOCTL_DEF(PVR_SRVKM, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), + PVR_DRM_IOCTL_DEF(PVR_IS_MASTER, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), + PVR_DRM_IOCTL_DEF(PVR_UNPRIV, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), #if defined(PDUMP) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) - DRM_IOCTL_DEF_DRV(PVR_DRM_DBGDRV_IOCTL, dbgdrv_ioctl, PVR_DRM_UNLOCKED), -#else - DRM_IOCTL_DEF(PVR_DRM_DBGDRV_IOCTL, dbgdrv_ioctl, PVR_DRM_UNLOCKED), -#endif + PVR_DRM_IOCTL_DEF(PVR_DBGDRV, dbgdrv_ioctl, PVR_DRM_UNLOCKED), #endif #if defined(DISPLAY_CONTROLLER) && defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) - DRM_IOCTL_DEF_DRV(PVR_DRM_DISP_IOCTL, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) -#else - DRM_IOCTL_DEF(PVR_DRM_DISP_IOCTL, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) -#endif + PVR_DRM_IOCTL_DEF(PVR_DISP, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) #endif }; static int pvr_max_ioctl = DRM_ARRAY_SIZE(sPVRDrmIoctls); +#if defined(PVR_DRI_DRM_PLATFORM_DEV) && !defined(SUPPORT_DRI_DRM_EXT) +static int PVRSRVDrmProbe(struct platform_device *pDevice); +static int PVRSRVDrmRemove(struct platform_device *pDevice); +#endif + static struct drm_driver sPVRDrmDriver = { +#if defined(PVR_DRI_DRM_PLATFORM_DEV) + .driver_features = DRIVER_USE_PLATFORM_DEVICE, +#else .driver_features = 0, +#endif .dev_priv_size = 0, .load = PVRSRVDrmLoad, .unload = PVRSRVDrmUnload, .open = PVRSRVDrmOpen, +#if !defined(PVR_DRI_DRM_PLATFORM_DEV) .suspend = PVRSRVDriverSuspend, .resume = PVRSRVDriverResume, -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) .get_map_ofs = drm_core_get_map_ofs, .get_reg_ofs = drm_core_get_reg_ofs, #endif @@ -373,6 +387,21 @@ static struct drm_driver sPVRDrmDriver = .poll = drm_poll, .fasync = drm_fasync, }, +#if defined(PVR_DRI_DRM_PLATFORM_DEV) + .platform_driver = + { + .id_table = asPlatIdList, + .driver = + { + .name = PVR_DRM_NAME, + }, + .probe = PVRSRVDrmProbe, + .remove = PVRSRVDrmRemove, + .suspend = PVRSRVDriverSuspend, + .resume = PVRSRVDriverResume, + .shutdown = PVRSRVDriverShutdown, + }, +#else #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) .pci_driver = { @@ -380,17 +409,13 @@ static struct drm_driver sPVRDrmDriver = .id_table = asPciIdList, }, #else - .kdriver = - { - PVR_DRM_NAME, - asPciIdList, - }, -// { -// .pci->name = PVR_DRM_NAME, -// .pci->id_table = asPciIdList, -// }, + .kdriver = + { + PVR_DRM_NAME, + asPciIdList, + }, +#endif #endif - .name = PVR_DRM_NAME, .desc = PVR_DRM_DESC, .date = PVR_BUILD_DATE, @@ -406,6 +431,27 @@ static struct pci_driver pci_pvr_driver = { }; #endif + +#if defined(PVR_DRI_DRM_PLATFORM_DEV) && !defined(SUPPORT_DRI_DRM_EXT) +static int +PVRSRVDrmProbe(struct platform_device *pDevice) +{ + PVR_TRACE(("PVRSRVDrmProbe")); + + return drm_get_platform_dev(pDevice, &sPVRDrmDriver); +} + +static int +PVRSRVDrmRemove(struct platform_device *pDevice) +{ + PVR_TRACE(("PVRSRVDrmRemove")); + + drm_put_dev(gpsPVRDRMDev); + + return 0; +} + +#endif static int __init PVRSRVDrmInit(void) { int iRes; @@ -421,11 +467,10 @@ static int __init PVRSRVDrmInit(void) return iRes; } #endif - #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) - iRes = drm_init(&sPVRDrmDriver); + iRes = drm_init(&sPVRDrmDriver); #else - iRes = drm_pci_init(&sPVRDrmDriver,&pci_pvr_driver); + iRes = drm_pci_init(&sPVRDrmDriver,&pci_pvr_driver); #endif #if defined(PVR_DRI_DRM_NOT_PCI) if (iRes != 0) @@ -439,9 +484,9 @@ static int __init PVRSRVDrmInit(void) static void __exit PVRSRVDrmExit(void) { #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) - drm_exit(&sPVRDrmDriver); + drm_exit(&sPVRDrmDriver); #else - drm_pci_exit(&sPVRDrmDriver,&pci_pvr_driver); + drm_pci_exit(&sPVRDrmDriver,&pci_pvr_driver); #endif #if defined(PVR_DRI_DRM_NOT_PCI) diff --git a/services4/srvkm/env/linux/pvr_drm.h b/services4/srvkm/env/linux/pvr_drm.h index b529ef1..9bd5540 100644 --- a/services4/srvkm/env/linux/pvr_drm.h +++ b/services4/srvkm/env/linux/pvr_drm.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -33,12 +33,23 @@ #define PVR_DRM_MAKENAME_HELPER(x, y) x ## y #define PVR_DRM_MAKENAME(x, y) PVR_DRM_MAKENAME_HELPER(x, y) +#if defined(PVR_DRI_DRM_PLATFORM_DEV) +#define LDM_DEV struct platform_device +#endif + int PVRCore_Init(void); void PVRCore_Cleanup(void); int PVRSRVOpen(struct drm_device *dev, struct drm_file *pFile); void PVRSRVRelease(void *pvPrivData); + +#if defined(PVR_DRI_DRM_PLATFORM_DEV) +void PVRSRVDriverShutdown(LDM_DEV *pDevice); +int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state); +int PVRSRVDriverResume(LDM_DEV *pDevice); +#else int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state); int PVRSRVDriverResume(struct drm_device *pDevice); +#endif int PVRSRV_BridgeDispatchKM(struct drm_device *dev, void *arg, struct drm_file *pFile); @@ -76,11 +87,17 @@ IMG_INT dbgdrv_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFi #endif #if !defined(SUPPORT_DRI_DRM_EXT) -#define PVR_DRM_SRVKM_IOCTL _IO(0, PVR_DRM_SRVKM_CMD) -#define PVR_DRM_IS_MASTER_IOCTL _IO(0, PVR_DRM_IS_MASTER_CMD) -#define PVR_DRM_UNPRIV_IOCTL _IO(0, PVR_DRM_UNPRIV_CMD) -#define PVR_DRM_DBGDRV_IOCTL _IO(0, PVR_DRM_DBGDRV_CMD) -#define PVR_DRM_DISP_IOCTL _IO(0, PVR_DRM_DISP_CMD) +#define DRM_PVR_SRVKM PVR_DRM_SRVKM_CMD +#define DRM_PVR_IS_MASTER PVR_DRM_IS_MASTER_CMD +#define DRM_PVR_UNPRIV PVR_DRM_UNPRIV_CMD +#define DRM_PVR_DBGDRV PVR_DRM_DBGDRV_CMD +#define DRM_PVR_DISP PVR_DRM_DISP_CMD + +#define DRM_IOCTL_PVR_SRVKM _IO(0, DRM_PVR_SRVKM) +#define DRM_IOCTL_PVR_IS_MASTER _IO(0, DRM_PVR_IS_MASTER) +#define DRM_IOCTL_PVR_UNPRIV _IO(0, DRM_PVR_UNPRIV) +#define DRM_IOCTL_PVR_DBGDRV _IO(0, DRM_PVR_DBGDRV) +#define DRM_IOCTL_PVR_DISP _IO(0, DRM_PVR_DISP) #endif #endif diff --git a/services4/srvkm/env/linux/pvr_drm_16.c b/services4/srvkm/env/linux/pvr_drm_16.c new file mode 100644 index 0000000..c7eecb3 --- /dev/null +++ b/services4/srvkm/env/linux/pvr_drm_16.c @@ -0,0 +1,457 @@ +/********************************************************************** + * + * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#if defined(SUPPORT_DRI_DRM) + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#ifndef AUTOCONF_INCLUDED + #include +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "img_defs.h" +#include "services.h" +#include "kerneldisplay.h" +#include "kernelbuffer.h" +#include "syscommon.h" +#include "pvrmmap.h" +#include "mm.h" +#include "mmap.h" +#include "mutex.h" +#include "pvr_debug.h" +#include "srvkm.h" +#include "perproc.h" +#include "handle.h" +#include "pvr_bridge_km.h" +#include "pvr_bridge.h" +#include "proc.h" +#include "pvrmodule.h" +#include "pvrversion.h" +#include "lock.h" +#include "linkage.h" +#include "pvr_drm.h" + +#if defined(PVR_DRI_DRM_NOT_PCI) +#include "pvr_drm_mod.h" +#endif + +#define PVR_DRM_NAME PVRSRV_MODNAME +#define PVR_DRM_DESC "Imagination Technologies PVR DRM" + +DECLARE_WAIT_QUEUE_HEAD(sWaitForInit); + +IMG_BOOL bInitComplete; +IMG_BOOL bInitFailed; + +#if !defined(PVR_DRI_DRM_NOT_PCI) +struct pci_dev *gpsPVRLDMDev; +#endif + +struct drm_device *gpsPVRDRMDev; + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) +#error "Linux kernel version 2.6.25 or later required for PVR DRM support" +#endif + +#define PVR_DRM_FILE struct drm_file * + +#if !defined(SUPPORT_DRI_DRM_EXT) +static struct pci_device_id asPciIdList[] = { +#if defined(PVR_DRI_DRM_NOT_PCI) + {1, 1, 1, 1, 0, 0, 0}, +#else + {SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, +#if defined(SYS_SGX_DEV1_DEVICE_ID) + {SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, +#endif +#endif + {0} +}; +#endif + +DRI_DRM_STATIC int +PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags) +{ + int iRes=0; + + PVR_TRACE(("PVRSRVDrmLoad")); + + gpsPVRDRMDev = dev; +#if !defined(PVR_DRI_DRM_NOT_PCI) + gpsPVRLDMDev = dev->pdev; +#endif + +#if defined(PDUMP) + iRes = dbgdrv_init(); + if (iRes != 0) + { + goto exit; + } +#endif + + iRes = PVRCore_Init(); + if (iRes != 0) + { + goto exit_dbgdrv_cleanup; + } + +#if defined(DISPLAY_CONTROLLER) + iRes = PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Init)(dev); + if (iRes != 0) + { + goto exit_pvrcore_cleanup; + } +#endif +// return 0; + goto exit; +#if defined(DISPLAY_CONTROLLER) +exit_pvrcore_cleanup: + PVRCore_Cleanup(); +#endif +exit_dbgdrv_cleanup: +#if defined(PDUMP) + dbgdrv_cleanup(); +#endif +exit: + if (iRes != 0) + { + bInitFailed = IMG_TRUE; + } + bInitComplete = IMG_TRUE; + + wake_up_interruptible(&sWaitForInit); + + + return iRes; +} + +DRI_DRM_STATIC int +PVRSRVDrmUnload(struct drm_device *dev) +{ + PVR_TRACE(("PVRSRVDrmUnload")); + +#if defined(DISPLAY_CONTROLLER) + PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Cleanup)(dev); +#endif + + PVRCore_Cleanup(); + +#if defined(PDUMP) + dbgdrv_cleanup(); +#endif + + return 0; +} + +DRI_DRM_STATIC int +PVRSRVDrmOpen(struct drm_device *dev, struct drm_file *file) +{ +while (!bInitComplete) + { + DEFINE_WAIT(sWait); + + prepare_to_wait(&sWaitForInit, &sWait, TASK_INTERRUPTIBLE); + + if (!bInitComplete) + { + PVR_TRACE(("%s: Waiting for module initialisation to complete", __FUNCTION__)); + + schedule(); + } + + finish_wait(&sWaitForInit, &sWait); + + if (signal_pending(current)) + { + return -ERESTARTSYS; + } + } + + if (bInitFailed) + { + PVR_DPF((PVR_DBG_ERROR, "%s: Module initialisation failed", __FUNCTION__)); + return -EINVAL; + } + + + return PVRSRVOpen(dev, file); +} + +#if defined(SUPPORT_DRI_DRM_EXT) && !defined(PVR_LINUX_USING_WORKQUEUES) +DRI_DRM_STATIC void +PVRSRVDrmPostClose(struct drm_device *dev, struct drm_file *file) +{ + PVRSRVRelease(file->driver_priv); + + file->driver_priv = NULL; +} +#else +DRI_DRM_STATIC int +PVRSRVDrmRelease(struct inode *inode, struct file *filp) +{ + struct drm_file *file_priv = filp->private_data; + void *psDriverPriv = file_priv->driver_priv; + int ret; + + ret = drm_release(inode, filp); + + if (ret != 0) + { + + PVR_DPF((PVR_DBG_ERROR, "%s : drm_release failed: %d", + __FUNCTION__, ret)); + } + + PVRSRVRelease(psDriverPriv); + + return 0; +} +#endif + +DRI_DRM_STATIC int +PVRDRMIsMaster(struct drm_device *dev, void *arg, struct drm_file *pFile) +{ + return 0; +} + +#if defined(SUPPORT_DRI_DRM_EXT) +int +PVRDRM_Dummy_ioctl(struct drm_device *dev, void *arg, struct drm_file *pFile) +{ + return 0; +} +#endif + +DRI_DRM_STATIC int +PVRDRMUnprivCmd(struct drm_device *dev, void *arg, struct drm_file *pFile) +{ + int ret = 0; + + LinuxLockMutex(&gPVRSRVLock); + + if (arg == NULL) + { + ret = -EFAULT; + } + else + { + IMG_UINT32 *pui32Args = (IMG_UINT32 *)arg; + IMG_UINT32 ui32Cmd = pui32Args[0]; + IMG_UINT32 *pui32OutArg = (IMG_UINT32 *)arg; + + switch (ui32Cmd) + { + case PVR_DRM_UNPRIV_INIT_SUCCESFUL: + *pui32OutArg = PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL) ? 1 : 0; + break; + + default: + ret = -EFAULT; + } + + } + + LinuxUnLockMutex(&gPVRSRVLock); + + return ret; +} + +#if defined(DISPLAY_CONTROLLER) && defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) +static int +PVRDRM_Display_ioctl(struct drm_device *dev, void *arg, struct drm_file *pFile) +{ + int res; + + LinuxLockMutex(&gPVRSRVLock); + + res = PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Ioctl)(dev, arg, pFile); + + LinuxUnLockMutex(&gPVRSRVLock); + + return res; +} +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) +#define PVR_DRM_FOPS_IOCTL .unlocked_ioctl +#define PVR_DRM_UNLOCKED DRM_UNLOCKED +#define DRM_IOCTL_PVR_DRM_SRVKM_IOCTL PVR_DRM_SRVKM_IOCTL +#define DRM_PVR_DRM_SRVKM_IOCTL PVR_DRM_SRVKM_IOCTL +#define DRM_PVR_DRM_IS_MASTER_IOCTL PVR_DRM_IS_MASTER_IOCTL +#define DRM_IOCTL_PVR_DRM_IS_MASTER_IOCTL PVR_DRM_IS_MASTER_IOCTL +#define DRM_PVR_DRM_UNPRIV_IOCTL PVR_DRM_UNPRIV_IOCTL +#define DRM_IOCTL_PVR_DRM_UNPRIV_IOCTL PVR_DRM_UNPRIV_IOCTL +#else +#define PVR_DRM_FOPS_IOCTL .ioctl +#define PVR_DRM_UNLOCKED 0 +#endif + +#if !defined(SUPPORT_DRI_DRM_EXT) +struct drm_ioctl_desc sPVRDrmIoctls[] = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + DRM_IOCTL_DEF_DRV(PVR_DRM_SRVKM_IOCTL, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), + DRM_IOCTL_DEF_DRV(PVR_DRM_IS_MASTER_IOCTL, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), + DRM_IOCTL_DEF_DRV(PVR_DRM_UNPRIV_IOCTL, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), +#else + DRM_IOCTL_DEF(PVR_DRM_SRVKM_IOCTL, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), + DRM_IOCTL_DEF(PVR_DRM_IS_MASTER_IOCTL, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), + DRM_IOCTL_DEF(PVR_DRM_UNPRIV_IOCTL, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), +#endif +#if defined(PDUMP) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + DRM_IOCTL_DEF_DRV(PVR_DRM_DBGDRV_IOCTL, dbgdrv_ioctl, PVR_DRM_UNLOCKED), +#else + DRM_IOCTL_DEF(PVR_DRM_DBGDRV_IOCTL, dbgdrv_ioctl, PVR_DRM_UNLOCKED), +#endif +#endif +#if defined(DISPLAY_CONTROLLER) && defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + DRM_IOCTL_DEF_DRV(PVR_DRM_DISP_IOCTL, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) +#else + DRM_IOCTL_DEF(PVR_DRM_DISP_IOCTL, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) +#endif +#endif +}; + +static int pvr_max_ioctl = DRM_ARRAY_SIZE(sPVRDrmIoctls); + +static struct drm_driver sPVRDrmDriver = +{ + .driver_features = 0, + .dev_priv_size = 0, + .load = PVRSRVDrmLoad, + .unload = PVRSRVDrmUnload, + .open = PVRSRVDrmOpen, + .suspend = PVRSRVDriverSuspend, + .resume = PVRSRVDriverResume, +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)) + .get_map_ofs = drm_core_get_map_ofs, + .get_reg_ofs = drm_core_get_reg_ofs, +#endif + .ioctls = sPVRDrmIoctls, + .fops = + { + .owner = THIS_MODULE, + .open = drm_open, + .release = PVRSRVDrmRelease, + PVR_DRM_FOPS_IOCTL = drm_ioctl, + .mmap = PVRMMap, + .poll = drm_poll, + .fasync = drm_fasync, + }, +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) + .pci_driver = + { + .name = PVR_DRM_NAME, + .id_table = asPciIdList, + }, +#else + .kdriver = + { + PVR_DRM_NAME, + asPciIdList, + }, +// { +// .pci->name = PVR_DRM_NAME, +// .pci->id_table = asPciIdList, +// }, +#endif + + .name = PVR_DRM_NAME, + .desc = PVR_DRM_DESC, + .date = PVR_BUILD_DATE, + .major = PVRVERSION_MAJ, + .minor = PVRVERSION_MIN, + .patchlevel = PVRVERSION_BUILD, +}; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) +static struct pci_driver pci_pvr_driver = { + .name = PVR_DRM_NAME, + .id_table = asPciIdList, +}; +#endif + +static int __init PVRSRVDrmInit(void) +{ + int iRes; + sPVRDrmDriver.num_ioctls = pvr_max_ioctl; + + + PVRDPFInit(); + +#if defined(PVR_DRI_DRM_NOT_PCI) + iRes = drm_pvr_dev_add(); + if (iRes != 0) + { + return iRes; + } +#endif + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) + iRes = drm_init(&sPVRDrmDriver); +#else + iRes = drm_pci_init(&sPVRDrmDriver,&pci_pvr_driver); +#endif +#if defined(PVR_DRI_DRM_NOT_PCI) + if (iRes != 0) + { + drm_pvr_dev_remove(); + } +#endif + return iRes; +} + +static void __exit PVRSRVDrmExit(void) +{ +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)) + drm_exit(&sPVRDrmDriver); +#else + drm_pci_exit(&sPVRDrmDriver,&pci_pvr_driver); +#endif + +#if defined(PVR_DRI_DRM_NOT_PCI) + drm_pvr_dev_remove(); +#endif +} + +module_init(PVRSRVDrmInit); +module_exit(PVRSRVDrmExit); +#endif +#endif + + diff --git a/services4/srvkm/env/linux/pvr_drm_16.h b/services4/srvkm/env/linux/pvr_drm_16.h new file mode 100644 index 0000000..b529ef1 --- /dev/null +++ b/services4/srvkm/env/linux/pvr_drm_16.h @@ -0,0 +1,90 @@ +/********************************************************************** + * + * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#if !defined(__PVR_DRM_H__) +#define __PVR_DRM_H__ + +#include "pvr_drm_shared.h" + +#if defined(SUPPORT_DRI_DRM) +#define PVR_DRM_MAKENAME_HELPER(x, y) x ## y +#define PVR_DRM_MAKENAME(x, y) PVR_DRM_MAKENAME_HELPER(x, y) + +int PVRCore_Init(void); +void PVRCore_Cleanup(void); +int PVRSRVOpen(struct drm_device *dev, struct drm_file *pFile); +void PVRSRVRelease(void *pvPrivData); +int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state); +int PVRSRVDriverResume(struct drm_device *pDevice); + +int PVRSRV_BridgeDispatchKM(struct drm_device *dev, void *arg, struct drm_file *pFile); + +#if defined(SUPPORT_DRI_DRM_EXT) +#define DRI_DRM_STATIC +int PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags); +int PVRSRVDrmUnload(struct drm_device *dev); +int PVRSRVDrmOpen(struct drm_device *dev, struct drm_file *file); +#if defined(PVR_LINUX_USING_WORKQUEUES) +DRI_DRM_STATIC int PVRSRVDrmRelease(struct inode *inode, struct file *filp); +#else +void PVRSRVDrmPostClose(struct drm_device *dev, struct drm_file *file); +#endif +int PVRDRMIsMaster(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); +int PVRDRMUnprivCmd(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); +int PVRDRM_Dummy_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); +#else +#define DRI_DRM_STATIC static +#endif + +#if defined(DISPLAY_CONTROLLER) +extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Init)(struct drm_device *); +extern void PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Cleanup)(struct drm_device *); +extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Suspend)(struct drm_device *); +extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Resume)(struct drm_device *); +#if defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) +extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Ioctl)(struct drm_device *dev, void *arg, struct drm_file *pFile); +#endif +#endif + +#if defined(PDUMP) +int dbgdrv_init(void); +void dbgdrv_cleanup(void); +IMG_INT dbgdrv_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); +#endif + +#if !defined(SUPPORT_DRI_DRM_EXT) +#define PVR_DRM_SRVKM_IOCTL _IO(0, PVR_DRM_SRVKM_CMD) +#define PVR_DRM_IS_MASTER_IOCTL _IO(0, PVR_DRM_IS_MASTER_CMD) +#define PVR_DRM_UNPRIV_IOCTL _IO(0, PVR_DRM_UNPRIV_CMD) +#define PVR_DRM_DBGDRV_IOCTL _IO(0, PVR_DRM_DBGDRV_CMD) +#define PVR_DRM_DISP_IOCTL _IO(0, PVR_DRM_DISP_CMD) +#endif + +#endif + +#endif + + diff --git a/services4/srvkm/env/linux/pvr_uaccess.h b/services4/srvkm/env/linux/pvr_uaccess.h index 7bc47ac..4b7114e 100644 --- a/services4/srvkm/env/linux/pvr_uaccess.h +++ b/services4/srvkm/env/linux/pvr_uaccess.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,9 +29,9 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) #ifndef AUTOCONF_INCLUDED - #include +#include #endif #endif @@ -64,5 +64,7 @@ static inline unsigned long pvr_copy_from_user(void *pvTo, const void __user *pv #endif } +#define pvr_put_user put_user + #endif diff --git a/services4/srvkm/hwdefs/ocpdefs.h b/services4/srvkm/hwdefs/ocpdefs.h index 43744e3..3bbab7b 100644 --- a/services4/srvkm/hwdefs/ocpdefs.h +++ b/services4/srvkm/hwdefs/ocpdefs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/hwdefs/sgx530defs.h b/services4/srvkm/hwdefs/sgx530defs.h index 525f51d..810cb81 100644 --- a/services4/srvkm/hwdefs/sgx530defs.h +++ b/services4/srvkm/hwdefs/sgx530defs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/hwdefs/sgx540defs.h b/services4/srvkm/hwdefs/sgx540defs.h index dadbb1e..c09aa26 100644 --- a/services4/srvkm/hwdefs/sgx540defs.h +++ b/services4/srvkm/hwdefs/sgx540defs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/hwdefs/sgx544defs.h b/services4/srvkm/hwdefs/sgx544defs.h new file mode 100644 index 0000000..c18b8ad --- /dev/null +++ b/services4/srvkm/hwdefs/sgx544defs.h @@ -0,0 +1,1367 @@ +/********************************************************************** + * + * Copyright (C) Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#ifndef _SGX544DEFS_KM_H_ +#define _SGX544DEFS_KM_H_ + +#define EUR_CR_CLKGATECTL 0x0000 +#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000003U +#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 0 +#define EUR_CR_CLKGATECTL_ISP_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_ISP2_CLKG_MASK 0x0000000CU +#define EUR_CR_CLKGATECTL_ISP2_CLKG_SHIFT 2 +#define EUR_CR_CLKGATECTL_ISP2_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000030U +#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 4 +#define EUR_CR_CLKGATECTL_TSP_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_TE_CLKG_MASK 0x000000C0U +#define EUR_CR_CLKGATECTL_TE_CLKG_SHIFT 6 +#define EUR_CR_CLKGATECTL_TE_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_MTE_CLKG_MASK 0x00000300U +#define EUR_CR_CLKGATECTL_MTE_CLKG_SHIFT 8 +#define EUR_CR_CLKGATECTL_MTE_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00000C00U +#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 10 +#define EUR_CR_CLKGATECTL_DPM_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_VDM_CLKG_MASK 0x00003000U +#define EUR_CR_CLKGATECTL_VDM_CLKG_SHIFT 12 +#define EUR_CR_CLKGATECTL_VDM_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_PDS_CLKG_MASK 0x0000C000U +#define EUR_CR_CLKGATECTL_PDS_CLKG_SHIFT 14 +#define EUR_CR_CLKGATECTL_PDS_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_MASK 0x00030000U +#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SHIFT 16 +#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_TA_CLKG_MASK 0x000C0000U +#define EUR_CR_CLKGATECTL_TA_CLKG_SHIFT 18 +#define EUR_CR_CLKGATECTL_TA_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_MASK 0x00300000U +#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SHIFT 20 +#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U +#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 +#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SIGNED 0 +#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_MASK 0x10000000U +#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SHIFT 28 +#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2 0x0004 +#define EUR_CR_CLKGATECTL2_PBE_CLKG_MASK 0x00000003U +#define EUR_CR_CLKGATECTL2_PBE_CLKG_SHIFT 0 +#define EUR_CR_CLKGATECTL2_PBE_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_MASK 0x0000000CU +#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SHIFT 2 +#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_MASK 0x00000030U +#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SHIFT 4 +#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_USE0_CLKG_MASK 0x000000C0U +#define EUR_CR_CLKGATECTL2_USE0_CLKG_SHIFT 6 +#define EUR_CR_CLKGATECTL2_USE0_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_ITR0_CLKG_MASK 0x00000300U +#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SHIFT 8 +#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_TEX0_CLKG_MASK 0x00000C00U +#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SHIFT 10 +#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_USE1_CLKG_MASK 0x0000C000U +#define EUR_CR_CLKGATECTL2_USE1_CLKG_SHIFT 14 +#define EUR_CR_CLKGATECTL2_USE1_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_ITR1_CLKG_MASK 0x00030000U +#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SHIFT 16 +#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_TEX1_CLKG_MASK 0x000C0000U +#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SHIFT 18 +#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_MASK 0x00C00000U +#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SHIFT 22 +#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_MASK 0x03000000U +#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SHIFT 24 +#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SIGNED 0 +#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_MASK 0x0C000000U +#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SHIFT 26 +#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SIGNED 0 +#define EUR_CR_CLKGATESTATUS 0x0008 +#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000001U +#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 0 +#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_MASK 0x00000002U +#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SHIFT 1 +#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000004U +#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 2 +#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TE_CLKS_MASK 0x00000008U +#define EUR_CR_CLKGATESTATUS_TE_CLKS_SHIFT 3 +#define EUR_CR_CLKGATESTATUS_TE_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_MTE_CLKS_MASK 0x00000010U +#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SHIFT 4 +#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00000020U +#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 5 +#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_VDM_CLKS_MASK 0x00000040U +#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SHIFT 6 +#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_PDS_CLKS_MASK 0x00000080U +#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SHIFT 7 +#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_PBE_CLKS_MASK 0x00000100U +#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SHIFT 8 +#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_MASK 0x00000200U +#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SHIFT 9 +#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_MASK 0x00000400U +#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SHIFT 10 +#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_USE0_CLKS_MASK 0x00000800U +#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SHIFT 11 +#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_MASK 0x00001000U +#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SHIFT 12 +#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_MASK 0x00002000U +#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SHIFT 13 +#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_USE1_CLKS_MASK 0x00008000U +#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SHIFT 15 +#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_MASK 0x00010000U +#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SHIFT 16 +#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_MASK 0x00020000U +#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SHIFT 17 +#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_MASK 0x00080000U +#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SHIFT 19 +#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_TA_CLKS_MASK 0x00100000U +#define EUR_CR_CLKGATESTATUS_TA_CLKS_SHIFT 20 +#define EUR_CR_CLKGATESTATUS_TA_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_MASK 0x00200000U +#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SHIFT 21 +#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_MASK 0x00400000U +#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SHIFT 22 +#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_MASK 0x00800000U +#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SHIFT 23 +#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SIGNED 0 +#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_MASK 0x01000000U +#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SHIFT 24 +#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR 0x000C +#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000003U +#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 0 +#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_MASK 0x0000000CU +#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SHIFT 2 +#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000030U +#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 4 +#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_TE_CLKO_MASK 0x000000C0U +#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SHIFT 6 +#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_MASK 0x00000300U +#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SHIFT 8 +#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00000C00U +#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 10 +#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_MASK 0x00003000U +#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SHIFT 12 +#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_MASK 0x0000C000U +#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SHIFT 14 +#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_MASK 0x00030000U +#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SHIFT 16 +#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_TA_CLKO_MASK 0x000C0000U +#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SHIFT 18 +#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SIGNED 0 +#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_MASK 0x00300000U +#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SHIFT 20 +#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SIGNED 0 +#define EUR_CR_POWER 0x001C +#define EUR_CR_POWER_PIPE_DISABLE_MASK 0x00000001U +#define EUR_CR_POWER_PIPE_DISABLE_SHIFT 0 +#define EUR_CR_POWER_PIPE_DISABLE_SIGNED 0 +#define EUR_CR_CORE_ID 0x0020 +#define EUR_CR_CORE_ID_CONFIG_MULTI_MASK 0x00000001U +#define EUR_CR_CORE_ID_CONFIG_MULTI_SHIFT 0 +#define EUR_CR_CORE_ID_CONFIG_MULTI_SIGNED 0 +#define EUR_CR_CORE_ID_CONFIG_BASE_MASK 0x00000002U +#define EUR_CR_CORE_ID_CONFIG_BASE_SHIFT 1 +#define EUR_CR_CORE_ID_CONFIG_BASE_SIGNED 0 +#define EUR_CR_CORE_ID_CONFIG_MASK 0x000000FCU +#define EUR_CR_CORE_ID_CONFIG_SHIFT 2 +#define EUR_CR_CORE_ID_CONFIG_SIGNED 0 +#define EUR_CR_CORE_ID_CONFIG_CORES_MASK 0x00000F00U +#define EUR_CR_CORE_ID_CONFIG_CORES_SHIFT 8 +#define EUR_CR_CORE_ID_CONFIG_CORES_SIGNED 0 +#define EUR_CR_CORE_ID_CONFIG_SLC_MASK 0x0000F000U +#define EUR_CR_CORE_ID_CONFIG_SLC_SHIFT 12 +#define EUR_CR_CORE_ID_CONFIG_SLC_SIGNED 0 +#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U +#define EUR_CR_CORE_ID_ID_SHIFT 16 +#define EUR_CR_CORE_ID_ID_SIGNED 0 +#define EUR_CR_CORE_REVISION 0x0024 +#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU +#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 +#define EUR_CR_CORE_REVISION_MAINTENANCE_SIGNED 0 +#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U +#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 +#define EUR_CR_CORE_REVISION_MINOR_SIGNED 0 +#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U +#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 +#define EUR_CR_CORE_REVISION_MAJOR_SIGNED 0 +#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U +#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 +#define EUR_CR_CORE_REVISION_DESIGNER_SIGNED 0 +#define EUR_CR_DESIGNER_REV_FIELD1 0x0028 +#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU +#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 +#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SIGNED 0 +#define EUR_CR_DESIGNER_REV_FIELD2 0x002C +#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU +#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 +#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SIGNED 0 +#define EUR_CR_SOFT_RESET 0x0080 +#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U +#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 +#define EUR_CR_SOFT_RESET_BIF_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_VDM_RESET_MASK 0x00000002U +#define EUR_CR_SOFT_RESET_VDM_RESET_SHIFT 1 +#define EUR_CR_SOFT_RESET_VDM_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U +#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 +#define EUR_CR_SOFT_RESET_DPM_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_TE_RESET_MASK 0x00000008U +#define EUR_CR_SOFT_RESET_TE_RESET_SHIFT 3 +#define EUR_CR_SOFT_RESET_TE_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_MTE_RESET_MASK 0x00000010U +#define EUR_CR_SOFT_RESET_MTE_RESET_SHIFT 4 +#define EUR_CR_SOFT_RESET_MTE_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000020U +#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 5 +#define EUR_CR_SOFT_RESET_ISP_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_ISP2_RESET_MASK 0x00000040U +#define EUR_CR_SOFT_RESET_ISP2_RESET_SHIFT 6 +#define EUR_CR_SOFT_RESET_ISP2_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000080U +#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 7 +#define EUR_CR_SOFT_RESET_TSP_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_PDS_RESET_MASK 0x00000100U +#define EUR_CR_SOFT_RESET_PDS_RESET_SHIFT 8 +#define EUR_CR_SOFT_RESET_PDS_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_PBE_RESET_MASK 0x00000200U +#define EUR_CR_SOFT_RESET_PBE_RESET_SHIFT 9 +#define EUR_CR_SOFT_RESET_PBE_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_TCU_L2_RESET_MASK 0x00000400U +#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SHIFT 10 +#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK 0x00000800U +#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SHIFT 11 +#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_ITR_RESET_MASK 0x00002000U +#define EUR_CR_SOFT_RESET_ITR_RESET_SHIFT 13 +#define EUR_CR_SOFT_RESET_ITR_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_TEX_RESET_MASK 0x00004000U +#define EUR_CR_SOFT_RESET_TEX_RESET_SHIFT 14 +#define EUR_CR_SOFT_RESET_TEX_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00008000U +#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 15 +#define EUR_CR_SOFT_RESET_USE_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK 0x00010000U +#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SHIFT 16 +#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00020000U +#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 17 +#define EUR_CR_SOFT_RESET_TA_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_DCU_L2_RESET_MASK 0x00040000U +#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SHIFT 18 +#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SIGNED 0 +#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_MASK 0x00080000U +#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SHIFT 19 +#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 +#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_MASK 0x00000200U +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SHIFT 9 +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U +#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 +#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_MASK 0x00000080U +#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SHIFT 7 +#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_MASK 0x00000040U +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SHIFT 6 +#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U +#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 +#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000010U +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 4 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000008U +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 3 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000004U +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 2 +#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 +#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 +#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_MASK 0x00000200U +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SHIFT 9 +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U +#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 +#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_MASK 0x00000080U +#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SHIFT 7 +#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_MASK 0x00000040U +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SHIFT 6 +#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U +#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 +#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000010U +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 4 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000008U +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 3 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000004U +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 2 +#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 +#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_STATUS2 0x0118 +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 +#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_MASK 0x00000200U +#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SHIFT 9 +#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U +#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 +#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_MASK 0x00000080U +#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SHIFT 7 +#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_MASK 0x00000040U +#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SHIFT 6 +#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U +#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 +#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000010U +#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 4 +#define EUR_CR_EVENT_STATUS2_TRIG_TA_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000008U +#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 3 +#define EUR_CR_EVENT_STATUS2_TRIG_3D_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000004U +#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 2 +#define EUR_CR_EVENT_STATUS2_TRIG_DL_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U +#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 +#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U +#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 +#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_STATUS 0x012C +#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U +#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 +#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U +#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 +#define EUR_CR_EVENT_STATUS_TIMER_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U +#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 +#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_MASK 0x04000000U +#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SHIFT 26 +#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U +#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 +#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U +#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 +#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U +#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 +#define EUR_CR_EVENT_STATUS_DPM_INITEND_SIGNED 0 +#define EUR_CR_EVENT_STATUS_OTPM_LOADED_MASK 0x00200000U +#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SHIFT 21 +#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SIGNED 0 +#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U +#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 +#define EUR_CR_EVENT_STATUS_OTPM_INV_SIGNED 0 +#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U +#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 +#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U +#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 +#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SIGNED 0 +#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U +#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 +#define EUR_CR_EVENT_STATUS_BREAKPOINT_SIGNED 0 +#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U +#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 +#define EUR_CR_EVENT_STATUS_SW_EVENT_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U +#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 +#define EUR_CR_EVENT_STATUS_TA_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U +#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 +#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U +#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 +#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U +#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 +#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 +#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U +#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 +#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U +#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 +#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U +#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 +#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U +#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 +#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 +#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SIGNED 0 +#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U +#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 +#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE 0x0130 +#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U +#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 +#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U +#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 +#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U +#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 +#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_MASK 0x04000000U +#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SHIFT 26 +#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U +#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 +#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_MASK 0x00200000U +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SHIFT 21 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 +#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U +#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 +#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U +#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 +#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U +#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 +#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U +#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 +#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U +#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 +#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U +#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 +#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U +#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 +#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SIGNED 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U +#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 +#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR 0x0134 +#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U +#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 +#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U +#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 +#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U +#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 +#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_MASK 0x04000000U +#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SHIFT 26 +#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U +#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 +#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_MASK 0x00200000U +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SHIFT 21 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 +#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U +#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 +#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U +#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 +#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U +#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 +#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U +#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 +#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U +#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 +#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U +#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 +#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U +#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 +#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SIGNED 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U +#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 +#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SIGNED 0 +#define EUR_CR_TIMER 0x0144 +#define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU +#define EUR_CR_TIMER_VALUE_SHIFT 0 +#define EUR_CR_TIMER_VALUE_SIGNED 0 +#define EUR_CR_EVENT_KICK1 0x0AB0 +#define EUR_CR_EVENT_KICK1_NOW_MASK 0x000000FFU +#define EUR_CR_EVENT_KICK1_NOW_SHIFT 0 +#define EUR_CR_EVENT_KICK1_NOW_SIGNED 0 +#define EUR_CR_EVENT_KICK2 0x0AC0 +#define EUR_CR_EVENT_KICK2_NOW_MASK 0x00000001U +#define EUR_CR_EVENT_KICK2_NOW_SHIFT 0 +#define EUR_CR_EVENT_KICK2_NOW_SIGNED 0 +#define EUR_CR_EVENT_KICKER 0x0AC4 +#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 +#define EUR_CR_EVENT_KICKER_ADDRESS_SIGNED 0 +#define EUR_CR_EVENT_KICK 0x0AC8 +#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U +#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 +#define EUR_CR_EVENT_KICK_NOW_SIGNED 0 +#define EUR_CR_EVENT_TIMER 0x0ACC +#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U +#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 +#define EUR_CR_EVENT_TIMER_ENABLE_SIGNED 0 +#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU +#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 +#define EUR_CR_EVENT_TIMER_VALUE_SIGNED 0 +#define EUR_CR_PDS_INV0 0x0AD0 +#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U +#define EUR_CR_PDS_INV0_DSC_SHIFT 0 +#define EUR_CR_PDS_INV0_DSC_SIGNED 0 +#define EUR_CR_PDS_INV1 0x0AD4 +#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U +#define EUR_CR_PDS_INV1_DSC_SHIFT 0 +#define EUR_CR_PDS_INV1_DSC_SIGNED 0 +#define EUR_CR_EVENT_KICK3 0x0AD8 +#define EUR_CR_EVENT_KICK3_NOW_MASK 0x00000001U +#define EUR_CR_EVENT_KICK3_NOW_SHIFT 0 +#define EUR_CR_EVENT_KICK3_NOW_SIGNED 0 +#define EUR_CR_PDS_INV3 0x0ADC +#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U +#define EUR_CR_PDS_INV3_DSC_SHIFT 0 +#define EUR_CR_PDS_INV3_DSC_SIGNED 0 +#define EUR_CR_PDS_INV_CSC 0x0AE0 +#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U +#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 +#define EUR_CR_PDS_INV_CSC_KICK_SIGNED 0 +#define EUR_CR_BIF_CTRL 0x0C00 +#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U +#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 +#define EUR_CR_BIF_CTRL_NOREORDER_SIGNED 0 +#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U +#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 +#define EUR_CR_BIF_CTRL_PAUSE_SIGNED 0 +#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U +#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 +#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_MASK 0x00000400U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SHIFT 10 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 13 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00004000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_MASK 0x00010000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SHIFT 16 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_MASK 0x00020000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SHIFT 17 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_MASK 0x00040000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SHIFT 18 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SIGNED 0 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_MASK 0x00080000U +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SHIFT 19 +#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SIGNED 0 +#define EUR_CR_BIF_INT_STAT 0x0C04 +#define EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK 0x00003FFFU +#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SHIFT 0 +#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SIGNED 0 +#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_MASK 0x00070000U +#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SHIFT 16 +#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SIGNED 0 +#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00080000U +#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 19 +#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SIGNED 0 +#define EUR_CR_BIF_FAULT 0x0C08 +#define EUR_CR_BIF_FAULT_CID_MASK 0x0000000FU +#define EUR_CR_BIF_FAULT_CID_SHIFT 0 +#define EUR_CR_BIF_FAULT_CID_SIGNED 0 +#define EUR_CR_BIF_FAULT_SB_MASK 0x000001F0U +#define EUR_CR_BIF_FAULT_SB_SHIFT 4 +#define EUR_CR_BIF_FAULT_SB_SIGNED 0 +#define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 +#define EUR_CR_BIF_FAULT_ADDR_SIGNED 0 +#define EUR_CR_BIF_TILE0 0x0C0C +#define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE0_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE0_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE1 0x0C10 +#define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE1_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE1_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE2 0x0C14 +#define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE2_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE2_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE3 0x0C18 +#define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE3_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE3_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE4 0x0C1C +#define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE4_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE4_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE5 0x0C20 +#define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE5_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE5_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE6 0x0C24 +#define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE6_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE6_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE7 0x0C28 +#define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE7_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE7_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE8 0x0C2C +#define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE8_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE8_CFG_SIGNED 0 +#define EUR_CR_BIF_TILE9 0x0C30 +#define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU +#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 +#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U +#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 +#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SIGNED 0 +#define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U +#define EUR_CR_BIF_TILE9_CFG_SHIFT 24 +#define EUR_CR_BIF_TILE9_CFG_SIGNED 0 +#define EUR_CR_BIF_CTRL_INVAL 0x0C34 +#define EUR_CR_BIF_CTRL_INVAL_PTE_MASK 0x00000004U +#define EUR_CR_BIF_CTRL_INVAL_PTE_SHIFT 2 +#define EUR_CR_BIF_CTRL_INVAL_PTE_SIGNED 0 +#define EUR_CR_BIF_CTRL_INVAL_ALL_MASK 0x00000008U +#define EUR_CR_BIF_CTRL_INVAL_ALL_SHIFT 3 +#define EUR_CR_BIF_CTRL_INVAL_ALL_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 +#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C +#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 +#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 +#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 +#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C +#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 +#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SIGNED 0 +#define EUR_CR_BIF_BANK_SET 0x0C74 +#define EUR_CR_BIF_BANK_SET_SELECT_2D_MASK 0x00000001U +#define EUR_CR_BIF_BANK_SET_SELECT_2D_SHIFT 0 +#define EUR_CR_BIF_BANK_SET_SELECT_2D_SIGNED 0 +#define EUR_CR_BIF_BANK_SET_SELECT_3D_MASK 0x0000000CU +#define EUR_CR_BIF_BANK_SET_SELECT_3D_SHIFT 2 +#define EUR_CR_BIF_BANK_SET_SELECT_3D_SIGNED 0 +#define EUR_CR_BIF_BANK_SET_SELECT_HOST_MASK 0x00000010U +#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SHIFT 4 +#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SIGNED 0 +#define EUR_CR_BIF_BANK_SET_SELECT_TA_MASK 0x000000C0U +#define EUR_CR_BIF_BANK_SET_SELECT_TA_SHIFT 6 +#define EUR_CR_BIF_BANK_SET_SELECT_TA_SIGNED 0 +#define EUR_CR_BIF_BANK_SET_SELECT_EDM_MASK 0x00000100U +#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SHIFT 8 +#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SIGNED 0 +#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_MASK 0x00000200U +#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SHIFT 9 +#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SIGNED 0 +#define EUR_CR_BIF_BANK0 0x0C78 +#define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU +#define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 +#define EUR_CR_BIF_BANK0_INDEX_EDM_SIGNED 0 +#define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U +#define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 +#define EUR_CR_BIF_BANK0_INDEX_TA_SIGNED 0 +#define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U +#define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 +#define EUR_CR_BIF_BANK0_INDEX_3D_SIGNED 0 +#define EUR_CR_BIF_BANK0_INDEX_PTLA_MASK 0x000F0000U +#define EUR_CR_BIF_BANK0_INDEX_PTLA_SHIFT 16 +#define EUR_CR_BIF_BANK0_INDEX_PTLA_SIGNED 0 +#define EUR_CR_BIF_BANK1 0x0C7C +#define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU +#define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 +#define EUR_CR_BIF_BANK1_INDEX_EDM_SIGNED 0 +#define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U +#define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 +#define EUR_CR_BIF_BANK1_INDEX_TA_SIGNED 0 +#define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U +#define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 +#define EUR_CR_BIF_BANK1_INDEX_3D_SIGNED 0 +#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 +#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U +#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 +#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SIGNED 0 +#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 +#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U +#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 +#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SIGNED 0 +#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 +#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU +#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 +#define EUR_CR_BIF_MEM_REQ_STAT_READS_SIGNED 0 +#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC +#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U +#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 +#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SIGNED 0 +#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 +#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U +#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 +#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SIGNED 0 +#define EUR_CR_BIF_BANK_STATUS 0x0CB4 +#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U +#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 +#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SIGNED 0 +#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U +#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 +#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 +#define EUR_CR_BIF_MMU_CTRL 0x0CD0 +#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U +#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 +#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 +#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U +#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 +#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 +#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_MASK 0x00000008U +#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SHIFT 3 +#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SIGNED 0 +#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U +#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 +#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 +#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_MASK 0x00000020U +#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SHIFT 5 +#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SIGNED 0 +#define EUR_CR_2D_BLIT_STATUS 0x0E04 +#define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU +#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 +#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SIGNED 0 +#define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U +#define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 +#define EUR_CR_2D_BLIT_STATUS_BUSY_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 +#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U +#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 +#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 +#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U +#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SIGNED 0 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 +#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SIGNED 0 +#define EUR_CR_BREAKPOINT0_START 0x0F44 +#define EUR_CR_BREAKPOINT0_START_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT0_START_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT0_START_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT0_END 0x0F48 +#define EUR_CR_BREAKPOINT0_END_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT0_END_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT0_END_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT0 0x0F4C +#define EUR_CR_BREAKPOINT0_MASK_DM_MASK 0x00000038U +#define EUR_CR_BREAKPOINT0_MASK_DM_SHIFT 3 +#define EUR_CR_BREAKPOINT0_MASK_DM_SIGNED 0 +#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_MASK 0x00000004U +#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SHIFT 2 +#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_MASK 0x00000002U +#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SHIFT 1 +#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_MASK 0x00000001U +#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SHIFT 0 +#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT1_START 0x0F50 +#define EUR_CR_BREAKPOINT1_START_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT1_START_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT1_START_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT1_END 0x0F54 +#define EUR_CR_BREAKPOINT1_END_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT1_END_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT1_END_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT1 0x0F58 +#define EUR_CR_BREAKPOINT1_MASK_DM_MASK 0x00000038U +#define EUR_CR_BREAKPOINT1_MASK_DM_SHIFT 3 +#define EUR_CR_BREAKPOINT1_MASK_DM_SIGNED 0 +#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_MASK 0x00000004U +#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SHIFT 2 +#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_MASK 0x00000002U +#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SHIFT 1 +#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_MASK 0x00000001U +#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SHIFT 0 +#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT2_START 0x0F5C +#define EUR_CR_BREAKPOINT2_START_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT2_START_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT2_START_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT2_END 0x0F60 +#define EUR_CR_BREAKPOINT2_END_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT2_END_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT2_END_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT2 0x0F64 +#define EUR_CR_BREAKPOINT2_MASK_DM_MASK 0x00000038U +#define EUR_CR_BREAKPOINT2_MASK_DM_SHIFT 3 +#define EUR_CR_BREAKPOINT2_MASK_DM_SIGNED 0 +#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_MASK 0x00000004U +#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SHIFT 2 +#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_MASK 0x00000002U +#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SHIFT 1 +#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_MASK 0x00000001U +#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SHIFT 0 +#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT3_START 0x0F68 +#define EUR_CR_BREAKPOINT3_START_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT3_START_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT3_START_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT3_END 0x0F6C +#define EUR_CR_BREAKPOINT3_END_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT3_END_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT3_END_ADDRESS_SIGNED 0 +#define EUR_CR_BREAKPOINT3 0x0F70 +#define EUR_CR_BREAKPOINT3_MASK_DM_MASK 0x00000038U +#define EUR_CR_BREAKPOINT3_MASK_DM_SHIFT 3 +#define EUR_CR_BREAKPOINT3_MASK_DM_SIGNED 0 +#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_MASK 0x00000004U +#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SHIFT 2 +#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_MASK 0x00000002U +#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SHIFT 1 +#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_MASK 0x00000001U +#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SHIFT 0 +#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SIGNED 0 +#define EUR_CR_BREAKPOINT_READ 0x0F74 +#define EUR_CR_BREAKPOINT_READ_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_BREAKPOINT_READ_ADDRESS_SHIFT 4 +#define EUR_CR_BREAKPOINT_READ_ADDRESS_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP 0x0F78 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT 0x0F7C +#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_MASK 0x000003C0U +#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_SHIFT 6 +#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_ID_MASK 0x00000030U +#define EUR_CR_PARTITION_BREAKPOINT_ID_SHIFT 4 +#define EUR_CR_PARTITION_BREAKPOINT_ID_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_MASK 0x00000008U +#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_SHIFT 3 +#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_MASK 0x00000004U +#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_SHIFT 2 +#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0 0x0F80 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1 0x0F84 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 +#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_0 0x0A0C +#define EUR_CR_USE_CODE_BASE_ADDR_00_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_00_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_00_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_00_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_00_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_00_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_1 0x0A10 +#define EUR_CR_USE_CODE_BASE_ADDR_01_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_01_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_01_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_01_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_01_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_01_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_2 0x0A14 +#define EUR_CR_USE_CODE_BASE_ADDR_02_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_02_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_02_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_02_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_02_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_02_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_3 0x0A18 +#define EUR_CR_USE_CODE_BASE_ADDR_03_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_03_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_03_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_03_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_03_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_03_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_4 0x0A1C +#define EUR_CR_USE_CODE_BASE_ADDR_04_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_04_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_04_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_04_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_04_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_04_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_5 0x0A20 +#define EUR_CR_USE_CODE_BASE_ADDR_05_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_05_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_05_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_05_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_05_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_05_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_6 0x0A24 +#define EUR_CR_USE_CODE_BASE_ADDR_06_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_06_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_06_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_06_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_06_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_06_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_7 0x0A28 +#define EUR_CR_USE_CODE_BASE_ADDR_07_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_07_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_07_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_07_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_07_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_07_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_8 0x0A2C +#define EUR_CR_USE_CODE_BASE_ADDR_08_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_08_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_08_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_08_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_08_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_08_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_9 0x0A30 +#define EUR_CR_USE_CODE_BASE_ADDR_09_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_09_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_09_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_09_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_09_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_09_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_10 0x0A34 +#define EUR_CR_USE_CODE_BASE_ADDR_10_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_10_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_10_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_10_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_10_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_10_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_11 0x0A38 +#define EUR_CR_USE_CODE_BASE_ADDR_11_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_11_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_11_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_11_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_11_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_11_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_12 0x0A3C +#define EUR_CR_USE_CODE_BASE_ADDR_12_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_12_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_12_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_12_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_12_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_12_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_13 0x0A40 +#define EUR_CR_USE_CODE_BASE_ADDR_13_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_13_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_13_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_13_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_13_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_13_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_14 0x0A44 +#define EUR_CR_USE_CODE_BASE_ADDR_14_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_14_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_14_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_14_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_14_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_14_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_15 0x0A48 +#define EUR_CR_USE_CODE_BASE_ADDR_15_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_15_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_15_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_15_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_15_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_15_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP 0x0F88 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT 0x0F8C +#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_MASK 0x000003C0U +#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_SHIFT 6 +#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_ID_MASK 0x00000030U +#define EUR_CR_PIPE0_BREAKPOINT_ID_SHIFT 4 +#define EUR_CR_PIPE0_BREAKPOINT_ID_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_MASK 0x00000008U +#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_SHIFT 3 +#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_MASK 0x00000004U +#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_SHIFT 2 +#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0 0x0F90 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1 0x0F94 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 +#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP 0x0F98 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT 0x0F9C +#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_MASK 0x000003C0U +#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_SHIFT 6 +#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_ID_MASK 0x00000030U +#define EUR_CR_PIPE1_BREAKPOINT_ID_SHIFT 4 +#define EUR_CR_PIPE1_BREAKPOINT_ID_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_MASK 0x00000008U +#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_SHIFT 3 +#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_MASK 0x00000004U +#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_SHIFT 2 +#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0 0x0FA0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1 0x0FA4 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 +#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 +#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) +#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x03FFFFFFU +#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 +#define EUR_CR_USE_CODE_BASE_ADDR_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_DM_MASK 0x0C000000U +#define EUR_CR_USE_CODE_BASE_DM_SHIFT 26 +#define EUR_CR_USE_CODE_BASE_DM_SIGNED 0 +#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 +#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 + +#endif + diff --git a/services4/srvkm/hwdefs/sgxdefs.h b/services4/srvkm/hwdefs/sgxdefs.h index 9e5effb..b3a2583 100644 --- a/services4/srvkm/hwdefs/sgxdefs.h +++ b/services4/srvkm/hwdefs/sgxdefs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -45,11 +45,12 @@ #if defined(SGX540) #include "sgx540defs.h" #else -#if defined(SGX541) -#include "sgx541defs.h" -#else #if defined(SGX543) +#if defined(FIX_HW_BRN_29954) +#include "sgx543_v1.164defs.h" +#else #include "sgx543defs.h" +#endif #else #if defined(SGX544) #include "sgx544defs.h" @@ -72,15 +73,10 @@ #endif #endif #endif -#endif #if defined(SGX_FEATURE_MP) -#if defined(SGX541) -#if SGX_CORE_REV == 100 -#include "sgx541_100mpdefs.h" -#else -#include "sgx541mpdefs.h" -#endif +#if defined(SGX554) +#include "sgxmpplusdefs.h" #else #include "sgxmpdefs.h" #endif diff --git a/services4/srvkm/hwdefs/sgxerrata.h b/services4/srvkm/hwdefs/sgxerrata.h index 5c57200..1efaa8a 100644 --- a/services4/srvkm/hwdefs/sgxerrata.h +++ b/services4/srvkm/hwdefs/sgxerrata.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -59,10 +59,6 @@ #define SGX_CORE_REV SGX_CORE_REV_HEAD #endif - #if SGX_CORE_REV == 103 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else #if SGX_CORE_REV == 110 #define FIX_HW_BRN_22934 @@ -72,6 +68,10 @@ #define FIX_HW_BRN_22934 #define FIX_HW_BRN_28889 #else + #if SGX_CORE_REV == 1111 + #define FIX_HW_BRN_22934 + #define FIX_HW_BRN_28889 + #else #if SGX_CORE_REV == 120 #define FIX_HW_BRN_22934 #define FIX_HW_BRN_28889 @@ -84,6 +84,10 @@ #define FIX_HW_BRN_22934 #define FIX_HW_BRN_28889 #else + #if SGX_CORE_REV == 130 + #define FIX_HW_BRN_22934 + #define FIX_HW_BRN_28889 + #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD #else @@ -92,9 +96,11 @@ #endif #endif #endif + #endif + #endif #endif #endif - #endif + #define SGX_CORE_DEFINED #endif @@ -109,9 +115,10 @@ #if SGX_CORE_REV == 101 #define FIX_HW_BRN_26620 #define FIX_HW_BRN_28011 + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == 110 - + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD @@ -134,7 +141,7 @@ #if SGX_CORE_REV == 112 #define FIX_HW_BRN_23281 - #define FIX_HW_BRN_23410 + #define FIX_HW_BRN_23410 #define FIX_HW_BRN_22693 #define FIX_HW_BRN_22934 #define FIX_HW_BRN_22997 @@ -181,18 +188,25 @@ #define FIX_HW_BRN_25503 #define FIX_HW_BRN_26620 #define FIX_HW_BRN_28011 + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == 110 #define FIX_HW_BRN_25503 #define FIX_HW_BRN_26620 #define FIX_HW_BRN_28011 + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == 120 #define FIX_HW_BRN_26620 #define FIX_HW_BRN_28011 + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == 121 #define FIX_HW_BRN_28011 + #define FIX_HW_BRN_34028 + #else + #if SGX_CORE_REV == 130 + #define FIX_HW_BRN_34028 #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD @@ -203,6 +217,7 @@ #endif #endif #endif + #endif #define SGX_CORE_DEFINED #endif @@ -244,32 +259,219 @@ #endif #if SGX_CORE_REV == 113 + #define FIX_HW_BRN_29954 #define FIX_HW_BRN_29997 #define FIX_HW_BRN_30954 #define FIX_HW_BRN_31093 #define FIX_HW_BRN_31195 - + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_32044 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 #else #if SGX_CORE_REV == 122 + #define FIX_HW_BRN_29954 #define FIX_HW_BRN_29997 #define FIX_HW_BRN_30954 #define FIX_HW_BRN_31093 #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + + #else + #if SGX_CORE_REV == 1221 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_31671 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 #else #if SGX_CORE_REV == 140 - #define FIX_HW_BRN_30954 - #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_30954 + #define FIX_HW_BRN_31093 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #define FIX_HW_BRN_33920 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif #else + #if SGX_CORE_REV == 1401 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_30954 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #define FIX_HW_BRN_33920 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + + #else + #if SGX_CORE_REV == 141 + #define FIX_HW_BRN_29954 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31671 + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + + #else + #if SGX_CORE_REV == 142 + #define FIX_HW_BRN_29954 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31671 + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + + #else + #if SGX_CORE_REV == 211 + #define FIX_HW_BRN_31093 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + + #else + #if SGX_CORE_REV == 2111 + #define FIX_HW_BRN_30982 + #define FIX_HW_BRN_31093 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + + #else + #if SGX_CORE_REV == 213 + #define FIX_HW_BRN_31272 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31671 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + + #else + #if SGX_CORE_REV == 216 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #else + #if SGX_CORE_REV == 302 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #else + #if SGX_CORE_REV == 303 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD - + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif #else #error "sgxerrata.h: SGX543 Core Revision unspecified" #endif #endif #endif #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif #define SGX_CORE_DEFINED #endif @@ -283,14 +485,124 @@ #endif #if SGX_CORE_REV == 100 - + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #else + #if SGX_CORE_REV == 102 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_31272 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 103 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_31272 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 104 + #define FIX_HW_BRN_29954 + #define FIX_HW_BRN_31093 + #define FIX_HW_BRN_31195 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31278 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31542 + #define FIX_HW_BRN_31620 + #define FIX_HW_BRN_31671 + #define FIX_HW_BRN_31780 + #define FIX_HW_BRN_32044 + #define FIX_HW_BRN_32085 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 105 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 106 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 110 + #define FIX_HW_BRN_31272 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 112 + #define FIX_HW_BRN_31272 + #define FIX_HW_BRN_33920 + #else + #if SGX_CORE_REV == 114 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif + #else + #if SGX_CORE_REV == 115 + #if defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_31425 + #endif + #define FIX_HW_BRN_31780 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD - + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif #else #error "sgxerrata.h: SGX544 Core Revision unspecified" #endif #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif + #endif #define SGX_CORE_DEFINED #endif @@ -313,12 +625,19 @@ #if SGX_CORE_REV == 109 #define FIX_HW_BRN_29702 #define FIX_HW_BRN_29823 + #define FIX_HW_BRN_31939 #else #if SGX_CORE_REV == 1012 - #define FIX_HW_BRN_29823 + #define FIX_HW_BRN_31939 #else #if SGX_CORE_REV == 1013 - #define FIX_HW_BRN_29823 + #define FIX_HW_BRN_31939 + #else + #if SGX_CORE_REV == 10131 + #else + #if SGX_CORE_REV == 1014 + #else + #if SGX_CORE_REV == 10141 #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD @@ -329,6 +648,9 @@ #endif #endif #endif + #endif + #endif + #endif #define SGX_CORE_DEFINED #endif @@ -341,11 +663,16 @@ #define SGX_CORE_REV SGX_CORE_REV_HEAD #endif - #if SGX_CORE_REV == 100 + #if SGX_CORE_REV == 1251 + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif - #else + #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD - + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) + #define FIX_HW_BRN_33657 + #endif #else #error "sgxerrata.h: SGX554 Core Revision unspecified" #endif diff --git a/services4/srvkm/hwdefs/sgxfeaturedefs.h b/services4/srvkm/hwdefs/sgxfeaturedefs.h index 714bea3..2553022 100644 --- a/services4/srvkm/hwdefs/sgxfeaturedefs.h +++ b/services4/srvkm/hwdefs/sgxfeaturedefs.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -52,6 +52,7 @@ #define SGX_FEATURE_2D_HARDWARE #define SGX_FEATURE_AUTOCLOCKGATING #define SUPPORT_SGX_GENERAL_MAPPING_HEAP + #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE #else #if defined(SGX540) #define SGX_CORE_FRIENDLY_NAME "SGX540" @@ -60,16 +61,6 @@ #define SGX_FEATURE_AUTOCLOCKGATING #define SGX_FEATURE_MULTI_EVENT_KICK #else -#if defined(SGX541) - #define SGX_CORE_FRIENDLY_NAME "SGX541" - #define SGX_CORE_ID SGX_CORE_ID_541 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_SPM_MODE_0 - #define SGX_FEATURE_MULTI_EVENT_KICK -#else #if defined(SGX543) #define SGX_CORE_FRIENDLY_NAME "SGX543" #define SGX_CORE_ID SGX_CORE_ID_543 @@ -80,12 +71,21 @@ #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) #define SGX_FEATURE_AUTOCLOCKGATING #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_SPM_MODE_0 #define SGX_FEATURE_MULTI_EVENT_KICK #define SGX_FEATURE_DATA_BREAKPOINTS + #define SGX_FEATURE_PERPIPE_BKPT_REGS + #define SGX_FEATURE_PERPIPE_BKPT_REGS_NUMPIPES (2) #define SGX_FEATURE_2D_HARDWARE #define SGX_FEATURE_PTLA #define SGX_FEATURE_EXTENDED_PERF_COUNTERS + #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) + #if defined(SGX_FEATURE_MP) + #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH + #endif + #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH + #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH + #endif #else #if defined(SGX544) #define SGX_CORE_FRIENDLY_NAME "SGX544" @@ -97,10 +97,16 @@ #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) #define SGX_FEATURE_AUTOCLOCKGATING #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_SPM_MODE_0 #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_DATA_BREAKPOINTS #define SGX_FEATURE_EXTENDED_PERF_COUNTERS + #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) + #if defined(SGX_FEATURE_MP) + #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH + #endif + #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH + #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH + #endif #else #if defined(SGX545) #define SGX_CORE_FRIENDLY_NAME "SGX545" @@ -118,18 +124,19 @@ #define SGX_FEATURE_PDS_DATA_INTERLEAVE_2DWORDS #define SGX_FEATURE_MONOLITHIC_UKERNEL #define SGX_FEATURE_ZLS_EXTERNALZ - #define SGX_FEATURE_VDM_CONTEXT_SWITCH_REV_2 - #define SGX_FEATURE_ISP_CONTEXT_SWITCH_REV_2 #define SGX_FEATURE_NUM_PDS_PIPES (2) #define SGX_FEATURE_NATIVE_BACKWARD_BLIT #define SGX_FEATURE_MAX_TA_RENDER_TARGETS (512) - #define SGX_FEATURE_SPM_MODE_0 #define SGX_FEATURE_SECONDARY_REQUIRES_USE_KICK #define SGX_FEATURE_WRITEBACK_DCU #define SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS #define SGX_FEATURE_MULTI_EVENT_KICK + #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) + #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH + #endif #else #if defined(SGX554) #define SGX_CORE_FRIENDLY_NAME "SGX554" @@ -141,10 +148,18 @@ #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) #define SGX_FEATURE_AUTOCLOCKGATING #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_SPM_MODE_0 #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_DATA_BREAKPOINTS + #define SGX_FEATURE_2D_HARDWARE + #define SGX_FEATURE_PTLA #define SGX_FEATURE_EXTENDED_PERF_COUNTERS + #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) + #if defined(SGX_FEATURE_MP) + #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH + #endif + #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH + #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH + #endif #endif #endif #endif @@ -154,6 +169,10 @@ #endif #endif #endif + +#if defined(SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH) \ + || defined(SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH) +#define SGX_FEATURE_VDM_CONTEXT_SWITCH #endif #if defined(FIX_HW_BRN_22693) @@ -182,14 +201,36 @@ #endif #endif -#if defined(SGX_FEATURE_MP) -#if !defined(SGX_FEATURE_MP_CORE_COUNT) -#error SGX_FEATURE_MP_CORE_COUNT must be defined when SGX_FEATURE_MP is defined +#if defined(FIX_HW_BRN_29954) +#undef SGX_FEATURE_PERPIPE_BKPT_REGS #endif -#else -#define SGX_FEATURE_MP_CORE_COUNT (1) + +#if defined(FIX_HW_BRN_31620) +#undef SGX_FEATURE_MULTIPLE_MEM_CONTEXTS +#undef SGX_FEATURE_BIF_NUM_DIRLISTS #endif +#if defined(SGX_FEATURE_MP) +#if defined(SGX_FEATURE_MP_CORE_COUNT_TA) && defined(SGX_FEATURE_MP_CORE_COUNT_3D) +#if (SGX_FEATURE_MP_CORE_COUNT_TA > SGX_FEATURE_MP_CORE_COUNT_3D) +#error Number of TA cores larger than number of 3D cores not supported in current driver +#endif +#else +#if defined(SGX_FEATURE_MP_CORE_COUNT) +#define SGX_FEATURE_MP_CORE_COUNT_TA (SGX_FEATURE_MP_CORE_COUNT) +#define SGX_FEATURE_MP_CORE_COUNT_3D (SGX_FEATURE_MP_CORE_COUNT) +#else +#error Either SGX_FEATURE_MP_CORE_COUNT or \ +both SGX_FEATURE_MP_CORE_COUNT_TA and SGX_FEATURE_MP_CORE_COUNT_3D \ +must be defined when SGX_FEATURE_MP is defined +#endif +#endif +#else +#define SGX_FEATURE_MP_CORE_COUNT (1) +#define SGX_FEATURE_MP_CORE_COUNT_TA (1) +#define SGX_FEATURE_MP_CORE_COUNT_3D (1) +#endif + #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && !defined(SUPPORT_SGX_PRIORITY_SCHEDULING) #define SUPPORT_SGX_PRIORITY_SCHEDULING #endif diff --git a/services4/srvkm/hwdefs/sgxmmu.h b/services4/srvkm/hwdefs/sgxmmu.h index 4df8003..1b265f1 100644 --- a/services4/srvkm/hwdefs/sgxmmu.h +++ b/services4/srvkm/hwdefs/sgxmmu.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -44,19 +44,12 @@ #endif #define SGX_MMU_PDE_VALID (0x00000001U) #define SGX_MMU_PDE_PAGE_SIZE_4K (0x00000000U) -#if defined(SGX_FEATURE_VARIABLE_MMU_PAGE_SIZE) - #define SGX_MMU_PDE_PAGE_SIZE_16K (0x00000002U) - #define SGX_MMU_PDE_PAGE_SIZE_64K (0x00000004U) - #define SGX_MMU_PDE_PAGE_SIZE_256K (0x00000006U) - #define SGX_MMU_PDE_PAGE_SIZE_1M (0x00000008U) - #define SGX_MMU_PDE_PAGE_SIZE_4M (0x0000000AU) - #define SGX_MMU_PDE_PAGE_SIZE_MASK (0x0000000EU) -#else - #define SGX_MMU_PDE_WRITEONLY (0x00000002U) - #define SGX_MMU_PDE_READONLY (0x00000004U) - #define SGX_MMU_PDE_CACHECONSISTENT (0x00000008U) - #define SGX_MMU_PDE_EDMPROTECT (0x00000010U) -#endif +#define SGX_MMU_PDE_PAGE_SIZE_16K (0x00000002U) +#define SGX_MMU_PDE_PAGE_SIZE_64K (0x00000004U) +#define SGX_MMU_PDE_PAGE_SIZE_256K (0x00000006U) +#define SGX_MMU_PDE_PAGE_SIZE_1M (0x00000008U) +#define SGX_MMU_PDE_PAGE_SIZE_4M (0x0000000AU) +#define SGX_MMU_PDE_PAGE_SIZE_MASK (0x0000000EU) #define SGX_MMU_PT_SHIFT (10) #define SGX_MMU_PT_SIZE (1U< + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#ifndef _SGXMPDEFS_H_ +#define _SGXMPDEFS_H_ + +#define EUR_CR_MASTER_BIF_CTRL 0x4C00 +#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_MASK 0x00000001U +#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_SHIFT 0 +#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_PAUSE_MASK 0x00000002U +#define EUR_CR_MASTER_BIF_CTRL_PAUSE_SHIFT 1 +#define EUR_CR_MASTER_BIF_CTRL_PAUSE_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U +#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_SHIFT 4 +#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_MASK 0x00010000U +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_SHIFT 16 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_MASK 0x00020000U +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SHIFT 17 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_MASK 0x00040000U +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SHIFT 18 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_MASK 0x00080000U +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SHIFT 19 +#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_INVAL 0x4C34 +#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_MASK 0x00000004U +#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_SHIFT 2 +#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_SIGNED 0 +#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_MASK 0x00000008U +#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_SHIFT 3 +#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_SIGNED 0 +#define EUR_CR_MASTER_BIF_MMU_CTRL 0x4CD0 +#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U +#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 +#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 +#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U +#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 +#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 +#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U +#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 +#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL 0x4D00 +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_MASK 0x00800000U +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_SHIFT 23 +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_MASK 0x00400000U +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_SHIFT 22 +#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_MASK 0x00200000U +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_SHIFT 21 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_MASK 0x00100000U +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_SHIFT 20 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_MASK 0x00080000U +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_SHIFT 19 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_MASK 0x00040000U +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_SHIFT 18 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_MASK 0x00010000U +#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_SHIFT 16 +#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_MASK 0x0000F000U +#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SHIFT 12 +#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_MASK 0x00000E00U +#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SHIFT 9 +#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_PAUSE_MASK 0x00000100U +#define EUR_CR_MASTER_SLC_CTRL_PAUSE_SHIFT 8 +#define EUR_CR_MASTER_SLC_CTRL_PAUSE_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS 0x4D04 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_MASK 0x08000000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_SHIFT 27 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_MASK 0x04000000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_SHIFT 26 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_MASK 0x02000000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_SHIFT 25 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_MASK 0x01000000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_SHIFT 24 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_MASK 0x00800000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_SHIFT 23 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_MASK 0x00400000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_SHIFT 22 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_MASK 0x00200000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_SHIFT 21 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_MASK 0x00100000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_SHIFT 20 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_MASK 0x00080000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_SHIFT 19 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_MASK 0x00040000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_SHIFT 18 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_MASK 0x00020000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_SHIFT 17 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_MASK 0x00010000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_SHIFT 16 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_MASK 0x00008000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_SHIFT 15 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_MASK 0x00004000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_SHIFT 14 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_MASK 0x00002000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_SHIFT 13 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_MASK 0x00001000U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_SHIFT 12 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_MASK 0x00000800U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_SHIFT 11 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_MASK 0x00000400U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_SHIFT 10 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_MASK 0x00000200U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_SHIFT 9 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_MASK 0x00000100U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_SHIFT 8 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_MASK 0x00000080U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_SHIFT 7 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_MASK 0x00000040U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_SHIFT 6 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_MASK 0x00000020U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_SHIFT 5 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_MASK 0x00000010U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_SHIFT 4 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_MASK 0x00000008U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_SHIFT 3 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_MASK 0x00000004U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_SHIFT 2 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_MASK 0x00000002U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_SHIFT 1 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_MASK 0x00000001U +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_SHIFT 0 +#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL 0x4D08 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_MASK 0xFFFFFFFFU +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_SHIFT 0 +#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_INVAL 0x4D28 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_MASK 0x00000008U +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_SHIFT 3 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_MASK 0x00000004U +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_SHIFT 2 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_MASK 0x00000002U +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_SHIFT 1 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_MASK 0x00000001U +#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_SHIFT 0 +#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH 0x4D2C +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_MASK 0x00000080U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_SHIFT 7 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_MASK 0x00000040U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_SHIFT 6 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_MASK 0x00000020U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_SHIFT 5 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_MASK 0x00000010U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_SHIFT 4 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV 0x4D34 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_MASK 0x00000080U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_SHIFT 7 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_MASK 0x00000040U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_SHIFT 6 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_MASK 0x00000020U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_SHIFT 5 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_SIGNED 0 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_MASK 0x00000010U +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_SHIFT 4 +#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_READ 0x4F18 +#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_SHIFT 4 +#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP 0x4F1C +#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT 0x4F20 +#define EUR_CR_MASTER_BREAKPOINT_ID_MASK 0x00000030U +#define EUR_CR_MASTER_BREAKPOINT_ID_SHIFT 4 +#define EUR_CR_MASTER_BREAKPOINT_ID_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_MASK 0x00000008U +#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_SHIFT 3 +#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_MASK 0x00000004U +#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_SHIFT 2 +#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0 0x4F24 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1 0x4F28 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 +#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 +#define EUR_CR_MASTER_CORE 0x4000 +#define EUR_CR_MASTER_CORE_ENABLE_MASK 0x00000003U +#define EUR_CR_MASTER_CORE_ENABLE_SHIFT 0 +#define EUR_CR_MASTER_CORE_ENABLE_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID 0x4010 +#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_MASK 0x00000001U +#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_SHIFT 0 +#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_MASK 0x00000002U +#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_SHIFT 1 +#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID_CONFIG_MASK 0x000000FCU +#define EUR_CR_MASTER_CORE_ID_CONFIG_SHIFT 2 +#define EUR_CR_MASTER_CORE_ID_CONFIG_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_MASK 0x00000F00U +#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_SHIFT 8 +#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_MASK 0x0000F000U +#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_SHIFT 12 +#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_SIGNED 0 +#define EUR_CR_MASTER_CORE_ID_ID_MASK 0xFFFF0000U +#define EUR_CR_MASTER_CORE_ID_ID_SHIFT 16 +#define EUR_CR_MASTER_CORE_ID_ID_SIGNED 0 +#define EUR_CR_MASTER_CORE_REVISION 0x4014 +#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU +#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_SHIFT 0 +#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_SIGNED 0 +#define EUR_CR_MASTER_CORE_REVISION_MINOR_MASK 0x0000FF00U +#define EUR_CR_MASTER_CORE_REVISION_MINOR_SHIFT 8 +#define EUR_CR_MASTER_CORE_REVISION_MINOR_SIGNED 0 +#define EUR_CR_MASTER_CORE_REVISION_MAJOR_MASK 0x00FF0000U +#define EUR_CR_MASTER_CORE_REVISION_MAJOR_SHIFT 16 +#define EUR_CR_MASTER_CORE_REVISION_MAJOR_SIGNED 0 +#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_MASK 0xFF000000U +#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_SHIFT 24 +#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET 0x4080 +#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(i) (0x00000001U << (0 + ((i) * 1))) +#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_SHIFT(i) (0 + ((i) * 1)) +#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_REGNUM(i) 0x4080 +#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_MASK 0x00000010U +#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_SHIFT 4 +#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_MASK 0x00000020U +#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_SHIFT 5 +#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_MASK 0x00000040U +#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_SHIFT 6 +#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_MASK 0x00000080U +#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_SHIFT 7 +#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_MASK 0x00000100U +#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_SHIFT 8 +#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_MASK 0x00000200U +#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_SHIFT 9 +#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_SIGNED 0 +#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_MASK 0x00000400U +#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_SHIFT 10 +#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_SIGNED 0 + +#endif + diff --git a/services4/srvkm/include/buffer_manager.h b/services4/srvkm/include/buffer_manager.h index 1467cd3..60d7695 100644 --- a/services4/srvkm/include/buffer_manager.h +++ b/services4/srvkm/include/buffer_manager.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -202,6 +202,11 @@ IMG_VOID BM_Export(BM_HANDLE hBuf); IMG_VOID BM_FreeExport(BM_HANDLE hBuf, IMG_UINT32 ui32Flags); +PVRSRV_ERROR BM_XProcWorkaroundSetShareIndex(IMG_UINT32 ui32Index); +PVRSRV_ERROR BM_XProcWorkaroundUnsetShareIndex(IMG_UINT32 ui32Index); +PVRSRV_ERROR BM_XProcWorkaroundFindNewBufferAndSetShareIndex(IMG_UINT32 *pui32Index); + + #if defined(__cplusplus) } #endif diff --git a/services4/srvkm/include/device.h b/services4/srvkm/include/device.h index f41bd9e..9df2c73 100644 --- a/services4/srvkm/include/device.h +++ b/services4/srvkm/include/device.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -222,6 +222,8 @@ typedef struct _PVRSRV_DEVICE_NODE_ #endif IMG_DEV_PHYADDR (*pfnMMUGetPhysPageAddr)(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr); IMG_DEV_PHYADDR (*pfnMMUGetPDDevPAddr)(MMU_CONTEXT *pMMUContext); + IMG_VOID (*pfnMMUGetCacheFlushRange)(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask); + IMG_VOID (*pfnMMUGetPDPhysAddr)(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); PVRSRV_ERROR (*pfnAllocMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode, @@ -244,7 +246,9 @@ typedef struct _PVRSRV_DEVICE_NODE_ IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); IMG_BOOL bReProcessDeviceCommandComplete; - + + IMG_VOID (*pfnCacheInvalidate)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); + DEVICE_MEMORY_INFO sDevMemoryInfo; diff --git a/services4/srvkm/include/handle.h b/services4/srvkm/include/handle.h index 56de04a..536fa56 100644 --- a/services4/srvkm/include/handle.h +++ b/services4/srvkm/include/handle.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -59,7 +59,8 @@ typedef enum PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, PVRSRV_HANDLE_TYPE_MMAP_INFO, PVRSRV_HANDLE_TYPE_SOC_TIMER, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ + PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ, + PVRSRV_HANDLE_TYPE_RESITEM_INFO } PVRSRV_HANDLE_TYPE; typedef enum @@ -77,11 +78,30 @@ typedef enum struct _PVRSRV_HANDLE_BASE_; typedef struct _PVRSRV_HANDLE_BASE_ PVRSRV_HANDLE_BASE; -#ifdef PVR_SECURE_HANDLES +#if defined (PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) extern PVRSRV_HANDLE_BASE *gpsKernelHandleBase; #define KERNEL_HANDLE_BASE (gpsKernelHandleBase) +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag); + +PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent); + +PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType); + +PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_SID hHandle); + +PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); + +PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType, IMG_SID hAncestor); + +PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phParent, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); + +PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); + +PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); +#else PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag); PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent); @@ -99,6 +119,7 @@ PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phPare PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); +#endif PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize); diff --git a/services4/srvkm/include/hash.h b/services4/srvkm/include/hash.h index d45f4a9..3662089 100644 --- a/services4/srvkm/include/hash.h +++ b/services4/srvkm/include/hash.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -39,6 +39,11 @@ typedef IMG_BOOL HASH_KEY_COMP(IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *p typedef struct _HASH_TABLE_ HASH_TABLE; +typedef PVRSRV_ERROR (*HASH_pfnCallback) ( + IMG_UINTPTR_T k, + IMG_UINTPTR_T v +); + IMG_UINT32 HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen); IMG_BOOL HASH_Key_Comp_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2); @@ -61,6 +66,8 @@ IMG_UINTPTR_T HASH_Retrieve_Extended (HASH_TABLE *pHash, IMG_VOID *pKey); IMG_UINTPTR_T HASH_Retrieve (HASH_TABLE *pHash, IMG_UINTPTR_T k); +PVRSRV_ERROR HASH_Iterate(HASH_TABLE *pHash, HASH_pfnCallback pfnCallback); + #ifdef HASH_TRACE IMG_VOID HASH_Dump (HASH_TABLE *pHash); #endif diff --git a/services4/srvkm/include/lists.h b/services4/srvkm/include/lists.h index 0d74788..a02307a 100644 --- a/services4/srvkm/include/lists.h +++ b/services4/srvkm/include/lists.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/metrics.h b/services4/srvkm/include/metrics.h index 2632f8d..69e1b3d 100644 --- a/services4/srvkm/include/metrics.h +++ b/services4/srvkm/include/metrics.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/osfunc.h b/services4/srvkm/include/osfunc.h index ab86788..b76cefd 100644 --- a/services4/srvkm/include/osfunc.h +++ b/services4/srvkm/include/osfunc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -152,7 +152,7 @@ static INLINE IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, #endif -#if defined(__linux__) +#if (defined(__linux__) || defined(__QNXNTO__)) PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, @@ -199,13 +199,13 @@ static INLINE PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, #endif -#if defined(__linux__) +#if (defined(__linux__) || defined(__QNXNTO__)) #ifdef INLINE_IS_PRAGMA #pragma inline(OSReserveDiscontigPhys) #endif static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle) { -#if defined(__linux__) +#if defined(__linux__) || defined(__QNXNTO__) *ppvCpuVAddr = IMG_NULL; return OSRegisterDiscontigMem(pBasePAddr, *ppvCpuVAddr, ui32Bytes, ui32Flags, phOSMemHandle); #else @@ -218,7 +218,7 @@ static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, I static INLINE PVRSRV_ERROR OSUnReserveDiscontigPhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) { -#if defined(__linux__) +#if defined(__linux__) || defined(__QNXNTO__) OSUnRegisterDiscontigMem(pvCpuVAddr, ui32Bytes, ui32Flags, hOSMemHandle); #endif @@ -267,7 +267,7 @@ PVRSRV_ERROR OSUnRegisterMem(IMG_VOID *pvCpuVAddr, -#if defined(__linux__) +#if defined(__linux__) || defined(__QNXNTO__) PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINTPTR_T ui32ByteOffset, IMG_SIZE_T ui32Bytes, @@ -368,7 +368,7 @@ PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pv #define OSFreeMem_Debug_Wrapper OSFreeMem_Debug_Linux_Memory_Allocations #endif -#if defined(__linux__) && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) +#if (defined(__linux__) || defined(__QNXNTO__)) && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); @@ -385,7 +385,7 @@ PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pv #endif -#if defined(__linux__) +#if defined(__linux__) || defined(__QNXNTO__) IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_SIZE_T ui32ByteOffset); #else #ifdef INLINE_IS_PRAGMA @@ -406,15 +406,27 @@ IMG_CHAR* OSStringCopy(IMG_CHAR *pszDest, const IMG_CHAR *pszSrc); IMG_INT32 OSSNPrintf(IMG_CHAR *pStr, IMG_SIZE_T ui32Size, const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(3, 4); #define OSStringLength(pszString) strlen(pszString) -PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, +#if defined (SUPPORT_SID_INTERFACE) +PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, + PVRSRV_EVENTOBJECT_KM *psEventObject); +PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT_KM *psEventObject); +PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM); +PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM); +PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT_KM *psEventObject, + IMG_HANDLE *phOSEvent); +PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT_KM *psEventObject, + IMG_HANDLE hOSEventKM); +#else +PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *psEventObject); -PVRSRV_ERROR OSEventObjectDestroy(PVRSRV_EVENTOBJECT *psEventObject); -PVRSRV_ERROR OSEventObjectSignal(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectWait(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectOpen(PVRSRV_EVENTOBJECT *psEventObject, +PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT *psEventObject); +PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM); +PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM); +PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT *psEventObject, IMG_HANDLE *phOSEvent); -PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject, +PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT *psEventObject, IMG_HANDLE hOSEventKM); +#endif PVRSRV_ERROR OSBaseAllocContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr); @@ -444,8 +456,25 @@ IMG_BOOL OSIsResourceLocked(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource); PVRSRV_ERROR OSDestroyResource(PVRSRV_RESOURCE *psResource); IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); + +#if defined(SYS_CUSTOM_POWERLOCK_WRAP) +#define OSPowerLockWrap SysPowerLockWrap +#define OSPowerLockUnwrap SysPowerLockUnwrap +#else +PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock); + +IMG_VOID OSPowerLockUnwrap(IMG_VOID); +#endif + + IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus); + + IMG_VOID OSSleepms(IMG_UINT32 ui32Timems); + +IMG_HANDLE OSFuncHighResTimerCreate(IMG_VOID); +IMG_UINT32 OSFuncHighResTimerGetus(IMG_HANDLE hTimer); +IMG_VOID OSFuncHighResTimerDestroy(IMG_HANDLE hTimer); IMG_VOID OSReleaseThreadQuanta(IMG_VOID); IMG_UINT32 OSPCIReadDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg); IMG_VOID OSPCIWriteDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Value); @@ -504,7 +533,7 @@ IMG_BOOL OSAccessOK(IMG_VERIFY_TEST eVerification, IMG_VOID *pvUserPtr, IMG_SIZE PVRSRV_ERROR OSCopyToUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); PVRSRV_ERROR OSCopyFromUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); -#if defined(__linux__) +#if (defined(__linux__) || defined(__QNXNTO__)) PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr, IMG_SIZE_T ui32Bytes, IMG_SYS_PHYADDR *psSysPAddr, diff --git a/services4/srvkm/include/osperproc.h b/services4/srvkm/include/osperproc.h index 80a912f..e5c81da 100644 --- a/services4/srvkm/include/osperproc.h +++ b/services4/srvkm/include/osperproc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -31,7 +31,7 @@ extern "C" { #endif -#if defined(__linux__) +#if defined(__linux__) || defined(__QNXNTO__) PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData); PVRSRV_ERROR OSPerProcessPrivateDataDeInit(IMG_HANDLE hOsPrivateData); diff --git a/services4/srvkm/include/pdump_int.h b/services4/srvkm/include/pdump_int.h index 3c03888..9f68549 100644 --- a/services4/srvkm/include/pdump_int.h +++ b/services4/srvkm/include/pdump_int.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/pdump_km.h b/services4/srvkm/include/pdump_km.h index 1be14d6..f29fdba 100644 --- a/services4/srvkm/include/pdump_km.h +++ b/services4/srvkm/include/pdump_km.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -79,7 +79,7 @@ extern IMG_UINT32 g_ui32EveryLineCounter; IMG_UINT32 ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpMemPagesKM(PVRSRV_DEVICE_TYPE eDeviceType, + PVRSRV_ERROR PDumpMemPagesKM(PVRSRV_DEVICE_IDENTIFIER *psDevID, IMG_DEV_PHYADDR *pPages, IMG_UINT32 ui32NumPages, IMG_DEV_VIRTADDR sDevAddr, @@ -114,6 +114,8 @@ extern IMG_UINT32 g_ui32EveryLineCounter; PVRSRV_ERROR PDumpStopInitPhaseKM(IMG_VOID); IMG_IMPORT PVRSRV_ERROR PDumpSetFrameKM(IMG_UINT32 ui32Frame); IMG_IMPORT PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags); + + IMG_IMPORT PVRSRV_ERROR PDumpDriverInfoKM(IMG_CHAR *pszString, IMG_UINT32 ui32Flags); PVRSRV_ERROR PDumpRegWithFlagsKM(IMG_CHAR *pszPDumpRegName, @@ -124,11 +126,13 @@ extern IMG_UINT32 g_ui32EveryLineCounter; IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Flags); + IMG_UINT32 ui32Flags, + PDUMP_POLL_OPERATOR eOperator); PVRSRV_ERROR PDumpRegPolKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask); + IMG_UINT32 ui32Mask, + PDUMP_POLL_OPERATOR eOperator); IMG_IMPORT PVRSRV_ERROR PDumpBitmapKM(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_CHAR *pszFileName, @@ -171,7 +175,7 @@ extern IMG_UINT32 g_ui32EveryLineCounter; IMG_BOOL PDumpIsLastCaptureFrameKM(IMG_VOID); IMG_IMPORT IMG_BOOL PDumpIsCaptureFrameKM(IMG_VOID); - IMG_VOID PDumpMallocPagesPhys(PVRSRV_DEVICE_TYPE eDeviceType, + IMG_VOID PDumpMallocPagesPhys(PVRSRV_DEVICE_IDENTIFIER *psDevID, IMG_UINT32 ui32DevVAddr, IMG_PUINT32 pui32PhysPages, IMG_UINT32 ui32NumPages, @@ -267,6 +271,7 @@ extern IMG_UINT32 g_ui32EveryLineCounter; IMG_UINT32 ui32FileOffset, IMG_DEV_VIRTADDR sDevBaseAddr, IMG_UINT32 ui32Size, + IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32PDumpFlags); PVRSRV_ERROR PDumpSignatureBuffer(PVRSRV_DEVICE_IDENTIFIER *psDevId, @@ -275,6 +280,7 @@ extern IMG_UINT32 g_ui32EveryLineCounter; IMG_UINT32 ui32FileOffset, IMG_DEV_VIRTADDR sDevBaseAddr, IMG_UINT32 ui32Size, + IMG_UINT32 ui32MMUContextID, IMG_UINT32 ui32PDumpFlags); PVRSRV_ERROR PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo, @@ -349,7 +355,7 @@ extern IMG_UINT32 g_ui32EveryLineCounter; #define PDUMPRESUME PDumpResumeKM #else - #if ((defined(LINUX) || defined(GCC_IA32)) || defined(GCC_ARM)) + #if (((defined(LINUX) || defined(__QNXNTO__)) || defined(GCC_IA32)) || defined(GCC_ARM)) #define PDUMPMEMPOL(args...) #define PDUMPMEM(args...) #define PDUMPMEMPTENTRIES(args...) diff --git a/services4/srvkm/include/pdump_osfunc.h b/services4/srvkm/include/pdump_osfunc.h index 2c3b1e5..f3ed914 100644 --- a/services4/srvkm/include/pdump_osfunc.h +++ b/services4/srvkm/include/pdump_osfunc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -34,6 +34,8 @@ extern "C" { #define MAX_PDUMP_STRING_LENGTH (256) + + #define PDUMP_GET_SCRIPT_STRING() \ IMG_HANDLE hScript; \ diff --git a/services4/srvkm/include/perproc.h b/services4/srvkm/include/perproc.h index c73ecf5..842680c 100644 --- a/services4/srvkm/include/perproc.h +++ b/services4/srvkm/include/perproc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -41,12 +41,21 @@ typedef struct _PVRSRV_PER_PROCESS_DATA_ IMG_UINT32 ui32PID; IMG_HANDLE hBlockAlloc; PRESMAN_CONTEXT hResManContext; +#if defined (SUPPORT_SID_INTERFACE) + IMG_SID hPerProcData; +#else IMG_HANDLE hPerProcData; +#endif PVRSRV_HANDLE_BASE *psHandleBase; +#if defined (SUPPORT_SID_INTERFACE) + + IMG_BOOL bHandlesBatched; +#else #if defined (PVR_SECURE_HANDLES) IMG_BOOL bHandlesBatched; #endif +#endif IMG_UINT32 ui32RefCount; diff --git a/services4/srvkm/include/power.h b/services4/srvkm/include/power.h index 079f212..9e3dcc4 100644 --- a/services4/srvkm/include/power.h +++ b/services4/srvkm/include/power.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/queue.h b/services4/srvkm/include/queue.h index 9437f09..ab89527 100644 --- a/services4/srvkm/include/queue.h +++ b/services4/srvkm/include/queue.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -51,8 +51,7 @@ extern "C" { IMG_VOID QueueDumpDebugInfo(IMG_VOID); IMG_IMPORT -PVRSRV_ERROR PVRSRVProcessQueues (IMG_UINT32 ui32CallerID, - IMG_BOOL bFlush); +PVRSRV_ERROR PVRSRVProcessQueues (IMG_BOOL bFlush); #if defined(__linux__) && defined(__KERNEL__) #include diff --git a/services4/srvkm/include/ra.h b/services4/srvkm/include/ra.h index f28ce4c..db141f6 100644 --- a/services4/srvkm/include/ra.h +++ b/services4/srvkm/include/ra.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/resman.h b/services4/srvkm/include/resman.h index eebec57..648e490 100644 --- a/services4/srvkm/include/resman.h +++ b/services4/srvkm/include/resman.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -41,6 +41,9 @@ enum { RESMAN_TYPE_TRANSFER_CONTEXT, + RESMAN_TYPE_DMA_CLIENT_FIFO_DATA, + + @@ -73,7 +76,7 @@ enum { #define RESMAN_CRITERIA_PVOID_PARAM 0x00000002 #define RESMAN_CRITERIA_UI32_PARAM 0x00000004 -typedef PVRSRV_ERROR (*RESMAN_FREE_FN)(IMG_PVOID pvParam, IMG_UINT32 ui32Param); +typedef PVRSRV_ERROR (*RESMAN_FREE_FN)(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup); typedef struct _RESMAN_ITEM_ *PRESMAN_ITEM; typedef struct _RESMAN_CONTEXT_ *PRESMAN_CONTEXT; @@ -87,7 +90,8 @@ PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT hResManContext, IMG_UINT32 ui32Param, RESMAN_FREE_FN pfnFreeResource); -PVRSRV_ERROR ResManFreeResByPtr(PRESMAN_ITEM psResItem); +PVRSRV_ERROR ResManFreeResByPtr(PRESMAN_ITEM psResItem, + IMG_BOOL bForceCleanup); PVRSRV_ERROR ResManFreeResByCriteria(PRESMAN_CONTEXT hResManContext, IMG_UINT32 ui32SearchCriteria, diff --git a/services4/srvkm/include/services_headers.h b/services4/srvkm/include/services_headers.h index eb00dbb..2b5f197 100644 --- a/services4/srvkm/include/services_headers.h +++ b/services4/srvkm/include/services_headers.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/srvkm.h b/services4/srvkm/include/srvkm.h index e8e223c..474a1ee 100644 --- a/services4/srvkm/include/srvkm.h +++ b/services4/srvkm/include/srvkm.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/services4/srvkm/include/ttrace.h b/services4/srvkm/include/ttrace.h new file mode 100644 index 0000000..9e04b88 --- /dev/null +++ b/services4/srvkm/include/ttrace.h @@ -0,0 +1,184 @@ +/********************************************************************** + * + * Copyright (C) Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#include "services_headers.h" +#include "ttrace_common.h" +#include "ttrace_tokens.h" + +#ifndef __TTRACE_H__ +#define __TTRACE_H__ + +#if defined(TTRACE) + + #define PVR_TTRACE(group, class, token) \ + PVRSRVTimeTrace(group, class, token) + #define PVR_TTRACE_UI8(group, class, token, val) \ + PVRSRVTimeTraceUI8(group, class, token, val) + #define PVR_TTRACE_UI16(group, class, token, val) \ + PVRSRVTimeTraceUI16(group, class, token, val) + #define PVR_TTRACE_UI32(group, class, token, val) \ + PVRSRVTimeTraceUI32(group, class, token, val) + #define PVR_TTRACE_UI64(group, class, token, val) \ + PVRSRVTimeTraceUI64(group, class, token, val) + #define PVR_TTRACE_DEV_VIRTADDR(group, class, token, val) \ + PVRSRVTimeTraceDevVirtAddr(group, class, token, val) + #define PVR_TTRACE_CPU_PHYADDR(group, class, token, val) \ + PVRSRVTimeTraceCpuPhyAddr(group, class, token, val) + #define PVR_TTRACE_DEV_PHYADDR(group, class, token, val) \ + PVRSRVTimeTraceDevPhysAddr(group, class, token, val) + #define PVR_TTRACE_SYS_PHYADDR(group, class, token, val) \ + PVRSRVTimeTraceSysPhysAddr(group, class, token, val) + #define PVR_TTRACE_SYNC_OBJECT(group, token, syncobj, op) \ + PVRSRVTimeTraceSyncObject(group, token, syncobj, op) + +IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTimeTraceArray(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_UINT32 ui32TypeSize, + IMG_UINT32 ui32Count, IMG_UINT8 *ui8Data); + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTrace) +#endif +static INLINE IMG_VOID PVRSRVTimeTrace(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, 0, 0, NULL); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceUI8) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceUI8(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_UINT8 ui8Value) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI8, + 1, &ui8Value); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceUI16) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceUI16(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_UINT16 ui16Value) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI16, + 1, (IMG_UINT8 *) &ui16Value); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceUI32) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceUI32(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_UINT32 ui32Value) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, + 1, (IMG_UINT8 *) &ui32Value); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceUI64) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceUI64(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_UINT64 ui64Value) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI64, + 1, (IMG_UINT8 *) &ui64Value); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceDevVirtAddr) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceDevVirtAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_DEV_VIRTADDR psVAddr) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, + 1, (IMG_UINT8 *) &psVAddr.uiAddr); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceCpuPhyAddr) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceCpuPhyAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_CPU_PHYADDR psPAddr) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, + 1, (IMG_UINT8 *) &psPAddr.uiAddr); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceDevPhysAddr) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceDevPhysAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_DEV_PHYADDR psPAddr) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, + 1, (IMG_UINT8 *) &psPAddr.uiAddr); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(PVRSRVTimeTraceSysPhysAddr) +#endif +static INLINE IMG_VOID PVRSRVTimeTraceSysPhysAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, + IMG_UINT32 ui32Token, IMG_SYS_PHYADDR psPAddr) +{ + PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, sizeof(psPAddr.uiAddr), + 1, (IMG_UINT8 *) &psPAddr.uiAddr); +} + +#else + + #define PVR_TTRACE(group, class, token) \ + ((void) 0) + #define PVR_TTRACE_UI8(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_UI16(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_UI32(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_UI64(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_DEV_VIRTADDR(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_CPU_PHYADDR(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_DEV_PHYADDR(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_SYS_PHYADDR(group, class, token, val) \ + ((void) 0) + #define PVR_TTRACE_SYNC_OBJECT(group, token, syncobj, op) \ + ((void) 0) + +#endif + +IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceInit(IMG_VOID); +IMG_IMPORT IMG_VOID PVRSRVTimeTraceDeinit(IMG_VOID); + +IMG_IMPORT IMG_VOID PVRSRVTimeTraceSyncObject(IMG_UINT32 ui32Group, IMG_UINT32 ui32Token, + PVRSRV_KERNEL_SYNC_INFO *psSync, IMG_UINT8 ui8SyncOp); +IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceBufferCreate(IMG_UINT32 ui32PID); +IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceBufferDestroy(IMG_UINT32 ui32PID); + +IMG_IMPORT IMG_VOID PVRSRVDumpTimeTraceBuffers(IMG_VOID); +#endif diff --git a/services4/srvkm/include/ttrace_common.h b/services4/srvkm/include/ttrace_common.h new file mode 100644 index 0000000..5895b6c --- /dev/null +++ b/services4/srvkm/include/ttrace_common.h @@ -0,0 +1,81 @@ +/********************************************************************** + * + * Copyright (C) Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#include "img_types.h" + +#ifndef __TTRACE_COMMON_H__ +#define __TTRACE_COMMON_H__ + +#define PVRSRV_TRACE_HEADER 0 +#define PVRSRV_TRACE_TIMESTAMP 1 +#define PVRSRV_TRACE_HOSTUID 2 +#define PVRSRV_TRACE_DATA_HEADER 3 +#define PVRSRV_TRACE_DATA_PAYLOAD 4 + +#define PVRSRV_TRACE_ITEM_SIZE 16 + +#define PVRSRV_TRACE_GROUP_MASK 0xff +#define PVRSRV_TRACE_CLASS_MASK 0xff +#define PVRSRV_TRACE_TOKEN_MASK 0xffff + +#define PVRSRV_TRACE_GROUP_SHIFT 24 +#define PVRSRV_TRACE_CLASS_SHIFT 16 +#define PVRSRV_TRACE_TOKEN_SHIFT 0 + +#define PVRSRV_TRACE_SIZE_MASK 0xffff +#define PVRSRV_TRACE_TYPE_MASK 0xf +#define PVRSRV_TRACE_COUNT_MASK 0xfff + +#define PVRSRV_TRACE_SIZE_SHIFT 16 +#define PVRSRV_TRACE_TYPE_SHIFT 12 +#define PVRSRV_TRACE_COUNT_SHIFT 0 + + +#define WRITE_HEADER(n,m) \ + ((m & PVRSRV_TRACE_##n##_MASK) << PVRSRV_TRACE_##n##_SHIFT) + +#define READ_HEADER(n,m) \ + ((m & (PVRSRV_TRACE_##n##_MASK << PVRSRV_TRACE_##n##_SHIFT)) >> PVRSRV_TRACE_##n##_SHIFT) + +#define TIME_TRACE_BUFFER_SIZE 4096 + +#define PVRSRV_TRACE_TYPE_UI8 0 +#define PVRSRV_TRACE_TYPE_UI16 1 +#define PVRSRV_TRACE_TYPE_UI32 2 +#define PVRSRV_TRACE_TYPE_UI64 3 + +#define PVRSRV_TRACE_TYPE_SYNC 15 + #define PVRSRV_TRACE_SYNC_UID 0 + #define PVRSRV_TRACE_SYNC_WOP 1 + #define PVRSRV_TRACE_SYNC_WOC 2 + #define PVRSRV_TRACE_SYNC_ROP 3 + #define PVRSRV_TRACE_SYNC_ROC 4 + #define PVRSRV_TRACE_SYNC_WO_DEV_VADDR 5 + #define PVRSRV_TRACE_SYNC_RO_DEV_VADDR 6 + #define PVRSRV_TRACE_SYNC_OP 7 +#define PVRSRV_TRACE_TYPE_SYNC_SIZE ((PVRSRV_TRACE_SYNC_OP + 1) * sizeof(IMG_UINT32)) + +#endif diff --git a/services4/srvkm/include/ttrace_tokens.h b/services4/srvkm/include/ttrace_tokens.h new file mode 100644 index 0000000..21ea5fb --- /dev/null +++ b/services4/srvkm/include/ttrace_tokens.h @@ -0,0 +1,84 @@ +/********************************************************************** + * + * Copyright (C) Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#ifndef __TTRACE_TOKENS_H__ +#define __TTRACE_TOKENS_H__ + +#define PVRSRV_TRACE_GROUP_KICK 0 +#define PVRSRV_TRACE_GROUP_TRANSFER 1 +#define PVRSRV_TRACE_GROUP_QUEUE 2 +#define PVRSRV_TRACE_GROUP_POWER 3 +#define PVRSRV_TRACE_GROUP_MKSYNC 4 + +#define PVRSRV_TRACE_GROUP_PADDING 255 + +#define PVRSRV_TRACE_CLASS_FUNCTION_ENTER 0 +#define PVRSRV_TRACE_CLASS_FUNCTION_EXIT 1 +#define PVRSRV_TRACE_CLASS_SYNC 2 +#define PVRSRV_TRACE_CLASS_CCB 3 +#define PVRSRV_TRACE_CLASS_CMD_START 4 +#define PVRSRV_TRACE_CLASS_CMD_END 5 +#define PVRSRV_TRACE_CLASS_CMD_COMP_START 6 +#define PVRSRV_TRACE_CLASS_CMD_COMP_END 7 + +#define PVRSRV_TRACE_CLASS_NONE 255 + +#define PVRSRV_SYNCOP_SAMPLE 0 +#define PVRSRV_SYNCOP_COMPLETE 1 +#define PVRSRV_SYNCOP_DUMP 2 + +#define KICK_TOKEN_DOKICK 0 +#define KICK_TOKEN_CCB_OFFSET 1 +#define KICK_TOKEN_TA3D_SYNC 2 +#define KICK_TOKEN_TA_SYNC 3 +#define KICK_TOKEN_3D_SYNC 4 +#define KICK_TOKEN_SRC_SYNC 5 +#define KICK_TOKEN_DST_SYNC 6 + +#define TRANSFER_TOKEN_SUBMIT 0 +#define TRANSFER_TOKEN_TA_SYNC 1 +#define TRANSFER_TOKEN_3D_SYNC 2 +#define TRANSFER_TOKEN_SRC_SYNC 3 +#define TRANSFER_TOKEN_DST_SYNC 4 +#define TRANSFER_TOKEN_CCB_OFFSET 5 + +#define QUEUE_TOKEN_GET_SPACE 0 +#define QUEUE_TOKEN_INSERTKM 1 +#define QUEUE_TOKEN_SUBMITKM 2 +#define QUEUE_TOKEN_PROCESS_COMMAND 3 +#define QUEUE_TOKEN_PROCESS_QUEUES 4 +#define QUEUE_TOKEN_COMMAND_COMPLETE 5 +#define QUEUE_TOKEN_UPDATE_DST 6 +#define QUEUE_TOKEN_UPDATE_SRC 7 +#define QUEUE_TOKEN_SRC_SYNC 8 +#define QUEUE_TOKEN_DST_SYNC 9 +#define QUEUE_TOKEN_COMMAND_TYPE 10 + +#define MKSYNC_TOKEN_KERNEL_CCB_OFFSET 0 +#define MKSYNC_TOKEN_CORE_CLK 1 +#define MKSYNC_TOKEN_UKERNEL_CLK 2 + +#endif diff --git a/services4/system/include/syscommon.h b/services4/system/include/syscommon.h index 38b6107..6131e13 100644 --- a/services4/system/include/syscommon.h +++ b/services4/system/include/syscommon.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -57,6 +57,9 @@ typedef struct _SYS_DEVICE_ID_TAG #define SYS_MAX_LOCAL_DEVMEM_ARENAS 4 +typedef IMG_HANDLE (*PFN_HTIMER_CREATE) (IMG_VOID); +typedef IMG_UINT32 (*PFN_HTIMER_GETUS) (IMG_HANDLE); +typedef IMG_VOID (*PFN_HTIMER_DESTROY) (IMG_HANDLE); typedef struct _SYS_DATA_TAG_ { IMG_UINT32 ui32NumDevices; @@ -81,14 +84,20 @@ typedef struct _SYS_DATA_TAG_ struct _DEVICE_COMMAND_DATA_ *apsDeviceCommandData[SYS_DEVICE_COUNT]; - IMG_BOOL bReProcessQueues; - RA_ARENA *apsLocalDevMemArena[SYS_MAX_LOCAL_DEVMEM_ARENAS]; IMG_CHAR *pszVersionString; - PVRSRV_EVENTOBJECT *psGlobalEventObject; +#if defined (SUPPORT_SID_INTERFACE) + PVRSRV_EVENTOBJECT_KM *psGlobalEventObject; +#else + PVRSRV_EVENTOBJECT *psGlobalEventObject; +#endif PVRSRV_MISC_INFO_CPUCACHEOP_TYPE ePendingCacheOpType; + + PFN_HTIMER_CREATE pfnHighResTimerCreate; + PFN_HTIMER_GETUS pfnHighResTimerGetus; + PFN_HTIMER_DESTROY pfnHighResTimerDestroy; } SYS_DATA; @@ -120,8 +129,8 @@ PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, PVRSRV_DEV_POWER_STATE eCurrentPowerState); #if defined(SYS_CUSTOM_POWERLOCK_WRAP) -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData); -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData); +PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock); +IMG_VOID SysPowerLockUnwrap(IMG_VOID); #endif PVRSRV_ERROR SysOEMFunction ( IMG_UINT32 ui32ID, @@ -143,6 +152,7 @@ IMG_BOOL SysVerifySysPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_SYS_PH extern SYS_DATA* gpsSysData; + #if !defined(USE_CODE) #ifdef INLINE_IS_PRAGMA @@ -216,5 +226,37 @@ static inline IMG_VOID SysWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32 } #endif +#ifdef INLINE_IS_PRAGMA +#pragma inline(SysHighResTimerCreate) +#endif +static INLINE IMG_HANDLE SysHighResTimerCreate(IMG_VOID) +{ + SYS_DATA *psSysData; + + SysAcquireData(&psSysData); + return psSysData->pfnHighResTimerCreate(); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(SysHighResTimerGetus) +#endif +static INLINE IMG_UINT32 SysHighResTimerGetus(IMG_HANDLE hTimer) +{ + SYS_DATA *psSysData; + + SysAcquireData(&psSysData); + return psSysData->pfnHighResTimerGetus(hTimer); +} + +#ifdef INLINE_IS_PRAGMA +#pragma inline(SysHighResTimerDestroy) +#endif +static INLINE IMG_VOID SysHighResTimerDestroy(IMG_HANDLE hTimer) +{ + SYS_DATA *psSysData; + + SysAcquireData(&psSysData); + psSysData->pfnHighResTimerDestroy(hTimer); +} #endif diff --git a/services4/system/omap3/sysutils_linux_wqueue_compat.c b/services4/system/omap3/sysutils_linux_wqueue_compat.c index ff626a6..fc8f810 100644 --- a/services4/system/omap3/sysutils_linux_wqueue_compat.c +++ b/services4/system/omap3/sysutils_linux_wqueue_compat.c @@ -51,39 +51,54 @@ #define SGX_PARENT_CLOCK "core_ck" #endif -static IMG_VOID PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData) +static PVRSRV_ERROR PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData, IMG_BOOL bTryLock) { - if (!in_interrupt()) - { - mutex_lock(&psSysSpecData->sPowerLock); - - } + if (!in_interrupt()) + { + if (bTryLock) + { + int locked = mutex_trylock(&psSysSpecData->sPowerLock); + if (locked == 0) + { + return PVRSRV_ERROR_RETRY; + } + } + else + { + mutex_lock(&psSysSpecData->sPowerLock); + } + } + + return PVRSRV_OK; } static IMG_VOID PowerLockUnwrap(SYS_SPECIFIC_DATA *psSysSpecData) { - if (!in_interrupt()) - { - mutex_unlock(&psSysSpecData->sPowerLock); - } + if (!in_interrupt()) + { + mutex_unlock(&psSysSpecData->sPowerLock); + } } -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData) +PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockWrap(psSysSpecData); + SysAcquireData(&psSysData); - return PVRSRV_OK; + return PowerLockWrap(psSysData->pvSysSpecificData, bTryLock); } -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData) +IMG_VOID SysPowerLockUnwrap(IMG_VOID) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockUnwrap(psSysSpecData); + SysAcquireData(&psSysData); + + PowerLockUnwrap(psSysData->pvSysSpecificData); } + IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) { return IMG_TRUE; diff --git a/services4/system/omap3630/sysutils_linux_wqueue_compat.c b/services4/system/omap3630/sysutils_linux_wqueue_compat.c index ff626a6..582c66d 100644 --- a/services4/system/omap3630/sysutils_linux_wqueue_compat.c +++ b/services4/system/omap3630/sysutils_linux_wqueue_compat.c @@ -51,39 +51,56 @@ #define SGX_PARENT_CLOCK "core_ck" #endif -static IMG_VOID PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData) -{ - if (!in_interrupt()) - { - mutex_lock(&psSysSpecData->sPowerLock); - } +static PVRSRV_ERROR PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData, IMG_BOOL bTryLock) +{ + if (!in_interrupt()) + { + if (bTryLock) + { + int locked = mutex_trylock(&psSysSpecData->sPowerLock); + if (locked == 0) + { + return PVRSRV_ERROR_RETRY; + } + } + else + { + mutex_lock(&psSysSpecData->sPowerLock); + } + } + + return PVRSRV_OK; } static IMG_VOID PowerLockUnwrap(SYS_SPECIFIC_DATA *psSysSpecData) { - if (!in_interrupt()) - { - mutex_unlock(&psSysSpecData->sPowerLock); - } + if (!in_interrupt()) + { + mutex_unlock(&psSysSpecData->sPowerLock); + } } -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData) +PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockWrap(psSysSpecData); + SysAcquireData(&psSysData); - return PVRSRV_OK; + return PowerLockWrap(psSysData->pvSysSpecificData, bTryLock); } -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData) +IMG_VOID SysPowerLockUnwrap(IMG_VOID) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockUnwrap(psSysSpecData); + SysAcquireData(&psSysData); + + PowerLockUnwrap(psSysData->pvSysSpecificData); } + + IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) { return IMG_TRUE; diff --git a/services4/system/omap4/oemfuncs.h b/services4/system/omap4/oemfuncs.h deleted file mode 100644 index 206f7fa..0000000 --- a/services4/system/omap4/oemfuncs.h +++ /dev/null @@ -1,56 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__OEMFUNCS_H__) -#define __OEMFUNCS_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -typedef IMG_UINT32 (*PFN_SRV_BRIDGEDISPATCH)( IMG_UINT32 Ioctl, - IMG_BYTE *pInBuf, - IMG_UINT32 InBufLen, - IMG_BYTE *pOutBuf, - IMG_UINT32 OutBufLen, - IMG_UINT32 *pdwBytesTransferred); -typedef struct PVRSRV_DC_OEM_JTABLE_TAG -{ - PFN_SRV_BRIDGEDISPATCH pfnOEMBridgeDispatch; - IMG_PVOID pvDummy1; - IMG_PVOID pvDummy2; - IMG_PVOID pvDummy3; - -} PVRSRV_DC_OEM_JTABLE; - -#define OEM_GET_EXT_FUNCS (1<<1) - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/services4/system/omap4/sysconfig.c b/services4/system/omap4/sysconfig.c deleted file mode 100644 index 929d108..0000000 --- a/services4/system/omap4/sysconfig.c +++ /dev/null @@ -1,878 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "kerneldisplay.h" -#include "oemfuncs.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#include "syslocal.h" -#include "sysconfig.h" - -#include "ocpdefs.h" - -#if !defined(NO_HARDWARE) && \ - defined(SYS_USING_INTERRUPTS) && \ - defined(SGX540) && (SGX_CORE_REV == 110) -#define SGX_OCP_REGS_ENABLED -#endif - -SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; -SYS_DATA gsSysData; - -static SYS_SPECIFIC_DATA gsSysSpecificData; -SYS_SPECIFIC_DATA *gpsSysSpecificData; - -static IMG_UINT32 gui32SGXDeviceID; -static SGX_DEVICE_MAP gsSGXDeviceMap; -static PVRSRV_DEVICE_NODE *gpsSGXDevNode; - -#define DEVICE_SGX_INTERRUPT (1 << 0) - -#if defined(NO_HARDWARE) -static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; -#endif - -IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, - IMG_BYTE *pInBuf, - IMG_UINT32 InBufLen, - IMG_BYTE *pOutBuf, - IMG_UINT32 OutBufLen, - IMG_UINT32 *pdwBytesTransferred); - -#if defined(SGX_OCP_REGS_ENABLED) - -#define SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE (SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE + EUR_CR_OCP_REVISION) -#define SYS_OMAP4430_OCP_REGS_SIZE 0x110 - -static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; - -static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) -{ - PVRSRV_ERROR eError = EnableSGXClocks(psSysData); - - if(eError == PVRSRV_OK) - { - OSWriteHWReg(gpvOCPRegsLinAddr, - EUR_CR_OCP_SYSCONFIG - EUR_CR_OCP_REVISION, - 0x14); - OSWriteHWReg(gpvOCPRegsLinAddr, - EUR_CR_OCP_DEBUG_CONFIG - EUR_CR_OCP_REVISION, - EUR_CR_OCP_DEBUG_CONFIG_THALIA_INT_BYPASS_MASK); - } - - return eError; -} - -#else - -static INLINE PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) -{ - return EnableSGXClocks(psSysData); -} - -#endif - -static INLINE PVRSRV_ERROR EnableSystemClocksWrap(SYS_DATA *psSysData) -{ - PVRSRV_ERROR eError = EnableSystemClocks(psSysData); - -#if !defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - if(eError == PVRSRV_OK) - { - - EnableSGXClocksWrap(psSysData); - } -#endif - - return eError; -} - -static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) -{ -#if defined(NO_HARDWARE) - PVRSRV_ERROR eError; - IMG_CPU_PHYADDR sCpuPAddr; -#endif - - PVR_UNREFERENCED_PARAMETER(psSysData); - - - gsSGXDeviceMap.ui32Flags = 0x0; - -#if defined(NO_HARDWARE) - - - eError = OSBaseAllocContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, - &gsSGXRegsCPUVAddr, - &sCpuPAddr); - if(eError != PVRSRV_OK) - { - return eError; - } - gsSGXDeviceMap.sRegsCpuPBase = sCpuPAddr; - gsSGXDeviceMap.sRegsSysPBase = SysCpuPAddrToSysPAddr(gsSGXDeviceMap.sRegsCpuPBase); - gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; -#if defined(__linux__) - - gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; -#else - - gsSGXDeviceMap.pvRegsCpuVBase = IMG_NULL; -#endif - - OSMemSet(gsSGXRegsCPUVAddr, 0, SYS_OMAP4430_SGX_REGS_SIZE); - - - - - gsSGXDeviceMap.ui32IRQ = 0; - -#else - - gsSGXDeviceMap.sRegsSysPBase.uiAddr = SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE; - gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); - gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; - - gsSGXDeviceMap.ui32IRQ = SYS_OMAP4430_SGX_IRQ; - -#endif - -#if defined(PDUMP) - { - - static IMG_CHAR pszPDumpDevName[] = "SGXMEM"; - gsSGXDeviceMap.pszPDumpDevName = pszPDumpDevName; - } -#endif - - - - - return PVRSRV_OK; -} - - -IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion) -{ - static IMG_CHAR aszVersionString[100]; - SYS_DATA *psSysData; - IMG_UINT32 ui32SGXRevision; - IMG_INT32 i32Count; -#if !defined(NO_HARDWARE) - IMG_VOID *pvRegsLinAddr; - - pvRegsLinAddr = OSMapPhysToLin(sRegRegion, - SYS_OMAP4430_SGX_REGS_SIZE, - PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, - IMG_NULL); - if(!pvRegsLinAddr) - { - return IMG_NULL; - } - - ui32SGXRevision = OSReadHWReg((IMG_PVOID)((IMG_PBYTE)pvRegsLinAddr), - EUR_CR_CORE_REVISION); -#else - ui32SGXRevision = 0; -#endif - - SysAcquireData(&psSysData); - - i32Count = OSSNPrintf(aszVersionString, 100, - "SGX revision = %u.%u.%u", - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MAJOR_MASK) - >> EUR_CR_CORE_REVISION_MAJOR_SHIFT), - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MINOR_MASK) - >> EUR_CR_CORE_REVISION_MINOR_SHIFT), - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MAINTENANCE_MASK) - >> EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT) - ); - -#if !defined(NO_HARDWARE) - OSUnMapPhysToLin(pvRegsLinAddr, - SYS_OMAP4430_SGX_REGS_SIZE, - PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, - IMG_NULL); -#endif - - if(i32Count == -1) - { - return IMG_NULL; - } - - return aszVersionString; -} - - -PVRSRV_ERROR SysInitialise(IMG_VOID) -{ - IMG_UINT32 i; - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_CPU_PHYADDR TimerRegPhysBase; -#if !defined(SGX_DYNAMIC_TIMING_INFO) - SGX_TIMING_INFORMATION* psTimingInfo; -#endif - gpsSysData = &gsSysData; - OSMemSet(gpsSysData, 0, sizeof(SYS_DATA)); - - gpsSysSpecificData = &gsSysSpecificData; - OSMemSet(gpsSysSpecificData, 0, sizeof(SYS_SPECIFIC_DATA)); - - gpsSysData->pvSysSpecificData = gpsSysSpecificData; - - eError = OSInitEnvData(&gpsSysData->pvEnvSpecificData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to setup env structure")); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_ENVDATA); - - gpsSysData->ui32NumDevices = SYS_DEVICE_COUNT; - - - for(i=0; isDeviceID[i].uiID = i; - gpsSysData->sDeviceID[i].bInUse = IMG_FALSE; - } - - gpsSysData->psDeviceNodeList = IMG_NULL; - gpsSysData->psQueueList = IMG_NULL; - - eError = SysInitialiseCommon(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed in SysInitialiseCommon")); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE; - gpsSysData->pvSOCTimerRegisterKM = IMG_NULL; - gpsSysData->hSOCTimerRegisterOSMemHandle = 0; - OSReservePhys(TimerRegPhysBase, - 4, - PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, - (IMG_VOID **)&gpsSysData->pvSOCTimerRegisterKM, - &gpsSysData->hSOCTimerRegisterOSMemHandle); - -#if !defined(SGX_DYNAMIC_TIMING_INFO) - - psTimingInfo = &gsSGXDeviceMap.sTimingInfo; - psTimingInfo->ui32CoreClockSpeed = SYS_SGX_CLOCK_SPEED; - psTimingInfo->ui32HWRecoveryFreq = SYS_SGX_HWRECOVERY_TIMEOUT_FREQ; -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - psTimingInfo->bEnableActivePM = IMG_TRUE; -#else - psTimingInfo->bEnableActivePM = IMG_FALSE; -#endif - psTimingInfo->ui32ActivePowManLatencyms = SYS_SGX_ACTIVE_POWER_LATENCY_MS; - psTimingInfo->ui32uKernelFreq = SYS_SGX_PDS_TIMER_FREQ; -#endif - - - - gpsSysSpecificData->ui32SrcClockDiv = 3; - - - - - - eError = SysLocateDevices(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to locate devices")); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV); - -#if defined(SGX_OCP_REGS_ENABLED) - { - IMG_SYS_PHYADDR sOCPRegsSysPBase; - IMG_CPU_PHYADDR sOCPRegsCpuPBase; - - sOCPRegsSysPBase.uiAddr = SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE; - sOCPRegsCpuPBase = SysSysPAddrToCpuPAddr(sOCPRegsSysPBase); - - gpvOCPRegsLinAddr = OSMapPhysToLin(sOCPRegsCpuPBase, - SYS_OMAP4430_OCP_REGS_SIZE, - PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, - IMG_NULL); - - if (gpvOCPRegsLinAddr == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to map OCP registers")); - return PVRSRV_ERROR_BAD_MAPPING; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS); - } -#endif - - - - - eError = PVRSRVRegisterDevice(gpsSysData, SGXRegisterDevice, - DEVICE_SGX_INTERRUPT, &gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to register device!")); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_REGDEV); - - - - - - psDeviceNode = gpsSysData->psDeviceNodeList; - while(psDeviceNode) - { - - switch(psDeviceNode->sDevId.eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - DEVICE_MEMORY_INFO *psDevMemoryInfo; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - - - - - psDeviceNode->psLocalDevMemArena = IMG_NULL; - - - psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; - psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; - - - for(i=0; iui32HeapCount; i++) - { - psDeviceMemoryHeap[i].ui32Attribs |= PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG; - } - - gpsSGXDevNode = psDeviceNode; - gsSysSpecificData.psSGXDevNode = psDeviceNode; - - break; - } - default: - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to find SGX device node!")); - return PVRSRV_ERROR_INIT_FAILURE; - } - - - psDeviceNode = psDeviceNode->psNext; - } - - eError = EnableSystemClocksWrap(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to Enable system clocks (%d)", eError)); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS); -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - eError = EnableSGXClocksWrap(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to Enable SGX clocks (%d)", eError)); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } -#endif - - eError = PVRSRVInitialiseDevice(gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to initialise device!")); - (IMG_VOID)SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_INITDEV); - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - - DisableSGXClocks(gpsSysData); -#endif - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysFinalise(IMG_VOID) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - eError = EnableSGXClocksWrap(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to Enable SGX clocks (%d)", eError)); - return eError; - } -#endif - - eError = OSInstallMISR(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to install MISR")); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_MISR); - -#if defined(SYS_USING_INTERRUPTS) - - eError = OSInstallDeviceLISR(gpsSysData, gsSGXDeviceMap.ui32IRQ, "SGX ISR", gpsSGXDevNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to install ISR")); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR); -#endif - - - gpsSysData->pszVersionString = SysCreateVersionString(gsSGXDeviceMap.sRegsCpuPBase); - if (!gpsSysData->pszVersionString) - { - PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to create a system version string")); - } - else - { - PVR_DPF((PVR_DBG_WARNING, "SysFinalise: Version string: %s", gpsSysData->pszVersionString)); - } - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - - DisableSGXClocks(gpsSysData); -#endif - - gpsSysSpecificData->bSGXInitComplete = IMG_TRUE; - - return eError; -} - - -PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) -{ - PVRSRV_ERROR eError; - -#if defined(SYS_USING_INTERRUPTS) - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) - { - eError = OSUninstallDeviceLISR(psSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallDeviceLISR failed")); - return eError; - } - } -#endif - - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_MISR)) - { - eError = OSUninstallMISR(psSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallMISR failed")); - return eError; - } - } - - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_INITDEV)) - { -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - PVR_ASSERT(SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)); - - eError = EnableSGXClocksWrap(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: EnableSGXClocks failed")); - return eError; - } -#endif - - - eError = PVRSRVDeinitialiseDevice (gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: failed to de-init the device")); - return eError; - } - } - -#if defined(SGX_OCP_REGS_ENABLED) - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS)) - { - OSUnMapPhysToLin(gpvOCPRegsLinAddr, - SYS_OMAP4430_OCP_REGS_SIZE, - PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, - IMG_NULL); - } -#endif - - - - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) - { - DisableSystemClocks(gpsSysData); - } - - if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_ENVDATA)) - { - eError = OSDeInitEnvData(gpsSysData->pvEnvSpecificData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: failed to de-init env structure")); - return eError; - } - } - - if(gpsSysData->pvSOCTimerRegisterKM) - { - OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM, - 4, - PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, - gpsSysData->hSOCTimerRegisterOSMemHandle); - } - - SysDeinitialiseCommon(gpsSysData); - -#if defined(NO_HARDWARE) - if(SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV)) - { - - OSBaseFreeContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, gsSGXRegsCPUVAddr, gsSGXDeviceMap.sRegsCpuPBase); - } -#endif - - - gpsSysSpecificData->ui32SysSpecificData = 0; - gpsSysSpecificData->bSGXInitComplete = IMG_FALSE; - - gpsSysData = IMG_NULL; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_VOID **ppvDeviceMap) -{ - - switch(eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - - *ppvDeviceMap = (IMG_VOID*)&gsSGXDeviceMap; - - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR,"SysGetDeviceMemoryMap: unsupported device type")); - } - } - return PVRSRV_OK; -} - - -IMG_DEV_PHYADDR SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_CPU_PHYADDR CpuPAddr) -{ - IMG_DEV_PHYADDR DevPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - DevPAddr.uiAddr = CpuPAddr.uiAddr; - - return DevPAddr; -} - -IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr (IMG_SYS_PHYADDR sys_paddr) -{ - IMG_CPU_PHYADDR cpu_paddr; - - - cpu_paddr.uiAddr = sys_paddr.uiAddr; - return cpu_paddr; -} - -IMG_SYS_PHYADDR SysCpuPAddrToSysPAddr (IMG_CPU_PHYADDR cpu_paddr) -{ - IMG_SYS_PHYADDR sys_paddr; - - - sys_paddr.uiAddr = cpu_paddr.uiAddr; - return sys_paddr; -} - - -IMG_DEV_PHYADDR SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType, IMG_SYS_PHYADDR SysPAddr) -{ - IMG_DEV_PHYADDR DevPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - DevPAddr.uiAddr = SysPAddr.uiAddr; - - return DevPAddr; -} - - -IMG_SYS_PHYADDR SysDevPAddrToSysPAddr(PVRSRV_DEVICE_TYPE eDeviceType, IMG_DEV_PHYADDR DevPAddr) -{ - IMG_SYS_PHYADDR SysPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - SysPAddr.uiAddr = DevPAddr.uiAddr; - - return SysPAddr; -} - - -IMG_VOID SysRegisterExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVR_UNREFERENCED_PARAMETER(psDeviceNode); -} - - -IMG_VOID SysRemoveExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVR_UNREFERENCED_PARAMETER(psDeviceNode); -} - - -IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData, - PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVR_UNREFERENCED_PARAMETER(psSysData); -#if defined(NO_HARDWARE) - - return 0xFFFFFFFF; -#else - - return psDeviceNode->ui32SOCInterruptBit; -#endif -} - - -IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) -{ - PVR_UNREFERENCED_PARAMETER(psSysData); - PVR_UNREFERENCED_PARAMETER(ui32ClearBits); - - - OSReadHWReg(((PVRSRV_SGXDEV_INFO *)gpsSGXDevNode->pvDevice)->pvRegsBaseKM, - EUR_CR_EVENT_HOST_CLEAR); -} - - -PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if (eNewPowerState == PVRSRV_SYS_POWER_STATE_D3) - { - PVR_TRACE(("SysSystemPrePowerState: Entering state D3")); - -#if defined(SYS_USING_INTERRUPTS) - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) - { -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - IMG_BOOL bWrapped = WrapSystemPowerChange(&gsSysSpecificData); -#endif - eError = OSUninstallDeviceLISR(gpsSysData); -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - if (bWrapped) - { - UnwrapSystemPowerChange(&gsSysSpecificData); - } -#endif - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysSystemPrePowerState: OSUninstallDeviceLISR failed (%d)", eError)); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR); - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR); - } -#endif - - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) - { - DisableSystemClocks(gpsSysData); - - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS); - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS); - } - } - - return eError; -} - - -PVRSRV_ERROR SysSystemPostPowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if (eNewPowerState == PVRSRV_SYS_POWER_STATE_D0) - { - PVR_TRACE(("SysSystemPostPowerState: Entering state D0")); - - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS)) - { - eError = EnableSystemClocksWrap(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysSystemPostPowerState: EnableSystemClocksWrap failed (%d)", eError)); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS); - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS); - } - -#if defined(SYS_USING_INTERRUPTS) - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR)) - { -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - IMG_BOOL bWrapped = WrapSystemPowerChange(&gsSysSpecificData); -#endif - - eError = OSInstallDeviceLISR(gpsSysData, gsSGXDeviceMap.ui32IRQ, "SGX ISR", gpsSGXDevNode); -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) - if (bWrapped) - { - UnwrapSystemPowerChange(&gsSysSpecificData); - } -#endif - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysSystemPostPowerState: OSInstallDeviceLISR failed to install ISR (%d)", eError)); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR); - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR); - } -#endif - } - return eError; -} - - -PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - PVR_UNREFERENCED_PARAMETER(eCurrentPowerState); - - if (ui32DeviceIndex != gui32SGXDeviceID) - { - return PVRSRV_OK; - } - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF) - { - PVR_DPF((PVR_DBG_MESSAGE, "SysDevicePrePowerState: SGX Entering state D3")); - DisableSGXClocks(gpsSysData); - } -#else - PVR_UNREFERENCED_PARAMETER(eNewPowerState ); -#endif - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - PVR_UNREFERENCED_PARAMETER(eNewPowerState); - - if (ui32DeviceIndex != gui32SGXDeviceID) - { - return eError; - } - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - if (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF) - { - PVR_DPF((PVR_DBG_MESSAGE, "SysDevicePostPowerState: SGX Leaving state D3")); - eError = EnableSGXClocksWrap(gpsSysData); - } -#else - PVR_UNREFERENCED_PARAMETER(eCurrentPowerState); -#endif - - return eError; -} - - -PVRSRV_ERROR SysOEMFunction ( IMG_UINT32 ui32ID, - IMG_VOID *pvIn, - IMG_UINT32 ulInSize, - IMG_VOID *pvOut, - IMG_UINT32 ulOutSize) -{ - PVR_UNREFERENCED_PARAMETER(ui32ID); - PVR_UNREFERENCED_PARAMETER(pvIn); - PVR_UNREFERENCED_PARAMETER(ulInSize); - PVR_UNREFERENCED_PARAMETER(pvOut); - PVR_UNREFERENCED_PARAMETER(ulOutSize); - - if ((ui32ID == OEM_GET_EXT_FUNCS) && - (ulOutSize == sizeof(PVRSRV_DC_OEM_JTABLE))) - { - - PVRSRV_DC_OEM_JTABLE *psOEMJTable = (PVRSRV_DC_OEM_JTABLE*) pvOut; - psOEMJTable->pfnOEMBridgeDispatch = &PVRSRV_BridgeDispatchKM; - return PVRSRV_OK; - } - - return PVRSRV_ERROR_INVALID_PARAMS; -} diff --git a/services4/system/omap4/sysconfig.h b/services4/system/omap4/sysconfig.h deleted file mode 100644 index ffb02f2..0000000 --- a/services4/system/omap4/sysconfig.h +++ /dev/null @@ -1,65 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SOCCONFIG_H__) -#define __SOCCONFIG_H__ - -#include "syscommon.h" - -#define VS_PRODUCT_NAME "OMAP4" - -#if defined(SGX_CLK_PER_192) -#define SYS_SGX_CLOCK_SPEED 192000000 -#else - #if defined(SGX_CLK_CORE_DIV8) - #define SYS_SGX_CLOCK_SPEED 190464000 - #else - #if defined(SGX_CLK_CORE_DIV5) - #define SYS_SGX_CLOCK_SPEED 304742400 - #endif - #endif -#endif - -#define SYS_SGX_HWRECOVERY_TIMEOUT_FREQ (100) -#define SYS_SGX_PDS_TIMER_FREQ (1000) - -#if !defined(SYS_SGX_ACTIVE_POWER_LATENCY_MS) -#define SYS_SGX_ACTIVE_POWER_LATENCY_MS (1) -#endif - - -#define SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE 0x56000000 - -#define SYS_OMAP4430_SGX_REGS_SIZE 0xFFFF - -#define SYS_OMAP4430_SGX_IRQ 53 - -#define SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE 0x48088038 -#define SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE 0x4808803C -#define SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE 0x48088054 - - -#endif diff --git a/services4/system/omap4/sysinfo.h b/services4/system/omap4/sysinfo.h deleted file mode 100644 index f9d7e68..0000000 --- a/services4/system/omap4/sysinfo.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYSINFO_H__) -#define __SYSINFO_H__ - -#if defined(PVR_LINUX_USING_WORKQUEUES) -#define MAX_HW_TIME_US (1000000) -#define WAIT_TRY_COUNT (20000) -#else -#define MAX_HW_TIME_US (500000) -#define WAIT_TRY_COUNT (10000) -#endif - - -//#define SYS_DEVICE_COUNT 15 -#define SYS_DEVICE_COUNT 3 - -#endif diff --git a/services4/system/omap4/syslocal.h b/services4/system/omap4/syslocal.h deleted file mode 100644 index d3e5210..0000000 --- a/services4/system/omap4/syslocal.h +++ /dev/null @@ -1,136 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYSLOCAL_H__) -#define __SYSLOCAL_H__ - -#if defined(__linux__) - -#include -#include -#if defined(PVR_LINUX_USING_WORKQUEUES) -#include -#else -#include -#endif -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) -#include -#include -#else -#include -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)) -#include -#endif -#endif - -#endif - -#if defined (__cplusplus) -extern "C" { -#endif - - - -IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion); - -IMG_VOID DisableSystemClocks(SYS_DATA *psSysData); -PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData); - -IMG_VOID DisableSGXClocks(SYS_DATA *psSysData); -PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData); - -#define SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS 0x00000001 -#define SYS_SPECIFIC_DATA_ENABLE_LISR 0x00000002 -#define SYS_SPECIFIC_DATA_ENABLE_MISR 0x00000004 -#define SYS_SPECIFIC_DATA_ENABLE_ENVDATA 0x00000008 -#define SYS_SPECIFIC_DATA_ENABLE_LOCDEV 0x00000010 -#define SYS_SPECIFIC_DATA_ENABLE_REGDEV 0x00000020 -#define SYS_SPECIFIC_DATA_ENABLE_PDUMPINIT 0x00000040 -#define SYS_SPECIFIC_DATA_ENABLE_INITDEV 0x00000080 -#define SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV 0x00000100 - -#define SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR 0x00000200 -#define SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS 0x00000400 -#define SYS_SPECIFIC_DATA_ENABLE_OCPREGS 0x00000800 - -#define SYS_SPECIFIC_DATA_SET(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData |= (flag))) - -#define SYS_SPECIFIC_DATA_CLEAR(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData &= ~(flag))) - -#define SYS_SPECIFIC_DATA_TEST(psSysSpecData, flag) (((psSysSpecData)->ui32SysSpecificData & (flag)) != 0) - -typedef struct _SYS_SPECIFIC_DATA_TAG_ -{ - IMG_UINT32 ui32SysSpecificData; - PVRSRV_DEVICE_NODE *psSGXDevNode; - IMG_BOOL bSGXInitComplete; -#if !defined(__linux__) - IMG_BOOL bSGXClocksEnabled; -#endif - IMG_UINT32 ui32SrcClockDiv; -#if defined(__linux__) - IMG_BOOL bSysClocksOneTimeInit; - atomic_t sSGXClocksEnabled; -#if defined(PVR_LINUX_USING_WORKQUEUES) - struct mutex sPowerLock; -#else - IMG_BOOL bConstraintNotificationsEnabled; - spinlock_t sPowerLock; - atomic_t sPowerLockCPU; - spinlock_t sNotifyLock; - atomic_t sNotifyLockCPU; - IMG_BOOL bCallVDD2PostFunc; -#endif - struct clk *psCORE_CK; - struct clk *psSGX_FCK; - struct clk *psSGX_ICK; - struct clk *psMPU_CK; -#if defined(DEBUG) || defined(TIMING) - struct clk *psGPT11_FCK; - struct clk *psGPT11_ICK; -#endif -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)) - struct constraint_handle *pVdd2Handle; -#endif -#endif -} SYS_SPECIFIC_DATA; - -extern SYS_SPECIFIC_DATA *gpsSysSpecificData; - -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) -IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); -IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); -#endif - -#if defined(__cplusplus) -} -#endif - -#endif - - diff --git a/services4/system/omap4/sysutils.c b/services4/system/omap4/sysutils.c deleted file mode 100644 index 02c9831..0000000 --- a/services4/system/omap4/sysutils.c +++ /dev/null @@ -1,29 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(__linux__) -#include "sysutils_linux.c" -#endif diff --git a/services4/system/omap4/sysutils_linux.c b/services4/system/omap4/sysutils_linux.c deleted file mode 100644 index 7aaaefb..0000000 --- a/services4/system/omap4/sysutils_linux.c +++ /dev/null @@ -1,501 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include -#include -#include -#include - -#include "sgxdefs.h" -#include "services_headers.h" -#include "sysinfo.h" -#include "sgxapi_km.h" -#include "sysconfig.h" -#include "sgxinfokm.h" -#include "syslocal.h" - -#if !defined(PVR_LINUX_USING_WORKQUEUES) -#error "PVR_LINUX_USING_WORKQUEUES must be defined" -#endif - -#if ((defined(DEBUG) || defined(TIMING)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))) -//#define PVR_OMAP4_TIMING_PRCM -#endif - -#define ONE_MHZ 1000000 -#define HZ_TO_MHZ(m) ((m) / ONE_MHZ) - -#if defined(SUPPORT_OMAP3430_SGXFCLK_96M) -#define SGX_PARENT_CLOCK "cm_96m_fck" -#else -#define SGX_PARENT_CLOCK "core_ck" -#endif - -static IMG_VOID PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData) -{ - if (!in_interrupt()) - { - mutex_lock(&psSysSpecData->sPowerLock); - - } -} - -static IMG_VOID PowerLockUnwrap(SYS_SPECIFIC_DATA *psSysSpecData) -{ - if (!in_interrupt()) - { - mutex_unlock(&psSysSpecData->sPowerLock); - } -} - -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData) -{ - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - - PowerLockWrap(psSysSpecData); - - return PVRSRV_OK; -} - -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData) -{ - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - - PowerLockUnwrap(psSysSpecData); -} - -IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) -{ - return IMG_TRUE; -} - -IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) -{ -} - -static inline IMG_UINT32 scale_by_rate(IMG_UINT32 val, IMG_UINT32 rate1, IMG_UINT32 rate2) -{ - if (rate1 >= rate2) - { - return val * (rate1 / rate2); - } - - return val / (rate2 / rate1); -} - -static inline IMG_UINT32 scale_prop_to_SGX_clock(IMG_UINT32 val, IMG_UINT32 rate) -{ - return scale_by_rate(val, rate, SYS_SGX_CLOCK_SPEED); -} - -static inline IMG_UINT32 scale_inv_prop_to_SGX_clock(IMG_UINT32 val, IMG_UINT32 rate) -{ - return scale_by_rate(val, SYS_SGX_CLOCK_SPEED, rate); -} - -IMG_VOID SysGetSGXTimingInformation(SGX_TIMING_INFORMATION *psTimingInfo) -{ - IMG_UINT32 rate; - -#if defined(NO_HARDWARE) - rate = SYS_SGX_CLOCK_SPEED; -#else - PVR_ASSERT(atomic_read(&gpsSysSpecificData->sSGXClocksEnabled) != 0); - -#if defined(OMAP4_PRCM_ENABLE) - rate = clk_get_rate(gpsSysSpecificData->psSGX_FCK); -#else - rate = SYS_SGX_CLOCK_SPEED; -#endif - PVR_ASSERT(rate != 0); -#endif - psTimingInfo->ui32CoreClockSpeed = rate; - psTimingInfo->ui32HWRecoveryFreq = scale_prop_to_SGX_clock(SYS_SGX_HWRECOVERY_TIMEOUT_FREQ, rate); - psTimingInfo->ui32uKernelFreq = scale_prop_to_SGX_clock(SYS_SGX_PDS_TIMER_FREQ, rate); -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - psTimingInfo->bEnableActivePM = IMG_TRUE; -#else - psTimingInfo->bEnableActivePM = IMG_FALSE; -#endif - psTimingInfo->ui32ActivePowManLatencyms = SYS_SGX_ACTIVE_POWER_LATENCY_MS; -} - -PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) -{ -#if !defined(NO_HARDWARE) - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; -#if defined(OMAP4_PRCM_ENABLE) - long lNewRate; - long lRate; - IMG_INT res; -#endif - - - if (atomic_read(&psSysSpecData->sSGXClocksEnabled) != 0) - { - return PVRSRV_OK; - } - - PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks")); - -#if defined(OMAP4_PRCM_ENABLE) - -#if defined(DEBUG) - { - IMG_UINT32 rate = clk_get_rate(psSysSpecData->psMPU_CK); - PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: CPU Clock is %dMhz", HZ_TO_MHZ(rate))); - } -#endif - - res = clk_enable(psSysSpecData->psSGX_FCK); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); - return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; - } - - res = clk_enable(psSysSpecData->psSGX_ICK); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX interface clock (%d)", res)); - - clk_disable(psSysSpecData->psSGX_FCK); - return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; - } - - lNewRate = clk_round_rate(psSysSpecData->psSGX_FCK, SYS_SGX_CLOCK_SPEED + ONE_MHZ); - if (lNewRate <= 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't round SGX functional clock rate")); - return PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE; - } - - - lRate = clk_get_rate(psSysSpecData->psSGX_FCK); - if (lRate != lNewRate) - { - res = clk_set_rate(psSysSpecData->psSGX_FCK, lNewRate); - if (res < 0) - { - PVR_DPF((PVR_DBG_WARNING, "EnableSGXClocks: Couldn't set SGX functional clock rate (%d)", res)); - } - } - -#if defined(DEBUG) - { - IMG_UINT32 rate = clk_get_rate(psSysSpecData->psSGX_FCK); - PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: SGX Functional Clock is %dMhz", HZ_TO_MHZ(rate))); - } -#endif - -#endif - - - atomic_set(&psSysSpecData->sSGXClocksEnabled, 1); - -#else - PVR_UNREFERENCED_PARAMETER(psSysData); -#endif - return PVRSRV_OK; -} - - -IMG_VOID DisableSGXClocks(SYS_DATA *psSysData) -{ -#if !defined(NO_HARDWARE) - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - - - if (atomic_read(&psSysSpecData->sSGXClocksEnabled) == 0) - { - return; - } - - PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks")); - -#if defined(OMAP4_PRCM_ENABLE) - if (psSysSpecData->psSGX_ICK) - { - clk_disable(psSysSpecData->psSGX_ICK); - } - - if (psSysSpecData->psSGX_FCK) - { - clk_disable(psSysSpecData->psSGX_FCK); - } -#endif - - - atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); - -#else - PVR_UNREFERENCED_PARAMETER(psSysData); -#endif -} - -PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) -{ - - PVR_TRACE(("Enter Enabling System Clocks")); - PVRSRV_ERROR eError; - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; -#if (defined(OMAP4_PRCM_ENABLE) || defined(PVR_OMAP4_TIMING_PRCM)) - struct clk *psCLK; - IMG_INT res; -#endif -#if defined(PVR_OMAP4_TIMING_PRCM) - struct clk *sys_ck; - IMG_INT rate; -#endif - -#if (defined(DEBUG) || defined(TIMING)) - IMG_CPU_PHYADDR TimerRegPhysBase; - IMG_HANDLE hTimerEnable; - IMG_UINT32 *pui32TimerEnable; -#endif - - PVR_TRACE(("EnableSystemClocks: Enabling System Clocks")); - - if (!psSysSpecData->bSysClocksOneTimeInit) - { - mutex_init(&psSysSpecData->sPowerLock); - - atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); - -#if defined(OMAP4_PRCM_ENABLE) - psCLK = clk_get(NULL, SGX_PARENT_CLOCK); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get Core Clock")); - goto ExitError; - } - psSysSpecData->psCORE_CK = psCLK; - - psCLK = clk_get(NULL, "sgx_fck"); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get SGX Functional Clock")); - goto ExitError; - } - psSysSpecData->psSGX_FCK = psCLK; - - psCLK = clk_get(NULL, "sgx_ick"); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get SGX Interface Clock")); - goto ExitError; - } - psSysSpecData->psSGX_ICK = psCLK; - -#if defined(DEBUG) - psCLK = clk_get(NULL, "mpu_ck"); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get MPU Clock")); - goto ExitError; - } - psSysSpecData->psMPU_CK = psCLK; -#endif - res = clk_set_parent(psSysSpecData->psSGX_FCK, psSysSpecData->psCORE_CK); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't set SGX parent clock (%d)", res)); - goto ExitError; - } -#endif - - psSysSpecData->bSysClocksOneTimeInit = IMG_TRUE; - } - -#if (defined(DEBUG) || defined(TIMING)) - -#if defined(PVR_OMAP4_TIMING_PRCM) -psCLK = clk_get(NULL, "timer11_fck"); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 functional clock")); - goto ExitUnRegisterConstraintNotifications; - } - psSysSpecData->psGPT11_FCK = psCLK; - - PVR_TRACE(("EnableSystemClocks: After Timer 11 clk_get")); -/* psCLK = clk_get(NULL, "gpt11_ick"); - if (IS_ERR(psCLK)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 interface clock")); - goto ExitUnRegisterConstraintNotifications; - } - psSysSpecData->psGPT11_ICK = psCLK; -*/ - sys_ck = clk_get(NULL, "sys_clkin_ck"); - if (IS_ERR(sys_ck)) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get System clock")); - goto ExitUnRegisterConstraintNotifications; - } - - PVR_TRACE(("EnableSystemClocks: After system clk_get")); - if(clk_get_parent(psSysSpecData->psGPT11_FCK) != sys_ck) - { - PVR_TRACE(("Setting GPTIMER11 parent to System Clock")); - res = clk_set_parent(psSysSpecData->psGPT11_FCK, sys_ck); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't set GPTIMER11 parent clock (%d)", res)); - goto ExitUnRegisterConstraintNotifications; - } - } - - PVR_TRACE(("EnableSystemClocks: After set parent ")); - rate = clk_get_rate(psSysSpecData->psGPT11_FCK); - PVR_TRACE(("GPTIMER11 clock is %dMHz", HZ_TO_MHZ(rate))); - - res = clk_enable(psSysSpecData->psGPT11_FCK); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 functional clock (%d)", res)); - goto ExitUnRegisterConstraintNotifications; - } - - PVR_TRACE(("EnableSystemClocks: After clk enable ")); -/* res = clk_enable(psSysSpecData->psGPT11_ICK); - if (res < 0) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 interface clock (%d)", res)); - goto ExitDisableGPT11FCK; - } -*/ -#endif - - TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE; - pui32TimerEnable = OSMapPhysToLin(TimerRegPhysBase, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - &hTimerEnable); - - PVR_TRACE(("EnableSystemClocks: After OSMapPhystoLin ")); - if (pui32TimerEnable == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: OSMapPhysToLin failed")); - goto ExitDisableGPT11ICK; - } - - if(!(*pui32TimerEnable & 4)) - { - PVR_TRACE(("Setting GPTIMER11 mode to posted (currently is non-posted)")); - - - *pui32TimerEnable |= 4; - } - - OSUnMapPhysToLin(pui32TimerEnable, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - hTimerEnable); - - TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE; - pui32TimerEnable = OSMapPhysToLin(TimerRegPhysBase, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - &hTimerEnable); - - if (pui32TimerEnable == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: OSMapPhysToLin failed")); - goto ExitDisableGPT11ICK; - } - - - *pui32TimerEnable = 3; - OSUnMapPhysToLin(pui32TimerEnable, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - hTimerEnable); -#endif - PVR_TRACE(("Exit Enabling System Clocks")); - eError = PVRSRV_OK; - goto Exit; - -#if (defined(DEBUG) || defined(TIMING)) -ExitDisableGPT11ICK: -#if defined(PVR_OMAP4_TIMING_PRCM) -// clk_disable(psSysSpecData->psGPT11_ICK); -ExitDisableGPT11FCK: - clk_disable(psSysSpecData->psGPT11_FCK); -ExitUnRegisterConstraintNotifications: -#endif -#endif -#if defined(OMAP4_PRCM_ENABLE) -ExitError: -#endif - eError = PVRSRV_ERROR_DISABLE_CLOCK_FAILURE; -Exit: - return eError; -} - -IMG_VOID DisableSystemClocks(SYS_DATA *psSysData) -{ -#if (defined(DEBUG) || defined(TIMING)) -#if defined(PVR_OMAP4_TIMING_PRCM) - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; -#endif - IMG_CPU_PHYADDR TimerRegPhysBase; - IMG_HANDLE hTimerDisable; - IMG_UINT32 *pui32TimerDisable; -#endif - - PVR_TRACE(("DisableSystemClocks: Disabling System Clocks")); - - - DisableSGXClocks(psSysData); - -#if (defined(DEBUG) || defined(TIMING)) - TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE; - pui32TimerDisable = OSMapPhysToLin(TimerRegPhysBase, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - &hTimerDisable); - if (pui32TimerDisable == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "DisableSystemClocks: OSMapPhysToLin failed")); - } - else - { - *pui32TimerDisable = 0; - - OSUnMapPhysToLin(pui32TimerDisable, - 4, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - hTimerDisable); - } -#if defined(PVR_OMAP4_TIMING_PRCM) -// clk_disable(psSysSpecData->psGPT11_ICK); - - clk_disable(psSysSpecData->psGPT11_FCK); -#endif -#endif -} diff --git a/services4/system/ti335x/sysutils_linux_wqueue_compat.c b/services4/system/ti335x/sysutils_linux_wqueue_compat.c index 4185daf..5e89414 100644 --- a/services4/system/ti335x/sysutils_linux_wqueue_compat.c +++ b/services4/system/ti335x/sysutils_linux_wqueue_compat.c @@ -51,42 +51,65 @@ #define SGX_PARENT_CLOCK "core_ck" #endif -static IMG_VOID PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData) +static PVRSRV_ERROR PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData, IMG_BOOL bTryLock) { - if (!in_interrupt()) - { - mutex_lock(&psSysSpecData->sPowerLock); + if (!in_interrupt()) + { + if (bTryLock) + { + int locked = mutex_trylock(&psSysSpecData->sPowerLock); + if (locked == 0) + { + return PVRSRV_ERROR_RETRY; + } + } + else + { + mutex_lock(&psSysSpecData->sPowerLock); + } + } - } + return PVRSRV_OK; } static IMG_VOID PowerLockUnwrap(SYS_SPECIFIC_DATA *psSysSpecData) { - if (!in_interrupt()) - { - mutex_unlock(&psSysSpecData->sPowerLock); - } + if (!in_interrupt()) + { + mutex_unlock(&psSysSpecData->sPowerLock); + } } -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData) +PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockWrap(psSysSpecData); + SysAcquireData(&psSysData); - return PVRSRV_OK; + return PowerLockWrap(psSysData->pvSysSpecificData, bTryLock); } -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData) +IMG_VOID SysPowerLockUnwrap(IMG_VOID) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; + + SysAcquireData(&psSysData); - PowerLockUnwrap(psSysSpecData); + PowerLockUnwrap(psSysData->pvSysSpecificData); } +/* + * This function should be called to unwrap the Services power lock, prior + * to calling any function that might sleep. + * This function shouldn't be called prior to calling EnableSystemClocks + * or DisableSystemClocks, as those functions perform their own power lock + * unwrapping. + * If the function returns IMG_TRUE, UnwrapSystemPowerChange must be + * called to rewrap the power lock, prior to returning to Services. + */ IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) { - return IMG_TRUE; + return IMG_TRUE; } IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) @@ -169,6 +192,24 @@ PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; } +// res = clk_get_rate(psSysSpecData->psSGX_FCK); +// PVR_TRACE(("Default SGX clock rate is %dMHz", HZ_TO_MHZ(res))); + + res = clk_set_rate(psSysSpecData->psSGX_FCK,SYS_SGX_CLOCK_SPEED); + + if(res != 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't set SGX Functional Clock rate")); + return PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE; + } + + else + { + res = clk_get_rate(psSysSpecData->psSGX_FCK); +// PVR_TRACE(("SGX clock rate after set_clk_rate is %dMHz", HZ_TO_MHZ(res))); + } + + /* res = clk_enable(psSysSpecData->psSGX_ICK); if (res < 0) @@ -271,22 +312,36 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); - psCLK = clk_get(NULL, "sgx_ck"); + psCLK = clk_get(NULL, "sgx_ck"); if (IS_ERR(psCLK)) { PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get SGX Functional Clock")); goto ExitError; } - if(clk_enable(psCLK) != 0) +/* if(clk_enable(psCLK) != 0) { printk("Could not enable SGX clock\n"); goto ExitError; } - +*/ psSysSpecData->psSGX_FCK = psCLK; - + psSysSpecData->bSysClocksOneTimeInit = IMG_TRUE; } + + /* psCLK = clk_get(NULL, "sgx_ck"); + if (IS_ERR(psCLK)) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get SGX Functional Clock")); + goto ExitError; + } + if(clk_enable(psCLK) != 0) + { + printk("Could not enable SGX clock\n"); + goto ExitError; + } + + psSysSpecData->psSGX_FCK = psCLK; */ /* else { diff --git a/services4/system/ti81xx/sysconfig.h b/services4/system/ti81xx/sysconfig.h index 8b8f05a..22cf7e3 100644 --- a/services4/system/ti81xx/sysconfig.h +++ b/services4/system/ti81xx/sysconfig.h @@ -32,8 +32,12 @@ #define VS_PRODUCT_NAME "TI81xx" //#define SYS_SGX_CLOCK_SPEED 200000000 -#define SYS_387x_SGX_CLOCK_SPEED 200000000 -#define SYS_389x_SGX_CLOCK_SPEED 333000000 +#define SYS_387x_SGX_CLOCK_SPEED 200000000 + +/* Allowed SGX Clock Speeds on Netra +SGX_RATES = main_pll_clk2_ck(987428571) /D (3 to 8) = 329142857, 246857142, + 197485714,164571428,141061224, 123428571 */ +#define SYS_389x_SGX_CLOCK_SPEED 329142857 #define SYS_SGX_HWRECOVERY_TIMEOUT_FREQ (100) #define SYS_SGX_PDS_TIMER_FREQ (1000) diff --git a/services4/system/ti81xx/sysutils_linux_wqueue_compat.c b/services4/system/ti81xx/sysutils_linux_wqueue_compat.c index 9fe7dfe..10f819a 100644 --- a/services4/system/ti81xx/sysutils_linux_wqueue_compat.c +++ b/services4/system/ti81xx/sysutils_linux_wqueue_compat.c @@ -51,39 +51,54 @@ #define SGX_PARENT_CLOCK "core_ck" #endif -static IMG_VOID PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData) +static PVRSRV_ERROR PowerLockWrap(SYS_SPECIFIC_DATA *psSysSpecData, IMG_BOOL bTryLock) { - if (!in_interrupt()) - { - mutex_lock(&psSysSpecData->sPowerLock); + if (!in_interrupt()) + { + if (bTryLock) + { + int locked = mutex_trylock(&psSysSpecData->sPowerLock); + if (locked == 0) + { + return PVRSRV_ERROR_RETRY; + } + } + else + { + mutex_lock(&psSysSpecData->sPowerLock); + } + } - } + return PVRSRV_OK; } static IMG_VOID PowerLockUnwrap(SYS_SPECIFIC_DATA *psSysSpecData) { - if (!in_interrupt()) - { - mutex_unlock(&psSysSpecData->sPowerLock); - } + if (!in_interrupt()) + { + mutex_unlock(&psSysSpecData->sPowerLock); + } } -PVRSRV_ERROR SysPowerLockWrap(SYS_DATA *psSysData) +PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; - PowerLockWrap(psSysSpecData); + SysAcquireData(&psSysData); - return PVRSRV_OK; + return PowerLockWrap(psSysData->pvSysSpecificData, bTryLock); } -IMG_VOID SysPowerLockUnwrap(SYS_DATA *psSysData) +IMG_VOID SysPowerLockUnwrap(IMG_VOID) { - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; + SYS_DATA *psSysData; + + SysAcquireData(&psSysData); - PowerLockUnwrap(psSysSpecData); + PowerLockUnwrap(psSysData->pvSysSpecificData); } + IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData) { return IMG_TRUE; @@ -185,12 +200,41 @@ PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) } #endif + res = clk_enable(psSysSpecData->psSGX_FCK); + if(res != 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't enable SGX Clock")); + return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;; + } +// else +// PVR_TRACE(("EnableSystemClocks: SGX clk_enable successful")); + +// res = clk_get_rate(psSysSpecData->psSGX_FCK); +// PVR_TRACE(("Default SGX clock rate is %dMHz", HZ_TO_MHZ(res))); + + if(cpu_is_ti816x()) + res = clk_set_rate(psSysSpecData->psSGX_FCK,SYS_389x_SGX_CLOCK_SPEED); + else + res = clk_set_rate(psSysSpecData->psSGX_FCK,SYS_387x_SGX_CLOCK_SPEED); + + if(res != 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't set SGX Functional Clock rate")); + return PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE; + } + else + { + res = clk_get_rate(psSysSpecData->psSGX_FCK); +// PVR_TRACE(("SGX clock rate after set_clk_rate() is %dMHz", HZ_TO_MHZ(res))); + } +/* res = clk_enable(psSysSpecData->psSGX_FCK); if (res < 0) { PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; } +*/ /* res = clk_enable(psSysSpecData->psSGX_ICK); if (res < 0) diff --git a/tools/intern/debug/client/linuxsrv.h b/tools/intern/debug/client/linuxsrv.h index adfcd75..f1cb02a 100644 --- a/tools/intern/debug/client/linuxsrv.h +++ b/tools/intern/debug/client/linuxsrv.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -22,19 +22,19 @@ * Imagination Technologies Ltd. * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK * - ******************************************************************************/ + **************************************************************************/ #ifndef _LINUXSRV_H__ #define _LINUXSRV_H__ typedef struct tagIOCTL_PACKAGE { - IMG_UINT32 ui32Cmd; - IMG_UINT32 ui32Size; - IMG_VOID *pInBuffer; - IMG_UINT32 ui32InBufferSize; - IMG_VOID *pOutBuffer; - IMG_UINT32 ui32OutBufferSize; + IMG_UINT32 ui32Cmd; // ioctl command + IMG_UINT32 ui32Size; // needs to be correctly set + IMG_VOID *pInBuffer; // input data buffer + IMG_UINT32 ui32InBufferSize; // size of input data buffer + IMG_VOID *pOutBuffer; // output data buffer + IMG_UINT32 ui32OutBufferSize; // size of output data buffer } IOCTL_PACKAGE; IMG_UINT32 DeviceIoControl(IMG_UINT32 hDevice, @@ -45,4 +45,4 @@ IMG_UINT32 DeviceIoControl(IMG_UINT32 hDevice, IMG_UINT32 ui32OutBufferSize, IMG_UINT32 *pui32BytesReturned); -#endif +#endif /* _LINUXSRV_H__*/ diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common b/tools/intern/debug/dbgdriv/Kbuild.mk similarity index 67% rename from eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common rename to tools/intern/debug/dbgdriv/Kbuild.mk index 0c4497f..f61107f 100644 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common +++ b/tools/intern/debug/dbgdriv/Kbuild.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -23,22 +23,14 @@ # # -PVR_KBUILD_CONFIG_FLAG ?= m +ccflags-y += \ + -I$(TOP)/tools/intern/debug/dbgdriv/common \ + -I$(TOP)/tools/intern/debug/client -ifneq ($(PVR_KBUILD_IN_KERNEL),1) -obj-$(PVR_KBUILD_CONFIG_FLAG) = -endif - -obj-$(PVR_KBUILD_CONFIG_FLAG) += $(MODULE).o - -$(MODULE)-objs = $(SOURCES:.c=.o) - -EXTRA_CFLAGS = $(INCLUDES) $(ALL_CFLAGS_kbuild) - -ifneq ($(PVR_KBUILD_IN_KERNEL),1) -ifeq ($(SILENT),@) - KBUILD_VERBOSE ?= 0 -else - KBUILD_VERBOSE ?= 1 -endif -endif +dbgdrv-y += \ + tools/intern/debug/dbgdriv/common/dbgdriv.o \ + tools/intern/debug/dbgdriv/common/ioctl.o \ + tools/intern/debug/dbgdriv/common/handle.o \ + tools/intern/debug/dbgdriv/common/hotkey.o \ + tools/intern/debug/dbgdriv/linux/main.o \ + tools/intern/debug/dbgdriv/linux/hostfunc.o diff --git a/eurasiacon/build/linux/omap4430_linux/kbuild/Makefile b/tools/intern/debug/dbgdriv/Linux.mk similarity index 75% rename from eurasiacon/build/linux/omap4430_linux/kbuild/Makefile rename to tools/intern/debug/dbgdriv/Linux.mk index 079f52e..2991f6a 100644 --- a/eurasiacon/build/linux/omap4430_linux/kbuild/Makefile +++ b/tools/intern/debug/dbgdriv/Linux.mk @@ -1,5 +1,5 @@ # -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. +# Copyright (C) Imagination Technologies Ltd. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, @@ -22,14 +22,9 @@ # Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK # # -# - -include ../../kbuild/Makefile.kbuild - -EXTRA_SUBDIRS = -ifneq ($(SUPPORT_DRI_DRM),1) -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/$(DISPLAY_CONTROLLER_DIR) -endif +modules := dbgdrv -EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/bufferclass_example +dbgdrv_type := kernel_module +dbgdrv_target := dbgdrv.ko +dbgdrv_makefile := $(THIS_DIR)/Kbuild.mk diff --git a/tools/intern/debug/dbgdriv/common/dbgdriv.c b/tools/intern/debug/dbgdriv/common/dbgdriv.c index 31c0120..4bf93d0 100644 --- a/tools/intern/debug/dbgdriv/common/dbgdriv.c +++ b/tools/intern/debug/dbgdriv/common/dbgdriv.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -28,6 +28,9 @@ #ifdef LINUX #include #endif +#ifdef __QNXNTO__ +#include +#endif #include "img_types.h" #include "pvr_debug.h" diff --git a/tools/intern/debug/dbgdriv/common/dbgdriv.h b/tools/intern/debug/dbgdriv/common/dbgdriv.h index 52caa06..2db4843 100644 --- a/tools/intern/debug/dbgdriv/common/dbgdriv.h +++ b/tools/intern/debug/dbgdriv/common/dbgdriv.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h b/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h index 3088a3a..130c146 100644 --- a/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h +++ b/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/handle.c b/tools/intern/debug/dbgdriv/common/handle.c index 59d920b..ddffb3f 100644 --- a/tools/intern/debug/dbgdriv/common/handle.c +++ b/tools/intern/debug/dbgdriv/common/handle.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/hostfunc.h b/tools/intern/debug/dbgdriv/common/hostfunc.h index 3a29db6..70192fb 100644 --- a/tools/intern/debug/dbgdriv/common/hostfunc.h +++ b/tools/intern/debug/dbgdriv/common/hostfunc.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/hotkey.c b/tools/intern/debug/dbgdriv/common/hotkey.c index 43592d8..62c89e3 100644 --- a/tools/intern/debug/dbgdriv/common/hotkey.c +++ b/tools/intern/debug/dbgdriv/common/hotkey.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,7 +25,7 @@ ******************************************************************************/ -#if !defined(LINUX) +#if (!defined(LINUX) && !defined(__QNXNTO__)) #include #include #endif diff --git a/tools/intern/debug/dbgdriv/common/hotkey.h b/tools/intern/debug/dbgdriv/common/hotkey.h index 499d64e..c5d84bb 100644 --- a/tools/intern/debug/dbgdriv/common/hotkey.h +++ b/tools/intern/debug/dbgdriv/common/hotkey.h @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/ioctl.c b/tools/intern/debug/dbgdriv/common/ioctl.c index a021a39..47487b0 100644 --- a/tools/intern/debug/dbgdriv/common/ioctl.c +++ b/tools/intern/debug/dbgdriv/common/ioctl.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/tools/intern/debug/dbgdriv/common/ioctl.h b/tools/intern/debug/dbgdriv/common/ioctl.h deleted file mode 100644 index 3088a3a..0000000 --- a/tools/intern/debug/dbgdriv/common/ioctl.h +++ /dev/null @@ -1,35 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _IOCTL_ -#define _IOCTL_ - -#define MAX_DBGVXD_W32_API 25 - -extern IMG_UINT32 (*g_DBGDrivProc[MAX_DBGVXD_W32_API])(IMG_VOID *, IMG_VOID *); - -#endif - diff --git a/tools/intern/debug/dbgdriv/linux/hostfunc.c b/tools/intern/debug/dbgdriv/linux/hostfunc.c index 1560067..18c8898 100644 --- a/tools/intern/debug/dbgdriv/linux/hostfunc.c +++ b/tools/intern/debug/dbgdriv/linux/hostfunc.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -86,9 +86,15 @@ void PVRSRVDebugPrintf ( if (gPVRDebugLevel & ui32DebugLevel) { va_list vaArgs; - static char szBuffer[256]; + char szBuffer[256]; + char *szBufferEnd = szBuffer; + char *szBufferLimit = szBuffer + sizeof(szBuffer) - 1; - va_start (vaArgs, pszFormat); + + *szBufferLimit = '\0'; + + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "PVR_K:"); + szBufferEnd += strlen(szBufferEnd); if (bTrace == IMG_FALSE) @@ -97,52 +103,54 @@ void PVRSRVDebugPrintf ( { case DBGPRIV_FATAL: { - strcpy (szBuffer, "PVR_K:(Fatal): "); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Fatal):"); break; } case DBGPRIV_ERROR: { - strcpy (szBuffer, "PVR_K:(Error): "); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Error):"); break; } case DBGPRIV_WARNING: { - strcpy (szBuffer, "PVR_K:(Warning): "); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Warning):"); break; } case DBGPRIV_MESSAGE: { - strcpy (szBuffer, "PVR_K:(Message): "); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Message):"); break; } case DBGPRIV_VERBOSE: { - strcpy (szBuffer, "PVR_K:(Verbose): "); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Verbose):"); break; } default: { - strcpy (szBuffer, "PVR_K:(Unknown message level)"); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Unknown message level)"); break; } } + szBufferEnd += strlen(szBufferEnd); } - else - { - strcpy (szBuffer, "PVR_K: "); - } + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, " "); + szBufferEnd += strlen(szBufferEnd); - vsprintf (&szBuffer[strlen(szBuffer)], pszFormat, vaArgs); + va_start (vaArgs, pszFormat); + vsnprintf(szBufferEnd, szBufferLimit - szBufferEnd, pszFormat, vaArgs); + va_end (vaArgs); + szBufferEnd += strlen(szBufferEnd); if (bTrace == IMG_FALSE) { - sprintf (&szBuffer[strlen(szBuffer)], " [%d, %s]", (int)ui32Line, pszFileName); + snprintf(szBufferEnd, szBufferLimit - szBufferEnd, + " [%d, %s]", (int)ui32Line, pszFileName); + szBufferEnd += strlen(szBufferEnd); } printk(KERN_INFO "%s\r\n", szBuffer); - - va_end (vaArgs); } } #endif @@ -211,17 +219,31 @@ IMG_VOID HostCreateRegDeclStreams(IMG_VOID) } -IMG_VOID * HostCreateMutex(IMG_VOID) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +typedef struct mutex MUTEX; +#define INIT_MUTEX(m) mutex_init(m) +#define DOWN_TRYLOCK(m) (!mutex_trylock(m)) +#define DOWN(m) mutex_lock(m) +#define UP(m) mutex_unlock(m) +#else +typedef struct semaphore MUTEX; +#define INIT_MUTEX(m) init_MUTEX(m) +#define DOWN_TRYLOCK(m) down_trylock(m) +#define DOWN(m) down(m) +#define UP(m) up(m) +#endif + +IMG_VOID *HostCreateMutex(IMG_VOID) { - struct semaphore *psSem; + MUTEX *psMutex; - psSem = kmalloc(sizeof(*psSem), GFP_KERNEL); - if (psSem) + psMutex = kmalloc(sizeof(*psMutex), GFP_KERNEL); + if (psMutex) { - init_MUTEX(psSem); + INIT_MUTEX(psMutex); } - return psSem; + return psMutex; } IMG_VOID HostAquireMutex(IMG_VOID * pvMutex) @@ -229,19 +251,19 @@ IMG_VOID HostAquireMutex(IMG_VOID * pvMutex) BUG_ON(in_interrupt()); #if defined(PVR_DEBUG_DBGDRV_DETECT_HOST_MUTEX_COLLISIONS) - if (down_trylock((struct semaphore *)pvMutex)) + if (DOWN_TRYLOCK((MUTEX *)pvMutex)) { printk(KERN_INFO "HostAquireMutex: Waiting for mutex\n"); - down((struct semaphore *)pvMutex); + DOWN((MUTEX *)pvMutex); } #else - down((struct semaphore *)pvMutex); + DOWN((MUTEX *)pvMutex); #endif } IMG_VOID HostReleaseMutex(IMG_VOID * pvMutex) { - up((struct semaphore *)pvMutex); + UP((MUTEX *)pvMutex); } IMG_VOID HostDestroyMutex(IMG_VOID * pvMutex) diff --git a/tools/intern/debug/dbgdriv/linux/kbuild/Makefile b/tools/intern/debug/dbgdriv/linux/kbuild/Makefile deleted file mode 100644 index 00db6ef..0000000 --- a/tools/intern/debug/dbgdriv/linux/kbuild/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -MODULE = dbgdrv - -INCLUDES = -I$(EURASIAROOT)/services4/srvkm/env/linux - -SOURCES = - -include $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux/makefile.linux.common - -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/tools/intern/debug/dbgdriv/linux/main.c b/tools/intern/debug/dbgdriv/linux/main.c index d4fe778..6556249 100644 --- a/tools/intern/debug/dbgdriv/linux/main.c +++ b/tools/intern/debug/dbgdriv/linux/main.c @@ -1,6 +1,6 @@ /********************************************************************** * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -240,7 +240,8 @@ long dbgdrv_ioctl(struct file *file, unsigned int ioctlCmd, unsigned long arg) goto init_failed; } - cmd = ((pIP->ui32Cmd >> 2) & 0xFFF) - 0x801; + + cmd = MAKEIOCTLINDEX(pIP->ui32Cmd) - DEBUG_SERVICE_IOCTL_BASE - 1; if(pIP->ui32Cmd == DEBUG_SERVICE_READ) {