1.7.17.783851/4.06.00.01
authorImagination Technologies/TI <imgtec>
Mon, 11 Feb 2013 01:36:11 +0000 (03:36 +0200)
committerGrazvydas Ignotas <notasas@gmail.com>
Mon, 11 Feb 2013 01:36:11 +0000 (03:36 +0200)
219 files changed:
Makefile
eurasiacon/build/linux/exports/egl.txt [deleted file]
eurasiacon/build/linux/exports/ignored_symbols.txt [deleted file]
eurasiacon/build/linux/exports/libEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libGLES_CM.so.txt [deleted file]
eurasiacon/build/linux/exports/libGLESv1_CL.so.txt [deleted file]
eurasiacon/build/linux/exports/libGLESv1_CM.so.txt [deleted file]
eurasiacon/build/linux/exports/libGLESv2.so.txt [deleted file]
eurasiacon/build/linux/exports/libIMGegl.so.txt [deleted file]
eurasiacon/build/linux/exports/libOpenVG.so.txt [deleted file]
eurasiacon/build/linux/exports/libOpenVGU.so.txt [deleted file]
eurasiacon/build/linux/exports/libPVRScopeServices.so.txt [deleted file]
eurasiacon/build/linux/exports/libews.so.txt [deleted file]
eurasiacon/build/linux/exports/libglslcompiler.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvr2d.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt [deleted file]
eurasiacon/build/linux/exports/libsrv_init.so.txt [deleted file]
eurasiacon/build/linux/exports/libsrv_um.so.txt [deleted file]
eurasiacon/build/linux/exports/libusc.so.txt [deleted file]
eurasiacon/build/linux/exports/wsegl.txt [deleted file]
eurasiacon/build/linux/kbuild/Makefile.kbuild [deleted file]
eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir [deleted file]
eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_rules [deleted file]
eurasiacon/build/linux/makefile.shared_conf [deleted file]
eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt [deleted file]
eurasiacon/build/linux/omap3430_linux/kbuild/build_gfx_kernelmodules [deleted file]
eurasiacon/build/linux/omap3430_linux/makefile.shared_conf [deleted file]
eurasiacon/build/linux/omap3630_linux/kbuild/build_gfx_kernelmodules [deleted file]
eurasiacon/build/linux/omap3630_linux/makefile.shared_conf [deleted file]
eurasiacon/build/linux/omap4430_linux/makefile.shared_conf [deleted file]
eurasiacon/build/linux2/bits.mk [new file with mode: 0644]
eurasiacon/build/linux2/buildvars.mk [new file with mode: 0644]
eurasiacon/build/linux2/commands.mk [new file with mode: 0644]
eurasiacon/build/linux2/common/apis/xorg.mk [moved from eurasiacon/build/linux/omap4430_linux/makefile.core with 76% similarity]
eurasiacon/build/linux2/common/dridrm.mk [moved from tools/intern/debug/dbgdriv/linux/makefile.linux.common with 60% similarity]
eurasiacon/build/linux2/common/omap4.mk [new file with mode: 0644]
eurasiacon/build/linux2/common/opencl.mk [new file with mode: 0644]
eurasiacon/build/linux2/common/xorg.mk [new file with mode: 0644]
eurasiacon/build/linux2/common/xorg_test.mk [moved from eurasiacon/build/linux/omap3630_linux/makefile.core with 77% similarity]
eurasiacon/build/linux2/config/core.mk [new file with mode: 0644]
eurasiacon/build/linux2/defs.mk [new file with mode: 0644]
eurasiacon/build/linux2/kbuild/Makefile.template [new file with mode: 0644]
eurasiacon/build/linux2/kbuild/external_tarball.mk [moved from eurasiacon/build/linux/omap3430_linux/kbuild/Makefile with 70% similarity]
eurasiacon/build/linux2/kbuild/kbuild.mk [new file with mode: 0644]
eurasiacon/build/linux2/kernel_module.mk [new file with mode: 0644]
eurasiacon/build/linux2/kernel_version.mk [new file with mode: 0644]
eurasiacon/build/linux2/moduledefs.mk [new file with mode: 0644]
eurasiacon/build/linux2/modules.mk [moved from eurasiacon/build/linux/omap3630_linux/kbuild/Makefile with 67% similarity]
eurasiacon/build/linux2/omap4430_linux/Makefile [new file with mode: 0644]
eurasiacon/build/linux2/prepare_tree.mk [new file with mode: 0644]
eurasiacon/build/linux2/this_makefile.mk [new file with mode: 0644]
eurasiacon/build/linux2/ti335x_linux/Makefile [new file with mode: 0644]
eurasiacon/build/linux2/tools/cc-check.sh [new file with mode: 0644]
eurasiacon/build/linux2/toplevel.mk [new file with mode: 0644]
include4/dbgdrvif.h
include4/img_defs.h
include4/img_types.h
include4/ioctldef.h [deleted file]
include4/pdumpdefs.h
include4/pvr_debug.h
include4/pvrmodule.h
include4/pvrversion.h
include4/regpaths.h [deleted file]
include4/services.h
include4/servicesext.h
include4/sgx_options.h
include4/sgxapi_km.h
include4/sgxscript.h
services4/3rdparty/dc_omap3430_linux/Kbuild [deleted file]
services4/3rdparty/dc_omap3430_linux/kbuild/Makefile [deleted file]
services4/3rdparty/dc_omap3430_linux/omaplfb.h [deleted file]
services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c [deleted file]
services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c [deleted file]
services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c
services4/3rdparty/linux_drm/pvr_drm_stubs.c
services4/include/env/linux/pvr_drm_shared.h
services4/include/kernelbuffer.h
services4/include/kerneldisplay.h
services4/include/pdump.h
services4/include/pvr_bridge.h
services4/include/pvr_bridge_km.h
services4/include/pvrmmap.h
services4/include/pvrsrv_errors.h
services4/include/servicesint.h
services4/include/sgx_bridge.h
services4/include/sgx_mkif_km.h
services4/include/sgxinfo.h
services4/srvkm/bridged/bridged_pvr_bridge.c
services4/srvkm/bridged/bridged_pvr_bridge.h
services4/srvkm/bridged/bridged_support.c
services4/srvkm/bridged/bridged_support.h
services4/srvkm/bridged/sgx/bridged_sgx_bridge.c
services4/srvkm/bridged/sgx/bridged_sgx_bridge.h
services4/srvkm/common/buffer_manager.c
services4/srvkm/common/deviceclass.c
services4/srvkm/common/deviceid.h
services4/srvkm/common/devicemem.c
services4/srvkm/common/handle.c
services4/srvkm/common/hash.c
services4/srvkm/common/lists.c
services4/srvkm/common/mem.c
services4/srvkm/common/mem_debug.c
services4/srvkm/common/metrics.c
services4/srvkm/common/osfunc_common.c
services4/srvkm/common/pdump_common.c
services4/srvkm/common/perproc.c
services4/srvkm/common/power.c
services4/srvkm/common/pvrsrv.c
services4/srvkm/common/queue.c
services4/srvkm/common/ra.c
services4/srvkm/common/resman.c
services4/srvkm/devices/sgx/mmu.c
services4/srvkm/devices/sgx/mmu.h
services4/srvkm/devices/sgx/pb.c
services4/srvkm/devices/sgx/sgx_bridge_km.h
services4/srvkm/devices/sgx/sgxconfig.h
services4/srvkm/devices/sgx/sgxinfokm.h
services4/srvkm/devices/sgx/sgxinit.c
services4/srvkm/devices/sgx/sgxkick.c
services4/srvkm/devices/sgx/sgxpower.c
services4/srvkm/devices/sgx/sgxreset.c
services4/srvkm/devices/sgx/sgxtransfer.c
services4/srvkm/devices/sgx/sgxutils.c
services4/srvkm/devices/sgx/sgxutils.h
services4/srvkm/env/linux/Kbuild.mk [new file with mode: 0644]
services4/srvkm/env/linux/Linux.mk [moved from eurasiacon/build/linux/omap3430_linux/makefile.core with 76% similarity]
services4/srvkm/env/linux/env_data.h
services4/srvkm/env/linux/env_perproc.h
services4/srvkm/env/linux/event.c
services4/srvkm/env/linux/event.h
services4/srvkm/env/linux/kbuild/Makefile [deleted file]
services4/srvkm/env/linux/linkage.h
services4/srvkm/env/linux/lock.h
services4/srvkm/env/linux/mm.c
services4/srvkm/env/linux/mm.h
services4/srvkm/env/linux/mmap.c
services4/srvkm/env/linux/mmap.h
services4/srvkm/env/linux/module.c
services4/srvkm/env/linux/mutex.c
services4/srvkm/env/linux/mutex.h
services4/srvkm/env/linux/mutils.c
services4/srvkm/env/linux/mutils.h
services4/srvkm/env/linux/osfunc.c
services4/srvkm/env/linux/osperproc.c
services4/srvkm/env/linux/pdump.c
services4/srvkm/env/linux/private_data.h
services4/srvkm/env/linux/proc.c
services4/srvkm/env/linux/proc.h
services4/srvkm/env/linux/pvr_bridge_k.c
services4/srvkm/env/linux/pvr_debug.c
services4/srvkm/env/linux/pvr_drm.c
services4/srvkm/env/linux/pvr_drm.h
services4/srvkm/env/linux/pvr_drm_16.c [new file with mode: 0644]
services4/srvkm/env/linux/pvr_drm_16.h [new file with mode: 0644]
services4/srvkm/env/linux/pvr_uaccess.h
services4/srvkm/hwdefs/ocpdefs.h
services4/srvkm/hwdefs/sgx530defs.h
services4/srvkm/hwdefs/sgx540defs.h
services4/srvkm/hwdefs/sgx544defs.h [new file with mode: 0644]
services4/srvkm/hwdefs/sgxdefs.h
services4/srvkm/hwdefs/sgxerrata.h
services4/srvkm/hwdefs/sgxfeaturedefs.h
services4/srvkm/hwdefs/sgxmmu.h
services4/srvkm/hwdefs/sgxmpdefs.h [new file with mode: 0644]
services4/srvkm/include/buffer_manager.h
services4/srvkm/include/device.h
services4/srvkm/include/handle.h
services4/srvkm/include/hash.h
services4/srvkm/include/lists.h
services4/srvkm/include/metrics.h
services4/srvkm/include/osfunc.h
services4/srvkm/include/osperproc.h
services4/srvkm/include/pdump_int.h
services4/srvkm/include/pdump_km.h
services4/srvkm/include/pdump_osfunc.h
services4/srvkm/include/perproc.h
services4/srvkm/include/power.h
services4/srvkm/include/queue.h
services4/srvkm/include/ra.h
services4/srvkm/include/resman.h
services4/srvkm/include/services_headers.h
services4/srvkm/include/srvkm.h
services4/srvkm/include/ttrace.h [new file with mode: 0644]
services4/srvkm/include/ttrace_common.h [new file with mode: 0644]
services4/srvkm/include/ttrace_tokens.h [new file with mode: 0644]
services4/system/include/syscommon.h
services4/system/omap3/sysutils_linux_wqueue_compat.c
services4/system/omap3630/sysutils_linux_wqueue_compat.c
services4/system/omap4/oemfuncs.h [deleted file]
services4/system/omap4/sysconfig.c [deleted file]
services4/system/omap4/sysconfig.h [deleted file]
services4/system/omap4/sysinfo.h [deleted file]
services4/system/omap4/syslocal.h [deleted file]
services4/system/omap4/sysutils.c [deleted file]
services4/system/omap4/sysutils_linux.c [deleted file]
services4/system/ti335x/sysutils_linux_wqueue_compat.c
services4/system/ti81xx/sysconfig.h
services4/system/ti81xx/sysutils_linux_wqueue_compat.c
tools/intern/debug/client/linuxsrv.h
tools/intern/debug/dbgdriv/Kbuild.mk [moved from eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common with 67% similarity]
tools/intern/debug/dbgdriv/Linux.mk [moved from eurasiacon/build/linux/omap4430_linux/kbuild/Makefile with 75% similarity]
tools/intern/debug/dbgdriv/common/dbgdriv.c
tools/intern/debug/dbgdriv/common/dbgdriv.h
tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h
tools/intern/debug/dbgdriv/common/handle.c
tools/intern/debug/dbgdriv/common/hostfunc.h
tools/intern/debug/dbgdriv/common/hotkey.c
tools/intern/debug/dbgdriv/common/hotkey.h
tools/intern/debug/dbgdriv/common/ioctl.c
tools/intern/debug/dbgdriv/common/ioctl.h [deleted file]
tools/intern/debug/dbgdriv/linux/hostfunc.c
tools/intern/debug/dbgdriv/linux/kbuild/Makefile [deleted file]
tools/intern/debug/dbgdriv/linux/main.c

index b8e2299..2daf6a9 100644 (file)
--- 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 (file)
index 53f97fb..0000000
+++ /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 (file)
index 538ad12..0000000
+++ /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 (file)
index bff89e1..0000000
+++ /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 (file)
index 0b55307..0000000
+++ /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 (file)
index f29d2c2..0000000
+++ /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 (file)
index 5c7f919..0000000
+++ /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 (file)
index 0ab65be..0000000
+++ /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 (file)
index d089eab..0000000
+++ /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 (file)
index dad4187..0000000
+++ /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 (file)
index a894d89..0000000
+++ /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 (file)
index dc5878c..0000000
+++ /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 (file)
index b0c5ba3..0000000
+++ /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 (file)
index e35ac5a..0000000
+++ /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 (file)
index ec59a81..0000000
+++ /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 (file)
index 08e9e0c..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index beb7704..0000000
+++ /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 (file)
index 23b1612..0000000
+++ /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 (file)
index d5fad42..0000000
+++ /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 (file)
index 000d261..0000000
+++ /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 (file)
index 095c187..0000000
+++ /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 (file)
index 28a3377..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index 1bf255d..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index a2af203..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index 04a4faf..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index e35602f..0000000
+++ /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 (file)
index 04f32f1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-#set home path
-#HOME=/home/<user>
-
-#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 (file)
index 86f53dc..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index 04f32f1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-#set home path
-#HOME=/home/<user>
-
-#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 (file)
index 8d150d9..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index 539a723..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index 0000000..173e1ef
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..5026fdf
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..35d1988
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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)
@@ -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,
 # 
 #
 
-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
-
@@ -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,
 # 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 (file)
index 0000000..8c0a172
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..42c0ed0
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..f503460
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
+# 
+
+PVR_SECURE_DRM_AUTH_EXPORT := 1
+
+$(eval $(call TunableKernelConfigC,XPROC_WORKAROUND_NUM_SHAREABLES,4095))
+
@@ -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,
 # 
 #
 
-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 (file)
index 0000000..f68cb98
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..d4cfe29
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..4804e94
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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)
@@ -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,
 # 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 (file)
index 0000000..2d973af
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..f5db1a8
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..8ed6aaa
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..2569099
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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)`))
similarity index 67%
rename from eurasiacon/build/linux/omap3630_linux/kbuild/Makefile
rename to eurasiacon/build/linux2/modules.mk
index d1805a5..9bc52a3 100644 (file)
@@ -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,
 # 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 (file)
index 0000000..0f3a35b
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..e1e18da
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..2410804
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..4e360b7
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..7d6d75c
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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 (file)
index 0000000..79f906c
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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
index 1057c6a..b7614ac 100644 (file)
@@ -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,
 #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
index 3ba2d2f..79a730f 100644 (file)
@@ -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
index 31962aa..2431786 100644 (file)
@@ -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 (file)
index 4b23ad4..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 
-
index 83ccbb2..193b464 100644 (file)
@@ -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
 
index 21fa2cd..a9d082e 100644 (file)
@@ -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. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+******************************************************************************/
 
 #ifndef __PVR_DEBUG_H__
 #define __PVR_DEBUG_H__
 
 #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)
+******************************************************************************/
 
index 30cb2c3..3dd5845 100644 (file)
@@ -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,
index 78181d9..331744c 100644 (file)
@@ -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,
  *
  ******************************************************************************/
 
+
+
+
+
+
+
+
+
 #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 (file)
index a551eff..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 
index d1afe28..cd672d1 100644 (file)
@@ -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)
index c2c14af..54dd4d9 100644 (file)
@@ -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;
index 6f91894..d2ddff6 100644 (file)
@@ -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,
 
 #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 
 
 #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 
 
 #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 
 
 #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 
 
 #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 
 
index db376b6..dcbafbf 100644 (file)
@@ -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 <asm/unistd.h>
        #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)
index 47c9e48..df79e2f 100644 (file)
@@ -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 (file)
index e867f83..0000000
+++ /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 (file)
index 0b37436..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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 (file)
index d3ae4bc..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 (file)
index 8b0f2ff..0000000
+++ /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. <gpl-support@imgtec.com>
- * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
- *
- ******************************************************************************/
-
-#include <linux/version.h>
-#include <linux/kernel.h>
-#include <linux/console.h>
-#include <linux/fb.h>
-#include <linux/module.h>
-#include <linux/string.h>
-#include <linux/notifier.h>
-#include <linux/spinlock.h>
-
-#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 <linux/workqueue.h>
-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; i<ui32BufferCount-1; i++)
-       {
-               psBuffer[i].psNext = &psBuffer[i+1];
-       }
-       
-       psBuffer[i].psNext = &psBuffer[0];
-
-       
-       for(i=0; i<ui32BufferCount; i++)
-       {
-               IMG_UINT32 ui32SwapBuffer = i + ui32BuffersToSkip;
-               IMG_UINT32 ui32BufferOffset = ui32SwapBuffer * (IMG_UINT32)psDevInfo->sFBInfo.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; i<ui32BufferCount; i++)
-       {
-               psVSyncFlips[i].bValid = OMAP_FALSE;
-               psVSyncFlips[i].bFlipped = OMAP_FALSE;
-               psVSyncFlips[i].bCmdCompleted = OMAP_FALSE;
-       }
-
-#if defined (SUPPORT_TI_DSS_FW)
-       OMAPLFBEnableDisplayRegisterAccess();
-
-       
-       psSwapChain->pvRegs = 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; i<psSwapChain->ulBufferCount; 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 (file)
index fa52836..0000000
+++ /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. <gpl-support@imgtec.com>
- * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
- *
- ******************************************************************************/
-
-#ifndef AUTOCONF_INCLUDED
-#include <linux/config.h>
-#endif
-
-#include <linux/version.h>
-#include <linux/module.h>
-
-#include <linux/pci.h>
-#include <asm/uaccess.h>
-#include <linux/slab.h>
-#include <linux/errno.h>
-#include <linux/interrupt.h>
-
-#if defined(LDM_PLATFORM)
-#include <linux/platform_device.h>
-#endif 
-
-#if defined (SUPPORT_TI_DSS_FW)
-#include <asm/io.h>
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26))
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
-#include <plat/display.h>
-#else 
-#include <mach/display.h>
-#endif 
-#else 
-#include <asm/arch-omap/display.h>
-#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 <plat/display.h>
-#include <linux/console.h>
-#include <linux/fb.h>
-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);
-
index 248e964..b503b93 100644 (file)
@@ -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)
        {
index 0688bf5..3a78d1e 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/version.h>
 #include <linux/kernel.h>
 #include <linux/pci.h>
+#include <linux/module.h>
 #include <asm/system.h>
 
 #include "pvr_drm_mod.h"
index b031535..a7e9060 100644 (file)
@@ -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,
index 5243aaf..4cd36d2 100644 (file)
@@ -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,
index b5c1c7a..cdbef00 100644 (file)
@@ -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,
index 78d9073..c41a6d4 100644 (file)
@@ -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,
index 7e4697d..d06d902 100644 (file)
@@ -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)
 }
index d5592c2..1175b76 100644 (file)
@@ -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,
index 4404d88..242d953 100644 (file)
@@ -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,
 #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 
 
index 56c7184..5474984 100644 (file)
@@ -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";
index bc5aeb8..813a391 100644 (file)
@@ -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);
 
 
index 10e5919..204189c 100644 (file)
@@ -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,
 #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;
index 8029321..d5cffdb 100644 (file)
@@ -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,
 #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_
index 2deaa7a..c32dc31 100644 (file)
@@ -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,
 #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 
index b727ed9..6dfb859 100644 (file)
@@ -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,
 
 #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;i<BRIDGE_DISPATCH_TABLE_ENTRY_COUNT;i++)
-       {
-               if(!g_BridgeDispatchTable[i].pfFunction)
-               {
-                       g_BridgeDispatchTable[i].pfFunction = &DummyBW;
+    
+    
+    for(i=0;i<BRIDGE_DISPATCH_TABLE_ENTRY_COUNT;i++)
+    {
+        if(!g_BridgeDispatchTable[i].pfFunction)
+        {
+            g_BridgeDispatchTable[i].pfFunction = &DummyBW;
 #if defined(DEBUG_BRIDGE_KM)
-                       g_BridgeDispatchTable[i].pszIOCName = "_PVRSRV_BRIDGE_DUMMY";
-                       g_BridgeDispatchTable[i].pszFunctionName = "DummyBW";
-                       g_BridgeDispatchTable[i].ui32CallCount = 0;
-                       g_BridgeDispatchTable[i].ui32CopyFromUserTotalBytes = 0;
-                       g_BridgeDispatchTable[i].ui32CopyToUserTotalBytes = 0;
+            g_BridgeDispatchTable[i].pszIOCName = "_PVRSRV_BRIDGE_DUMMY";
+            g_BridgeDispatchTable[i].pszFunctionName = "DummyBW";
+            g_BridgeDispatchTable[i].ui32CallCount = 0;
+            g_BridgeDispatchTable[i].ui32CopyFromUserTotalBytes = 0;
+            g_BridgeDispatchTable[i].ui32CopyToUserTotalBytes = 0;
 #endif
-               }
-       }
+        }
+    }
 
-       return PVRSRV_OK;
+    return PVRSRV_OK;
 }
 
 IMG_INT BridgedDispatchKM(PVRSRV_PER_PROCESS_DATA * psPerProc,
-                                         PVRSRV_BRIDGE_PACKAGE   * psBridgePackageKM)
+                      PVRSRV_BRIDGE_PACKAGE   * psBridgePackageKM)
 {
 
-       IMG_VOID   * psBridgeIn;
-       IMG_VOID   * psBridgeOut;
-       BridgeWrapperFunction pfBridgeHandler;
-       IMG_UINT32   ui32BridgeID = psBridgePackageKM->ui32BridgeID;
-       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;
 }
 
index 0042574..6b0dd88 100644 (file)
@@ -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
index e10e577..dad0800 100644 (file)
@@ -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,
 
 
 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:
index 371715d..d027290 100644 (file)
@@ -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,
 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)
 }
index 7e5a63c..4bc2d74 100644 (file)
@@ -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; i<psDoKickIN->sCCBKick.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; i<psDoKickIN->sCCBKick.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; i<psDoKickIN->sCCBKick.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; i<psDoKickIN->sCCBKick.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; i<ui32BufferArrayLength; i++)
        {
+#if defined (SUPPORT_SID_INTERFACE)
+               PSGX_KICKTA_DUMP_BUFFER_KM psBuffer;
+#else
                PSGX_KICKTA_DUMP_BUFFER psBuffer;
-               PVRSRV_KERNEL_MEM_INFO  *psCtrlMemInfoKM;
+#endif
+               PVRSRV_KERNEL_MEM_INFO    *psCtrlMemInfoKM;
                IMG_CHAR * pszName;
                IMG_HANDLE hUniqueTag;
                IMG_UINT32      ui32Offset;
@@ -2381,25 +3079,44 @@ SGXPDumpBufferArrayBW(IMG_UINT32 ui32BridgeID,
                                   PVRSRV_PER_PROCESS_DATA *psPerProc)
 {
        IMG_UINT32 i;
+#if defined (SUPPORT_SID_INTERFACE)
+       SGX_KICKTA_DUMP_BUFFER *psUMPtr;
+       SGX_KICKTA_DUMP_BUFFER_KM *psKickTADumpBufferKM, *psKMPtr;
+#else
        SGX_KICKTA_DUMP_BUFFER *psKickTADumpBuffer;
+#endif
        IMG_UINT32 ui32BufferArrayLength =
                psPDumpBufferArrayIN->ui32BufferArrayLength;
        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; i<ui32BufferArrayLength; i++)
+    {
+        if (CopyFromUserWrapper(psPerProc, ui32BridgeID, 
+                pszName, psKickTADumpBuffer[i].pszName,
+                MAX_BUFFER_NAME_SIZE) != PVRSRV_OK)
+        {
+            PVR_DPF((PVR_DBG_WARNING, "Failed to read pdump buffer name"));
+            psKickTADumpBuffer[i].pszName = 0;
+        }
+        else 
+        {
+            pszName[MAX_BUFFER_NAME_SIZE-1] = 0;
+            psKickTADumpBuffer[i].pszName = pszName;
+        }
+        pszName += MAX_BUFFER_NAME_SIZE;
+    }
+#endif
 
        for(i = 0; i < ui32BufferArrayLength; i++)
        {
+#if defined (SUPPORT_SID_INTERFACE)
+               IMG_VOID *pvMemInfo = IMG_NULL;
+               psUMPtr = &psPDumpBufferArrayIN->psBufferArray[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)
 {
 
index de6cfd1..204450c 100644 (file)
@@ -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,
index c5ee8c7..4580f4a 100644 (file)
@@ -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,
index 471ce0c..13bfa8d 100644 (file)
@@ -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;
                }
        }
 
index b6fe921..9a7bdb3 100644 (file)
@@ -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,
index e607e58..b95d2f3 100644 (file)
@@ -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; i<ui32PageCount; i++)
+       sDevVAddr.uiAddr = psSrcMemInfo->sDevVAddr.uiAddr - IMG_CAST_TO_DEVVADDR_UINT(uPageOffset);
+       for(i=0; i<uPageCount; i++)
        {
                BM_GetPhysPageAddr(psSrcMemInfo, sDevVAddr, &sDevPAddr);
 
@@ -1176,7 +1353,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer
                goto ErrorExit;
        }
 
-
        if(OSAllocMem(PVRSRV_PAGEABLE_SELECT,
                                        sizeof(PVRSRV_KERNEL_MEM_INFO),
                                        (IMG_VOID **)&psMemInfo, IMG_NULL,
@@ -1193,8 +1369,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPer
        psMemBlock = &(psMemInfo->sMemBlk);
 
        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;
+}
+
+
index 5e34af5..d911b38 100644 (file)
@@ -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 <stddef.h>
 
 #include "services_headers.h"
 
 #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)
index 32b0779..78eab44 100644 (file)
@@ -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)
index 58389bf..1081781 100644 (file)
@@ -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,
index a2673d5..5b5d1ac 100644 (file)
@@ -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,
 
 
 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;
index cbe9912..e721fb3 100644 (file)
@@ -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,
index fcba425..640eb04 100644 (file)
@@ -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);
index 25ac667..e0a46da 100644 (file)
@@ -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,
index 9c9b730..4d6c429 100644 (file)
@@ -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 <stdarg.h>
 
 #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)
                {
                        
 
index eb2530c..eb73166 100644 (file)
@@ -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);
                        
index ba0eced..21d7ad4 100644 (file)
@@ -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");
index 9194966..6feccd2 100644 (file)
@@ -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);
                }
        }
 }
index b6c4cda..8925d3c 100644 (file)
@@ -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; i<ui32DstSyncCount; i++)
        {
+               PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_DST_SYNC,
+                                               apsDstSync[i], PVRSRV_SYNCOP_SAMPLE);
+
                psCommand->psDstSync[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; i<ui32SrcSyncCount; i++)
        {
+               PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_DST_SYNC,
+                                               apsSrcSync[i], PVRSRV_SYNCOP_SAMPLE);
+
                psCommand->psSrcSync[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; i<psCmdCompleteData->ui32DstSyncCount; 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;
 }
 
index 191be84..e93f05f 100644 (file)
@@ -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;
index bc127ac..5088c7f 100644 (file)
@@ -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,
 #include "services_headers.h"
 #include "resman.h"
 
-#include <linux/version.h>
 #ifdef __linux__
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#include <linux/version.h>
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #endif
 #endif
 
 #include <asm/hardirq.h>
 #endif
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+#include <linux/mutex.h>
+#else
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
 #include <linux/semaphore.h>
 #else
 #include <asm/semaphore.h>
 #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;
index e7d19fe..22b9ffb 100644 (file)
@@ -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,
 #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;i<ui32PDIndexEnd;i++)
+               {
+                       
+                       psMMUContext->apsPTInfoList[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; i<pMMUHeap->ui32PTECount; i++)
+               for(i=0; i<pMMUHeap->ui32PTNumEntriesUsable; i++)
                {
                        pui32Tmp[i] = (pMMUHeap->psMMUContext->psDevInfo->sDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT)
                                                | SGX_MMU_PTE_VALID;
                }
+               
+               for(; i<pMMUHeap->ui32PTNumEntriesAllocated; i++)
+               {
+                       pui32Tmp[i] = 0;
+               }
        }
 #else
        
@@ -575,9 +724,10 @@ _DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOS
 
                        
                        for(i=0;
-                               (i<pMMUHeap->ui32PTETotal) && (i<pMMUHeap->ui32PTECount);
+                               (i<pMMUHeap->ui32PTETotalUsable) && (i<pMMUHeap->ui32PTNumEntriesUsable);
                                 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; i<pMMUHeap->ui32PageTableCount; i++)
+       {
+               ui32PDIndex = (pMMUHeap->ui32PDBaseIndex + i);
+
+               if (psMMUContext->apsPTInfoList[ui32PDIndex])
+               {
+                       if (psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr)
+                       {
+                               
+                               for (j=0;j<SGX_MMU_PT_SIZE;j++)
+                               {
+                                       pui32Tmp = (IMG_UINT32 *) psMMUContext->apsPTInfoList[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; i<pMMUHeap->ui32PageTableCount; 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<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+       {
+               ui32ModifiedCachelines[i] = 0;
+       }
+
+       
+       
+       
+       sDevVAddrRequestStart = DevVAddr;
+       ui32PDRequestStart = ui32PDIndex;
+       sDevVAddrRequestEnd = sHighDevVAddr;
+       ui32PDRequestEnd = ui32PageTableCount - 1;
+
+       
+       DevVAddr.uiAddr = DevVAddr.uiAddr & (~BRN31620_PDE_CACHE_FILL_MASK);
+
+       
+       sHighDevVAddr.uiAddr = ((sHighDevVAddr.uiAddr + (BRN31620_PDE_CACHE_FILL_SIZE - 1)) & (~BRN31620_PDE_CACHE_FILL_MASK));
+
+       ui32PDIndex = DevVAddr.uiAddr >> 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; i<ui32PageTableCount; i++)
        {
                if(ppsPTInfoList[i] == IMG_NULL)
                {
+#if defined(FIX_HW_BRN_31620)
+                       
+                       if (pMMUHeap->psMMUContext->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;i<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+                               {
+                                       psMMUContext->ui32PDChangeMask[i] |= ui32ModifiedCachelines[i];
+                               }
+
+                               
+                               psMMUContext = psMMUContext->psNext;
+                       }
+               }
+               else
+               {
+                       for (i=0;i<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+                       {
+                               pMMUHeap->psMMUContext->ui32PDChangeMask[i] |= ui32ModifiedCachelines[i];
+                       }
+               }
+
+               
+               psMMUContext = pMMUHeap->psMMUContext;
+               for (i=0;i<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+               {
+                       IMG_UINT32 j;
+
+                       for(j=0;j<BRN31620_CACHE_FLUSH_BITS_SIZE;j++)
+                       {
+                               if (ui32ModifiedCachelines[i] & (1 << j))
+                               {
+                                       PVRSRV_SGXDEV_INFO *psDevInfo = psMMUContext->psDevInfo;
+                                       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; i<SGX_MMU_PD_SIZE; i++)
@@ -1146,7 +1683,65 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                PDUMPCOMMENT("Page directory contents");
                PDUMPPDENTRIES(&sMMUAttrib, hPDOSMemHandle, pvPDCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG);
        }
-       
+#endif
+#if defined(FIX_HW_BRN_31620)
+       {
+               IMG_UINT32 i;
+               IMG_UINT32 ui32PDCount = 0;
+               IMG_UINT32 *pui32PT;
+               pui32Tmp = (IMG_UINT32 *)pvPDCpuVAddr;
+
+               PDUMPCOMMENT("BRN31620 Set up dummy PT");
+
+               pui32PT = (IMG_UINT32 *) psDevInfo->pvBRN31620DummyPTCpuVAddr;
+               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;i<SGX_MMU_PT_SIZE;i++)
+               {
+                       PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPTOSMemHandle, &pui32PT[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG);
+               }
+#endif
+               PDUMPCOMMENT("BRN31620 Dump PDE wire up");
+               
+               for(i=0;i<SGX_MMU_PD_SIZE;i++)
+               {
+                       pui32Tmp[i] = 0;
+
+                       if (ui32PDCount == BRN31620_DUMMY_PDE_INDEX)
+                       {
+                               pui32Tmp[i] = (psDevInfo->sBRN31620DummyPTDevPAddr.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;i<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+       {
+               psMMUContext->ui32PDChangeMask[i] = 0;
+       }
+
+       for(i=0;i<BRN31620_CACHE_FLUSH_SIZE;i++)
+       {
+               psMMUContext->ui32PDCacheRangeRefCount[i] = 0;
+       }
+
+       for(i=0;i<SGX_MAX_PD_ENTRIES;i++)
+       {
+               psMMUContext->apsPTInfoListSave[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<<ui32ScaleSize);
        pMMUHeap->ui32PTSize = (IMG_UINT32)(1UL<<pMMUHeap->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;i<BRN31620_CACHE_FLUSH_INDEX_SIZE;i++)
+       {
+               pui32RangeMask[i] = pMMUContext->ui32PDChangeMask[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;
 }
index e92b4e0..59b24c4 100644 (file)
@@ -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 
index f9e8b19..ab6523a 100644 (file)
@@ -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 ; i<psStubPBDescIn->ui32SubKernelMemInfosCount; 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,
index 7738be1..8fb3002 100644 (file)
@@ -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)
 }
index f8e467d..5e38cd5 100644 (file)
@@ -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,
 #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)
        #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)
        #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
        
        #define SGX_VERTEXSHADER_HEAP_BASE                       0xFE000000
        #define SGX_VERTEXSHADER_HEAP_SIZE                      (0x02000000-0x00001000)
-
+#endif 
        
        #define SGX_CORE_IDENTIFIED
 #endif 
        #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)
        #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)
        #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)
index 056db35..55bc9e4 100644 (file)
@@ -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);
index 052618d..46a27a5 100644 (file)
@@ -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 <stddef.h>
 #include <linux/delay.h>
 #include <linux/io.h>
+
 #include "sgxdefs.h"
 #include "sgxmmu.h"
 #include "services_headers.h"
 
 #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);
        }
 
index 581640b..d1220cf 100644 (file)
@@ -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,
 #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;
 }
 
index 427cb50..3947cdd 100644 (file)
@@ -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));
index 847ca24..c645025 100644 (file)
@@ -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,
 #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<<EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT);
+       #else
+       ui32RegVal = (1<<EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT) | EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_MASK; 
+       #endif
+       #if !defined(FIX_HW_BRN_31620) && !defined(FIX_HW_BRN_31671)
+       
+       ui32RegVal |= EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK;
+       #endif
+
+       
+       OSWriteHWReg(psDevInfo->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<<EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT);
+       #else
+       ui32RegVal = (1<<EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT) | EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_MASK; 
+       #endif
+       #if !defined(FIX_HW_BRN_31620) && !defined(FIX_HW_BRN_31671)
+       
+       ui32RegVal |= EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK;
+       #endif
+
+       
+       {
+               IMG_UINT32 ui32Core;
+
+               for (ui32Core=0;ui32Core<SGX_FEATURE_MP_CORE_COUNT;ui32Core++)
+               {
+                       OSWriteHWReg(psDevInfo->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 
+
 
index 1624eb2..8a9415f 100644 (file)
@@ -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"
 #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; loop<psKick->ui32NumSrcSync; 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; loop<psKick->ui32NumDstSync; 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; loop<psKick->ui32NumSrcSync; 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; loop<psKick->ui32NumDstSync; 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; loop<psKick->ui32NumSrcSync ; 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)
        {
index 6952571..d6d76da 100644 (file)
@@ -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 <linux/kernel.h>      
@@ -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;
+}
+
index abf9dc2..bc60fdd 100644 (file)
@@ -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 (file)
index 0000000..65e71d1
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+# 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
similarity index 76%
rename from eurasiacon/build/linux/omap3430_linux/makefile.core
rename to services4/srvkm/env/linux/Linux.mk
index eea2327..7eee6bc 100644 (file)
@@ -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,
 # 
 #
 
-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
index 3d41219..7716529 100644 (file)
@@ -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,
index a6e49db..dabf1e3 100644 (file)
@@ -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,
index f8e8acb..7e160c3 100644 (file)
@@ -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,
  ******************************************************************************/
 
 #include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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);
index d07bc97..3035283 100644 (file)
@@ -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 (file)
index cd38db1..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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
index 7e6d09a..e64012c 100644 (file)
@@ -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,
index e0bf5ee..a0854c3 100644 (file)
@@ -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,
index 8211d4a..3b59aec 100644 (file)
@@ -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,
  ******************************************************************************/
 
 #include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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);
     }
index 21f295f..b32f5e8 100644 (file)
@@ -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,
 #ifndef __IMG_LINUX_MM_H__
 #define __IMG_LINUX_MM_H__
 
-
 #include <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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)
index 2359c71..00c8b9d 100644 (file)
@@ -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 <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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
index 486154a..224e652 100644 (file)
@@ -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);
index 305db3a..1a96e7c 100644 (file)
@@ -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,
 
 #include <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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
                        #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 <linux/init.h>
@@ -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);
index 09963ad..742fa03 100644 (file)
@@ -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,
index b24a599..5e787b7 100644 (file)
@@ -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,
index 0a7cad1..a012cf5 100644 (file)
@@ -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 <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
 #include <linux/config.h>
 #endif
index cdde900..b2a8ba0 100644 (file)
@@ -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 <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
 #include <linux/config.h>
 #endif
index ad39b05..8ad838a 100644 (file)
@@ -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 <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #endif
 #endif
 
 #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;
 }
 
index 011c8f3..6b57dfc 100644 (file)
@@ -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,
index 0b932b0..13d9b0d 100644 (file)
@@ -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");
        }
 
index 49974b8..b8751d3 100644 (file)
@@ -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,
 #include <drm/drmP.h>
 #endif
 
-#if defined(SUPPORT_DRI_DRM) && defined(PVR_LINUX_USING_WORKQUEUES)
-#include <linux/workqueue.h>
-#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;
 
index 27078ef..1df8aff 100644 (file)
@@ -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 <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #endif
 #endif
 
index 823b666..2066d71 100644 (file)
@@ -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,
index 3a59ce0..f0aae8d 100644 (file)
@@ -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 <drm/drmP.h>
 
 #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 
index 476319c..d57a37f 100644 (file)
@@ -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,
  ******************************************************************************/
 
 #include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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);
index c7eecb3..5528070 100644 (file)
@@ -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,
 #if defined(SUPPORT_DRI_DRM)
 
 #include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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)
index b529ef1..9bd5540 100644 (file)
@@ -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,
 #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 (file)
index 0000000..c7eecb3
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
+ *
+ ******************************************************************************/
+
+#if defined(SUPPORT_DRI_DRM)
+
+#include <linux/version.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#ifndef AUTOCONF_INCLUDED
+ #include <linux/config.h>
+#endif
+#endif
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/proc_fs.h>
+#include <linux/sched.h>
+#include <asm/ioctl.h>
+#include <drm/drmP.h>
+#include <drm/drm.h>
+
+#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 (file)
index 0000000..b529ef1
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * 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 
+
+
index 7bc47ac..4b7114e 100644 (file)
@@ -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 <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 #ifndef AUTOCONF_INCLUDED
- #include <linux/config.h>
+#include <linux/config.h>
 #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 
 
index 43744e3..3bbab7b 100644 (file)
@@ -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,
index 525f51d..810cb81 100644 (file)
@@ -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,
index dadbb1e..c09aa26 100644 (file)
@@ -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 (file)
index 0000000..c18b8ad
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * 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 
+
index 9e5effb..b3a2583 100644 (file)
@@ -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,
 #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"
 #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 
index 5c57200..1efaa8a 100644 (file)
@@ -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,
                
                #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
                #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
                #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
        #endif
        #endif
        #endif
+       #endif
+       #endif
 #endif
         #endif
-        #endif 
+       
        #define SGX_CORE_DEFINED
 #endif
 
        #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
                
 
        #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
                #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
                
        #endif
        #endif
        #endif
+       #endif
        
        #define SGX_CORE_DEFINED
 #endif
        #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
        #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
        #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
                
        #endif
        #endif
        #endif
+       #endif
+       #endif
+       #endif
        
        #define SGX_CORE_DEFINED
 #endif
                #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
index 714bea3..2553022 100644 (file)
@@ -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"
        #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
        #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"
        #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"
        #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"
        #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
 #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)
        #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
index 4df8003..1b265f1 100644 (file)
@@ -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,
 #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<<SGX_MMU_PT_SHIFT)
diff --git a/services4/srvkm/hwdefs/sgxmpdefs.h b/services4/srvkm/hwdefs/sgxmpdefs.h
new file mode 100644 (file)
index 0000000..e34561a
--- /dev/null
@@ -0,0 +1,332 @@
+/**********************************************************************
+ *
+ * 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. <gpl-support@imgtec.com>
+ * 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 
+
index 1467cd3..60d7695 100644 (file)
@@ -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
index f41bd9e..9df2c73 100644 (file)
@@ -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;
 
index 56de04a..536fa56 100644 (file)
@@ -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);
 
index d45f4a9..3662089 100644 (file)
@@ -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
index 0d74788..a02307a 100644 (file)
@@ -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,
index 2632f8d..69e1b3d 100644 (file)
@@ -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,
index ab86788..b76cefd 100644 (file)
@@ -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,
index 80a912f..e5c81da 100644 (file)
@@ -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);
 
index 3c03888..9f68549 100644 (file)
@@ -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,
index 1be14d6..f29fdba 100644 (file)
@@ -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...)
index 2c3b1e5..f3ed914 100644 (file)
@@ -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;                                                     \
index c73ecf5..842680c 100644 (file)
@@ -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;
 
        
index 079f212..9e3dcc4 100644 (file)
@@ -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,
index 9437f09..ab89527 100644 (file)
@@ -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 <linux/types.h>
index f28ce4c..db141f6 100644 (file)
@@ -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,
index eebec57..648e490 100644 (file)
@@ -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, 
index eb00dbb..2b5f197 100644 (file)
@@ -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,
index e8e223c..474a1ee 100644 (file)
@@ -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 (file)
index 0000000..9e04b88
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * 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 (file)
index 0000000..5895b6c
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * 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 (file)
index 0000000..21ea5fb
--- /dev/null
@@ -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. <gpl-support@imgtec.com>
+ * 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 
index 38b6107..6131e13 100644 (file)
@@ -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
 
index ff626a6..fc8f810 100644 (file)
 #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;
index ff626a6..582c66d 100644 (file)
 #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 (file)
index 206f7fa..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 (file)
index 929d108..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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; i<SYS_DEVICE_COUNT; i++)
-       {
-               gpsSysData->sDeviceID[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; i<psDevMemoryInfo->ui32HeapCount; 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 (file)
index ffb02f2..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 (file)
index f9d7e68..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 (file)
index d3e5210..0000000
+++ /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. <gpl-support@imgtec.com>
- * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
- *
- ******************************************************************************/
-
-#if !defined(__SYSLOCAL_H__)
-#define __SYSLOCAL_H__
-
-#if defined(__linux__)
-
-#include <linux/version.h>
-#include <linux/clk.h>
-#if defined(PVR_LINUX_USING_WORKQUEUES)
-#include <linux/mutex.h>
-#else
-#include <linux/spinlock.h>
-#endif
-#include <asm/atomic.h>
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26))
-#include <linux/semaphore.h>
-#include <linux/resource.h>
-#else 
-#include <asm/semaphore.h>
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22))
-#include <asm/arch/resource.h>
-#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 (file)
index 02c9831..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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 (file)
index 7aaaefb..0000000
+++ /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. <gpl-support@imgtec.com>
- * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
- *
- ******************************************************************************/
-
-#include <linux/version.h>
-#include <linux/clk.h>
-#include <linux/err.h>
-#include <linux/hardirq.h>
-#include <linux/mutex.h>
-
-#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 
-}
index 4185daf..5e89414 100644 (file)
 #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
         {
 
index 8b8f05a..22cf7e3 100644 (file)
 #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)  
index 9fe7dfe..10f819a 100644 (file)
 #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)
index adfcd75..f1cb02a 100644 (file)
@@ -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,
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * 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__*/
@@ -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,
 # 
 #
 
-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
similarity index 75%
rename from eurasiacon/build/linux/omap4430_linux/kbuild/Makefile
rename to tools/intern/debug/dbgdriv/Linux.mk
index 079f52e..2991f6a 100644 (file)
@@ -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,
 # 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
index 31c0120..4bf93d0 100644 (file)
@@ -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 <linux/string.h>
 #endif
+#ifdef __QNXNTO__
+#include <string.h>
+#endif
 
 #include "img_types.h"
 #include "pvr_debug.h"
index 52caa06..2db4843 100644 (file)
@@ -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,
index 3088a3a..130c146 100644 (file)
@@ -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,
index 59d920b..ddffb3f 100644 (file)
@@ -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,
index 3a29db6..70192fb 100644 (file)
@@ -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,
index 43592d8..62c89e3 100644 (file)
@@ -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 <ntddk.h>
 #include <windef.h>
 #endif
index 499d64e..c5d84bb 100644 (file)
@@ -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,
index a021a39..47487b0 100644 (file)
@@ -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 (file)
index 3088a3a..0000000
+++ /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. <gpl-support@imgtec.com>
- * 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
-
index 1560067..18c8898 100644 (file)
@@ -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 (file)
index 00db6ef..0000000
+++ /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. <gpl-support@imgtec.com>
-# 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
index d4fe778..6556249 100644 (file)
@@ -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)
        {