[Graphics]: Integrating the IMG DDK1.8 into ICS mainline
authorRandy Xu <randy.xu@intel.com>
Sun, 11 Dec 2011 11:02:12 +0000 (19:02 +0800)
committerbuildbot <buildbot@intel.com>
Mon, 12 Dec 2011 07:04:48 +0000 (23:04 -0800)
BZ: 16598

Upgrade to PVR DDK 1.8. The 1st set (changes under hardware/intel/linux-2.6/) of 4.

Graphics: PVR DDK 1.8 drop (ED 1.8.778983)

Feature enabled:
1. Surface Texture: GLES1/2_EXTENSION_EGL_IMAGE_EXTERNAL.
2. Pixel format: XRGB888; XBGR8888 & ABGR8888 are rendered via Skia (SW) rather than GPU with GL.
3. EGL_ANDROID_recordable: supports rendering to matching buffer formats that are suitable for feeding to an OpenMAX video encoder.

Feature disabled:
1. HWC HAL of PVR: integrated, but turned OFF (SUPPORT_ANDROID_REFERENCE_COMPOSER_HAL).
2. ION memory manager: integrated, turn OFF support for OMAP (CONFIG_ION_OMAP).
3. Composition Bypass mode: SUPPORT_ANDROID_COMPOSITION_BYPASS.

Change-Id: I5b1ad973d4454324e5194d3f8c05458aa7a3a9b8
Signed-off-by: John Ye <john.ye@intel.com>
Signed-off-by: Randy Xu <randy.xu@intel.com>
Reviewed-on: http://android.intel.com:8080/26913
Reviewed-by: Hu, Austin <austin.hu@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
58 files changed:
drivers/staging/mrst/pvr/include4/dbgdrvif.h
drivers/staging/mrst/pvr/include4/img_defs.h
drivers/staging/mrst/pvr/include4/img_types.h
drivers/staging/mrst/pvr/include4/pdumpdefs.h
drivers/staging/mrst/pvr/include4/pvr_debug.h
drivers/staging/mrst/pvr/include4/pvrversion.h
drivers/staging/mrst/pvr/include4/services.h
drivers/staging/mrst/pvr/include4/servicesext.h
drivers/staging/mrst/pvr/include4/sgx_options.h
drivers/staging/mrst/pvr/include4/sgxapi_km.h
drivers/staging/mrst/pvr/include4/sgxscript.h
drivers/staging/mrst/pvr/services4/include/kerneldisplay.h
drivers/staging/mrst/pvr/services4/include/pvr_bridge.h
drivers/staging/mrst/pvr/services4/include/pvr_bridge_km.h
drivers/staging/mrst/pvr/services4/include/servicesint.h
drivers/staging/mrst/pvr/services4/include/sgx_mkif_km.h
drivers/staging/mrst/pvr/services4/include/sgxinfo.h
drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c
drivers/staging/mrst/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c
drivers/staging/mrst/pvr/services4/srvkm/common/buffer_manager.c
drivers/staging/mrst/pvr/services4/srvkm/common/deviceclass.c
drivers/staging/mrst/pvr/services4/srvkm/common/devicemem.c
drivers/staging/mrst/pvr/services4/srvkm/common/mem.c
drivers/staging/mrst/pvr/services4/srvkm/common/power.c
drivers/staging/mrst/pvr/services4/srvkm/common/pvrsrv.c
drivers/staging/mrst/pvr/services4/srvkm/common/queue.c
drivers/staging/mrst/pvr/services4/srvkm/common/ra.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/mmu.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxconfig.h
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinfokm.h
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxkick.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxpower.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxreset.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxtransfer.c
drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxutils.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/Kbuild.mk
drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.c [new file with mode: 0644]
drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.h [new file with mode: 0644]
drivers/staging/mrst/pvr/services4/srvkm/env/linux/mm.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/mm.h
drivers/staging/mrst/pvr/services4/srvkm/env/linux/mmap.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/module.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/osfunc.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/pdump.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/pvr_bridge_k.c
drivers/staging/mrst/pvr/services4/srvkm/env/linux/pvr_debug.c
drivers/staging/mrst/pvr/services4/srvkm/hwdefs/sgxerrata.h
drivers/staging/mrst/pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h
drivers/staging/mrst/pvr/services4/srvkm/include/buffer_manager.h
drivers/staging/mrst/pvr/services4/srvkm/include/osfunc.h
drivers/staging/mrst/pvr/services4/srvkm/include/perfkm.h [new file with mode: 0644]
drivers/staging/mrst/pvr/services4/srvkm/include/queue.h
drivers/staging/mrst/pvr/services4/srvkm/include/ra.h
drivers/staging/mrst/pvr/services4/system/include/syscommon.h
drivers/staging/mrst/pvr/services4/system/intel_drm/sysconfig.c
drivers/staging/mrst/pvr/services4/system/intel_drm/syslocal.h
drivers/staging/mrst/pvr/tools/intern/debug/client/linuxsrv.h

index b7614ac..09c1608 100755 (executable)
@@ -22,8 +22,8 @@
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
 
+*****************************************************************************/
 #ifndef _DBGDRVIF_
 #define _DBGDRVIF_
 
@@ -43,6 +43,9 @@
 
 #endif
 
+/*****************************************************************************
+ Stream mode stuff.
+*****************************************************************************/
 #define DEBUG_CAPMODE_FRAMED                   0x00000001UL
 #define DEBUG_CAPMODE_CONTINUOUS               0x00000002UL
 #define DEBUG_CAPMODE_HOTKEY                   0x00000004UL
 
 #define DEBUG_FLAGS_TEXTSTREAM                 0x80000000UL
 
+/*****************************************************************************
+ Debug level control. Only bothered with the first 12 levels, I suspect you
+ get the idea...
+*****************************************************************************/
 #define DEBUG_LEVEL_0                                  0x00000001UL
 #define DEBUG_LEVEL_1                                  0x00000003UL
 #define DEBUG_LEVEL_2                                  0x00000007UL
@@ -87,6 +94,9 @@
 #define DEBUG_LEVEL_SEL10                              0x00000400UL
 #define DEBUG_LEVEL_SEL11                              0x00000800UL
 
+/*****************************************************************************
+ IOCTL values.
+*****************************************************************************/
 #define DEBUG_SERVICE_IOCTL_BASE               0x800UL
 #define DEBUG_SERVICE_CREATESTREAM             CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS)
 #define DEBUG_SERVICE_DESTROYSTREAM            CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS)
@@ -121,6 +131,9 @@ typedef enum _DBG_EVENT_
 } DBG_EVENT;
 
 
+/*****************************************************************************
+ In/Out Structures
+*****************************************************************************/
 typedef struct _DBG_IN_CREATESTREAM_
 {
        union
@@ -247,23 +260,33 @@ typedef struct _DBG_IN_WRITE_LF_
        IMG_UINT32 ui32BufferSize;
 } DBG_IN_WRITE_LF, *PDBG_IN_WRITE_LF;
 
+/*
+       Flags for above struct
+*/
 #define WRITELF_FLAGS_RESETBUF         0x00000001UL
 
+/*
+       Common control structure (don't duplicate control in main stream
+       and init phase stream).
+*/
 typedef struct _DBG_STREAM_CONTROL_
 {
-       IMG_BOOL   bInitPhaseComplete;  
-       IMG_UINT32 ui32Flags;                   
+       IMG_BOOL   bInitPhaseComplete;  /*!< init phase has finished */
+       IMG_UINT32 ui32Flags;                   /*!< flags (see DEBUG_FLAGS above) */
 
-       IMG_UINT32 ui32CapMode;                 
-       IMG_UINT32 ui32OutMode;                 
+       IMG_UINT32 ui32CapMode;                 /*!< capturing mode framed/hot key */
+       IMG_UINT32 ui32OutMode;                 /*!< output mode, e.g. files */
        IMG_UINT32 ui32DebugLevel;
        IMG_UINT32 ui32DefaultMode;
-       IMG_UINT32 ui32Start;                   
-       IMG_UINT32 ui32End;                             
-       IMG_UINT32 ui32Current;                 
-       IMG_UINT32 ui32SampleRate;              
+       IMG_UINT32 ui32Start;                   /*!< first capture frame */
+       IMG_UINT32 ui32End;                             /*!< last frame */
+       IMG_UINT32 ui32Current;                 /*!< current frame */
+       IMG_UINT32 ui32SampleRate;              /*!< capture frequency */
        IMG_UINT32 ui32Reserved;
 } DBG_STREAM_CONTROL, *PDBG_STREAM_CONTROL;
+/*
+       Per-buffer control structure.
+*/
 typedef struct _DBG_STREAM_
 {
        struct _DBG_STREAM_ *psNext;
@@ -275,20 +298,24 @@ typedef struct _DBG_STREAM_
        IMG_UINT32 ui32RPtr;
        IMG_UINT32 ui32WPtr;
        IMG_UINT32 ui32DataWritten;
-       IMG_UINT32 ui32Marker;                  
-       IMG_UINT32 ui32InitPhaseWOff;   
-       
-       
-       
-       
-       IMG_CHAR szName[30];            
+       IMG_UINT32 ui32Marker;                  /*!< marker for file splitting */
+       IMG_UINT32 ui32InitPhaseWOff;   /*!< snapshot offset for init phase end for follow-on pdump */
+       IMG_CHAR szName[30];            /* Give this a size, some compilers don't like [] */
 } DBG_STREAM,*PDBG_STREAM;
 
+/*
+ * Allows dbgdrv to notify services when events happen, e.g. pdump.exe starts.
+ * (better than resetting psDevInfo->psKernelCCBInfo->ui32CCBDumpWOff = 0
+ * in SGXGetClientInfoKM.)
+ */
 typedef struct _DBGKM_CONNECT_NOTIFIER_
 {
        IMG_VOID (IMG_CALLCONV *pfnConnectNotifier)             (IMG_VOID);
 } DBGKM_CONNECT_NOTIFIER, *PDBGKM_CONNECT_NOTIFIER;
 
+/*****************************************************************************
+ Kernel mode service table
+*****************************************************************************/
 typedef struct _DBGKM_SERVICE_TABLE_
 {
        IMG_UINT32 ui32Size;
@@ -326,3 +353,6 @@ typedef struct _DBGKM_SERVICE_TABLE_
 
 
 #endif
+/*****************************************************************************
+ End of file (DBGDRVIF.H)
+*****************************************************************************/
index 8ca49d2..d5408cf 100755 (executable)
@@ -22,8 +22,7 @@
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
-
+*******************************************************************************/
 #if !defined (__IMG_DEFS_H__)
 #define __IMG_DEFS_H__
 
@@ -57,24 +56,33 @@ typedef             enum    img_tag_TriStateSwitch
 #endif
 
 
+/* Use this in any file, or use attributes under GCC - see below */
 #ifndef PVR_UNREFERENCED_PARAMETER
 #define        PVR_UNREFERENCED_PARAMETER(param) (param) = (param)
 #endif
 
+/* The best way to supress unused parameter warnings using GCC is to use a
+ * variable attribute.  Place the unref__ between the type and name of an
+ * unused parameter in a function parameter list, eg `int unref__ var'. This
+ * should only be used in GCC build environments, for example, in files that
+ * compile only on Linux. Other files should use UNREFERENCED_PARAMETER */
 #ifdef __GNUC__
 #define unref__ __attribute__ ((unused))
 #else
 #define unref__
 #endif
 
+/*
+       Wide character definitions
+*/
 #ifndef _TCHAR_DEFINED
 #if defined(UNICODE)
 typedef unsigned short         TCHAR, *PTCHAR, *PTSTR;
-#else  
+#else  /* #if defined(UNICODE) */
 typedef char                           TCHAR, *PTCHAR, *PTSTR;
-#endif 
+#endif /* #if defined(UNICODE) */
 #define _TCHAR_DEFINED
-#endif 
+#endif /* #ifndef _TCHAR_DEFINED */
 
 
                        #if defined(__linux__) || defined(__METAG)
@@ -89,6 +97,7 @@ typedef char                          TCHAR, *PTCHAR, *PTSTR;
                                        #error("define an OS")
                        #endif
 
+// Use default definition if not overridden
 #ifndef IMG_ABORT
        #define IMG_ABORT()     abort()
 #endif
@@ -109,6 +118,9 @@ typedef char                                TCHAR, *PTCHAR, *PTSTR;
 #define IMG_FORMAT_PRINTF(x,y)
 #endif
 
+/*
+ * Cleanup request defines
+  */
 #define  CLEANUP_WITH_POLL             IMG_FALSE
 #define  FORCE_CLEANUP                 IMG_TRUE
 
@@ -118,4 +130,7 @@ typedef char                                TCHAR, *PTCHAR, *PTSTR;
 #define IMG_UNDEF      (~0UL)
 #endif
 
-#endif 
+#endif /* #if !defined (__IMG_DEFS_H__) */
+/*****************************************************************************
+ End of file (IMG_DEFS.H)
+*****************************************************************************/
index 3800afb..807b6f9 100755 (executable)
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+******************************************************************************/
 
 #ifndef __IMG_TYPES_H__
 #define __IMG_TYPES_H__
 
+/* define all address space bit depths: */
+/* CPU virtual address space defaults to 32bits */
 #if !defined(IMG_ADDRSPACE_CPUVADDR_BITS)
 #define IMG_ADDRSPACE_CPUVADDR_BITS            32
 #endif
 
+/* Physical address space defaults to 32bits */
 #if !defined(IMG_ADDRSPACE_PHYSADDR_BITS)
 #define IMG_ADDRSPACE_PHYSADDR_BITS            32
 #endif
@@ -71,6 +74,7 @@ typedef __int64                               IMG_INT64,  *IMG_PINT64;
 #endif
 
 #if !(defined(LINUX) && defined (__KERNEL__))
+/* Linux kernel mode does not use floating point */
 typedef float                  IMG_FLOAT,      *IMG_PFLOAT;
 typedef double                 IMG_DOUBLE, *IMG_PDOUBLE;
 #endif
@@ -101,21 +105,66 @@ typedef void**          IMG_HVOID,        * IMG_PHVOID;
 
 #define IMG_NULL        0 
 
+/* services/stream ID */
 typedef IMG_UINT32      IMG_SID;
 
 typedef IMG_UINT32      IMG_EVENTSID;
 
+/* Which of IMG_HANDLE/IMG_SID depends on SUPPORT_SID_INTERFACE */
 #if defined(SUPPORT_SID_INTERFACE)
        typedef IMG_SID IMG_S_HANDLE;
 #else
        typedef IMG_HANDLE IMG_S_HANDLE;
 #endif
 
+/*
+ * Address types.
+ * All types used to refer to a block of memory are wrapped in structures
+ * to enforce some degree of type safety, i.e. a IMG_DEV_VIRTADDR cannot
+ * be assigned to a variable of type IMG_DEV_PHYADDR because they are not the
+ * same thing.
+ *
+ * There is an assumption that the system contains at most one non-cpu mmu,
+ * and a memory block is only mapped by the MMU once.
+ *
+ * Different devices could have offset views of the physical address space.
+ *
+ */
+
+
+/*
+ *
+ * +------------+    +------------+      +------------+        +------------+
+ * |    CPU     |    |    DEV     |      |    DEV     |        |    DEV     |
+ * +------------+    +------------+      +------------+        +------------+
+ *       |                 |                   |                     |
+ *       | PVOID           |IMG_DEV_VIRTADDR   |IMG_DEV_VIRTADDR     |
+ *       |                 \-------------------/                     |
+ *       |                          |                                |
+ * +------------+             +------------+                         |
+ * |    MMU     |             |    MMU     |                         |
+ * +------------+             +------------+                         |
+ *       |                          |                                |
+ *       |                          |                                |
+ *       |                          |                                |
+ *   +--------+                +---------+                      +--------+
+ *   | Offset |                | (Offset)|                      | Offset |
+ *   +--------+                +---------+                      +--------+
+ *       |                          |                IMG_DEV_PHYADDR |
+ *       |                          |                                |
+ *       |                          | IMG_DEV_PHYADDR                |
+ * +---------------------------------------------------------------------+
+ * |                         System Address bus                          |
+ * +---------------------------------------------------------------------+
+ *
+ */
+
 typedef IMG_PVOID IMG_CPU_VIRTADDR;
 
+/* device virtual address */
 typedef struct _IMG_DEV_VIRTADDR
 {
-       
+       /* device virtual addresses are 32bit for now */
        IMG_UINT32  uiAddr;
 #define IMG_CAST_TO_DEVVADDR_UINT(var)         (IMG_UINT32)(var)
        
@@ -123,16 +172,18 @@ typedef struct _IMG_DEV_VIRTADDR
 
 typedef IMG_UINT32 IMG_DEVMEM_SIZE_T;
 
+/* cpu physical address */
 typedef struct _IMG_CPU_PHYADDR
 {
-       
+       /* variable sized type (32,64) */
        IMG_UINTPTR_T uiAddr;
 } IMG_CPU_PHYADDR;
 
+/* device physical address */
 typedef struct _IMG_DEV_PHYADDR
 {
 #if IMG_ADDRSPACE_PHYSADDR_BITS == 32
-       
+       /* variable sized type (32,64) */
        IMG_UINTPTR_T uiAddr;
 #else
        IMG_UINT32 uiAddr;
@@ -140,12 +191,16 @@ typedef struct _IMG_DEV_PHYADDR
 #endif
 } IMG_DEV_PHYADDR;
 
+/* system physical address */
 typedef struct _IMG_SYS_PHYADDR
 {
-       
+       /* variable sized type (32,64) */
        IMG_UINTPTR_T uiAddr;
 } IMG_SYS_PHYADDR;
 
 #include "img_defs.h"
 
-#endif 
+#endif /* __IMG_TYPES_H__ */
+/******************************************************************************
+ End of file (img_types.h)
+******************************************************************************/
index 193b464..e43ce2f 100755 (executable)
@@ -22,7 +22,7 @@
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+*****************************************************************************/
 
 #if !defined (__PDUMPDEFS_H__)
 #define __PDUMPDEFS_H__
@@ -104,5 +104,8 @@ typedef enum _PDUMP_POLL_OPERATOR
 } PDUMP_POLL_OPERATOR;
 
 
-#endif 
+#endif /* __PDUMPDEFS_H__ */
 
+/*****************************************************************************
+ End of file (pdumpdefs.h)
+*****************************************************************************/
index e07103f..e66fdab 100755 (executable)
@@ -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__
@@ -37,29 +37,15 @@ extern "C" {
 
 #define PVR_MAX_DEBUG_MESSAGE_LEN      (512)
 
-#define DBGPRIV_FATAL          0x01UL
-#define DBGPRIV_ERROR          0x02UL
-#define DBGPRIV_WARNING                0x04UL
-#define DBGPRIV_MESSAGE                0x08UL
-#define DBGPRIV_VERBOSE                0x10UL
-#define DBGPRIV_CALLTRACE      0x20UL
-#define DBGPRIV_ALLOC          0x40UL
-
-#define DBGPRIV_DBGDRV_MESSAGE 0x1000UL
-
-#define DBGPRIV_ALLLEVELS      (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING | DBGPRIV_MESSAGE | DBGPRIV_VERBOSE)
-
-
-
-#define PVR_DBG_FATAL          DBGPRIV_FATAL,__FILE__, __LINE__
-#define PVR_DBG_ERROR          DBGPRIV_ERROR,__FILE__, __LINE__
-#define PVR_DBG_WARNING                DBGPRIV_WARNING,__FILE__, __LINE__
-#define PVR_DBG_MESSAGE                DBGPRIV_MESSAGE,__FILE__, __LINE__
-#define PVR_DBG_VERBOSE                DBGPRIV_VERBOSE,__FILE__, __LINE__
-#define PVR_DBG_CALLTRACE      DBGPRIV_CALLTRACE,__FILE__, __LINE__
-#define PVR_DBG_ALLOC          DBGPRIV_ALLOC,__FILE__, __LINE__
-
-#define PVR_DBGDRIV_MESSAGE            DBGPRIV_DBGDRV_MESSAGE, "", 0
+/* 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
+#define DBGPRIV_MESSAGE                        0x08UL
+#define DBGPRIV_VERBOSE                        0x10UL
+#define DBGPRIV_CALLTRACE              0x20UL
+#define DBGPRIV_ALLOC                  0x40UL
+#define DBGPRIV_DBGDRV_MESSAGE  0x80UL
 
 #if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG)
 #define PVRSRV_NEED_PVR_ASSERT
@@ -73,6 +59,7 @@ extern "C" {
 #define PVRSRV_NEED_PVR_TRACE
 #endif
 
+/* PVR_ASSERT() and PVR_DBG_BREAK handling */
 
 #if defined(PVRSRV_NEED_PVR_ASSERT)
 
@@ -81,23 +68,80 @@ extern "C" {
 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugAssertFail(const IMG_CHAR *pszFile,
                                                                                                           IMG_UINT32 ui32Line);
 
-                       #if defined(PVR_DBG_BREAK_ASSERT_FAIL)
-                               #define PVR_DBG_BREAK   PVRSRVDebugAssertFail("PVR_DBG_BREAK", 0)
-                       #else
-                               #define PVR_DBG_BREAK
-                       #endif
+                       #define PVR_DBG_BREAK   PVRSRVDebugAssertFail(__FILE__, __LINE__)
 
-#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)
 
-       #define PVR_DPF(X)              PVRSRVDebugPrintf X
+#if defined(PVRSRV_NEW_PVR_DPF)
+
+       /* New logging mechanism */
+       #define PVR_DBG_FATAL           DBGPRIV_FATAL
+       #define PVR_DBG_ERROR           DBGPRIV_ERROR
+       #define PVR_DBG_WARNING         DBGPRIV_WARNING
+       #define PVR_DBG_MESSAGE         DBGPRIV_MESSAGE
+       #define PVR_DBG_VERBOSE         DBGPRIV_VERBOSE
+       #define PVR_DBG_CALLTRACE       DBGPRIV_CALLTRACE
+       #define PVR_DBG_ALLOC           DBGPRIV_ALLOC
+       #define PVR_DBGDRIV_MESSAGE     DBGPRIV_DBGDRV_MESSAGE
+
+       /* These levels are always on with PVRSRV_NEED_PVR_DPF */
+       #define __PVR_DPF_0x01UL(x...) PVRSRVDebugPrintf(DBGPRIV_FATAL, x)
+       #define __PVR_DPF_0x02UL(x...) PVRSRVDebugPrintf(DBGPRIV_ERROR, x)
+
+       /* Some are compiled out completely in release builds */
+#if defined(DEBUG)
+       #define __PVR_DPF_0x04UL(x...) PVRSRVDebugPrintf(DBGPRIV_WARNING, x)
+       #define __PVR_DPF_0x08UL(x...) PVRSRVDebugPrintf(DBGPRIV_MESSAGE, x)
+       #define __PVR_DPF_0x10UL(x...) PVRSRVDebugPrintf(DBGPRIV_VERBOSE, x)
+       #define __PVR_DPF_0x20UL(x...) PVRSRVDebugPrintf(DBGPRIV_CALLTRACE, x)
+       #define __PVR_DPF_0x40UL(x...) PVRSRVDebugPrintf(DBGPRIV_ALLOC, x)
+       #define __PVR_DPF_0x80UL(x...) PVRSRVDebugPrintf(DBGPRIV_DBGDRV_MESSAGE, x)
+#else
+       #define __PVR_DPF_0x04UL(x...)
+       #define __PVR_DPF_0x08UL(x...)
+       #define __PVR_DPF_0x10UL(x...)
+       #define __PVR_DPF_0x20UL(x...)
+       #define __PVR_DPF_0x40UL(x...)
+       #define __PVR_DPF_0x80UL(x...)
+#endif
+
+       /* Translate the different log levels to separate macros
+        * so they can each be compiled out.
+        */
+#if defined(DEBUG)
+       #define __PVR_DPF(lvl, x...) __PVR_DPF_ ## lvl (__FILE__, __LINE__, x)
+#else
+       #define __PVR_DPF(lvl, x...) __PVR_DPF_ ## lvl ("", 0, x)
+#endif
+
+       /* Get rid of the double bracketing */
+       #define PVR_DPF(x) __PVR_DPF x
+
+#else /* defined(PVRSRV_NEW_PVR_DPF) */
+
+       /* Old logging mechanism */
+       #define PVR_DBG_FATAL           DBGPRIV_FATAL,__FILE__, __LINE__
+       #define PVR_DBG_ERROR           DBGPRIV_ERROR,__FILE__, __LINE__
+       #define PVR_DBG_WARNING         DBGPRIV_WARNING,__FILE__, __LINE__
+       #define PVR_DBG_MESSAGE         DBGPRIV_MESSAGE,__FILE__, __LINE__
+       #define PVR_DBG_VERBOSE         DBGPRIV_VERBOSE,__FILE__, __LINE__
+       #define PVR_DBG_CALLTRACE       DBGPRIV_CALLTRACE,__FILE__, __LINE__
+       #define PVR_DBG_ALLOC           DBGPRIV_ALLOC,__FILE__, __LINE__
+       #define PVR_DBGDRIV_MESSAGE     DBGPRIV_DBGDRV_MESSAGE, "", 0
+
+       #define PVR_DPF(X)                      PVRSRVDebugPrintf X
+
+#endif /* defined(PVRSRV_NEW_PVR_DPF) */
 
 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel,
                                                                                                   const IMG_CHAR *pszFileName,
@@ -105,13 +149,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
@@ -119,16 +165,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 e762838..682a76f 100755 (executable)
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+*/ /**************************************************************************/
 
 #ifndef _PVRVERSION_H_
 #define _PVRVERSION_H_
 
-#define PVRVERSION_MAJ 1
-#define PVRVERSION_MIN 7
-#define PVRVERSION_BRANCH 17
-#define PVRVERSION_BUILD 4958
-#define PVRVERSION_STRING "1.7.17.4958"
-#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               8
+#define PVRVERSION_BRANCH            18
 
+#define PVRVERSION_FAMILY           "sgxddk"
+#define PVRVERSION_BRANCHNAME       "1.8"
+#define PVRVERSION_BUILD             778983
+#define PVRVERSION_BSCONTROL        "blaze_android_sgx_ogles1_ogles2_GPL"
+
+#define PVRVERSION_STRING           "blaze_android_sgx_ogles1_ogles2_GPL sgxddk 18 1.8@" PVR_STR2(PVRVERSION_BUILD)
+#define PVRVERSION_STRING_SHORT     "1.8@" PVR_STR2(PVRVERSION_BUILD)
+
+#define COPYRIGHT_TXT               "Copyright (c) Imagination Technologies Ltd. All Rights Reserved."
+
+#define PVRVERSION_BUILD_HI          77
+#define PVRVERSION_BUILD_LO          8983
+#define PVRVERSION_STRING_NUMERIC    PVR_STR2(PVRVERSION_MAJ) "." PVR_STR2(PVRVERSION_MIN) "." PVR_STR2(PVRVERSION_BUILD_HI) "." PVR_STR2(PVRVERSION_BUILD_LO)
+
+#endif /* _PVRVERSION_H_ */
index c3e165b..43051d3 100755 (executable)
@@ -81,6 +81,8 @@ extern "C" {
 
 #define PVRSRV_MAP_NOUSERVIRTUAL            (1UL<<27)
 #define PVRSRV_MEM_XPROC                                       (1U<<28)
+#define PVRSRV_MEM_ION                                         (1U<<29)
+#define PVRSRV_MEM_ALLOCATENONCACHEDMEM                (1UL<<30)
 
 #define PVRSRV_NO_CONTEXT_LOSS                                 0               
 #define PVRSRV_SEVERE_LOSS_OF_CONTEXT                  1               
@@ -97,6 +99,7 @@ extern "C" {
 #define PVRSRV_MISC_INFO_DDKVERSION_PRESENT                    (1U<<4)
 #define PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT                    (1U<<5)
 #define PVRSRV_MISC_INFO_FREEMEM_PRESENT                       (1U<<6)
+#define PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT         (1U<<7)
 
 #define PVRSRV_MISC_INFO_RESET_PRESENT                         (1U<<31)
 
@@ -137,7 +140,7 @@ typedef enum _PVRSRV_DEVICE_TYPE_
        
        PVRSRV_DEVICE_TYPE_EXT                          = 10,
 
-    PVRSRV_DEVICE_TYPE_LAST             = 10,
+       PVRSRV_DEVICE_TYPE_LAST                         = 10,
 
        PVRSRV_DEVICE_TYPE_FORCE_I32            = 0x7fffffff
 
@@ -425,6 +428,25 @@ typedef struct _PVRSRV_MISC_INFO_
                
                IMG_UINT32      ui32Length;
        } sCacheOpCtl;
+
+       
+       struct
+       {
+               
+#if !defined(SUPPORT_SID_INTERFACE)
+               union
+               {
+                       
+                       PVRSRV_CLIENT_MEM_INFO *psClientMemInfo;
+
+                       
+                       struct _PVRSRV_KERNEL_MEM_INFO_ *psKernelMemInfo;
+               } u;
+#endif
+
+               
+               IMG_UINT32 ui32RefCount;
+       } sGetRefCountCtl;
 } PVRSRV_MISC_INFO;
 
 typedef struct _PVRSRV_SYNC_TOKEN_
@@ -440,6 +462,7 @@ typedef struct _PVRSRV_SYNC_TOKEN_
 #endif
                IMG_UINT32 ui32ReadOpsPendingSnapshot;
                IMG_UINT32 ui32WriteOpsPendingSnapshot;
+               IMG_UINT32 ui32ReadOps2PendingSnapshot;
        } sPrivate;
 } PVRSRV_SYNC_TOKEN;
 
@@ -449,6 +472,8 @@ typedef enum _PVRSRV_CLIENT_EVENT_
        PVRSRV_CLIENT_EVENT_HWTIMEOUT = 0,
 } PVRSRV_CLIENT_EVENT;
 
+typedef IMG_VOID (*PFN_QUEUE_COMMAND_COMPLETE)(IMG_HANDLE hCallbackData);
+
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVClientEvent(IMG_CONST PVRSRV_CLIENT_EVENT eEvent,
                                                                                        PVRSRV_DEV_DATA *psDevData,
@@ -511,10 +536,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID                         hDevMemContext);
+                                                                                       IMG_SID                         hDevMemContext
 #else
-                                                                                       IMG_HANDLE                      hDevMemContext);
+                                                                                       IMG_HANDLE                      hDevMemContext
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData,
@@ -538,6 +564,20 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *
 
 
 IMG_IMPORT
+PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem2(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,
+                                                                       IMG_PVOID               pvPrivData,
+                                                                       IMG_UINT32              ui32PrivDataLength,
+                                                                       PVRSRV_CLIENT_MEM_INFO  **ppsMemInfo);
+
+IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem(IMG_CONST PVRSRV_DEV_DATA       *psDevData,
 #if defined (SUPPORT_SID_INTERFACE)
                                                                        IMG_SID                 hDevMemHeap,
@@ -557,10 +597,11 @@ 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);
+                                                                                               IMG_SID                                         *phMemInfo
 #else
-                                                                                               IMG_HANDLE                                      *phMemInfo);
+                                                                                               IMG_HANDLE                                      *phMemInfo
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
@@ -668,6 +709,22 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory2(IMG_CONST PVRSRV_DEV_DATA *psDe
                                                                                                 PVRSRV_CLIENT_MEM_INFO         **ppsDstMemInfo);
 #endif 
 
+#if defined(SUPPORT_ION)
+PVRSRV_ERROR PVRSRVMapIonHandle(const PVRSRV_DEV_DATA *psDevData,
+#if defined (SUPPORT_SID_INTERFACE)
+                                                                IMG_SID    hDevMemContext,
+#else
+                                                                IMG_HANDLE hDevMemContext,
+#endif
+                                                               IMG_INT32 uiFD,
+                                                               IMG_UINT32 uiSize,
+                                                               IMG_UINT32 ui32Attribs,
+                                                               PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
+
+PVRSRV_ERROR PVRSRVUnmapIonHandle(const PVRSRV_DEV_DATA *psDevData,
+                                                                 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
+#endif 
+
 typedef enum _PVRSRV_SYNCVAL_MODE_
 {
        PVRSRV_SYNCVAL_READ                             = IMG_TRUE,
@@ -726,10 +783,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);
+                                                                               IMG_SID *phBuffer
 #else
-                                                                               IMG_HANDLE *phBuffer);
+                                                                               IMG_HANDLE *phBuffer
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCInfo(IMG_HANDLE hDevice,
@@ -744,18 +802,20 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDCSwapChain (IMG_HANDLE                             hDevice,
                                                                                                        IMG_UINT32                              ui32OEMFlags,
                                                                                                        IMG_UINT32                              *pui32SwapChainID,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                                       IMG_SID                                 *phSwapChain);
+                                                                                                       IMG_SID                                 *phSwapChain
 #else
-                                                                                                       IMG_HANDLE                              *phSwapChain);
+                                                                                                       IMG_HANDLE                              *phSwapChain
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDCSwapChain (IMG_HANDLE hDevice,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID hSwapChain);
+                                                                                       IMG_SID hSwapChain
 #else
-                                                                                       IMG_HANDLE              hSwapChain);
+                                                                                       IMG_HANDLE              hSwapChain
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstRect (IMG_HANDLE hDevice,
@@ -797,11 +857,23 @@ IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers(IMG_HANDLE hDevice,
 #if defined (SUPPORT_SID_INTERFACE)
                                                                        IMG_SID     hSwapChain,
-                                                                       IMG_SID    *phBuffer);
+                                                                       IMG_SID    *phBuffer
 #else
                                                                        IMG_HANDLE hSwapChain,
-                                                                       IMG_HANDLE *phBuffer);
+                                                                       IMG_HANDLE *phBuffer
+#endif
+       );
+
+IMG_IMPORT
+PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers2(IMG_HANDLE hDevice,
+#if defined (SUPPORT_SID_INTERFACE)
+                                                                                         IMG_SID    hSwapChain,
+                                                                                         IMG_SID   *phBuffer,
+#else
+                                                                                         IMG_HANDLE hSwapChain,
+                                                                                         IMG_HANDLE *phBuffer,
 #endif
+                                                                                         IMG_SYS_PHYADDR *psPhyAddr);
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice,
@@ -814,23 +886,38 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice,
                                                                                IMG_RECT  *psClipRect,
                                                                                IMG_UINT32 ui32SwapInterval,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID hPrivateTag);
+                                                                               IMG_SID hPrivateTag
+#else
+                                                                               IMG_HANDLE hPrivateTag
+#endif
+       );
+
+IMG_IMPORT
+PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer2 (IMG_HANDLE hDevice,
+#if defined (SUPPORT_SID_INTERFACE)
+                                                                               IMG_SID    hBuffer,
 #else
-                                                                               IMG_HANDLE hPrivateTag);
+                                                                               IMG_HANDLE hBuffer,
 #endif
+                                                                               IMG_UINT32 ui32SwapInterval,
+                                                                               PVRSRV_CLIENT_MEM_INFO **ppsMemInfos,
+                                                                               IMG_UINT32 ui32NumMemInfos,
+                                                                               IMG_PVOID  pvPrivData,
+                                                                               IMG_UINT32 ui32PrivDataLength);
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCSystem (IMG_HANDLE hDevice,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID hSwapChain);
+                                                                               IMG_SID hSwapChain
 #else
-                                                                               IMG_HANDLE hSwapChain);
+                                                                               IMG_HANDLE hSwapChain
 #endif
+       );
 
 IMG_EXPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCFrontBuffer(IMG_HANDLE hDevice,
-                                                                                          IMG_UINT32   *pui32BufIndex,
-                                                                                          IMG_UINT32   *pui32SwapChainID);
+                                                                               IMG_UINT32   *pui32BufIndex,
+                                                                               IMG_UINT32      *pui32SwapChainID);
 
 IMG_IMPORT
 IMG_HANDLE IMG_CALLCONV PVRSRVOpenBCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData,
@@ -848,10 +935,11 @@ IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBuffer(IMG_HANDLE hDevice,
                                                                                                IMG_UINT32 ui32BufferIndex,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                               IMG_SID   *phBuffer);
+                                                                                               IMG_SID   *phBuffer
 #else
-                                                                                               IMG_HANDLE *phBuffer);
+                                                                                               IMG_HANDLE *phBuffer
 #endif
+       );
 
 
 IMG_IMPORT
@@ -1066,6 +1154,8 @@ IMG_IMPORT IMG_VOID PVRSRVMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_
 struct _PVRSRV_MUTEX_OPAQUE_STRUCT_;
 typedef        struct  _PVRSRV_MUTEX_OPAQUE_STRUCT_ *PVRSRV_MUTEX_HANDLE;
 
+
+
 IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateMutex(PVRSRV_MUTEX_HANDLE *phMutex);
 IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMutex);
 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex);
@@ -1138,26 +1228,29 @@ IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMemTracking(IMG_VOID *pvM
 
 IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                       IMG_EVENTSID hOSEvent);
+                                                                       IMG_EVENTSID hOSEvent
 #else
-                                                                       IMG_HANDLE hOSEvent);
+                                                                       IMG_HANDLE hOSEvent
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateSyncInfoModObj(const PVRSRV_CONNECTION *psConnection,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                                        IMG_SID *phKernelSyncInfoModObj);
+                                                                                                        IMG_SID *phKernelSyncInfoModObj
 #else
-                                                                                                        IMG_HANDLE *phKernelSyncInfoModObj);
+                                                                                                        IMG_HANDLE *phKernelSyncInfoModObj
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroySyncInfoModObj(const PVRSRV_CONNECTION *psConnection,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                                                                         IMG_SID hKernelSyncInfoModObj);
+                                                                                                         IMG_SID hKernelSyncInfoModObj
 #else
-                                                                                                         IMG_HANDLE hKernelSyncInfoModObj);
+                                                                                                         IMG_HANDLE hKernelSyncInfoModObj
 #endif
+       );
 
 
 
@@ -1176,10 +1269,11 @@ 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);
+                                                                                                         IMG_SID hKernelSyncInfoModObj
 #else
-                                                                                                         IMG_HANDLE hKernelSyncInfoModObj);
+                                                                                                         IMG_HANDLE hKernelSyncInfoModObj
 #endif
+       );
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsTakeToken(const PVRSRV_CONNECTION *psConnection,
index 2731db5..4c5de43 100755 (executable)
@@ -638,6 +638,10 @@ typedef struct _PVRSRV_SYNC_DATA_
        volatile IMG_UINT32                     ui32ReadOpsComplete;
 
        
+       IMG_UINT32                                      ui32ReadOps2Pending;
+       volatile IMG_UINT32                     ui32ReadOps2Complete;
+
+
        IMG_UINT32                                      ui32LastOpDumpVal;
        IMG_UINT32                                      ui32LastReadOpDumpVal;
 
@@ -651,13 +655,16 @@ typedef struct _PVRSRV_CLIENT_SYNC_INFO_
        
 
 
-       
+
        IMG_DEV_VIRTADDR                sWriteOpsCompleteDevVAddr;
 
        
        IMG_DEV_VIRTADDR                sReadOpsCompleteDevVAddr;
 
        
+       IMG_DEV_VIRTADDR                sReadOps2CompleteDevVAddr;
+
+
 #if defined (SUPPORT_SID_INTERFACE)
        IMG_SID                                 hMappingInfo;
 
index d2ddff6..c70d1eb 100755 (executable)
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+******************************************************************************/
+
+/* Each build option listed here is packed into a dword which
+ * provides up to 32 flags (or up to 28 flags plus a numeric
+ * value in the range 0-15 which corresponds to the number of
+ * cores minus one if SGX_FEATURE_MP is defined). The corresponding
+ * bit is set if the build option was enabled at compile time.
+ *
+ * In order to extract the enabled build flags the INTERNAL_TEST
+ * switch should be enabled in a client program which includes this
+ * header. Then the client can test specific build flags by reading
+ * the bit value at ##OPTIONNAME##_SET_OFFSET in SGX_BUILD_OPTIONS.
+ *
+ * IMPORTANT: add new options to unused bits or define a new dword
+ * (e.g. SGX_BUILD_OPTIONS2) so that the bitfield remains backwards
+ * compatible.
+ */
+
 
 #if defined(DEBUG) || defined (INTERNAL_TEST)
 #define DEBUG_SET_OFFSET       OPTIONS_BIT0
 #define OPTIONS_BIT0           0x1U
 #else
 #define OPTIONS_BIT0           0x0
-#endif 
+#endif /* DEBUG */
 
 #if defined(PDUMP) || defined (INTERNAL_TEST)
 #define PDUMP_SET_OFFSET       OPTIONS_BIT1
 #define OPTIONS_BIT1           (0x1U << 1)
 #else
 #define OPTIONS_BIT1           0x0
-#endif 
+#endif /* PDUMP */
 
 #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) || defined (INTERNAL_TEST)
 #define PVRSRV_USSE_EDM_STATUS_DEBUG_SET_OFFSET                OPTIONS_BIT2
 #define OPTIONS_BIT2           (0x1U << 2)
 #else
 #define OPTIONS_BIT2           0x0
-#endif 
+#endif /* PVRSRV_USSE_EDM_STATUS_DEBUG */
 
 #if defined(SUPPORT_HW_RECOVERY) || defined (INTERNAL_TEST)
 #define SUPPORT_HW_RECOVERY_SET_OFFSET OPTIONS_BIT3
 #define OPTIONS_BIT3           (0x1U << 3)
 #else
 #define OPTIONS_BIT3           0x0
-#endif 
+#endif /* SUPPORT_HW_RECOVERY */
 
 
 
@@ -63,7 +80,7 @@
 #define OPTIONS_BIT4           (0x1U << 4)
 #else
 #define OPTIONS_BIT4           0x0
-#endif 
+#endif /* PVR_SECURE_HANDLES */
 #endif
 
 #if defined(SGX_BYPASS_SYSTEM_CACHE) || defined (INTERNAL_TEST)
 #define OPTIONS_BIT5           (0x1U << 5)
 #else
 #define OPTIONS_BIT5           0x0
-#endif 
+#endif /* SGX_BYPASS_SYSTEM_CACHE */
 
 #if defined(SGX_DMS_AGE_ENABLE) || defined (INTERNAL_TEST)
 #define SGX_DMS_AGE_ENABLE_SET_OFFSET  OPTIONS_BIT6
 #define OPTIONS_BIT6           (0x1U << 6)
 #else
 #define OPTIONS_BIT6           0x0
-#endif 
+#endif /* SGX_DMS_AGE_ENABLE */
 
 #if defined(SGX_FAST_DPM_INIT) || defined (INTERNAL_TEST)
 #define SGX_FAST_DPM_INIT_SET_OFFSET   OPTIONS_BIT8
 #define OPTIONS_BIT8           (0x1U << 8)
 #else
 #define OPTIONS_BIT8           0x0
-#endif 
+#endif /* SGX_FAST_DPM_INIT */
 
 #if defined(SGX_FEATURE_WRITEBACK_DCU) || defined (INTERNAL_TEST)
 #define SGX_FEATURE_DCU_SET_OFFSET     OPTIONS_BIT9
 #define OPTIONS_BIT9           (0x1U << 9)
 #else
 #define OPTIONS_BIT9           0x0
-#endif 
+#endif /* SGX_FEATURE_WRITEBACK_DCU */
 
 #if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST)
 #define SGX_FEATURE_MP_SET_OFFSET      OPTIONS_BIT10
 #define OPTIONS_BIT10          (0x1U << 10)
 #else
 #define OPTIONS_BIT10          0x0
-#endif 
+#endif /* SGX_FEATURE_MP */
 
 #if defined(SGX_FEATURE_MULTITHREADED_UKERNEL) || defined (INTERNAL_TEST)
 #define SGX_FEATURE_MULTITHREADED_UKERNEL_SET_OFFSET   OPTIONS_BIT11
 #define OPTIONS_BIT11          (0x1U << 11)
 #else
 #define OPTIONS_BIT11          0x0
-#endif 
+#endif /* SGX_FEATURE_MULTITHREADED_UKERNEL */
 
 
 
 #define OPTIONS_BIT12          (0x1U << 12)
 #else
 #define OPTIONS_BIT12          0x0
-#endif 
+#endif /* SGX_FEATURE_RENDER_TARGET_ARRAYS */
 
 
 #if defined(SGX_FEATURE_SYSTEM_CACHE) || defined (INTERNAL_TEST)
 #define OPTIONS_BIT13          (0x1U << 13)
 #else
 #define OPTIONS_BIT13          0x0
-#endif 
+#endif /* SGX_FEATURE_SYSTEM_CACHE */
 
 #if defined(SGX_SUPPORT_HWPROFILING) || defined (INTERNAL_TEST)
 #define SGX_SUPPORT_HWPROFILING_SET_OFFSET     OPTIONS_BIT14
 #define OPTIONS_BIT14          (0x1U << 14)
 #else
 #define OPTIONS_BIT14          0x0
-#endif 
+#endif /* SGX_SUPPORT_HWPROFILING */
 
 
 
 #define OPTIONS_BIT15          (0x1U << 15)
 #else
 #define OPTIONS_BIT15          0x0
-#endif 
+#endif /* SUPPORT_ACTIVE_POWER_MANAGEMENT */
 
 #if defined(SUPPORT_DISPLAYCONTROLLER_TILING) || defined (INTERNAL_TEST)
 #define SUPPORT_DISPLAYCONTROLLER_TILING_SET_OFFSET    OPTIONS_BIT16
 #define OPTIONS_BIT16          (0x1U << 16)
 #else
 #define OPTIONS_BIT16          0x0
-#endif 
+#endif /* SUPPORT_DISPLAYCONTROLLER_TILING */
 
 #if defined(SUPPORT_PERCONTEXT_PB) || defined (INTERNAL_TEST)
 #define SUPPORT_PERCONTEXT_PB_SET_OFFSET       OPTIONS_BIT17
 #define OPTIONS_BIT17          (0x1U << 17)
 #else
 #define OPTIONS_BIT17          0x0
-#endif 
+#endif /* SUPPORT_PERCONTEXT_PB */
 
 #if defined(SUPPORT_SGX_HWPERF) || defined (INTERNAL_TEST)
 #define SUPPORT_SGX_HWPERF_SET_OFFSET  OPTIONS_BIT18
 #define OPTIONS_BIT18          (0x1U << 18)
 #else
 #define OPTIONS_BIT18          0x0
-#endif 
+#endif /* SUPPORT_SGX_HWPERF */
 
 
 
 #define OPTIONS_BIT19          (0x1U << 19)
 #else
 #define OPTIONS_BIT19          0x0
-#endif 
+#endif /* SUPPORT_SGX_MMU_DUMMY_PAGE */
 
 #if defined(SUPPORT_SGX_PRIORITY_SCHEDULING) || defined (INTERNAL_TEST)
 #define SUPPORT_SGX_PRIORITY_SCHEDULING_SET_OFFSET     OPTIONS_BIT20
 #define OPTIONS_BIT20          (0x1U << 20)
 #else
 #define OPTIONS_BIT20          0x0
-#endif 
+#endif /* SUPPORT_SGX_PRIORITY_SCHEDULING */
 
 #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) || defined (INTERNAL_TEST)
 #define SUPPORT_SGX_LOW_LATENCY_SCHEDULING_SET_OFFSET  OPTIONS_BIT21
 #define OPTIONS_BIT21          (0x1U << 21)
 #else
 #define OPTIONS_BIT21          0x0
-#endif 
+#endif /* SUPPORT_SGX_LOW_LATENCY_SCHEDULING */
 
 #if defined(USE_SUPPORT_NO_TA3D_OVERLAP) || defined (INTERNAL_TEST)
 #define USE_SUPPORT_NO_TA3D_OVERLAP_SET_OFFSET OPTIONS_BIT22
 #define OPTIONS_BIT22          (0x1U << 22)
 #else
 #define OPTIONS_BIT22          0x0
-#endif 
+#endif /* USE_SUPPORT_NO_TA3D_OVERLAP */
 
 #if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST)
 #if defined(SGX_FEATURE_MP_CORE_COUNT)
 #define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET_3D        28UL
 #define SGX_FEATURE_MP_CORE_COUNT_SET_MASK             0xFF
 #endif
-#else 
+#else /* SGX_FEATURE_MP */
 #define OPTIONS_HIGHBYTE       0x0
-#endif 
+#endif /* SGX_FEATURE_MP */
 
 
 
index a0d8e5b..c3416b0 100755 (executable)
@@ -22,7 +22,7 @@
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
+******************************************************************************/
 
 #ifndef __SGXAPI_KM_H__
 #define __SGXAPI_KM_H__
@@ -41,6 +41,11 @@ extern "C" {
        #endif
 #endif
 
+/******************************************************************************
+ Some defines...
+******************************************************************************/
+
+/* SGX Heap IDs, note: not all heaps are available to clients */
 #define SGX_UNDEFINED_HEAP_ID                                  (~0LU)
 #define SGX_GENERAL_HEAP_ID                                            0
 #define SGX_TADATA_HEAP_ID                                             1
@@ -63,13 +68,23 @@ extern "C" {
 #define SGX_CGBUFFER_HEAP_ID                                   13
 #endif
 #endif
-#define SGX_MAX_HEAP_ID                                                        14
+#if defined(SUPPORT_MEMORY_TILING)
+#define SGX_VPB_TILED_HEAP_ID                  14
+#endif
+
+#define SGX_MAX_HEAP_ID                                                        15
 
+/*
+ * Keep SGX_3DPARAMETERS_HEAP_ID as TQ full custom
+ * shaders need it to select which heap to write
+ * their ISP controll stream to.
+ */
 #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
+/* Define for number of bytes between consecutive code base registers */
 #if defined(SGX543) || defined(SGX544) || defined(SGX554)
 #define SGX_USE_CODE_SEGMENT_RANGE_BITS                23
 #else
@@ -80,12 +95,16 @@ extern "C" {
 #define SGX_MAX_3D_STATUS_VALS 4
 
 #if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS)
+/* sync info structure array size */
 #define SGX_MAX_TA_DST_SYNCS                   1
 #define SGX_MAX_TA_SRC_SYNCS                   1
 #define SGX_MAX_3D_SRC_SYNCS                   4
+/* note: there is implicitly 1 3D Dst Sync */
 #else
+/* sync info structure array size */
 #define SGX_MAX_SRC_SYNCS                              8
 #define SGX_MAX_DST_SYNCS                              1
+/* note: there is implicitly 1 3D Dst Sync */
 #endif
 
 
@@ -95,7 +114,7 @@ extern "C" {
 #else
 #define        PVRSRV_SGX_HWPERF_NUM_COUNTERS  9
 #define        PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS 8
-#endif 
+#endif /* SGX543 */
 
 #define PVRSRV_SGX_HWPERF_INVALID                                      0x1
 
@@ -165,6 +184,10 @@ extern "C" {
 #define PVRSRV_SGX_HWPERF_STATUS_MK_EXECUTION_ON       (1UL << 3)
 
 
+/*!
+ *****************************************************************************
+ * One entry in the HWPerf Circular Buffer.
+ *****************************************************************************/
 typedef struct _PVRSRV_SGX_HWPERF_CB_ENTRY_
 {
        IMG_UINT32      ui32FrameNo;
@@ -174,12 +197,15 @@ typedef struct _PVRSRV_SGX_HWPERF_CB_ENTRY_
        IMG_UINT32      ui32Ordinal;
        IMG_UINT32      ui32Info;
        IMG_UINT32      ui32Clocksx16;
-               
+       /* NOTE: There should always be at least as many 3D cores as TA cores. */
        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;
 
 
+/*
+       Status values control structure
+*/
 typedef struct _CTL_STATUS_
 {
        IMG_DEV_VIRTADDR        sStatusDevAddr;
@@ -187,6 +213,9 @@ typedef struct _CTL_STATUS_
 } CTL_STATUS;
 
 
+/*!
+       List of possible requests/commands to SGXGetMiscInfo()
+*/
 typedef enum _SGX_MISC_INFO_REQUEST_
 {
        SGX_MISC_INFO_REQUEST_CLOCKSPEED = 0,
@@ -195,13 +224,13 @@ typedef enum _SGX_MISC_INFO_REQUEST_
 #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG)
        SGX_MISC_INFO_REQUEST_MEMREAD,
        SGX_MISC_INFO_REQUEST_MEMCOPY,
-#endif 
+#endif /* SUPPORT_SGX_EDM_MEMORY_DEBUG */
        SGX_MISC_INFO_REQUEST_SET_HWPERF_STATUS,
 #if defined(SGX_FEATURE_DATA_BREAKPOINTS)
        SGX_MISC_INFO_REQUEST_SET_BREAKPOINT,
        SGX_MISC_INFO_REQUEST_POLL_BREAKPOINT,
        SGX_MISC_INFO_REQUEST_RESUME_BREAKPOINT,
-#endif 
+#endif /* SGX_FEATURE_DATA_BREAKPOINTS */
        SGX_MISC_INFO_DUMP_DEBUG_INFO,
        SGX_MISC_INFO_PANIC,
        SGX_MISC_INFO_REQUEST_SPM,
@@ -211,66 +240,84 @@ typedef enum _SGX_MISC_INFO_REQUEST_
 } SGX_MISC_INFO_REQUEST;
 
 
+/******************************************************************************
+ * Struct for passing SGX core rev/features from ukernel to driver.
+ * This is accessed from the kernel part of the driver and microkernel; it is
+ * only accessed in user space during buffer allocation in srvinit.
+ ******************************************************************************/
 typedef struct _PVRSRV_SGX_MISCINFO_FEATURES
 {
-       IMG_UINT32                      ui32CoreRev;    
-       IMG_UINT32                      ui32CoreID;             
-       IMG_UINT32                      ui32DDKVersion; 
-       IMG_UINT32                      ui32DDKBuild;   
-       IMG_UINT32                      ui32CoreIdSW;   
-       IMG_UINT32                      ui32CoreRevSW;  
-       IMG_UINT32                      ui32BuildOptions;       
+       IMG_UINT32                      ui32CoreRev;    /*!< SGX Core revision from HW register */
+       IMG_UINT32                      ui32CoreID;             /*!< SGX Core ID from HW register */
+       IMG_UINT32                      ui32DDKVersion; /*!< software DDK version */
+       IMG_UINT32                      ui32DDKBuild;   /*!< software DDK build no. */
+       IMG_UINT32                      ui32CoreIdSW;   /*!< software core version (ID), e.g. SGX535, SGX540 */
+       IMG_UINT32                      ui32CoreRevSW;  /*!< software core revision */
+       IMG_UINT32                      ui32BuildOptions;       /*!< build options bit-field */
 #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG)
-       IMG_UINT32                      ui32DeviceMemValue;             
+       IMG_UINT32                      ui32DeviceMemValue;             /*!< device mem value read from ukernel */
 #endif
 #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG)
-       IMG_DEV_VIRTADDR        sDevVAEDMStatusBuffer;  
-       IMG_PVOID                       pvEDMStatusBuffer;              
+       IMG_DEV_VIRTADDR        sDevVAEDMStatusBuffer;  /*!< DevVAddr of the EDM status buffer */
+       IMG_PVOID                       pvEDMStatusBuffer;              /*!< CPUVAddr of the EDM status buffer */
 #endif
 } PVRSRV_SGX_MISCINFO_FEATURES;
 
 
+/******************************************************************************
+ * Struct for getting lock-up stats from the kernel driver
+ ******************************************************************************/
 typedef struct _PVRSRV_SGX_MISCINFO_LOCKUPS
 {
-       IMG_UINT32                      ui32HostDetectedLockups; 
-       IMG_UINT32                      ui32uKernelDetectedLockups; 
+       IMG_UINT32                      ui32HostDetectedLockups; /*!< Host timer detected lockups */
+       IMG_UINT32                      ui32uKernelDetectedLockups; /*!< Microkernel detected lockups */
 } PVRSRV_SGX_MISCINFO_LOCKUPS;
 
 
+/******************************************************************************
+ * Struct for getting lock-up stats from the kernel driver
+ ******************************************************************************/
 typedef struct _PVRSRV_SGX_MISCINFO_ACTIVEPOWER
 {
-       IMG_UINT32                      ui32NumActivePowerEvents; 
+       IMG_UINT32                      ui32NumActivePowerEvents; /*!< active power events */
 } PVRSRV_SGX_MISCINFO_ACTIVEPOWER;
 
 
+/******************************************************************************
+ * Struct for getting SPM stats fro the kernel driver
+ ******************************************************************************/
 typedef struct _PVRSRV_SGX_MISCINFO_SPM
 {
-       IMG_HANDLE                      hRTDataSet;                             
-       IMG_UINT32                      ui32NumOutOfMemSignals; 
-       IMG_UINT32                      ui32NumSPMRenders;      
+       IMG_HANDLE                      hRTDataSet;                             /*!< render target data set handle returned from SGXAddRenderTarget */
+       IMG_UINT32                      ui32NumOutOfMemSignals; /*!< Number of Out of Mem Signals */
+       IMG_UINT32                      ui32NumSPMRenders;      /*!< Number of SPM renders */
 } PVRSRV_SGX_MISCINFO_SPM;
 
 
 #if defined(SGX_FEATURE_DATA_BREAKPOINTS)
+/*!
+ ******************************************************************************
+ * Structure for SGX break points control
+ *****************************************************************************/
 typedef struct _SGX_BREAKPOINT_INFO
 {
-       
+       /* set/clear BP boolean */
        IMG_BOOL                                        bBPEnable;
-       
+       /* Index of BP to set */
        IMG_UINT32                                      ui32BPIndex;
-       
+       /* On which DataMaster(s) should the breakpoint fire? */
        IMG_UINT32                  ui32DataMasterMask;
-       
+       /* DevVAddr of BP to set */
        IMG_DEV_VIRTADDR                        sBPDevVAddr, sBPDevVAddrEnd;
-       
+       /* Whether or not the desired breakpoint will be trapped */
        IMG_BOOL                    bTrapped;
-       
+       /* Will the requested breakpoint fire for reads? */
        IMG_BOOL                    bRead;
-       
+       /* Will the requested breakpoint fire for writes? */
        IMG_BOOL                    bWrite;
-       
+       /* Has a breakpoint been trapped? */
        IMG_BOOL                    bTrappedBP;
-       
+       /* Extra information recorded about a trapped breakpoint */
        IMG_UINT32                  ui32CoreNum;
        IMG_DEV_VIRTADDR            sTrappedBPDevVAddr;
        IMG_UINT32                  ui32TrappedBPBurstLength;
@@ -278,38 +325,46 @@ typedef struct _SGX_BREAKPOINT_INFO
        IMG_UINT32                  ui32TrappedBPDataMaster;
        IMG_UINT32                  ui32TrappedBPTag;
 } SGX_BREAKPOINT_INFO;
-#endif 
+#endif /* SGX_FEATURE_DATA_BREAKPOINTS */
 
 
+/*!
+ ******************************************************************************
+ * Structure for setting the hardware performance status
+ *****************************************************************************/
 typedef struct _PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS
 {
-       
+       /* See PVRSRV_SGX_HWPERF_STATUS_* */
        IMG_UINT32      ui32NewHWPerfStatus;
        
        #if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS)
-       
+       /* Specifies the HW's active group selectors */
        IMG_UINT32      aui32PerfGroup[PVRSRV_SGX_HWPERF_NUM_COUNTERS];
-       
+       /* Specifies the HW's active bit selectors */
        IMG_UINT32      aui32PerfBit[PVRSRV_SGX_HWPERF_NUM_COUNTERS];
        #else
-       
+       /* Specifies the HW's active group */
        IMG_UINT32      ui32PerfGroup;
-       #endif 
+       #endif /* SGX_FEATURE_EXTENDED_PERF_COUNTERS */
 } PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS;
 
 
+/*!
+ ******************************************************************************
+ * Structure for misc SGX commands in services
+ *****************************************************************************/
 typedef struct _SGX_MISC_INFO_
 {
-       SGX_MISC_INFO_REQUEST   eRequest;       
+       SGX_MISC_INFO_REQUEST   eRequest;       /*!< Command request to SGXGetMiscInfo() */
        IMG_UINT32                              ui32Padding;
 #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG)
-       IMG_DEV_VIRTADDR                        sDevVAddrSrc;           
-       IMG_DEV_VIRTADDR                        sDevVAddrDest;          
-       IMG_HANDLE                                      hDevMemContext;         
+       IMG_DEV_VIRTADDR                        sDevVAddrSrc;           /*!< dev virtual addr for mem read */
+       IMG_DEV_VIRTADDR                        sDevVAddrDest;          /*!< dev virtual addr for mem write */
+       IMG_HANDLE                                      hDevMemContext;         /*!< device memory context for mem debug */
 #endif
        union
        {
-               IMG_UINT32      reserved;       
+               IMG_UINT32      reserved;       /*!< Unused: ensures valid code in the case everything else is compiled out */
                PVRSRV_SGX_MISCINFO_FEATURES                                            sSGXFeatures;
                IMG_UINT32                                                                                      ui32SGXClockSpeed;
                PVRSRV_SGX_MISCINFO_ACTIVEPOWER                                         sActivePower;
@@ -323,12 +378,19 @@ typedef struct _SGX_MISC_INFO_
 } SGX_MISC_INFO;
 
 #if defined(SGX_FEATURE_2D_HARDWARE)
+/*
+ * The largest number of source sync objects that can be associated with a blit
+ * command.  Allows for src, pattern, and mask
+ */
 #define PVRSRV_MAX_BLT_SRC_SYNCS               3
 #endif
 
 
 #define SGX_KICKTA_DUMPBITMAP_MAX_NAME_LENGTH          256
 
+/*
+       Structure for dumping bitmaps
+*/
 typedef struct _SGX_KICKTA_DUMPBITMAP_
 {
        IMG_DEV_VIRTADDR        sDevBaseAddr;
@@ -343,9 +405,13 @@ typedef struct _SGX_KICKTA_DUMPBITMAP_
 
 #define PVRSRV_SGX_PDUMP_CONTEXT_MAX_BITMAP_ARRAY_SIZE (16)
 
+/*!
+ ******************************************************************************
+ * Data required only when dumping parameters
+ *****************************************************************************/
 typedef struct _PVRSRV_SGX_PDUMP_CONTEXT_
 {
-       
+       /* cache control word for micro kernel cache flush/invalidates */
        IMG_UINT32                                              ui32CacheControl;
 
 } PVRSRV_SGX_PDUMP_CONTEXT;
@@ -354,11 +420,11 @@ typedef struct _PVRSRV_SGX_PDUMP_CONTEXT_
 #if !defined (SUPPORT_SID_INTERFACE)
 typedef struct _SGX_KICKTA_DUMP_ROFF_
 {
-       IMG_HANDLE                      hKernelMemInfo;                                         
-       IMG_UINT32                      uiAllocIndex;                                           
-       IMG_UINT32                      ui32Offset;                                                     
-       IMG_UINT32                      ui32Value;                                                      
-       IMG_PCHAR                       pszName;                                                        
+       IMG_HANDLE                      hKernelMemInfo;                                         /*< Buffer handle */
+       IMG_UINT32                      uiAllocIndex;                                           /*< Alloc index for LDDM */
+       IMG_UINT32                      ui32Offset;                                                     /*< Byte offset to value to dump */
+       IMG_UINT32                      ui32Value;                                                      /*< Actual value to dump */
+       IMG_PCHAR                       pszName;                                                        /*< Name of buffer */
 } SGX_KICKTA_DUMP_ROFF, *PSGX_KICKTA_DUMP_ROFF;
 #endif
 
@@ -369,18 +435,20 @@ typedef struct _SGX_KICKTA_DUMP_BUFFER_
 #endif
 {
        IMG_UINT32                      ui32SpaceUsed;
-       IMG_UINT32                      ui32Start;                                                      
-       IMG_UINT32                      ui32End;                                                        
-       IMG_UINT32                      ui32BufferSize;                                         
-       IMG_UINT32                      ui32BackEndLength;                                      
+       IMG_UINT32                      ui32Start;                                                      /*< Byte offset of start to dump */
+       IMG_UINT32                      ui32End;                                                        /*< Byte offset of end of dump (non-inclusive) */
+       IMG_UINT32                      ui32BufferSize;                                         /*< Size of buffer */
+       IMG_UINT32                      ui32BackEndLength;                                      /*< Size of back end portion, if End < Start */
        IMG_UINT32                      uiAllocIndex;
-       IMG_HANDLE                      hKernelMemInfo;                                         
+       IMG_HANDLE                      hKernelMemInfo;                                         /*< MemInfo handle for the circular buffer */
        IMG_PVOID                       pvLinAddr;
 #if defined(SUPPORT_SGX_NEW_STATUS_VALS)
-       IMG_HANDLE                      hCtrlKernelMemInfo;                                     
-       IMG_DEV_VIRTADDR        sCtrlDevVAddr;                                          
+       IMG_HANDLE                      hCtrlKernelMemInfo;                                     /*< MemInfo handle for the control structure of the
+                                                                                                                               circular buffer */
+       IMG_DEV_VIRTADDR        sCtrlDevVAddr;                                          /*< Device virtual address of the memory in the 
+                                                                                                                               control structure to be checked */
 #endif
-       IMG_PCHAR                       pszName;                                                        
+       IMG_PCHAR                       pszName;                                                        /*< Name of buffer */
 #if defined (SUPPORT_SID_INTERFACE)
 } SGX_KICKTA_DUMP_BUFFER_KM, *PSGX_KICKTA_DUMP_BUFFER_KM;
 #else
@@ -389,25 +457,29 @@ typedef struct _SGX_KICKTA_DUMP_BUFFER_
 
 #if !defined (SUPPORT_SID_INTERFACE)
 #ifdef PDUMP
+/*
+       PDUMP version of above kick structure
+*/
 typedef struct _SGX_KICKTA_PDUMP_
 {
-       
+       // Bitmaps to dump
        PSGX_KICKTA_DUMPBITMAP          psPDumpBitmapArray;
        IMG_UINT32                                              ui32PDumpBitmapSize;
 
-       
+       // Misc buffers to dump (e.g. TA, PDS etc..)
        PSGX_KICKTA_DUMP_BUFFER psBufferArray;
        IMG_UINT32                                              ui32BufferArraySize;
 
-       
+       // Roffs to dump
        PSGX_KICKTA_DUMP_ROFF           psROffArray;
        IMG_UINT32                                              ui32ROffArraySize;
 } SGX_KICKTA_PDUMP, *PSGX_KICKTA_PDUMP;
-#endif 
-#endif 
+#endif /* PDUMP */
+#endif /* #if !defined (SUPPORT_SID_INTERFACE) */
 
 #if defined(TRANSFER_QUEUE)
 #if defined(SGX_FEATURE_2D_HARDWARE)
+/* Maximum size of ctrl stream for 2d blit command (in 32 bit words) */
 #define SGX_MAX_2D_BLIT_CMD_SIZE               26
 #define SGX_MAX_2D_SRC_SYNC_OPS                        3
 #endif
@@ -419,5 +491,8 @@ typedef struct _SGX_KICKTA_PDUMP_
 }
 #endif
 
-#endif 
+#endif /* __SGXAPI_KM_H__ */
 
+/******************************************************************************
+ End of file (sgxapi_km.h)
+******************************************************************************/
index df79e2f..94eb453 100755 (executable)
@@ -22,8 +22,7 @@
  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
  *
- ******************************************************************************/
-
+*****************************************************************************/
 #ifndef __SGXSCRIPT_H__
 #define __SGXSCRIPT_H__
 
@@ -77,5 +76,8 @@ typedef struct _SGX_INIT_SCRIPTS_
 }
 #endif
 
-#endif 
+#endif /* __SGXSCRIPT_H__ */
 
+/*****************************************************************************
+ End of file (sgxscript.h)
+*****************************************************************************/
index 51e080e..a5cc900 100755 (executable)
@@ -67,8 +67,8 @@ typedef PVRSRV_ERROR (*PFN_SWAP_TO_DC_BUFFER)(IMG_HANDLE,
                                                                                          IMG_RECT*);
 typedef PVRSRV_ERROR (*PFN_SWAP_TO_DC_SYSTEM)(IMG_HANDLE, IMG_HANDLE);
 typedef PVRSRV_ERROR (*PFN_GET_DC_FrontBuffer)(IMG_HANDLE,
-                                                                                          IMG_UINT32*,
-                                                                                          IMG_HANDLE*);
+                                                                                         IMG_UINT32*,
+                                                                                         IMG_HANDLE*);
 typedef IMG_VOID (*PFN_QUERY_SWAP_COMMAND_ID)(IMG_HANDLE, IMG_HANDLE, IMG_HANDLE, IMG_HANDLE, IMG_UINT16*, IMG_BOOL*);
 typedef IMG_VOID (*PFN_SET_DC_STATE)(IMG_HANDLE, IMG_UINT32);
 
@@ -93,7 +93,7 @@ typedef struct PVRSRV_DC_SRV2DISP_KMJTABLE_TAG
        PFN_SWAP_TO_DC_SYSTEM                   pfnSwapToDCSystem;
        PFN_SET_DC_STATE                                pfnSetDCState;
        PFN_QUERY_SWAP_COMMAND_ID               pfnQuerySwapCommandID;
-       PFN_GET_DC_FrontBuffer                  pfnGetDCFrontBuffer;
+       PFN_GET_DC_FrontBuffer                  pfnGetDCFrontBuffer;
 
 } PVRSRV_DC_SRV2DISP_KMJTABLE;
 
@@ -110,6 +110,13 @@ typedef PVRSRV_ERROR (*PFN_DC_REGISTER_POWER)(IMG_UINT32, PFN_PRE_POWER, PFN_POS
                                                                                          PFN_PRE_CLOCKSPEED_CHANGE, PFN_POST_CLOCKSPEED_CHANGE,
                                                                                          IMG_HANDLE, PVRSRV_DEV_POWER_STATE, PVRSRV_DEV_POWER_STATE);
 
+typedef struct _PVRSRV_KERNEL_MEM_INFO_* PDC_MEM_INFO;
+
+typedef PVRSRV_ERROR (*PFN_DC_MEMINFO_GET_CPU_VADDR)(PDC_MEM_INFO, IMG_CPU_VIRTADDR *pVAddr);
+typedef PVRSRV_ERROR (*PFN_DC_MEMINFO_GET_CPU_PADDR)(PDC_MEM_INFO, IMG_SIZE_T uByteOffset, IMG_CPU_PHYADDR *pPAddr);
+typedef PVRSRV_ERROR (*PFN_DC_MEMINFO_GET_BYTE_SIZE)(PDC_MEM_INFO, IMG_SIZE_T *uByteSize);
+typedef IMG_BOOL (*PFN_DC_MEMINFO_IS_PHYS_CONTIG)(PDC_MEM_INFO);
+
 typedef struct PVRSRV_DC_DISP2SRV_KMJTABLE_TAG
 {
        IMG_UINT32                                              ui32TableSize;
@@ -122,6 +129,11 @@ typedef struct PVRSRV_DC_DISP2SRV_KMJTABLE_TAG
        PFN_DC_REGISTER_SYS_ISR                 pfnPVRSRVRegisterSystemISRHandler;
        PFN_DC_REGISTER_POWER                   pfnPVRSRVRegisterPowerDevice;
        PFN_DC_CMD_COMPLETE                             pfnPVRSRVFreeCmdCompletePacket;
+       PFN_DC_MEMINFO_GET_CPU_VADDR    pfnPVRSRVDCMemInfoGetCpuVAddr;
+       PFN_DC_MEMINFO_GET_CPU_PADDR    pfnPVRSRVDCMemInfoGetCpuPAddr;
+       PFN_DC_MEMINFO_GET_BYTE_SIZE    pfnPVRSRVDCMemInfoGetByteSize;
+       PFN_DC_MEMINFO_IS_PHYS_CONTIG   pfnPVRSRVDCMemInfoIsPhysContig;
+
 } PVRSRV_DC_DISP2SRV_KMJTABLE, *PPVRSRV_DC_DISP2SRV_KMJTABLE;
 
 
@@ -150,6 +162,35 @@ typedef struct DISPLAYCLASS_FLIP_COMMAND_TAG
 
 } DISPLAYCLASS_FLIP_COMMAND;
 
+
+typedef struct DISPLAYCLASS_FLIP_COMMAND2_TAG
+{
+
+       IMG_HANDLE hExtDevice;
+
+
+       IMG_HANDLE hExtSwapChain;
+
+
+       IMG_HANDLE hUnused;
+
+
+       IMG_UINT32 ui32SwapInterval;
+
+
+       IMG_PVOID  pvPrivData;
+
+
+       IMG_UINT32 ui32PrivDataLength;
+
+
+       PDC_MEM_INFO *ppsMemInfos;
+
+
+       IMG_UINT32 ui32NumMemInfos;
+
+} DISPLAYCLASS_FLIP_COMMAND2;
+
 #define DC_FLIP_COMMAND                0
 
 #define DC_STATE_NO_FLUSH_COMMANDS             0
index 55d55bc..2b2969f 100755 (executable)
@@ -168,9 +168,10 @@ extern "C" {
 #define PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY               PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+11)
 #define PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS            PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+12)
 #define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+13)
-#define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14)
-#define PVRSRV_BRIDGE_GET_DISPCLASS_FRONT_BUFFER               PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+15)
-#define PVRSRV_BRIDGE_DISPCLASS_CMD_LAST               (PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+15)
+#define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER2        PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14)
+#define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+15)
+#define PVRSRV_BRIDGE_GET_DISPCLASS_FRONT_BUFFER               PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+16)
+#define PVRSRV_BRIDGE_DISPCLASS_CMD_LAST               (PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+16)
 
 #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)
@@ -411,6 +412,8 @@ typedef struct PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM_TAG
        IMG_UINT32                      ui32Attribs;
        IMG_SIZE_T                      ui32Size;
        IMG_SIZE_T                      ui32Alignment;
+       IMG_PVOID                       pvPrivData;
+       IMG_UINT32                      ui32PrivDataLength;
 
 }PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM;
 
@@ -1149,7 +1152,7 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS_TAG
 #else
        IMG_HANDLE                      ahBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS];
 #endif
-
+       IMG_SYS_PHYADDR         asPhyAddr[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS];
 } PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS;
 
 
@@ -1174,6 +1177,26 @@ typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER_TAG
 
 } PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER;
 
+typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER2_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                      ui32SwapInterval;
+
+       IMG_UINT32                      ui32NumMemInfos;
+       PVRSRV_KERNEL_MEM_INFO  **ppsKernelMemInfos;
+       PVRSRV_KERNEL_SYNC_INFO **ppsKernelSyncInfos;
+
+       IMG_UINT32                      ui32PrivDataLength;
+       IMG_PVOID                       pvPrivData;
+
+} PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER2;
 
 typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM_TAG
 {
@@ -1208,7 +1231,7 @@ typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_FRONT_BUFFER_TAG
 } PVRSRV_BRIDGE_OUT_GET_DISPCLASS_FRONT_BUFFER;
 
 
+
 typedef struct PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE_TAG
 {
        IMG_UINT32                      ui32BridgeFlags; 
@@ -1697,6 +1720,7 @@ typedef struct PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS_TAG
        
        IMG_UINT32 ui32ReadOpsPending;
        IMG_UINT32 ui32WriteOpsPending;
+       IMG_UINT32 ui32ReadOps2Pending;
 
 } PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS;
 
@@ -1717,6 +1741,7 @@ typedef struct PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN_TAG
 
        IMG_UINT32 ui32ReadOpsPending;
        IMG_UINT32 ui32WriteOpsPending;
+       IMG_UINT32 ui32ReadOps2Pending;
 
 } PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN;
 
@@ -1730,6 +1755,7 @@ typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN_TAG
 #endif
        IMG_UINT32 ui32ReadOpsPendingSnapshot;
        IMG_UINT32 ui32WriteOpsPendingSnapshot;
+       IMG_UINT32 ui32ReadOps2PendingSnapshot;
 } PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN;
 
 typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ_TAG
index 6b01e64..da36fba 100755 (executable)
@@ -103,17 +103,19 @@ PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE                                      hDevCookie,
                                                                                                 IMG_UINT32                                     ui32Flags,
                                                                                                 IMG_SIZE_T                                     ui32Size,
                                                                                                 IMG_SIZE_T                                     ui32Alignment,
+                                                                                                IMG_PVOID                                      pvPrivData,
+                                                                                                IMG_UINT32                                     ui32PrivDataLength,
                                                                                                 PVRSRV_KERNEL_MEM_INFO         **ppsMemInfo);
 
 
 #if defined(PVRSRV_LOG_MEMORY_ALLOCS)
-       #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \
+       #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, memInfo, logStr) \
                (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \
                        ", " #alignment "," #memInfo "): " logStr " (size = 0x%x)", size)),\
-                       _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo))
+                       _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, memInfo))
 #else
-       #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \
-                       _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo)
+       #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, memInfo, logStr) \
+                       _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, memInfo)
 #endif
 
 
@@ -223,7 +225,8 @@ IMG_IMPORT
 PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE   hDeviceKM,
                                                                  IMG_HANDLE    hSwapChain,
                                                                  IMG_UINT32    *pui32BufferCount,
-                                                                 IMG_HANDLE    *phBuffer);
+                                                                 IMG_HANDLE    *phBuffer,
+                                                                 IMG_SYS_PHYADDR *psPhyAddr);
 IMG_IMPORT
 PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM,
                                                                        IMG_HANDLE      hBuffer,
@@ -232,13 +235,23 @@ PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE    hDeviceKM,
                                                                        IMG_UINT32      ui32ClipRectCount,
                                                                        IMG_RECT        *psClipRect);
 IMG_IMPORT
+PVRSRV_ERROR PVRSRVSwapToDCBuffer2KM(IMG_HANDLE        hDeviceKM,
+                                                                        IMG_HANDLE     hBuffer,
+                                                                        IMG_UINT32     ui32SwapInterval,
+                                                                        PVRSRV_KERNEL_MEM_INFO **ppsMemInfos,
+                                                                        PVRSRV_KERNEL_SYNC_INFO **ppsSyncInfos,
+                                                                        IMG_UINT32     ui32NumMemSyncInfos,
+                                                                        IMG_PVOID      pvPrivData,
+                                                                        IMG_UINT32     ui32PrivDataLength);
+IMG_IMPORT
 PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM,
                                                                        IMG_HANDLE      hSwapChain);
 IMG_EXPORT
-PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE       hDeviceKM,
+PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE hDeviceKM,
                                                                        IMG_UINT32              *pui32BufferIndex,
                                                                        IMG_UINT32              *pui32FlipChainID);
 
+
 IMG_IMPORT
 PVRSRV_ERROR PVRSRVOpenBCDeviceKM(PVRSRV_PER_PROCESS_DATA      *psPerProc,
                                                                  IMG_UINT32                            ui32DeviceID,
index 813a391..e038970 100755 (executable)
@@ -136,6 +136,9 @@ typedef struct _PVRSRV_KERNEL_SYNC_INFO_
        
        IMG_DEV_VIRTADDR                sReadOpsCompleteDevVAddr;
 
+
+       IMG_DEV_VIRTADDR                sReadOps2CompleteDevVAddr;
+
        
        PVRSRV_KERNEL_MEM_INFO  *psSyncDataMemInfoKM;
 
@@ -157,6 +160,8 @@ typedef struct _PVRSRV_DEVICE_SYNC_OBJECT_
        IMG_DEV_VIRTADDR        sReadOpsCompleteDevVAddr;
        IMG_UINT32                      ui32WriteOpsPendingVal;
        IMG_DEV_VIRTADDR        sWriteOpsCompleteDevVAddr;
+       IMG_UINT32                      ui32ReadOps2PendingVal;
+       IMG_DEV_VIRTADDR        sReadOps2CompleteDevVAddr;
 } PVRSRV_DEVICE_SYNC_OBJECT;
 
 typedef struct _PVRSRV_SYNC_OBJECT
@@ -164,6 +169,7 @@ typedef struct _PVRSRV_SYNC_OBJECT
        PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfoKM;
        IMG_UINT32                              ui32WriteOpsPending;
        IMG_UINT32                              ui32ReadOpsPending;
+       IMG_UINT32                              ui32ReadOps2Pending;
 
 }PVRSRV_SYNC_OBJECT, *PPVRSRV_SYNC_OBJECT;
 
@@ -179,6 +185,8 @@ typedef struct _PVRSRV_COMMAND
        IMG_SIZE_T                      uDataSize;              
        IMG_UINT32                      ui32ProcessID;          
        IMG_VOID                        *pvData;                        
+       PFN_QUEUE_COMMAND_COMPLETE  pfnCommandComplete;
+       IMG_HANDLE                                      hCallbackData;
 }PVRSRV_COMMAND, *PPVRSRV_COMMAND;
 
 
@@ -248,7 +256,7 @@ typedef struct _PVRSRV_MISC_INFO_KM_
        
        IMG_UINT32      aui32DDKVersion[4];
 
-       
+
        struct
        {
                
@@ -257,6 +265,7 @@ typedef struct _PVRSRV_MISC_INFO_KM_
                
                PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType;
 
+
                PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
 
                
@@ -265,6 +274,16 @@ typedef struct _PVRSRV_MISC_INFO_KM_
                
                IMG_UINT32      ui32Length;
        } sCacheOpCtl;
+
+
+       struct
+       {
+
+               PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+
+
+               IMG_UINT32 ui32RefCount;
+       } sGetRefCountCtl;
 } PVRSRV_MISC_INFO_KM;
 
 
@@ -302,48 +321,20 @@ typedef struct PVRSRV_CLIENT_DEVICECLASS_INFO_TAG
 } PVRSRV_CLIENT_DEVICECLASS_INFO;
 
 
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVGetWriteOpsPending)
-#endif
-static INLINE
-IMG_UINT32 PVRSRVGetWriteOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp)
+typedef enum
 {
-       IMG_UINT32 ui32WriteOpsPending;
-
-       if(bIsReadOp)
-       {
-               ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending;
-       }
-       else
-       {
-               
-
-
-               ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending++;
-       }
-
-       return ui32WriteOpsPending;
+       PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR,
+       PVRSRV_FREE_CALLBACK_ORIGIN_IMPORTER,
+       PVRSRV_FREE_CALLBACK_ORIGIN_EXTERNAL,
 }
+PVRSRV_FREE_CALLBACK_ORIGIN;
 
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVGetReadOpsPending)
-#endif
-static INLINE
-IMG_UINT32 PVRSRVGetReadOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp)
-{
-       IMG_UINT32 ui32ReadOpsPending;
 
-       if(bIsReadOp)
-       {
-               ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOpsPending++;
-       }
-       else
-       {
-               ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOpsPending;
-       }
+IMG_IMPORT
+PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
+                                   IMG_UINT32 ui32Param,
+                                   PVRSRV_FREE_CALLBACK_ORIGIN eCallbackOrigin);
 
-       return ui32ReadOpsPending;
-}
 
 IMG_IMPORT
 PVRSRV_ERROR PVRSRVQueueCommand(IMG_HANDLE hQueueInfo,
index d5cffdb..535c2de 100755 (executable)
@@ -228,6 +228,7 @@ typedef struct _SGXMKIF_HWDEVICE_SYNC_LIST_
 
 #define PVRSRV_USSE_EDM_INTERRUPT_HWR                  (1UL << 0)      
 #define PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER (1UL << 1)      
+#define PVRSRV_USSE_EDM_INTERRUPT_IDLE                 (1UL << 2)
 
 #define PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE    (1UL << 0)      
 
index c72e8ce..c32dc31 100755 (executable)
@@ -75,6 +75,9 @@ typedef struct _SGX_BRIDGE_INIT_INFO_
        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;
@@ -82,6 +85,9 @@ typedef struct _SGX_BRIDGE_INIT_INFO_
        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
 
@@ -155,6 +161,10 @@ typedef struct _SGX_BRIDGE_INIT_INFO_
        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;
@@ -169,13 +179,6 @@ typedef struct _SGX_BRIDGE_INIT_INFO_
        IMG_HANDLE hKernelTmpRgnHeaderMemInfo;
 #endif
 #endif
-#if defined(SGX_FEATURE_SPM_MODE_0)
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_SID         hKernelTmpDPMStateMemInfo;
-#else
-       IMG_HANDLE hKernelTmpDPMStateMemInfo;
-#endif
-#endif
 
        IMG_UINT32 ui32EDMTaskReg0;
        IMG_UINT32 ui32EDMTaskReg1;
index d1fe308..e063aba 100755 (executable)
@@ -68,7 +68,7 @@
 #endif
 
 
-#include "srvkm.h" 
+#include "srvkm.h"
 
 PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY g_BridgeDispatchTable[BRIDGE_DISPATCH_TABLE_ENTRY_COUNT];
 
@@ -87,767 +87,782 @@ 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;
+       IMG_HANDLE hDevCookieInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO);
+       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 =
+               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);
+       
+               psAcquireDevInfoOUT->eError =
+               PVRSRVAllocHandle(psPerProc->psHandleBase,
+                                                 &psAcquireDevInfoOUT->hDevCookie,
+                                                 hDevCookieInt,
+                                                 PVRSRV_HANDLE_TYPE_DEV_NODE,
+                                                 PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
 
-    return 0;
+       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;
+       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];
+       PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS];
 #endif
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT);
+       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);
-
-    if(psCreateDevMemContextOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
-
-    psCreateDevMemContextOUT->eError =
-        PVRSRVCreateDeviceMemContextKM(hDevCookieInt,
-                                       psPerProc,
-                                       &hDevMemContextInt,
-                                       &psCreateDevMemContextOUT->ui32ClientHeapCount,
+       
+       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);
+
+       if(psCreateDevMemContextOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
+
+       psCreateDevMemContextOUT->eError =
+               PVRSRVCreateDeviceMemContextKM(hDevCookieInt,
+                                                                          psPerProc,
+                                                                          &hDevMemContextInt,
+                                                                          &psCreateDevMemContextOUT->ui32ClientHeapCount,
 #if defined (SUPPORT_SID_INTERFACE)
-                                       &asHeapInfo[0],
+                                                                          &asHeapInfo[0],
 #else
-                                       &psCreateDevMemContextOUT->sHeapInfo[0],
+                                                                          &psCreateDevMemContextOUT->sHeapInfo[0],
 #endif
-                                       &bCreated,
-                                       pbSharedDeviceMemHeap);
+                                                                          &bCreated,
+                                                                          pbSharedDeviceMemHeap);
 
-    if(psCreateDevMemContextOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       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(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;
+               IMG_SID hDevMemHeapExt;
 #else
-        IMG_HANDLE hDevMemHeapExt;
+               IMG_HANDLE hDevMemHeapExt;
 #endif
 
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
-        if(abSharedDeviceMemHeap[i])
+               if(abSharedDeviceMemHeap[i])
 #endif
-        {
-            
+               {
+                       
 #if defined (SUPPORT_SID_INTERFACE)
-            PVRSRVAllocHandleNR(psPerProc->psHandleBase,
-                              &hDevMemHeapExt,
-                              asHeapInfo[i].hDevMemHeap,
-                              PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
-                              PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
+                       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);
+                       PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt,
+                                                               psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap,
+                                                               PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
+                                                               PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
 #endif
-        }
+               }
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
-        else
-        {
-            
-            if(bCreated)
-            {
+               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);
+                               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);
+                               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,
+                       }
+                       else
+                       {
+                               psCreateDevMemContextOUT->eError =
+                                       PVRSRVFindHandle(psPerProc->psHandleBase,
+                                                                        &hDevMemHeapExt,
 #if defined (SUPPORT_SID_INTERFACE)
-                                     asHeapInfo[i].hDevMemHeap,
+                                                                        asHeapInfo[i].hDevMemHeap,
 #else
-                                   psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap,
+                                                                        psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap,
 #endif
-                                     PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
-                if(psCreateDevMemContextOUT->eError != PVRSRV_OK)
-                {
-                    return 0;
-                }
-            }
-        }
+                                                                        PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
+                               if(psCreateDevMemContextOUT->eError != PVRSRV_OK)
+                               {
+                                       return 0;
+                               }
+                       }
+               }
 #endif
-        psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap      = hDevMemHeapExt;
+               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;
+               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);
-    }
+       IMG_HANDLE hDevCookieInt;
+       IMG_HANDLE hDevMemContextInt;
+       IMG_BOOL bDestroyed;
 
-    return 0;
+       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];
+       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->eError =
+               PVRSRVGetDeviceMemHeapInfoKM(hDevCookieInt,
+                                                                          hDevMemContextInt,
+                                                                          &psGetDevMemHeapInfoOUT->ui32ClientHeapCount,
 #if defined (SUPPORT_SID_INTERFACE)
                                        &asHeapInfo[0],
 #else
-                                       &psGetDevMemHeapInfoOUT->sHeapInfo[0],
+                                                                          &psGetDevMemHeapInfoOUT->sHeapInfo[0],
 #endif
-                                       pbSharedDeviceMemHeap);
+                                                                          pbSharedDeviceMemHeap);
 
-    if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    for(i = 0; i < psGetDevMemHeapInfoOUT->ui32ClientHeapCount; i++)
-    {
+       for(i = 0; i < psGetDevMemHeapInfoOUT->ui32ClientHeapCount; i++)
+       {
 #if defined (SUPPORT_SID_INTERFACE)
-        IMG_SID hDevMemHeapExt;
+               IMG_SID hDevMemHeapExt;
 #else
-        IMG_HANDLE hDevMemHeapExt;
+               IMG_HANDLE hDevMemHeapExt;
 #endif
 
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
-        if(abSharedDeviceMemHeap[i])
+               if(abSharedDeviceMemHeap[i])
 #endif
-        {
-            
+               {
+                       
 #if defined (SUPPORT_SID_INTERFACE)
-            PVRSRVAllocHandleNR(psPerProc->psHandleBase,
-                                &hDevMemHeapExt,
-                                asHeapInfo[i].hDevMemHeap,
-                                PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
-                                PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
+                       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);
+                       PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt,
+                                                         psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap,
+                                                         PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
+                                                         PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
 #endif
-        }
+               }
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
-        else
-        {
-            
-            psGetDevMemHeapInfoOUT->eError =
-                PVRSRVFindHandle(psPerProc->psHandleBase,
-                                 &hDevMemHeapExt,
+               else
+               {
+                       
+                       psGetDevMemHeapInfoOUT->eError =
+                               PVRSRVFindHandle(psPerProc->psHandleBase,
+                                                                &hDevMemHeapExt,
 #if defined (SUPPORT_SID_INTERFACE)
-                                 asHeapInfo[i].hDevMemHeap,
+                                                                asHeapInfo[i].hDevMemHeap,
 #else
-                                 psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap,
+                                                                psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap,
 #endif
-                                 PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
-            if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK)
-            {
-                return 0;
-            }
-        }
+                                                                PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
+                       if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK)
+                       {
+                               return 0;
+                       }
+               }
 #endif
-        psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap      = hDevMemHeapExt;
+               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;
+               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;
-    IMG_UINT32 ui32ShareIndex;
-    IMG_BOOL bUseShareMemWorkaround;
+       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);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_DEVICEMEM);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc, 2)
+       NEW_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc, 2)
 
-    psAllocDeviceMemOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt,
-                           psAllocDeviceMemIN->hDevCookie,
-                           PVRSRV_HANDLE_TYPE_DEV_NODE);
+       psAllocDeviceMemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt,
+                                                  psAllocDeviceMemIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
 
-    if(psAllocDeviceMemOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psAllocDeviceMemOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    psAllocDeviceMemOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemHeapInt,
-                           psAllocDeviceMemIN->hDevMemHeap,
-                           PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
+       psAllocDeviceMemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemHeapInt,
+                                                  psAllocDeviceMemIN->hDevMemHeap,
+                                                  PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
 
-    if(psAllocDeviceMemOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       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);
-    }
+       bUseShareMemWorkaround = ((psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_XPROC) != 0) ? IMG_TRUE : IMG_FALSE;
+       ui32ShareIndex = 7654321; 
 
-    if(psAllocDeviceMemOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if (bUseShareMemWorkaround)
+       {
+               
+               
+
+               psAllocDeviceMemOUT->eError =
+                       BM_XProcWorkaroundFindNewBufferAndSetShareIndex(&ui32ShareIndex);
+               if(psAllocDeviceMemOUT->eError != PVRSRV_OK)
+               {
+                       return 0;
+               }
+       }
+
+       
+       if(psAllocDeviceMemIN->pvPrivData)
+       {
+               if(!OSAccessOK(PVR_VERIFY_READ,
+                                          psAllocDeviceMemIN->pvPrivData,
+                                          psAllocDeviceMemIN->ui32PrivDataLength))
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocDeviceMemBW: Access check failed for pvPrivData"));
+                       return -EFAULT;
+               }
+       }
 
-    psMemInfo->sShareMemWorkaround.bInUse = bUseShareMemWorkaround;
-    if (bUseShareMemWorkaround)
-    {
+       psAllocDeviceMemOUT->eError =
+               PVRSRVAllocDeviceMemKM(hDevCookieInt,
+                                                          psPerProc,
+                                                          hDevMemHeapInt,
+                                                          psAllocDeviceMemIN->ui32Attribs,
+                                                          psAllocDeviceMemIN->ui32Size,
+                                                          psAllocDeviceMemIN->ui32Alignment,
+                                                          psAllocDeviceMemIN->pvPrivData,
+                                                          psAllocDeviceMemIN->ui32PrivDataLength,
+                                                          &psMemInfo,
+                                                          "" );
+
+       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;
-    }
+               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));
+       OSMemSet(&psAllocDeviceMemOUT->sClientMemInfo,
+                        0,
+                        sizeof(psAllocDeviceMemOUT->sClientMemInfo));
 
-    psAllocDeviceMemOUT->sClientMemInfo.pvLinAddrKM =
-            psMemInfo->pvLinAddrKM;
+       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;
+       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;
+       psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle;
 #endif
 
-    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;
-    }
+       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
 
-    if(psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_NO_SYNCOBJ)
-    {
-        
-        OSMemSet(&psAllocDeviceMemOUT->sClientSyncInfo,
-                 0,
-                 sizeof (PVRSRV_CLIENT_SYNC_INFO));
-        psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = IMG_NULL;
-    }
-    else
-    {
-        
+       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;
+               psAllocDeviceMemOUT->sClientSyncInfo.psSyncData =
+                       psMemInfo->psKernelSyncInfo->psSyncData;
+               psAllocDeviceMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+               psAllocDeviceMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+               psAllocDeviceMemOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
 
 #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;
-        }
+               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;
+               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 =
+       psRetOUT->eError =
         PVRSRVLookupHandle(psPerProc->psHandleBase,
                            &pvKernelMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psFreeDeviceMemIN->hKernelMemInfo,
+                                                  psFreeDeviceMemIN->hKernelMemInfo,
 #else
-                           psFreeDeviceMemIN->psKernelMemInfo,
+                                                  psFreeDeviceMemIN->psKernelMemInfo,
 #endif
-                           PVRSRV_HANDLE_TYPE_MEM_INFO);
+                                                  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,
+       psRetOUT->eError =
+               PVRSRVReleaseHandle(psPerProc->psHandleBase,
 #if defined (SUPPORT_SID_INTERFACE)
-                            psFreeDeviceMemIN->hKernelMemInfo,
+                                                       psFreeDeviceMemIN->hKernelMemInfo,
 #else
-                            psFreeDeviceMemIN->psKernelMemInfo,
+                                                       psFreeDeviceMemIN->psKernelMemInfo,
 #endif
-                            PVRSRV_HANDLE_TYPE_MEM_INFO);
+                                                       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;
+       IMG_HANDLE hDevCookieInt;
 #if defined (SUPPORT_SID_INTERFACE)
-    PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL;
+       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL;
 #else
-    PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
 #endif
 
-    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);
+       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 =
+       
+       psExportDeviceMemOUT->eError =
         PVRSRVLookupHandle(psPerProc->psHandleBase,
                            &hDevCookieInt,
-                           psExportDeviceMemIN->hDevCookie,
-                           PVRSRV_HANDLE_TYPE_DEV_NODE);
+                                                  psExportDeviceMemIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
 
-    if(psExportDeviceMemOUT->eError != PVRSRV_OK)
-    {
-        PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find devcookie"));
-        return 0;
-    }
+       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,
+       
+       psExportDeviceMemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_PVOID *)&psKernelMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psExportDeviceMemIN->hKernelMemInfo,
+                                                  psExportDeviceMemIN->hKernelMemInfo,
 #else
-                           psExportDeviceMemIN->psKernelMemInfo,
+                                                  psExportDeviceMemIN->psKernelMemInfo,
 #endif
-                           PVRSRV_HANDLE_TYPE_MEM_INFO);
+                                                  PVRSRV_HANDLE_TYPE_MEM_INFO);
 
-    if(psExportDeviceMemOUT->eError != PVRSRV_OK)
-    {
-        PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find kernel meminfo"));
-        return 0;
-    }
+       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 =
+               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;
-    }
+       
+       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;
+       
+       psKernelMemInfo->ui32Flags |= PVRSRV_MEM_EXPORTED;
 
-    return 0;
+       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;
-
-    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;
-    }
+       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;
-    }
+       
+       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."));
+       
+       if (psSrcKernelMemInfo->sShareMemWorkaround.bInUse)
+       {
+               PVR_DPF((PVR_DBG_MESSAGE, "using the mem wrap workaround."));
 
-        
+               
 
 
 
@@ -855,672 +870,681 @@ PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID,
 
 
 
-        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 = 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,
-                                   "" );
-        
+               psMapDevMemOUT->eError =
+                       PVRSRVAllocDeviceMemKM(psSrcKernelMemInfo->sShareMemWorkaround.hDevCookieInt,
+                                                                  psPerProc,
+                                                                  hDstDevMemHeap,
+                                                                  psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAttribs | PVRSRV_MEM_NO_SYNCOBJ,
+                                                                  psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqSize,
+                                                                  psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAlignment,
+                                                                  IMG_NULL,
+                                                                  0,
+                                                                  &psDstKernelMemInfo,
+                                                                  "" );
+               
 
-        BM_XProcWorkaroundUnsetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex);
-        if(psMapDevMemOUT->eError != PVRSRV_OK)
-        {
-            PVR_DPF((PVR_DBG_ERROR, "lakjgfgewjlrgebhe"));
-            return 0;
-        }
+               BM_XProcWorkaroundUnsetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex);
+               if(psMapDevMemOUT->eError != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVMapDeviceMemoryBW: Failed to create allocation for cross-process memory map"));
+                       return 0;
+               }
 
-        if(psSrcKernelMemInfo->psKernelSyncInfo)
-        {
-            psSrcKernelMemInfo->psKernelSyncInfo->ui32RefCount++;
-        }
+               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->psKernelSyncInfo = psSrcKernelMemInfo->psKernelSyncInfo;
+       }
+       else
+       {
+               
+               psMapDevMemOUT->eError = PVRSRVMapDeviceMemoryKM(psPerProc,
+                                                                                                                psSrcKernelMemInfo,
+                                                                                                                hDstDevMemHeap,
+                                                                                                                &psDstKernelMemInfo);
+               if(psMapDevMemOUT->eError != PVRSRV_OK)
+               {
+                       return 0;
+               }
+       }
 
-    
-    psDstKernelMemInfo->sShareMemWorkaround = psSrcKernelMemInfo->sShareMemWorkaround;
+       
+       psDstKernelMemInfo->sShareMemWorkaround = psSrcKernelMemInfo->sShareMemWorkaround;
 
-    OSMemSet(&psMapDevMemOUT->sDstClientMemInfo,
-             0,
-             sizeof(psMapDevMemOUT->sDstClientMemInfo));
-    OSMemSet(&psMapDevMemOUT->sDstClientSyncInfo,
-             0,
-             sizeof(psMapDevMemOUT->sDstClientSyncInfo));
+       OSMemSet(&psMapDevMemOUT->sDstClientMemInfo,
+                        0,
+                        sizeof(psMapDevMemOUT->sDstClientMemInfo));
+       OSMemSet(&psMapDevMemOUT->sDstClientSyncInfo,
+                        0,
+                        sizeof(psMapDevMemOUT->sDstClientSyncInfo));
 
-    psMapDevMemOUT->sDstClientMemInfo.pvLinAddrKM =
-            psDstKernelMemInfo->pvLinAddrKM;
+       psMapDevMemOUT->sDstClientMemInfo.pvLinAddrKM =
+                       psDstKernelMemInfo->pvLinAddrKM;
 
-    psMapDevMemOUT->sDstClientMemInfo.pvLinAddr = 0;
-    psMapDevMemOUT->sDstClientMemInfo.sDevVAddr = psDstKernelMemInfo->sDevVAddr;
-    psMapDevMemOUT->sDstClientMemInfo.ui32Flags = psDstKernelMemInfo->ui32Flags;
+       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;
+       psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = psDstKernelMemInfo->sMemBlk.hOSMemHandle;
 #endif
 
-    
-    PVRSRVAllocHandleNR(psPerProc->psHandleBase,
-                      &psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo,
-                      psDstKernelMemInfo,
-                      PVRSRV_HANDLE_TYPE_MEM_INFO,
-                      PVRSRV_HANDLE_ALLOC_FLAG_NONE);
-    psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo = IMG_NULL;
+       
+       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;
-    }
+       
+       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
 
-    
-    if(psDstKernelMemInfo->psKernelSyncInfo)
-    {
+       
+       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;
+               psMapDevMemOUT->sDstClientSyncInfo.psSyncData =
+                       psDstKernelMemInfo->psKernelSyncInfo->psSyncData;
+               psMapDevMemOUT->sDstClientSyncInfo.sWriteOpsCompleteDevVAddr =
+                       psDstKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+               psMapDevMemOUT->sDstClientSyncInfo.sReadOpsCompleteDevVAddr =
+                       psDstKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+               psMapDevMemOUT->sDstClientSyncInfo.sReadOps2CompleteDevVAddr =
+                       psDstKernelMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
 
 #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;
-        }
+               
+               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;
+               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,
+       psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                                                       (IMG_VOID**)&psKernelMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                                            psUnmapDevMemIN->hKernelMemInfo,
+                                                                                       psUnmapDevMemIN->hKernelMemInfo,
 #else
-                                            psUnmapDevMemIN->psKernelMemInfo,
+                                                                                       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,
+                                                                                       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,
+                                                       psUnmapDevMemIN->hKernelMemInfo,
 #else
-                            psUnmapDevMemIN->psKernelMemInfo,
+                                                       psUnmapDevMemIN->psKernelMemInfo,
 #endif
-                            PVRSRV_HANDLE_TYPE_MEM_INFO);
+                                                       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_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);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc, 2)
+       NEW_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc, 2)
 
-    
-    psMapDevClassMemOUT->eError =
+       
+       psMapDevClassMemOUT->eError =
         PVRSRVLookupHandleAnyType(psPerProc->psHandleBase,
-                                  &hDeviceClassBufferInt,
-                                  &eHandleType,
-                                  psMapDevClassMemIN->hDeviceClassBuffer);
+                                                                 &hDeviceClassBufferInt,
+                                                                 &eHandleType,
+                                                                 psMapDevClassMemIN->hDeviceClassBuffer);
 
-    if(psMapDevClassMemOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psMapDevClassMemOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    
-    psMapDevClassMemOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           &hDevMemContextInt,
-                           psMapDevClassMemIN->hDevMemContext,
-                           PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT);
+       
+       psMapDevClassMemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                  &hDevMemContextInt,
+                                  psMapDevClassMemIN->hDevMemContext,
+                                  PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT);
 
-    if(psMapDevClassMemOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psMapDevClassMemOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    
-    switch(eHandleType)
-    {
+       
+       switch(eHandleType)
+       {
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
-       case PVRSRV_HANDLE_TYPE_DISP_BUFFER:
-        case PVRSRV_HANDLE_TYPE_BUF_BUFFER:
+               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;
+                       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;
-    }
+       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;
+       psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle;
 #endif
 
-    PVRSRVAllocSubHandleNR(psPerProc->psHandleBase,
-                      &psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo,
-                      psMemInfo,
-                      PVRSRV_HANDLE_TYPE_MEM_INFO,
-                      PVRSRV_HANDLE_ALLOC_FLAG_NONE,
-                      psMapDevClassMemIN->hDeviceClassBuffer);
+       PVRSRVAllocSubHandleNR(psPerProc->psHandleBase,
+                                         &psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo,
+                                         psMemInfo,
+                                         PVRSRV_HANDLE_TYPE_MEM_INFO,
+                                         PVRSRV_HANDLE_ALLOC_FLAG_NONE,
+                                         psMapDevClassMemIN->hDeviceClassBuffer);
 
-    psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo = IMG_NULL;
+       psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo = IMG_NULL;
 
-    
-    if(psMemInfo->psKernelSyncInfo)
-    {
+       
+       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;
+               psMapDevClassMemOUT->sClientSyncInfo.psSyncData =
+                       psMemInfo->psKernelSyncInfo->psSyncData;
+               psMapDevClassMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+               psMapDevClassMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+               psMapDevClassMemOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+                       psMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
 
 #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;
-        }
+               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;
+               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,
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase, &pvKernelMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psUnmapDevClassMemIN->hKernelMemInfo,
+                                                  psUnmapDevClassMemIN->hKernelMemInfo,
 #else
-                           psUnmapDevClassMemIN->psKernelMemInfo,
+                                                  psUnmapDevClassMemIN->psKernelMemInfo,
 #endif
-                           PVRSRV_HANDLE_TYPE_MEM_INFO);
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+                                                  PVRSRV_HANDLE_TYPE_MEM_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    psRetOUT->eError = PVRSRVUnmapDeviceClassMemoryKM(pvKernelMemInfo);
+       psRetOUT->eError = PVRSRVUnmapDeviceClassMemoryKM(pvKernelMemInfo);
 
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    psRetOUT->eError =
-        PVRSRVReleaseHandle(psPerProc->psHandleBase,
+       psRetOUT->eError =
+               PVRSRVReleaseHandle(psPerProc->psHandleBase,
 #if defined (SUPPORT_SID_INTERFACE)
-                            psUnmapDevClassMemIN->hKernelMemInfo,
+                                                       psUnmapDevClassMemIN->hKernelMemInfo,
 #else
-                            psUnmapDevClassMemIN->psKernelMemInfo,
+                                                       psUnmapDevClassMemIN->psKernelMemInfo,
 #endif
-                            PVRSRV_HANDLE_TYPE_MEM_INFO);
+                                                       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)
+                                         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_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);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_WRAP_EXT_MEMORY);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc, 2)
+       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, &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->eError =
+       PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt,
+                                  psWrapExtMemIN->hDevMemContext,
+                                  PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT);
 
-    
-    psWrapExtMemOUT->sClientMemInfo.pvLinAddr = 0;
-    psWrapExtMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr;
-    psWrapExtMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags;
+       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;
+       psWrapExtMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle;
 #endif
 
-    PVRSRVAllocHandleNR(psPerProc->psHandleBase,
-                      &psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo,
-                      psMemInfo,
-                      PVRSRV_HANDLE_TYPE_MEM_INFO,
-                      PVRSRV_HANDLE_ALLOC_FLAG_NONE);
+       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;
-    }
+       
+       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
 
-    
+       
 #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;
+       psWrapExtMemOUT->sClientSyncInfo.psSyncData =
+               psMemInfo->psKernelSyncInfo->psSyncData;
+       psWrapExtMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr =
+               psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+       psWrapExtMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr =
+               psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+       psWrapExtMemOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+               psMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
 
 #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;
-    }
+       
+       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;
+       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;
+       IMG_VOID *pvMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvMemInfo,
+                                                  psUnwrapExtMemIN->hKernelMemInfo,
+                                                  PVRSRV_HANDLE_TYPE_MEM_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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);
+       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);
+       psMMapDataOUT->eError =
+               PVRMMapOSMemHandleToMMapData(psPerProc,
+                                                                               psMMapDataIN->hMHandle,
+                                                                               &psMMapDataOUT->ui32MMapOffset,
+                                                                               &psMMapDataOUT->ui32ByteOffset,
+                                                                               &psMMapDataOUT->ui32RealByteSize,
+                                                                               &psMMapDataOUT->ui32UserVAddr);
 #else
-    PVR_UNREFERENCED_PARAMETER(psPerProc);
-    PVR_UNREFERENCED_PARAMETER(psMMapDataIN);
+       PVR_UNREFERENCED_PARAMETER(psPerProc);
+       PVR_UNREFERENCED_PARAMETER(psMMapDataIN);
 
-    psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED;
+       psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED;
 #endif
-    return 0;
+       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);
+       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);
+       psMMapDataOUT->eError =
+               PVRMMapReleaseMMapData(psPerProc,
+                                                                               psMMapDataIN->hMHandle,
+                                                                               &psMMapDataOUT->bMUnmap,
+                                                                               &psMMapDataOUT->ui32RealByteSize,
+                                                                               &psMMapDataOUT->ui32UserVAddr);
 #else
 
-    PVR_UNREFERENCED_PARAMETER(psPerProc);
-    PVR_UNREFERENCED_PARAMETER(psMMapDataIN);
+       PVR_UNREFERENCED_PARAMETER(psPerProc);
+       PVR_UNREFERENCED_PARAMETER(psMMapDataIN);
 
-    psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED;
+       psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED;
 #endif
-    return 0;
+       return 0;
 }
 
 
@@ -1531,25 +1555,25 @@ PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID,
                                      PVRSRV_BRIDGE_RETURN *psRetOUT,
                                      PVRSRV_PER_PROCESS_DATA *psPerProc)
 {
-    IMG_HANDLE hKernelMemInfo;
+       IMG_HANDLE hKernelMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           &hKernelMemInfo,
-                           psChgMemAttribIN->hKernelMemInfo,
-                           PVRSRV_HANDLE_TYPE_MEM_INFO);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                       &hKernelMemInfo,
+                                                       psChgMemAttribIN->hKernelMemInfo,
+                                                       PVRSRV_HANDLE_TYPE_MEM_INFO);
 
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    psRetOUT->eError =
-        PVRSRVChangeDeviceMemoryAttributesKM(hKernelMemInfo, psChgMemAttribIN->ui32Attribs);
+       psRetOUT->eError =
+               PVRSRVChangeDeviceMemoryAttributesKM(hKernelMemInfo, psChgMemAttribIN->ui32Attribs);
 
-    return 0;
+       return 0;
 }
 #else
 static IMG_INT
@@ -1558,501 +1582,501 @@ PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID,
                                      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);
+       PVR_UNREFERENCED_PARAMETER(ui32BridgeID);
+       PVR_UNREFERENCED_PARAMETER(psChgMemAttribIN);
+       PVR_UNREFERENCED_PARAMETER(psRetOUT);
+       PVR_UNREFERENCED_PARAMETER(psPerProc);
 
-    return 0;
+       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_DEVICE_NODE *psDeviceNode;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REG);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_VOID **)&psDeviceNode,
+                                                  psPDumpRegDumpIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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_DEVICE_NODE *psDeviceNode;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REGPOL);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_VOID **)&psDeviceNode,
+                                                  psPDumpRegPolIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPOL);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPOL);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           &pvMemInfo,
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
                            psPDumpMemPolIN->hKernelMemInfo,
 #else
-                           psPDumpMemPolIN->psKernelMemInfo,
+                                                  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));
+                                                  PVRSRV_HANDLE_TYPE_MEM_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPMEM);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPMEM);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           &pvMemInfo,
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psPDumpMemDumpIN->hKernelMemInfo,
+                                                  psPDumpMemDumpIN->hKernelMemInfo,
 #else
-                           psPDumpMemDumpIN->psKernelMemInfo,
+                                                  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));
+                                                  PVRSRV_HANDLE_TYPE_MEM_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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_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_DEVICE_NODE *psDeviceNode;
+       IMG_HANDLE hDevMemContextInt;
 
-    return 0;
+       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_BRIDGE_IN_PDUMP_READREG *psPDumpReadRegIN,
+                          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_DUMPREADREG);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode,
-                           psPDumpReadRegIN->hDevCookie,
-                           PVRSRV_HANDLE_TYPE_DEV_NODE);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode,
+                                                  psPDumpReadRegIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
 
-    psRetOUT->eError =
-        PDumpReadRegKM(&psPDumpReadRegIN->szRegRegion[0],
-                       &psPDumpReadRegIN->szFileName[0],
-                       psPDumpReadRegIN->ui32FileOffset,
-                       psPDumpReadRegIN->ui32Address,
-                       psPDumpReadRegIN->ui32Size,
-                       psPDumpReadRegIN->ui32Flags);
+       psRetOUT->eError =
+               PDumpReadRegKM(&psPDumpReadRegIN->szRegRegion[0],
+                                          &psPDumpReadRegIN->szFileName[0],
+                                          psPDumpReadRegIN->ui32FileOffset,
+                                          psPDumpReadRegIN->ui32Address,
+                                          psPDumpReadRegIN->ui32Size,
+                                          psPDumpReadRegIN->ui32Flags);
 
-    return 0;
+       return 0;
 }
 
 static IMG_INT
 PDumpMemPagesBW(IMG_UINT32 ui32BridgeID,
-                  PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES *psPDumpMemPagesIN,
-                  PVRSRV_BRIDGE_RETURN *psRetOUT,
-                  PVRSRV_PER_PROCESS_DATA *psPerProc)
+                                 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_MEMPAGES);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPAGES);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           (IMG_VOID **)&psDeviceNode,
-                           psPDumpMemPagesIN->hDevCookie,
-                           PVRSRV_HANDLE_TYPE_DEV_NODE);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_VOID **)&psDeviceNode,
+                                                  psPDumpMemPagesIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
 
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       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;
+       IMG_UINT32 ui32Bytes = psPDumpSyncDumpIN->ui32Bytes;
+       IMG_VOID *pvSyncInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPSYNC);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPSYNC);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo,
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo,
 #if defined (SUPPORT_SID_INTERFACE)
                            psPDumpSyncDumpIN->hKernelSyncInfo,
 #else
-                           psPDumpSyncDumpIN->psKernelSyncInfo,
+                                                  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));
+                                                  PVRSRV_HANDLE_TYPE_SYNC_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
-    IMG_UINT32 ui32Value;
-    IMG_UINT32 ui32Mask;
+       IMG_UINT32 ui32Offset;
+       IMG_VOID *pvSyncInfo;
+       IMG_UINT32 ui32Value;
+       IMG_UINT32 ui32Mask;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SYNCPOL);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SYNCPOL);
 
-    psRetOUT->eError =
+       psRetOUT->eError =
         PVRSRVLookupHandle(psPerProc->psHandleBase,
                            &pvSyncInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psPDumpSyncPolIN->hKernelSyncInfo,
+                                                  psPDumpSyncPolIN->hKernelSyncInfo,
 #else
-                           psPDumpSyncPolIN->psKernelSyncInfo,
+                                                  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);
-    }
+                                                  PVRSRV_HANDLE_TYPE_SYNC_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    
-    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));
+       if(psPDumpSyncPolIN->bIsRead)
+       {
+               ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete);
+       }
+       else
+       {
+               ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete);
+       }
 
-    return 0;
+       
+       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_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ *psPDumpCycleCountRegReadIN,
+                                                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_CYCLE_COUNT_REG_READ);
+       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;
-    }
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_VOID **)&psDeviceNode,
+                                                  psPDumpCycleCountRegReadIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    PDumpCycleCountRegRead(&psDeviceNode->sDevId,
-                           psPDumpCycleCountRegReadIN->ui32RegOffset,
-                           psPDumpCycleCountRegReadIN->bLastFrame);
+       PDumpCycleCountRegRead(&psDeviceNode->sDevId,
+                                                  psPDumpCycleCountRegReadIN->ui32RegOffset,
+                                                  psPDumpCycleCountRegReadIN->bLastFrame);
 
-    psRetOUT->eError = PVRSRV_OK;
+       psRetOUT->eError = PVRSRV_OK;
 
-    return 0;
+       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 
@@ -2060,943 +2084,1080 @@ 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)
 {
 #if defined (SUPPORT_SID_INTERFACE)
     PVRSRV_MISC_INFO_KM sMiscInfo = {0};
 #endif
-    PVRSRV_ERROR eError;
+       PVRSRV_ERROR eError;
+
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_MISC_INFO);
 
-    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));
+       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));
+       OSMemCopy(&sMiscInfo.sGetRefCountCtl,
+                         &psGetMiscInfoIN->sMiscInfo.sGetRefCountCtl,
+                         sizeof(sMiscInfo.sGetRefCountCtl));
 #else
-
-    OSMemCopy(&psGetMiscInfoOUT->sMiscInfo,
-              &psGetMiscInfoIN->sMiscInfo,
-              sizeof(PVRSRV_MISC_INFO));
+       OSMemCopy(&psGetMiscInfoOUT->sMiscInfo,
+                         &psGetMiscInfoIN->sMiscInfo,
+                         sizeof(PVRSRV_MISC_INFO));
 #endif
 
-    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 (((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);
+               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);
+               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
 
-        
+               
 #if defined (SUPPORT_SID_INTERFACE)
-        OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
-                  sMiscInfo.ui32MemoryStrLen,
-                 (IMG_VOID *)sMiscInfo.pszMemoryStr, 0);
+               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);
+               OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                         psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen,
+                        (IMG_VOID *)psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0);
 #endif
 
-        
-        psGetMiscInfoOUT->sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr;
-
-        if(eError != PVRSRV_OK)
-        {
-            
-            PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoBW Error copy to user"));
-            return -EFAULT;
-        }
-    }
-    else
-    {
+               
+               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);
+               psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&sMiscInfo);
 #else
-        psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo);
+               psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo);
 #endif
-    }
+       }
 
-    
-    if (psGetMiscInfoOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       
+       if (psGetMiscInfoOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    
+       
 #if defined (SUPPORT_SID_INTERFACE)
-    if (sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT)
+       if (sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT)
 #else
-    if (psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT)
+       if (psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT)
 #endif
-    {
-        psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase,
-                                                    &psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM,
+       {
+               psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase,
+                                                                                                       &psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM,
 #if defined (SUPPORT_SID_INTERFACE)
                                                     sMiscInfo.sGlobalEventObject.hOSEventKM,
 #else
-                                                    psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM,
+                                                                                                       psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM,
 #endif
-                                                    PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT,
-                                                    PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
+                                                                                                       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 defined (SUPPORT_SID_INTERFACE)
-        OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.szName,
-                           sMiscInfo.sGlobalEventObject.szName,
-                           EVENTOBJNAME_MAXLENGTH);
-
+               OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.szName,
+                                                       sMiscInfo.sGlobalEventObject.szName,
+                                                       EVENTOBJNAME_MAXLENGTH);
 #endif
-    }
+       }
 
 #if defined (SUPPORT_SID_INTERFACE)
-    if (sMiscInfo.hSOCTimerRegisterOSMemHandle)
+       if (sMiscInfo.hSOCTimerRegisterOSMemHandle)
 #else
-    if (psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle)
+       if (psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle)
 #endif
-    {
-        
-        psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase,
-                          &psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle,
+       {
+               
+               psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase,
+                                                 &psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle,
 #if defined (SUPPORT_SID_INTERFACE)
                           sMiscInfo.hSOCTimerRegisterOSMemHandle,
 #else
-                          psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle,
+                                                 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;
+                                                 PVRSRV_HANDLE_TYPE_SOC_TIMER,
+                                                 PVRSRV_HANDLE_ALLOC_FLAG_SHARED);
 
-    psGetMiscInfoOUT->sMiscInfo.ui32SOCClockGateRegsSize = sMiscInfo.ui32SOCClockGateRegsSize;
+               if (psGetMiscInfoOUT->eError != PVRSRV_OK)
+               {
+                       return 0;
+               }
+       }
+#if defined (SUPPORT_SID_INTERFACE)
+       else
+       {
+               psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle = 0;
+       }
 
-    OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion,
-              &sMiscInfo.aui32DDKVersion,
-              sizeof(psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion));
-    OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl,
-              &sMiscInfo.sCacheOpCtl,
-              sizeof(psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl));
+       
+       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));
+       OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sGetRefCountCtl,
+                               &sMiscInfo.sGetRefCountCtl,
+                               sizeof(psGetMiscInfoOUT->sMiscInfo.sGetRefCountCtl));
 #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)
-    
+       
        if ((psConnectServicesIN->ui32Flags & SRV_FLAGS_PERSIST) != 0)
        {
        psPerProc->bPDumpPersistent = IMG_TRUE;
        }
 
 #if defined(SUPPORT_PDUMP_MULTI_PROCESS)
-    
+       
        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;
+       IMG_HANDLE hDevCookieInt;
+       IMG_HANDLE hDispClassInfoInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc, 1)
+       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)
+       psOpenDispClassDeviceOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &hDevCookieInt,
+                                                  psOpenDispClassDeviceIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
+       if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvDispClassInfoInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE);
+       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;
+       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;
+       IMG_VOID *pvDispClassInfoInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS);
+       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);
+       psEnumDispClassFormatsOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfoInt,
+                                                  psEnumDispClassFormatsIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psEnumDispClassFormatsOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
 }
 
+#if defined(SUPPORT_PVRSRV_GET_DC_SYSTEM_BUFFER)
 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;
+       IMG_HANDLE hBufferInt;
+       IMG_VOID *pvDispClassInfoInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc, 1)
+       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)
+       psGetDispClassSysBufferOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfoInt,
+                                                  psGetDispClassSysBufferIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
 }
+#endif
 
 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 =
-        PVRSRVGetDCInfoKM(pvDispClassInfo,
-                          &psGetDispClassInfoOUT->sDisplayInfo);
+       psGetDispClassInfoOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psGetDispClassInfoIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psGetDispClassInfoOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    return 0;
+       psGetDispClassInfoOUT->eError =
+               PVRSRVGetDCInfoKM(pvDispClassInfo,
+                                                 &psGetDispClassInfoOUT->sDisplayInfo);
+
+       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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_HANDLE hSwapChainInt;
+       IMG_UINT32      ui32SwapChainID;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc, 1)
+       NEW_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc, 1)
 
-    psCreateDispClassSwapChainOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           &pvDispClassInfo,
-                           psCreateDispClassSwapChainIN->hDeviceKM,
-                           PVRSRV_HANDLE_TYPE_DISP_INFO);
+       psCreateDispClassSwapChainOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psCreateDispClassSwapChainIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+
+       if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       
+       ui32SwapChainID = psCreateDispClassSwapChainIN->ui32SwapChainID;
 
-    
-    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->eError =
+               PVRSRVCreateDCSwapChainKM(psPerProc, pvDispClassInfo,
+                                                                 psCreateDispClassSwapChainIN->ui32Flags,
+                                                                 &psCreateDispClassSwapChainIN->sDstSurfAttrib,
+                                                                 &psCreateDispClassSwapChainIN->sSrcSurfAttrib,
+                                                                 psCreateDispClassSwapChainIN->ui32BufferCount,
+                                                                 psCreateDispClassSwapChainIN->ui32OEMFlags,
+                                                                 &hSwapChainInt,
+                                                                 &ui32SwapChainID);
 
-    
-    psCreateDispClassSwapChainOUT->ui32SwapChainID = ui32SwapChainID;
+       if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    PVRSRVAllocSubHandleNR(psPerProc->psHandleBase,
-                      &psCreateDispClassSwapChainOUT->hSwapChain,
-                      hSwapChainInt,
-                      PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
-                      PVRSRV_HANDLE_ALLOC_FLAG_NONE,
-                      psCreateDispClassSwapChainIN->hDeviceKM);
+       
+       psCreateDispClassSwapChainOUT->ui32SwapChainID = ui32SwapChainID;
 
-    COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc)
+       PVRSRVAllocSubHandleNR(psPerProc->psHandleBase,
+                                         &psCreateDispClassSwapChainOUT->hSwapChain,
+                                         hSwapChainInt,
+                                         PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
+                                         PVRSRV_HANDLE_ALLOC_FLAG_NONE,
+                                         psCreateDispClassSwapChainIN->hDeviceKM);
 
-    return 0;
+       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);
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
 
-    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);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT);
 
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psSetDispClassDstRectIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    psRetOUT->eError =
-        PVRSRVSetDCDstRectKM(pvDispClassInfo,
-                             pvSwapChain,
-                             &psSetDispClassDstRectIN->sRect);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvSwapChain,
+                                                  psSetDispClassDstRectIN->hSwapChain,
+                                                  PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN);
 
-    return 0;
+       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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psSetDispClassSrcRectIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psSetDispClassColKeyIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY);
+       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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psSetDispClassColKeyIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
+       IMG_UINT32 i;
 #if defined (SUPPORT_SID_INTERFACE)
-    IMG_HANDLE  *pahBuffer;
+       IMG_HANDLE  *pahBuffer;
 #endif
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc, PVRSRV_MAX_DC_SWAPCHAIN_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;
-    }
+       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;
-    }
+       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 =
-        PVRSRVGetDCBuffersKM(pvDispClassInfo,
-                             pvSwapChain,
-                             &psGetDispClassBuffersOUT->ui32BufferCount,
+       psGetDispClassBuffersOUT->eError =
+               PVRSRVGetDCBuffersKM(pvDispClassInfo,
+                                                        pvSwapChain,
+                                                        &psGetDispClassBuffersOUT->ui32BufferCount,
 #if defined (SUPPORT_SID_INTERFACE)
-                             pahBuffer);
+                                                        pahBuffer,
 #else
-                             psGetDispClassBuffersOUT->ahBuffer);
+                                                        psGetDispClassBuffersOUT->ahBuffer,
 #endif
-    if (psGetDispClassBuffersOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+                                                        psGetDispClassBuffersOUT->asPhyAddr);
+       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++)
-    {
+       for(i = 0; i < psGetDispClassBuffersOUT->ui32BufferCount; i++)
+       {
 #if defined (SUPPORT_SID_INTERFACE)
-        IMG_SID hBufferExt;
+               IMG_SID hBufferExt;
 #else
-        IMG_HANDLE hBufferExt;
+               IMG_HANDLE hBufferExt;
 #endif
 
-         
+        
 #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);
+       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);
+               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
 
-        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);
+       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;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChainBuf;
 #if defined (SUPPORT_SID_INTERFACE)
-    IMG_HANDLE hPrivateTag;
+       IMG_HANDLE hPrivateTag;
 #endif
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER);
+       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;
-    }
+       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;
-    }
+       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 =
-        PVRSRVSwapToDCBufferKM(pvDispClassInfo,
-                               pvSwapChainBuf,
-                               psSwapDispClassBufferIN->ui32SwapInterval,
+       psRetOUT->eError =
+               PVRSRVSwapToDCBufferKM(pvDispClassInfo,
+                                                          pvSwapChainBuf,
+                                                          psSwapDispClassBufferIN->ui32SwapInterval,
 #if defined (SUPPORT_SID_INTERFACE)
                                hPrivateTag,
 #else
-                               psSwapDispClassBufferIN->hPrivateTag,
+                                                          psSwapDispClassBufferIN->hPrivateTag,
 #endif
-                               psSwapDispClassBufferIN->ui32ClipRectCount,
-                               psSwapDispClassBufferIN->sClipRect);
+                                                          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)
+PVRSRVSwapToDCBuffer2BW(IMG_UINT32 ui32BridgeID,
+                                               PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER2 *psSwapDispClassBufferIN,
+                                               PVRSRV_BRIDGE_RETURN *psRetOUT,
+                                               PVRSRV_PER_PROCESS_DATA *psPerProc)
 {
-    IMG_VOID *pvDispClassInfo;
-    IMG_VOID *pvSwapChain;
+       IMG_VOID *pvPrivData = IMG_NULL;
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
+       IMG_UINT32 i;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER2);
 
-    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);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvDispClassInfo,
+                                                  psSwapDispClassBufferIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_DISP_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Failed to look up DISP_INFO handle"));
+               return 0;
+       }
+
+       psRetOUT->eError =
+               PVRSRVLookupSubHandle(psPerProc->psHandleBase,
+                                                         &pvSwapChain,
+                                                         psSwapDispClassBufferIN->hSwapChain,
+                                                         PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
+                                                         psSwapDispClassBufferIN->hDeviceKM);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Failed to look up DISP_BUFFER handle"));
+               return 0;
+       }
+
+       if(!OSAccessOK(PVR_VERIFY_WRITE,
+                                  psSwapDispClassBufferIN->ppsKernelMemInfos,
+                                  sizeof(IMG_HANDLE) * psSwapDispClassBufferIN->ui32NumMemInfos))
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Access check failed for ppsKernelMemInfos"));
+               return -EFAULT;
+       }
+
+       if(!OSAccessOK(PVR_VERIFY_WRITE,
+                                  psSwapDispClassBufferIN->ppsKernelSyncInfos,
+                                  sizeof(IMG_HANDLE) * psSwapDispClassBufferIN->ui32NumMemInfos))
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Access check failed for ppsKernelSyncInfos"));
+               return -EFAULT;
+       }
+
+       for (i = 0; i < psSwapDispClassBufferIN->ui32NumMemInfos; i++)
+       {
+               PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
+               PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+
+               psRetOUT->eError =
+                       PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                          (IMG_PVOID *)&psKernelMemInfo,
+                                                          psSwapDispClassBufferIN->ppsKernelMemInfos[i],
+                                                          PVRSRV_HANDLE_TYPE_MEM_INFO);
+               if(psRetOUT->eError != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Failed to look up MEM_INFO handle"));
+                       return 0;
+               }
+
+               psRetOUT->eError =
+                       PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                          (IMG_PVOID *)&psKernelSyncInfo,
+                                                          psSwapDispClassBufferIN->ppsKernelSyncInfos[i],
+                                                          PVRSRV_HANDLE_TYPE_SYNC_INFO);
+               if(psRetOUT->eError != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Failed to look up SYNC_INFO handle"));
+                       return 0;
+               }
+
+               psSwapDispClassBufferIN->ppsKernelMemInfos[i] = psKernelMemInfo;
+               psSwapDispClassBufferIN->ppsKernelSyncInfos[i] = psKernelSyncInfo;
+       }
+
+       if(psSwapDispClassBufferIN->ui32PrivDataLength > 0)
+       {
+               if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         psSwapDispClassBufferIN->ui32PrivDataLength,
+                                         (IMG_VOID **)&pvPrivData, IMG_NULL,
+                                         "Swap Command Private Data") != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2BW: Failed to allocate private data space"));
+                       return -ENOMEM;
+               }
+
+               if(CopyFromUserWrapper(psPerProc,
+                                                          ui32BridgeID,
+                                                          pvPrivData,
+                                                          psSwapDispClassBufferIN->pvPrivData,
+                                                          psSwapDispClassBufferIN->ui32PrivDataLength) != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVSwapToDCBuffer2BW: Failed to copy private data"));
+                       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         psSwapDispClassBufferIN->ui32PrivDataLength,
+                                         pvPrivData, IMG_NULL);
+               return -EFAULT;
+               }
+       }
+
+       psRetOUT->eError =
+               PVRSRVSwapToDCBuffer2KM(pvDispClassInfo,
+                                                               pvSwapChain,
+                                                               psSwapDispClassBufferIN->ui32SwapInterval,
+                                                               psSwapDispClassBufferIN->ppsKernelMemInfos,
+                                                               psSwapDispClassBufferIN->ppsKernelSyncInfos,
+                                                               psSwapDispClassBufferIN->ui32NumMemInfos,
+                                                               pvPrivData,
+                                                               psSwapDispClassBufferIN->ui32PrivDataLength);
+
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                 psSwapDispClassBufferIN->ui32PrivDataLength,
+                                 pvPrivData, IMG_NULL);
+       }
 
     return 0;
 }
 
+
+
 static IMG_INT
-PVRSRVGetDCFrontBufferBW(IMG_UINT32 ui32BridgeID,
-                                          PVRSRV_BRIDGE_IN_GET_DISPCLASS_FRONT_BUFFER *psSwapDispClassSystemIN,
-                                          PVRSRV_BRIDGE_OUT_GET_DISPCLASS_FRONT_BUFFER *psSwapDispClassSystemOUT,
+PVRSRVSwapToDCSystemBW(IMG_UINT32 ui32BridgeID,
+                                          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_GET_DISPCLASS_FRONT_BUFFER);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM);
 
-       psSwapDispClassSystemOUT->eError =
+       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
+PVRSRVGetDCFrontBufferBW(IMG_UINT32 ui32BridgeID,
+                       PVRSRV_BRIDGE_IN_GET_DISPCLASS_FRONT_BUFFER *psSwapDispClassSystemIN,
+                       PVRSRV_BRIDGE_OUT_GET_DISPCLASS_FRONT_BUFFER *psSwapDispClassSystemOUT,
+                       PVRSRV_PER_PROCESS_DATA *psPerProc)
+{
+       IMG_VOID *pvDispClassInfo;
+       IMG_VOID *pvSwapChain;
+
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_FRONT_BUFFER);
+
+       psSwapDispClassSystemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                               &pvDispClassInfo,
+                               psSwapDispClassSystemIN->hDeviceKM,
+                               PVRSRV_HANDLE_TYPE_DISP_INFO);
        if(psSwapDispClassSystemOUT->eError != PVRSRV_OK)
        {
                return 0;
@@ -3004,787 +3165,794 @@ PVRSRVGetDCFrontBufferBW(IMG_UINT32 ui32BridgeID,
 
        psSwapDispClassSystemOUT->eError =
                PVRSRVGetDCFrontBufferKM(pvDispClassInfo,
-                                                          &psSwapDispClassSystemOUT->ui32BufferIndex,
-                                                          &psSwapDispClassSystemOUT->ui32FlipChainID);
+                               &psSwapDispClassSystemOUT->ui32BufferIndex,
+                               &psSwapDispClassSystemOUT->ui32FlipChainID);
 
        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;
+       IMG_HANDLE hDevCookieInt;
+       IMG_HANDLE hBufClassInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc, 1)
+       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)
+       psOpenBufferClassDeviceOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &hDevCookieInt,
+                                                  psOpenBufferClassDeviceIN->hDevCookie,
+                                                  PVRSRV_HANDLE_TYPE_DEV_NODE);
+       if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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 =
-        PVRSRVCloseBCDeviceKM(pvBufClassInfo, IMG_FALSE);
-
-    if(psRetOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
-
-    psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase,
-                                           psCloseBufferClassDeviceIN->hDeviceKM,
-                                           PVRSRV_HANDLE_TYPE_BUF_INFO);
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvBufClassInfo,
+                                                  psCloseBufferClassDeviceIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_BUF_INFO);
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    return 0;
+       psRetOUT->eError =
+               PVRSRVCloseBCDeviceKM(pvBufClassInfo, IMG_FALSE);
+
+       if(psRetOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
+
+       psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase,
+                                                                                  psCloseBufferClassDeviceIN->hDeviceKM,
+                                                                                  PVRSRV_HANDLE_TYPE_BUF_INFO);
+
+       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;
+       IMG_VOID *pvBufClassInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO);
+       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;
+       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;
+       IMG_VOID *pvBufClassInfo;
+       IMG_HANDLE hBufferInt;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc, 1)
+       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)
+       psGetBufferClassBufferOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  &pvBufClassInfo,
+                                                  psGetBufferClassBufferIN->hDeviceKM,
+                                                  PVRSRV_HANDLE_TYPE_BUF_INFO);
+       if(psGetBufferClassBufferOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    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_KERNEL_MEM_INFO *psKernelMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc, 1)
+       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;
-    }
+       psAllocSharedSysMemOUT->eError =
+               PVRSRVAllocSharedSysMemoryKM(psPerProc,
+                                                                        psAllocSharedSysMemIN->ui32Flags,
+                                                                        psAllocSharedSysMemIN->ui32Size,
+                                                                        &psKernelMemInfo);
+       if(psAllocSharedSysMemOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
-    OSMemSet(&psAllocSharedSysMemOUT->sClientMemInfo,
-             0,
-             sizeof(psAllocSharedSysMemOUT->sClientMemInfo));
+       OSMemSet(&psAllocSharedSysMemOUT->sClientMemInfo,
+                        0,
+                        sizeof(psAllocSharedSysMemOUT->sClientMemInfo));
 
-    psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddrKM =
-            psKernelMemInfo->pvLinAddrKM;
+       psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddrKM =
+                       psKernelMemInfo->pvLinAddrKM;
 
-    psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddr = 0;
-    psAllocSharedSysMemOUT->sClientMemInfo.ui32Flags =
-        psKernelMemInfo->ui32Flags;
+       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;
-    }
+       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;
+       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_KERNEL_MEM_INFO *psKernelMemInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM);
 
-    psFreeSharedSysMemOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
-                           (IMG_VOID **)&psKernelMemInfo,
+       psFreeSharedSysMemOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                  (IMG_VOID **)&psKernelMemInfo,
 #if defined (SUPPORT_SID_INTERFACE)
-                           psFreeSharedSysMemIN->hKernelMemInfo,
+                                                  psFreeSharedSysMemIN->hKernelMemInfo,
 #else
-                           psFreeSharedSysMemIN->psKernelMemInfo,
+                                                  psFreeSharedSysMemIN->psKernelMemInfo,
 #endif
-                           PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO);
+                                                  PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO);
 
-    if(psFreeSharedSysMemOUT->eError != PVRSRV_OK)
-        return 0;
+       if(psFreeSharedSysMemOUT->eError != PVRSRV_OK)
+               return 0;
 
-    psFreeSharedSysMemOUT->eError =
-        PVRSRVFreeSharedSysMemoryKM(psKernelMemInfo);
-    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;
-        }
-    }
+       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,
+       psFreeSharedSysMemOUT->eError =
+               PVRSRVReleaseHandle(psPerProc->psHandleBase,
 #if defined (SUPPORT_SID_INTERFACE)
-                            psFreeSharedSysMemIN->hKernelMemInfo,
+                                                       psFreeSharedSysMemIN->hKernelMemInfo,
 #else
-                            psFreeSharedSysMemIN->psKernelMemInfo,
+                                                       psFreeSharedSysMemIN->psKernelMemInfo,
 #endif
-                            PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO);
-    return 0;
+                                                       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_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;
+       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+       PVRSRV_HANDLE_TYPE eHandleType;
 #if defined (SUPPORT_SID_INTERFACE)
-    IMG_SID     hParent;
+       IMG_SID     hParent;
 #else
-    IMG_HANDLE  hParent;
+       IMG_HANDLE      hParent;
 #endif
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_MEMINFO_MEM);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_MEMINFO_MEM);
 
-    NEW_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc, 2)
+       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)
-    {
+       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:
+               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:
+               case PVRSRV_HANDLE_TYPE_NONE:
 #endif
-            break;
-        default:
-            psMapMemInfoMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE;
-            return 0;
-    }
+                       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;
-    }
+       
+       psMapMemInfoMemOUT->eError =
+               PVRSRVGetParentHandle(psPerProc->psHandleBase,
+                                       &hParent,
+                                       psMapMemInfoMemIN->hKernelMemInfo,
+                                       eHandleType);
+       if (psMapMemInfoMemOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 #if defined (SUPPORT_SID_INTERFACE)
-    if (hParent == 0)
+       if (hParent == 0)
 #else
-    if (hParent == IMG_NULL)
+       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;
+       {
+               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;
-    }
+       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;
+       psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle;
 #endif
 
-    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
-    {
-        
+       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;
+               psMapMemInfoMemOUT->sClientSyncInfo.psSyncData =
+                       psKernelMemInfo->psKernelSyncInfo->psSyncData;
+               psMapMemInfoMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr =
+                       psKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+               psMapMemInfoMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr =
+                       psKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+               psMapMemInfoMemOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+                       psKernelMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
+               psMapMemInfoMemOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+                       psKernelMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
 
 #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;
-    }
+       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
-        psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo =
-            psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle;
+               psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo =
+                       psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle;
 #endif
 #endif
 
-        psMapMemInfoMemOUT->sClientMemInfo.psClientSyncInfo = &psMapMemInfoMemOUT->sClientSyncInfo;
+               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."));
-    }
+               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((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);
+       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 = OSEventObjectWaitKM(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;
+       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,
+       psEventObjectOpenOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
 #if defined (SUPPORT_SID_INTERFACE)
-                           &sEventObject.hOSEventKM,
+                                                  &sEventObject.hOSEventKM,
 #else
-                           &psEventObjectOpenIN->sEventObject.hOSEventKM,
+                                                  &psEventObjectOpenIN->sEventObject.hOSEventKM,
 #endif
-                           psEventObjectOpenIN->sEventObject.hOSEventKM,
-                           PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT);
+                                                  psEventObjectOpenIN->sEventObject.hOSEventKM,
+                                                  PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT);
 
-    if(psEventObjectOpenOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       if(psEventObjectOpenOUT->eError != PVRSRV_OK)
+       {
+               return 0;
+       }
 
 #if defined (SUPPORT_SID_INTERFACE)
-    OSMemCopy(&sEventObject.szName,
-                           &psEventObjectOpenIN->sEventObject.szName,
-              EVENTOBJNAME_MAXLENGTH);
+       OSMemCopy(&sEventObject.szName,
+                         &psEventObjectOpenIN->sEventObject.szName,
+                         EVENTOBJNAME_MAXLENGTH);
 
-    psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&sEventObject, &hOSEvent);
+       psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&sEventObject, &hOSEvent);
 #else
-    psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&psEventObjectOpenIN->sEventObject, &psEventObjectOpenOUT->hOSEvent);
+       psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&psEventObjectOpenIN->sEventObject, &psEventObjectOpenOUT->hOSEvent);
 #endif
 
-    if(psEventObjectOpenOUT->eError != PVRSRV_OK)
-    {
-        return 0;
-    }
+       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);
+       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);
+       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;
+       IMG_HANDLE hOSEventKM;
 #if defined (SUPPORT_SID_INTERFACE)
-    PVRSRV_EVENTOBJECT_KM sEventObject;
+       PVRSRV_EVENTOBJECT_KM sEventObject;
 #endif
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE);
 
-    psRetOUT->eError =
-        PVRSRVLookupHandle(psPerProc->psHandleBase,
+       psRetOUT->eError =
+               PVRSRVLookupHandle(psPerProc->psHandleBase,
 #if defined (SUPPORT_SID_INTERFACE)
-                           &sEventObject.hOSEventKM,
+                                                  &sEventObject.hOSEventKM,
 #else
-                           &psEventObjectCloseIN->sEventObject.hOSEventKM,
+                                                  &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;
-    }
+                                                  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);
+       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);
+       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;
+       IMG_UINT32      ui32ReadOps2PendingSnapShot;
 } MODIFY_SYNC_OP_INFO;
 
 
 static PVRSRV_ERROR DoQuerySyncOpsSatisfied(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo,
-                                            IMG_UINT32 ui32ReadOpsPendingSnapShot,
-                                            IMG_UINT32 ui32WriteOpsPendingSnapShot)
+                                                                                       IMG_UINT32 ui32ReadOpsPendingSnapShot,
+                                                                                       IMG_UINT32 ui32WriteOpsPendingSnapShot,
+                                                                                       IMG_UINT32 ui32ReadOps2PendingSnapShot)
 {
-    IMG_UINT32 ui32WriteOpsPending;
-    IMG_UINT32 ui32ReadOpsPending;
+       IMG_UINT32 ui32WriteOpsPending;
+       IMG_UINT32 ui32ReadOpsPending;
+       IMG_UINT32 ui32ReadOps2Pending;
 
-    
-    if (!psKernelSyncInfo)
-    {
-        return PVRSRV_ERROR_INVALID_PARAMS;
-    }
+       
+       if (!psKernelSyncInfo)
+       {
+               return PVRSRV_ERROR_INVALID_PARAMS;
+       }
 
-    
+       
 
 
 
@@ -3794,976 +3962,990 @@ static PVRSRV_ERROR DoQuerySyncOpsSatisfied(PVRSRV_KERNEL_SYNC_INFO *psKernelSyn
 
 
 
-    ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
-    ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
+       ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
+       ui32ReadOps2Pending = psKernelSyncInfo->psSyncData->ui32ReadOps2Pending;
 
-    if((ui32WriteOpsPending - ui32WriteOpsPendingSnapShot >=
-        ui32WriteOpsPending - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) &&
-       (ui32ReadOpsPending - ui32ReadOpsPendingSnapShot >=
-        ui32ReadOpsPending - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete))
-    {
+       if((ui32WriteOpsPending - ui32WriteOpsPendingSnapShot >=
+               ui32WriteOpsPending - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) &&
+          (ui32ReadOpsPending - ui32ReadOpsPendingSnapShot >=
+               ui32ReadOpsPending - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete) &&
+               (ui32ReadOps2Pending - ui32ReadOps2PendingSnapShot >=
+               ui32ReadOps2Pending - psKernelSyncInfo->psSyncData->ui32ReadOps2Complete))
+       {
 #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));
-
-        
-        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));
-        
+               
+               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));
+
+               
+               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;
-    }
+               return PVRSRV_OK;
+       }
+       else
+       {
+               return PVRSRV_ERROR_RETRY;
+       }
 }
 
 
 static PVRSRV_ERROR DoModifyCompleteSyncOps(MODIFY_SYNC_OP_INFO *psModSyncOpInfo)
 {
-    PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
+       PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
 
-    psKernelSyncInfo = psModSyncOpInfo->psKernelSyncInfo;
+       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))
-    {
-        return PVRSRV_ERROR_BAD_SYNC_STATE;
-    }
+       
+       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_WO_INC)
+       {
+               psKernelSyncInfo->psSyncData->ui32WriteOpsComplete++;
+       }
 
-    
-    if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC)
-    {
-        psKernelSyncInfo->psSyncData->ui32ReadOpsComplete++;
-    }
+       
+       if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC)
+       {
+               psKernelSyncInfo->psSyncData->ui32ReadOpsComplete++;
+       }
 
-    return PVRSRV_OK;
+       return PVRSRV_OK;
 }
 
 
-static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID     pvParam,
+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);
+       MODIFY_SYNC_OP_INFO             *psModSyncOpInfo;
 
-    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));
+       PVR_UNREFERENCED_PARAMETER(ui32Param);
+       PVR_UNREFERENCED_PARAMETER(bDummy);
 
-        return PVRSRV_ERROR_TIMEOUT;
+       if (!pvParam)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: invalid parameter"));
+               return PVRSRV_ERROR_INVALID_PARAMS;
+       }
 
-    OpFlushedComplete:
+       psModSyncOpInfo = (MODIFY_SYNC_OP_INFO*)pvParam;
 
-        DoModifyCompleteSyncOps(psModSyncOpInfo);
-    }
+       if (psModSyncOpInfo->psKernelSyncInfo)
+       {
+               
+               LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US)
+               {
+                       if (DoQuerySyncOpsSatisfied(psModSyncOpInfo->psKernelSyncInfo,
+                                                                               psModSyncOpInfo->ui32ReadOpsPendingSnapShot,
+                                                                               psModSyncOpInfo->ui32WriteOpsPendingSnapShot,
+                                                                               psModSyncOpInfo->ui32ReadOps2PendingSnapShot) == 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, read ops complete = %d",
+                                psModSyncOpInfo->ui32ReadOpsPendingSnapShot,
+                                psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32ReadOpsComplete));
+               PVR_DPF((PVR_DBG_ERROR, "  Read ops pending snapshot = %d, read ops2 complete = %d",
+                                psModSyncOpInfo->ui32ReadOps2PendingSnapShot,
+                                psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32ReadOps2Complete));
+               return PVRSRV_ERROR_TIMEOUT;
+
+OpFlushedComplete:
+               DoModifyCompleteSyncOps(psModSyncOpInfo);
+       }
 
-    OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,  sizeof(MODIFY_SYNC_OP_INFO), (IMG_VOID *)psModSyncOpInfo, 0);
-    
+       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,      sizeof(MODIFY_SYNC_OP_INFO), (IMG_VOID *)psModSyncOpInfo, 0);
+       
 
-    
-    PVRSRVScheduleDeviceCallbacks();
+       
+       PVRSRVScheduleDeviceCallbacks();
 
-    return PVRSRV_OK;
+       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;
-    }
+       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;
-    }
+       if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed"));
+               return 0;
+       }
 
-    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;
-    }
-
-    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;
-    }
+       PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
+       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_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;
+       }
 
-    psModifySyncOpsOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
-    psModifySyncOpsOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       
+       psModSyncOpInfo->psKernelSyncInfo = psKernelSyncInfo;
+       psModSyncOpInfo->ui32ModifyFlags = psModifySyncOpsIN->ui32ModifyFlags;
+       psModSyncOpInfo->ui32ReadOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
+       psModSyncOpInfo->ui32WriteOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       psModSyncOpInfo->ui32ReadOps2PendingSnapShot = psKernelSyncInfo->psSyncData->ui32ReadOps2Pending;
 
-    if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC)
-    {
-        psKernelSyncInfo->psSyncData->ui32WriteOpsPending++;
-    }
+       
 
-    if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC)
-    {
-        psKernelSyncInfo->psSyncData->ui32ReadOpsPending++;
-    }
+       psModifySyncOpsOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
+       psModifySyncOpsOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       psModifySyncOpsOUT->ui32ReadOps2Pending = psKernelSyncInfo->psSyncData->ui32ReadOps2Pending;
 
-    
-    psModifySyncOpsOUT->eError = ResManDissociateRes(psModSyncOpInfo->hResItem,
-                                                     psPerProc->hResManContext);
+       if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC)
+       {
+               psKernelSyncInfo->psSyncData->ui32WriteOpsPending++;
+       }
 
-    if (psModifySyncOpsOUT->eError != PVRSRV_OK)
-    {
-        PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed"));
-        return 0;
-    }
+       if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC)
+       {
+               psKernelSyncInfo->psSyncData->ui32ReadOpsPending++;
+       }
 
-    return 0;
+       
+       psModifySyncOpsOUT->eError = ResManDissociateRes(psModSyncOpInfo->hResItem,
+                                                                                                        psPerProc->hResManContext);
+
+       if (psModifySyncOpsOUT->eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed"));
+               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)
+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;
+       MODIFY_SYNC_OP_INFO             *psModSyncOpInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS);
+       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->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;
+       }
 
-    if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL)
-    {
-        
-        psModifySyncOpsOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
-        return 0;
-    }
+       if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL)
+       {
+               
+               psModifySyncOpsOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+               return 0;
+       }
 
-    psModifySyncOpsOUT->eError = DoModifyCompleteSyncOps(psModSyncOpInfo);
+       psModifySyncOpsOUT->eError = DoModifyCompleteSyncOps(psModSyncOpInfo);
 
-    if (psModifySyncOpsOUT->eError != PVRSRV_OK)
-    {
-        PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: DoModifyCompleteSyncOps failed"));
-        return 0;
-    }
+       if (psModifySyncOpsOUT->eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: DoModifyCompleteSyncOps failed"));
+               return 0;
+       }
 
-    psModSyncOpInfo->psKernelSyncInfo = IMG_NULL;
+       psModSyncOpInfo->psKernelSyncInfo = IMG_NULL;
 
-    
-    PVRSRVScheduleDeviceCallbacks();
+       
+       PVRSRVScheduleDeviceCallbacks();
 
-    return 0;
+       return 0;
 }
 
 
 static IMG_INT
-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)
+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)
 {
-    PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
+       PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
 
-    PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN);
+       PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN);
 
-    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;
-    }
+       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;
+       }
 
-    
+       
 
-    psSyncOpsTakeTokenOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
-    psSyncOpsTakeTokenOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       psSyncOpsTakeTokenOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending;
+       psSyncOpsTakeTokenOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending;
+       psSyncOpsTakeTokenOUT->ui32ReadOps2Pending = psKernelSyncInfo->psSyncData->ui32ReadOps2Pending;
 
-    return 0;
+       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_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;
-    }
+       PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo;
+       IMG_UINT32 ui32ReadOpsPendingSnapshot;
+       IMG_UINT32 ui32WriteOpsPendingSnapshot;
+       IMG_UINT32 ui32ReadOps2PendingSnapshot;
+
+       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;
+       }
 
-    return 0;
+       ui32ReadOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32ReadOpsPendingSnapshot;
+       ui32WriteOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32WriteOpsPendingSnapshot;
+       ui32ReadOps2PendingSnapshot = psSyncOpsFlushToTokenIN->ui32ReadOps2PendingSnapshot;
+
+       psSyncOpsFlushToTokenOUT->eError = DoQuerySyncOpsSatisfied(psKernelSyncInfo,
+                                                                                                                          ui32ReadOpsPendingSnapshot,
+                                                                                                                          ui32WriteOpsPendingSnapshot,
+                                                                                                                          ui32ReadOps2PendingSnapshot);
+
+       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->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;
-    }
+       MODIFY_SYNC_OP_INFO             *psModSyncOpInfo;
 
-    return 0;
+       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,
+                                                                                                                               psModSyncOpInfo->ui32ReadOps2PendingSnapShot);
+
+       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;
-    }
+       PVRSRV_KERNEL_SYNC_INFO         *psSyncInfo;
+       IMG_UINT32 ui32DeltaRead;
+       IMG_UINT32 ui32DeltaWrite;
 
-    
-    ui32DeltaRead = psSyncInfo->psSyncData->ui32ReadOpsPending - psSyncInfo->psSyncData->ui32ReadOpsComplete;
-    ui32DeltaWrite = psSyncInfo->psSyncData->ui32WriteOpsPending - psSyncInfo->psSyncData->ui32WriteOpsComplete;
+       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;
+       }
 
-    if (ui32DeltaRead <= psSyncOpsFlushToDeltaIN->ui32Delta && ui32DeltaWrite <= psSyncOpsFlushToDeltaIN->ui32Delta)
-    {
+       
+       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));
+               
+               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
 
-        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,
+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;
-    }
+       eError = PVRSRVFreeSyncInfoKM(psSyncInfo);
+       if (eError != PVRSRV_OK)
+       {
+               return eError;
+       }
 
-    return PVRSRV_OK;
+       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_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);
+       PVRSRV_KERNEL_SYNC_INFO         *psSyncInfo;
+       PVRSRV_ERROR eError;
+       PVRSRV_DEVICE_NODE *psDeviceNode;
+       IMG_HANDLE hDevMemContext;
 
-    
-    goto allocsyncinfo_commit;
+       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);
+       psAllocSyncInfoOUT->eError = eError;
+       COMMIT_HANDLE_BATCH_OR_ERROR(eError, psPerProc);
 
-    return 0;
+       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;
-    }
+       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;
-    }
+       if (eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed"));
+               psFreeSyncInfoOUT->eError = eError;
+               return 0;
+       }
 
-    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);
+       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_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_MAPPHYSTOUSERSPACE, DummyBW);
+       SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAPPHYSTOUSERSPACE, DummyBW);
+       SetDispatchTableEntry(PVRSRV_BRIDGE_GETPHYSTOUSERSPACEMAP, DummyBW);
 
-    SetDispatchTableEntry(PVRSRV_BRIDGE_GET_FB_STATS, DummyBW);
+       SetDispatchTableEntry(PVRSRV_BRIDGE_GET_FB_STATS, DummyBW);
 
-    
-    SetDispatchTableEntry(PVRSRV_BRIDGE_GET_MISC_INFO, PVRSRVGetMiscInfoBW);
-    SetDispatchTableEntry(PVRSRV_BRIDGE_RELEASE_MISC_INFO, 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_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);
+       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_GET_DISPCLASS_FRONT_BUFFER, PVRSRVGetDCFrontBufferBW); 
-    
-    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_GET_OEMJTABLE, DummyBW);
 
-    
-    SetDispatchTableEntry(PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR, MMU_GetPDDevPAddrBW);
+       
+       SetDispatchTableEntry(PVRSRV_BRIDGE_ENUM_CLASS, PVRSRVEnumerateDCBW);
 
-    
-    SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_CONNECT,    &PVRSRVInitSrvConnectBW);
-    SetDispatchTableEntry(PVRSRV_BRIDGE_INITSRV_DISCONNECT, &PVRSRVInitSrvDisconnectBW);
+       
+       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);
+#if defined(SUPPORT_PVRSRV_GET_DC_SYSTEM_BUFFER)
+       SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER, PVRSRVGetDCSystemBufferBW);
+#else
+       SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER, DummyBW);
+#endif
+       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_BUFFER2, PVRSRVSwapToDCBuffer2BW);
+       SetDispatchTableEntry(PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM, PVRSRVSwapToDCSystemBW);
+       SetDispatchTableEntry(PVRSRV_BRIDGE_GET_DISPCLASS_FRONT_BUFFER, PVRSRVGetDCFrontBufferBW);
+       
+       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_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);
+       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;
-
-        SysAcquireData(&psSysData);
-
-        
-        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(!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;
-            }
-        }
-    }
+       {
+               
+               SYS_DATA *psSysData;
+
+               SysAcquireData(&psSysData);
+
+               
+               psBridgeIn = ((ENV_DATA *)psSysData->pvEnvSpecificData)->pvBridgeData;
+               psBridgeOut = (IMG_PVOID)((IMG_PBYTE)psBridgeIn + PVRSRV_MAX_BRIDGE_IN_SIZE);
+
+               
+               if((psBridgePackageKM->ui32InBufferSize > PVRSRV_MAX_BRIDGE_IN_SIZE) || 
+                       (psBridgePackageKM->ui32OutBufferSize > PVRSRV_MAX_BRIDGE_OUT_SIZE))
+               {
+                       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 c804fbc..f616d83 100755 (executable)
@@ -1205,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,
@@ -1365,11 +1375,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
                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)
        {
@@ -1377,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)
        {
@@ -1489,6 +1499,21 @@ 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,
@@ -1707,15 +1732,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
                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,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                  &asInitInfoKM.hKernelEDMStatusBufferMemInfo,
-#else
-                                                  &psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo,
-#endif
-                                                  psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo,
+                                                  &psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo,
+                                                  psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo,
                                                   PVRSRV_HANDLE_TYPE_MEM_INFO);
        if (eError != PVRSRV_OK)
        {
@@ -1723,14 +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,
 #if defined (SUPPORT_SID_INTERFACE)
-                                                  &asInitInfoKM.hKernelTmpDPMStateMemInfo,
+                                                  &asInitInfoKM.hKernelEDMStatusBufferMemInfo,
 #else
-                                                  &psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo,
+                                                  &psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo,
 #endif
-                                                  psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo,
+                                                  psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo,
                                                   PVRSRV_HANDLE_TYPE_MEM_INFO);
        if (eError != PVRSRV_OK)
        {
@@ -1738,7 +1759,6 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
        }
 #endif
 
-
        for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++)
        {
 #if defined (SUPPORT_SID_INTERFACE)
@@ -1828,6 +1848,18 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
                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);
@@ -2001,6 +2033,11 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
        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(PVRSRV_USSE_EDM_STATUS_DEBUG)
 #if defined (SUPPORT_SID_INTERFACE)
@@ -2015,18 +2052,6 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
 #endif
 #endif
 
-#if defined(SGX_FEATURE_SPM_MODE_0)
-#if defined (SUPPORT_SID_INTERFACE)
-       eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelTmpDPMStateMemInfo);
-#else
-       eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelTmpDPMStateMemInfo);
-#endif
-       if (eError != PVRSRV_OK)
-       {
-               bDissociateFailed = IMG_TRUE;
-       }
-#endif
-
        for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++)
        {
 #if defined (SUPPORT_SID_INTERFACE)
@@ -2053,12 +2078,18 @@ SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID,
                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
 
index 7b3cd7a..9860c31 100755 (executable)
@@ -38,8 +38,9 @@ static IMG_VOID
 BM_FreeMemory (IMG_VOID *pH, IMG_UINTPTR_T base, BM_MAPPING *psMapping);
 static IMG_BOOL
 BM_ImportMemory(IMG_VOID *pH, IMG_SIZE_T uSize,
-                                       IMG_SIZE_T *pActualSize, BM_MAPPING **ppsMapping,
-                                       IMG_UINT32 uFlags, IMG_UINTPTR_T *pBase);
+                               IMG_SIZE_T *pActualSize, BM_MAPPING **ppsMapping,
+                               IMG_UINT32 uFlags, IMG_PVOID pvPrivData,
+                               IMG_UINT32 ui32PrivDataLength, IMG_UINTPTR_T *pBase);
 
 static IMG_BOOL
 DevMemoryAlloc (BM_CONTEXT *pBMContext,
@@ -52,13 +53,15 @@ static IMG_VOID
 DevMemoryFree (BM_MAPPING *pMapping);
 
 static IMG_BOOL
-AllocMemory (BM_CONTEXT                                *pBMContext,
-                               BM_HEAP                         *psBMHeap,
-                               IMG_DEV_VIRTADDR        *psDevVAddr,
-                               IMG_SIZE_T                      uSize,
-                               IMG_UINT32                      uFlags,
-                               IMG_UINT32                      uDevVAddrAlignment,
-                               BM_BUF                          *pBuf)
+AllocMemory (BM_CONTEXT                        *pBMContext,
+                        BM_HEAP                        *psBMHeap,
+                        IMG_DEV_VIRTADDR       *psDevVAddr,
+                        IMG_SIZE_T                     uSize,
+                        IMG_UINT32                     uFlags,
+                        IMG_UINT32                     uDevVAddrAlignment,
+                        IMG_PVOID                      pvPrivData,
+                        IMG_UINT32                     ui32PrivDataLength,
+                        BM_BUF                         *pBuf)
 {
        BM_MAPPING                      *pMapping;
        IMG_UINTPTR_T           uOffset;
@@ -105,6 +108,8 @@ AllocMemory (BM_CONTEXT                             *pBMContext,
                                          uFlags,
                                          uDevVAddrAlignment,
                                          0,
+                                         pvPrivData,
+                                         ui32PrivDataLength,
                                          (IMG_UINTPTR_T *)&(pBuf->DevVAddr.uiAddr)))
                {
                        PVR_DPF((PVR_DBG_ERROR, "AllocMemory: RA_Alloc(0x%x) FAILED", uSize));
@@ -175,15 +180,22 @@ AllocMemory (BM_CONTEXT                           *pBMContext,
                }
                else
                {
+                       IMG_BOOL bResult;
                        
 
                        
-                       pBMContext->psDeviceNode->pfnMMUAlloc (psBMHeap->pMMUHeap,
+                       bResult = pBMContext->psDeviceNode->pfnMMUAlloc (psBMHeap->pMMUHeap,
                                                                                                        uSize,
                                                                                                        IMG_NULL,
                                                                                                        0,
                                                                                                        uDevVAddrAlignment,
                                                                                                        &pBuf->DevVAddr);
+
+                       if(!bResult)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "AllocMemory: MMUAlloc failed"));
+                               return IMG_FALSE;
+                       }
                }
 
                
@@ -907,9 +919,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;
@@ -1059,6 +1071,9 @@ BM_CreateHeap (IMG_HANDLE hBMContext,
        psBMHeap->sDevArena.ui32DataPageSize = psDevMemHeapInfo->ui32DataPageSize;
        psBMHeap->sDevArena.psDeviceMemoryHeapInfo = psDevMemHeapInfo;
        psBMHeap->ui32Attribs = psDevMemHeapInfo->ui32Attribs;
+#if defined(SUPPORT_MEMORY_TILING)
+       psBMHeap->ui32XTileStride = psDevMemHeapInfo->ui32XTileStride;
+#endif
 
        
        psBMHeap->pBMContext = pBMContext;
@@ -1182,6 +1197,8 @@ BM_Alloc (  IMG_HANDLE                    hDevMemHeap,
                        IMG_SIZE_T                      uSize,
                        IMG_UINT32                      *pui32Flags,
                        IMG_UINT32                      uDevVAddrAlignment,
+                       IMG_PVOID                       pvPrivData,
+                       IMG_UINT32                      ui32PrivDataLength,
                        BM_HANDLE                       *phBuf)
 {
        BM_BUF *pBuf;
@@ -1231,6 +1248,8 @@ BM_Alloc (  IMG_HANDLE                    hDevMemHeap,
                                        uSize,
                                        uFlags,
                                        uDevVAddrAlignment,
+                                       pvPrivData,
+                                       ui32PrivDataLength,
                                        pBuf) != IMG_TRUE)
        {
                OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof (BM_BUF), pBuf, IMG_NULL);
@@ -1817,6 +1836,8 @@ XProcWorkaroundAllocShareable(RA_ARENA *psArena,
                               IMG_UINT32 ui32AllocFlags,
                               IMG_UINT32 ui32Size,
                               IMG_UINT32 ui32PageSize,
+                                                         IMG_PVOID pvPrivData,
+                                                         IMG_UINT32 ui32PrivDataLength,
                               IMG_VOID **ppvCpuVAddr,
                               IMG_HANDLE *phOSMemHandle)
 {
@@ -1881,6 +1902,8 @@ XProcWorkaroundAllocShareable(RA_ARENA *psArena,
                                                   0,
                            ui32PageSize,
                                                   0,
+                                                  pvPrivData,
+                                                  ui32PrivDataLength,
                                                   (IMG_UINTPTR_T *)&sSysPAddr.uiAddr))
                        {
                                PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: RA_Alloc(0x%x) FAILED", ui32Size));
@@ -1911,6 +1934,8 @@ XProcWorkaroundAllocShareable(RA_ARENA *psArena,
             if (OSAllocPages(ui32AllocFlags,
                              ui32Size,
                              ui32PageSize,
+                                                        pvPrivData,
+                                                        ui32PrivDataLength,
                              (IMG_VOID **)&gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr,
                              &gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle) != PVRSRV_OK)
             {
@@ -2022,6 +2047,8 @@ BM_ImportMemory (IMG_VOID *pH,
                          IMG_SIZE_T *pActualSize,
                          BM_MAPPING **ppsMapping,
                          IMG_UINT32 uFlags,
+                         IMG_PVOID pvPrivData,
+                         IMG_UINT32 ui32PrivDataLength,
                          IMG_UINTPTR_T *pBase)
 {
        BM_MAPPING *pMapping;
@@ -2086,6 +2113,12 @@ BM_ImportMemory (IMG_VOID *pH,
                IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs | PVRSRV_MEM_XPROC;
         IMG_BOOL bBadBackingStoreType;
 
+
+        if(uFlags & PVRSRV_MEM_ION)
+        {
+            ui32Attribs |= PVRSRV_MEM_ION;
+        }
+
         bBadBackingStoreType = IMG_TRUE; 
 
                if ((ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) != 0)
@@ -2113,8 +2146,10 @@ BM_ImportMemory (IMG_VOID *pH,
                
                if (XProcWorkaroundAllocShareable(IMG_NULL,
                                           ui32Attribs,
-                                                          (IMG_UINT32)uPSize,
+                                                                                 (IMG_UINT32)uPSize,
                                           pBMHeap->sDevArena.ui32DataPageSize,
+                                                                                 pvPrivData,
+                                                                                 ui32PrivDataLength,
                                           (IMG_VOID **)&pMapping->CpuVAddr,
                                           &pMapping->hOSMemHandle) != PVRSRV_OK)
                {
@@ -2154,6 +2189,8 @@ BM_ImportMemory (IMG_VOID *pH,
                                               ui32Attribs,
                                               (IMG_UINT32)uPSize,
                                               pBMHeap->sDevArena.ui32DataPageSize,
+                                                                                         pvPrivData,
+                                                                                         ui32PrivDataLength,
                                               (IMG_VOID **)&pMapping->CpuVAddr,
                                               &pMapping->hOSMemHandle) != PVRSRV_OK)
             {
@@ -2191,10 +2228,18 @@ BM_ImportMemory (IMG_VOID *pH,
                        ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK);
                }
 
-               
+               if (pMapping->ui32Flags & PVRSRV_MEM_ALLOCATENONCACHEDMEM)
+               {
+                       ui32Attribs &= ~PVRSRV_MEM_ALLOCATENONCACHEDMEM;
+                       ui32Attribs |= (pMapping->ui32Flags & PVRSRV_MEM_ALLOCATENONCACHEDMEM);
+               }
+
+
                if (OSAllocPages(ui32Attribs,
                                                 uPSize,
                                                 pBMHeap->sDevArena.ui32DataPageSize,
+                                                pvPrivData,
+                                                ui32PrivDataLength,
                                                 (IMG_VOID **)&pMapping->CpuVAddr,
                                                 &pMapping->hOSMemHandle) != PVRSRV_OK)
                {
@@ -2229,6 +2274,8 @@ BM_ImportMemory (IMG_VOID *pH,
                                           0,
                                           pBMHeap->sDevArena.ui32DataPageSize,
                                           0,
+                                          pvPrivData,
+                                          ui32PrivDataLength,
                                           (IMG_UINTPTR_T *)&sSysPAddr.uiAddr))
                {
                        PVR_DPF((PVR_DBG_ERROR, "BM_ImportMemory: RA_Alloc(0x%x) FAILED", uPSize));
index d328e2d..9f2b2a5 100755 (executable)
@@ -68,6 +68,10 @@ typedef struct PVRSRV_DC_SWAPCHAIN_TAG
        PVRSRV_DC_BUFFER                                        *psLastFlipBuffer;
        IMG_UINT32                                                      ui32MinSwapInterval;
        IMG_UINT32                                                      ui32MaxSwapInterval;
+#if !defined(SUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED)
+       PVRSRV_KERNEL_SYNC_INFO                         **ppsLastSyncInfos;
+       IMG_UINT32                                                      ui32LastNumSyncInfos;
+#endif
        struct PVRSRV_DISPLAYCLASS_INFO_TAG *psDCInfo;
        struct PVRSRV_DC_SWAPCHAIN_TAG          *psNext;
 } PVRSRV_DC_SWAPCHAIN;
@@ -562,7 +566,7 @@ static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID  pvParam,
 
        if(psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount != 0)
        {
-               PVR_DPF((PVR_DBG_ERROR,"CloseDCDeviceCallBack: system buffer (0x%p) still mapped (refcount = %d)",
+               PVR_DPF((PVR_DBG_MESSAGE,"CloseDCDeviceCallBack: system buffer (0x%p) still mapped (refcount = %d)",
                                &psDCInfo->sSystemBuffer.sDeviceClassBuffer,
                                psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount));
 #if 0
@@ -876,6 +880,14 @@ static PVRSRV_ERROR DestroyDCSwapChain(PVRSRV_DC_SWAPCHAIN *psSwapChain)
                }
        }
 
+#if !defined(SUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED)
+       if (psSwapChain->ppsLastSyncInfos)
+       {
+               OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_KERNEL_SYNC_INFO *) * psSwapChain->ui32LastNumSyncInfos,
+                                       psSwapChain->ppsLastSyncInfos, IMG_NULL);
+       }
+#endif
+
        OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SWAPCHAIN), psSwapChain, IMG_NULL);
        
 
@@ -1288,7 +1300,8 @@ IMG_EXPORT
 PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE   hDeviceKM,
                                                                  IMG_HANDLE    hSwapChainRef,
                                                                  IMG_UINT32    *pui32BufferCount,
-                                                                 IMG_HANDLE    *phBuffer)
+                                                                 IMG_HANDLE    *phBuffer,
+                                                                 IMG_SYS_PHYADDR *psPhyAddr)
 {
        PVRSRV_DISPLAYCLASS_INFO *psDCInfo;
        PVRSRV_DC_SWAPCHAIN *psSwapChain;
@@ -1296,7 +1309,7 @@ PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE      hDeviceKM,
        PVRSRV_ERROR eError;
        IMG_UINT32 i;
 
-       if(!hDeviceKM || !hSwapChainRef || !phBuffer)
+       if(!hDeviceKM || !hSwapChainRef || !phBuffer || !psPhyAddr)
        {
                PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetDCBuffersKM: Invalid parameters"));
                return PVRSRV_ERROR_INVALID_PARAMS;
@@ -1322,6 +1335,32 @@ PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE     hDeviceKM,
                phBuffer[i] = (IMG_HANDLE)&psSwapChain->asBuffer[i];
        }
 
+#if defined(SUPPORT_GET_DC_BUFFERS_SYS_PHYADDRS)
+       for(i = 0; i < *pui32BufferCount; i++)
+       {
+               IMG_UINT32 ui32ByteSize, ui32TilingStride;
+               IMG_SYS_PHYADDR *pPhyAddr;
+               IMG_BOOL bIsContiguous;
+               IMG_HANDLE hOSMapInfo;
+               IMG_VOID *pvVAddr;
+
+               eError = psDCInfo->psFuncTable->pfnGetBufferAddr(psDCInfo->hExtDevice,
+                                                                                                                ahExtBuffer[i],
+                                                                                                                &pPhyAddr,
+                                                                                                                &ui32ByteSize,
+                                                                                                                &pvVAddr,
+                                                                                                                &hOSMapInfo,
+                                                                                                                &bIsContiguous,
+                                                                                                                &ui32TilingStride);
+               if(eError != PVRSRV_OK)
+               {
+                       break;
+               }
+
+               psPhyAddr[i] = *pPhyAddr;
+       }
+#endif
+
        return eError;
 }
 
@@ -1407,7 +1446,9 @@ PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE    hDeviceKM,
                                                                        IMG_NULL,
                                                                        ui32NumSrcSyncs,
                                                                        apsSrcSync,
-                                                                       sizeof(DISPLAYCLASS_FLIP_COMMAND) + (sizeof(IMG_RECT) * ui32ClipRectCount));
+                                                                       sizeof(DISPLAYCLASS_FLIP_COMMAND) + (sizeof(IMG_RECT) * ui32ClipRectCount),
+                                                                       IMG_NULL,
+                                                                       IMG_NULL);
        if(eError != PVRSRV_OK)
        {
                PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to get space in queue"));
@@ -1475,6 +1516,279 @@ Exit:
        return eError;
 }
 
+typedef struct _CALLBACK_DATA_
+{
+       IMG_PVOID       pvPrivData;
+       IMG_UINT32      ui32PrivDataLength;
+       IMG_PVOID       ppvMemInfos;
+       IMG_UINT32      ui32NumMemInfos;
+} CALLBACK_DATA;
+
+static IMG_VOID FreePrivateData(IMG_HANDLE hCallbackData)
+{
+       CALLBACK_DATA *psCallbackData = hCallbackData;
+
+       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psCallbackData->ui32PrivDataLength,
+                         psCallbackData->pvPrivData, IMG_NULL);
+       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                         sizeof(IMG_VOID *) * psCallbackData->ui32NumMemInfos,
+                         psCallbackData->ppvMemInfos, IMG_NULL);
+       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(CALLBACK_DATA), hCallbackData, IMG_NULL);
+}
+
+IMG_EXPORT
+PVRSRV_ERROR PVRSRVSwapToDCBuffer2KM(IMG_HANDLE        hDeviceKM,
+                                                                        IMG_HANDLE     hSwapChain,
+                                                                        IMG_UINT32     ui32SwapInterval,
+                                                                        PVRSRV_KERNEL_MEM_INFO **ppsMemInfos,
+                                                                        PVRSRV_KERNEL_SYNC_INFO **ppsSyncInfos,
+                                                                        IMG_UINT32     ui32NumMemSyncInfos,
+                                                                        IMG_PVOID      pvPrivData,
+                                                                        IMG_UINT32     ui32PrivDataLength)
+{
+       PVRSRV_KERNEL_SYNC_INFO **ppsCompiledSyncInfos;
+       IMG_UINT32 i, ui32NumCompiledSyncInfos;
+       DISPLAYCLASS_FLIP_COMMAND2 *psFlipCmd;
+       PVRSRV_DISPLAYCLASS_INFO *psDCInfo;
+       PVRSRV_DC_SWAPCHAIN *psSwapChain;
+       PVRSRV_ERROR eError = PVRSRV_OK;
+       CALLBACK_DATA *psCallbackData;
+       PVRSRV_QUEUE_INFO *psQueue;
+       PVRSRV_COMMAND *psCommand;
+       IMG_PVOID *ppvMemInfos;
+       SYS_DATA *psSysData;
+
+       if(!hDeviceKM || !hSwapChain || !ppsMemInfos || !ppsSyncInfos || ui32NumMemSyncInfos < 1)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Invalid parameters"));
+               return PVRSRV_ERROR_INVALID_PARAMS;
+       }
+
+       psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChain)->psSwapChain;
+       psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM);
+
+
+       if(ui32SwapInterval < psSwapChain->ui32MinSwapInterval ||
+          ui32SwapInterval > psSwapChain->ui32MaxSwapInterval)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Invalid swap interval. Requested %u, Allowed range %u-%u",
+                                ui32SwapInterval, psSwapChain->ui32MinSwapInterval, psSwapChain->ui32MaxSwapInterval));
+               return PVRSRV_ERROR_INVALID_SWAPINTERVAL;
+       }
+
+       eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         sizeof(CALLBACK_DATA),
+                                         (IMG_VOID **)&psCallbackData, IMG_NULL,
+                                         "PVRSRVSwapToDCBuffer2KM callback data");
+       if (eError != PVRSRV_OK)
+       {
+               return eError;
+       }
+
+       psCallbackData->pvPrivData = pvPrivData;
+       psCallbackData->ui32PrivDataLength = ui32PrivDataLength;
+
+
+       if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                 sizeof(IMG_VOID *) * ui32NumMemSyncInfos,
+                                 (IMG_VOID **)&ppvMemInfos, IMG_NULL,
+                                 "Swap Command Meminfos") != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to allocate space for meminfo list"));
+               psCallbackData->ppvMemInfos = IMG_NULL;
+               goto Exit;
+       }
+
+       for(i = 0; i < ui32NumMemSyncInfos; i++)
+       {
+               ppvMemInfos[i] = ppsMemInfos[i];
+       }
+
+       psCallbackData->ppvMemInfos = ppvMemInfos;
+       psCallbackData->ui32NumMemInfos = ui32NumMemSyncInfos;
+
+
+       psQueue = psSwapChain->psQueue;
+
+#if !defined(SUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED)
+       if(psSwapChain->ppsLastSyncInfos)
+       {
+               IMG_UINT32 ui32NumUniqueSyncInfos = psSwapChain->ui32LastNumSyncInfos;
+               IMG_UINT32 j;
+
+               for(j = 0; j < psSwapChain->ui32LastNumSyncInfos; j++)
+               {
+                       for(i = 0; i < ui32NumMemSyncInfos; i++)
+                       {
+                               if(psSwapChain->ppsLastSyncInfos[j] == ppsSyncInfos[i])
+                               {
+                                       psSwapChain->ppsLastSyncInfos[j] = IMG_NULL;
+                                       ui32NumUniqueSyncInfos--;
+                               }
+                       }
+               }
+
+               ui32NumCompiledSyncInfos = ui32NumMemSyncInfos + ui32NumUniqueSyncInfos;
+
+
+               if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         sizeof(PVRSRV_KERNEL_SYNC_INFO *) * ui32NumCompiledSyncInfos,
+                                         (IMG_VOID **)&ppsCompiledSyncInfos, IMG_NULL,
+                                         "Compiled syncinfos") != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to allocate space for meminfo list"));
+                       goto Exit;
+               }
+
+               OSMemCopy(ppsCompiledSyncInfos, ppsSyncInfos, sizeof(PVRSRV_KERNEL_SYNC_INFO *) * ui32NumMemSyncInfos);
+               for(j = 0, i = ui32NumMemSyncInfos; j < psSwapChain->ui32LastNumSyncInfos; j++)
+               {
+                       if(psSwapChain->ppsLastSyncInfos[j])
+                       {
+                               ppsCompiledSyncInfos[i] = psSwapChain->ppsLastSyncInfos[j];
+                               i++;
+                       }
+               }
+       }
+       else
+#endif
+       {
+               ppsCompiledSyncInfos = ppsSyncInfos;
+               ui32NumCompiledSyncInfos = ui32NumMemSyncInfos;
+       }
+
+
+       eError = PVRSRVInsertCommandKM (psQueue,
+                                                                       &psCommand,
+                                                                       psDCInfo->ui32DeviceID,
+                                                                       DC_FLIP_COMMAND,
+                                                                       0,
+                                                                       IMG_NULL,
+                                                                       ui32NumCompiledSyncInfos,
+                                                                       ppsCompiledSyncInfos,
+                                                                       sizeof(DISPLAYCLASS_FLIP_COMMAND2),
+                                                                       FreePrivateData,
+                                                                       psCallbackData);
+
+       if (ppsCompiledSyncInfos != ppsSyncInfos)
+       {
+               OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                         sizeof(PVRSRV_KERNEL_SYNC_INFO *) * ui32NumCompiledSyncInfos,
+                         (IMG_VOID *)ppsCompiledSyncInfos,
+                         IMG_NULL);
+       }
+       if(eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to get space in queue"));
+               goto Exit;
+       }
+
+
+       psFlipCmd = (DISPLAYCLASS_FLIP_COMMAND2*)psCommand->pvData;
+
+
+       psFlipCmd->hUnused = IMG_NULL;
+
+
+       psFlipCmd->hExtDevice = psDCInfo->hExtDevice;
+
+
+       psFlipCmd->hExtSwapChain = psSwapChain->hExtSwapChain;
+
+
+       psFlipCmd->ui32SwapInterval = ui32SwapInterval;
+
+
+       psFlipCmd->pvPrivData = pvPrivData;
+       psFlipCmd->ui32PrivDataLength = ui32PrivDataLength;
+
+       psFlipCmd->ppsMemInfos = (PDC_MEM_INFO *)ppvMemInfos;
+       psFlipCmd->ui32NumMemInfos = ui32NumMemSyncInfos;
+
+       SysAcquireData(&psSysData);
+
+
+       {
+               if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH)
+               {
+                       OSFlushCPUCacheKM();
+               }
+               else if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN)
+               {
+                       OSCleanCPUCacheKM();
+               }
+
+               psSysData->ePendingCacheOpType = PVRSRV_MISC_INFO_CPUCACHEOP_NONE;
+       }
+
+
+       eError = PVRSRVSubmitCommandKM (psQueue, psCommand);
+       if (eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to submit command"));
+               goto Exit;
+       }
+
+
+       psCallbackData = IMG_NULL;
+
+
+
+       eError = OSScheduleMISR(psSysData);
+
+       if (eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to schedule MISR"));
+               goto Exit;
+       }
+
+#if !defined(SUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED)
+
+       if (psSwapChain->ui32LastNumSyncInfos < ui32NumMemSyncInfos)
+       {
+               if (psSwapChain->ppsLastSyncInfos)
+               {
+                       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_KERNEL_SYNC_INFO *) * psSwapChain->ui32LastNumSyncInfos,
+                                               psSwapChain->ppsLastSyncInfos, IMG_NULL);
+               }
+
+               if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         sizeof(PVRSRV_KERNEL_SYNC_INFO *) * ui32NumMemSyncInfos,
+                                         (IMG_VOID **)&psSwapChain->ppsLastSyncInfos, IMG_NULL,
+                                         "Last syncinfos") != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBuffer2KM: Failed to allocate space for meminfo list"));
+                       goto Exit;
+               }
+       }
+
+       psSwapChain->ui32LastNumSyncInfos = ui32NumMemSyncInfos;
+
+       for(i = 0; i < ui32NumMemSyncInfos; i++)
+       {
+               psSwapChain->ppsLastSyncInfos[i] = ppsSyncInfos[i];
+       }
+#endif
+
+Exit:
+       if (psCallbackData)
+       {
+               if(psCallbackData->ppvMemInfos)
+               {
+                       OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP,
+                                         sizeof(IMG_VOID *) * psCallbackData->ui32NumMemInfos,
+                                         psCallbackData->ppvMemInfos, IMG_NULL);
+               }
+               OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(CALLBACK_DATA), psCallbackData, IMG_NULL);
+       }
+       if(eError == PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE)
+       {
+               eError = PVRSRV_ERROR_RETRY;
+       }
+
+       return eError;
+}
+
 
 IMG_EXPORT
 PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM,
@@ -1548,7 +1862,9 @@ PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE    hDeviceKM,
                                                                        IMG_NULL,
                                                                        ui32NumSrcSyncs,
                                                                        apsSrcSync,
-                                                                       sizeof(DISPLAYCLASS_FLIP_COMMAND));
+                                                                       sizeof(DISPLAYCLASS_FLIP_COMMAND),
+                                                                       IMG_NULL,
+                                                                       IMG_NULL);
        if(eError != PVRSRV_OK)
        {
                PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to get space in queue"));
@@ -1612,8 +1928,8 @@ Exit:
 
 IMG_EXPORT
 PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE       hDeviceKM,
-                                                                       IMG_UINT32              *pui32BufferIndex,
-                                                                       IMG_UINT32              *pui32FlipChainID)
+                                       IMG_UINT32              *pui32BufferIndex,
+                                       IMG_UINT32              *pui32FlipChainID)
 {
        PVRSRV_ERROR eError = PVRSRV_OK;
        PVRSRV_DISPLAYCLASS_INFO *psDCInfo;
@@ -1639,15 +1955,15 @@ PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE        hDeviceKM,
        psSwapChain = psDCInfo->psDCSwapChainCur;
 
        eError = psDCInfo->psFuncTable->pfnGetDCFrontBuffer(psDCInfo->hExtDevice,
-                                                       pui32FlipChainID,
-                                                       &frontBuffer);
+                       pui32FlipChainID,
+                       &frontBuffer);
        if (eError != PVRSRV_OK || *pui32FlipChainID == 0)
        {
                goto Exit;
        }
 
        if (psDCInfo->psDCSwapChainCur
-               && psDCInfo->psDCSwapChainCur->ui32SwapChainID == *pui32FlipChainID)
+                       && psDCInfo->psDCSwapChainCur->ui32SwapChainID == *pui32FlipChainID)
        {
                psSwapChain = psDCInfo->psDCSwapChainCur;
        }
@@ -1655,7 +1971,7 @@ PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE  hDeviceKM,
        {
                psSwapChain = psDCInfo->psDCSwapChainShared;
                while (psSwapChain
-                       && psSwapChain->ui32SwapChainID != *pui32FlipChainID)
+                               && psSwapChain->ui32SwapChainID != *pui32FlipChainID)
                {
                        psSwapChain = psSwapChain->psNext;
                }
@@ -1670,7 +1986,7 @@ PVRSRV_ERROR PVRSRVGetDCFrontBufferKM(IMG_HANDLE  hDeviceKM,
        for (bufIndex = 0; bufIndex < psSwapChain->ui32BufferCount; bufIndex++)
        {
                if (frontBuffer ==
-                       psSwapChain->asBuffer[bufIndex].sDeviceClassBuffer.hExtBuffer)
+                               psSwapChain->asBuffer[bufIndex].sDeviceClassBuffer.hExtBuffer)
                {
                        break;
                }
@@ -1761,6 +2077,35 @@ IMG_VOID IMG_CALLCONV PVRSRVSetDCState(IMG_UINT32 ui32State)
                                                                                ui32State);
 }
 
+static PVRSRV_ERROR
+PVRSRVDCMemInfoGetCpuVAddr(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo,
+                                                  IMG_CPU_VIRTADDR *pVAddr)
+{
+       *pVAddr = psKernelMemInfo->pvLinAddrKM;
+       return PVRSRV_OK;
+}
+
+static PVRSRV_ERROR
+PVRSRVDCMemInfoGetCpuPAddr(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo,
+                                                  IMG_SIZE_T uByteOffset, IMG_CPU_PHYADDR *pPAddr)
+{
+       *pPAddr = OSMemHandleToCpuPAddr(psKernelMemInfo->sMemBlk.hOSMemHandle, uByteOffset);
+       return PVRSRV_OK;
+}
+
+static PVRSRV_ERROR
+PVRSRVDCMemInfoGetByteSize(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo,
+                                                  IMG_SIZE_T *uByteSize)
+{
+       *uByteSize = psKernelMemInfo->uAllocSize;
+       return PVRSRV_OK;
+}
+
+static IMG_BOOL
+PVRSRVDCMemInfoIsPhysContig(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo)
+{
+       return OSMemHandleIsPhysContig(psKernelMemInfo->sMemBlk.hOSMemHandle);
+}
 
 IMG_EXPORT
 IMG_BOOL PVRGetDisplayClassJTable(PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable)
@@ -1781,7 +2126,10 @@ IMG_BOOL PVRGetDisplayClassJTable(PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable)
 #if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS)
        psJTable->pfnPVRSRVFreeCmdCompletePacket = &PVRSRVFreeCommandCompletePacketKM;
 #endif
-
+       psJTable->pfnPVRSRVDCMemInfoGetCpuVAddr = &PVRSRVDCMemInfoGetCpuVAddr;
+       psJTable->pfnPVRSRVDCMemInfoGetCpuPAddr = &PVRSRVDCMemInfoGetCpuPAddr;
+       psJTable->pfnPVRSRVDCMemInfoGetByteSize = &PVRSRVDCMemInfoGetByteSize;
+       psJTable->pfnPVRSRVDCMemInfoIsPhysContig = &PVRSRVDCMemInfoIsPhysContig;
        return IMG_TRUE;
 }
 
@@ -1832,11 +2180,11 @@ static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID  pvParam,
                }
        }
 
-    if(psBCInfo->ui32RefCount > 0)
-    {
-        // reference count may be not increased if buffer count is zero
-           psBCInfo->ui32RefCount--;
-    }
+       if(psBCInfo->ui32RefCount > 0)
+       {
+               // reference count may be not increased if buffer count is zero
+               psBCInfo->ui32RefCount--;
+       }
 
        if(psBCInfo->ui32RefCount == 0)
        {
@@ -1945,12 +2293,12 @@ PVRSRV_ERROR PVRSRVOpenBCDeviceKM (PVRSRV_PER_PROCESS_DATA      *psPerProc,
 
                
                psBCInfo->ui32BufferCount = sBufferInfo.ui32BufferCount;
-               
-        if(sBufferInfo.ui32BufferCount == 0)
-        {
-            // reference count is not increased if buffer count is zero
-            psBCInfo->ui32RefCount = 0;
-        }
+
+               if(sBufferInfo.ui32BufferCount == 0)
+               {
+                       // reference count is not increased if buffer count is zero
+                       psBCInfo->ui32RefCount = 0;
+               }
                
                eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP,
                                                          sizeof(PVRSRV_BC_BUFFER) * sBufferInfo.ui32BufferCount,
index b95d2f3..7370a5a 100755 (executable)
@@ -37,6 +37,8 @@ static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE         hDevCookie,
                                                                        IMG_UINT32              ui32Flags,
                                                                        IMG_SIZE_T              ui32Size,
                                                                        IMG_SIZE_T              ui32Alignment,
+                                                                       IMG_PVOID               pvPrivData,
+                                                                       IMG_UINT32              ui32PrivDataLength,
                                                                        PVRSRV_KERNEL_MEM_INFO  **ppsMemInfo);
 
 typedef struct _RESMAN_MAP_DEVICE_MEM_DATA_
@@ -96,6 +98,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie,
                psHeapInfo[i].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase;
                psHeapInfo[i].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize;
                psHeapInfo[i].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs;
+               psHeapInfo[i].ui32XTileStride = psDeviceMemoryHeap[i].ui32XTileStride;
        }
 
        for(; i < PVRSRV_MAX_CLIENT_HEAPS; i++)
@@ -175,6 +178,12 @@ 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(SUPPORT_MEMORY_TILING)
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = psDeviceMemoryHeap[i].ui32XTileStride;
+                               #else
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = 0;
+                               #endif
+
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
                                pbShared[ui32ClientHeapCount] = IMG_TRUE;
 #endif
@@ -204,6 +213,11 @@ 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(SUPPORT_MEMORY_TILING)
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = psDeviceMemoryHeap[i].ui32XTileStride;
+                               #else
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = 0;
+                               #endif
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
                                pbShared[ui32ClientHeapCount] = IMG_FALSE;
 #endif
@@ -286,6 +300,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;
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = psDeviceMemoryHeap[i].ui32XTileStride;
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
                                pbShared[ui32ClientHeapCount] = IMG_TRUE;
 #endif
@@ -315,6 +330,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;
+                               psHeapInfo[ui32ClientHeapCount].ui32XTileStride = psDeviceMemoryHeap[i].ui32XTileStride;
 #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE)
                                pbShared[ui32ClientHeapCount] = IMG_FALSE;
 #endif
@@ -333,11 +349,13 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE                                 hDevCookie
 
 
 static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE          hDevCookie,
-                                                                       IMG_HANDLE              hDevMemHeap,
-                                                                       IMG_UINT32              ui32Flags,
-                                                                       IMG_SIZE_T              ui32Size,
-                                                                       IMG_SIZE_T              ui32Alignment,
-                                                                       PVRSRV_KERNEL_MEM_INFO  **ppsMemInfo)
+                                                                  IMG_HANDLE           hDevMemHeap,
+                                                                  IMG_UINT32           ui32Flags,
+                                                                  IMG_SIZE_T           ui32Size,
+                                                                  IMG_SIZE_T           ui32Alignment,
+                                                                  IMG_PVOID            pvPrivData,
+                                                                  IMG_UINT32           ui32PrivDataLength,
+                                                                  PVRSRV_KERNEL_MEM_INFO **ppsMemInfo)
 {
        PVRSRV_KERNEL_MEM_INFO  *psMemInfo;
        BM_HANDLE               hBuffer;
@@ -370,6 +388,8 @@ static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE               hDevCookie,
                                                        ui32Size,
                                                        &psMemInfo->ui32Flags,
                                                        IMG_CAST_TO_DEVVADDR_UINT(ui32Alignment),
+                                                       pvPrivData,
+                                                       ui32PrivDataLength,
                                                        &hBuffer);
 
        if (!bBMError)
@@ -405,7 +425,7 @@ static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE               hDevCookie,
        return (PVRSRV_OK);
 }
 
-static PVRSRV_ERROR FreeDeviceMem2(PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_BOOL bFromAllocator)
+static PVRSRV_ERROR FreeDeviceMem2(PVRSRV_KERNEL_MEM_INFO *psMemInfo, PVRSRV_FREE_CALLBACK_ORIGIN eCallbackOrigin)
 {
        BM_HANDLE               hBuffer;
 
@@ -417,13 +437,21 @@ static PVRSRV_ERROR FreeDeviceMem2(PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_BOOL b
        hBuffer = psMemInfo->sMemBlk.hBuffer;
 
        
-       if (bFromAllocator)
-               BM_Free(hBuffer, psMemInfo->ui32Flags);
-       else
-               BM_FreeExport(hBuffer, psMemInfo->ui32Flags);
+       switch(eCallbackOrigin)
+       {
+               case PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR:
+                       BM_Free(hBuffer, psMemInfo->ui32Flags);
+                       break;
+               case PVRSRV_FREE_CALLBACK_ORIGIN_IMPORTER:
+                       BM_FreeExport(hBuffer, psMemInfo->ui32Flags);
+                       break;
+               default:
+                       break;
+       }
 
        
-       if ((psMemInfo->pvSysBackupBuffer) && bFromAllocator)
+       if (psMemInfo->pvSysBackupBuffer &&
+               eCallbackOrigin == PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR)
        {
                
                OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->uAllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL);
@@ -504,6 +532,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE                                  hDevCookie,
                                                        PVRSRV_MEM_CACHE_CONSISTENT,
                                                        sizeof(PVRSRV_SYNC_DATA),
                                                        sizeof(IMG_UINT32),
+                                                       IMG_NULL,
+                                                       0,
                                                        &psKernelSyncInfo->psSyncDataMemInfoKM);
 
        if (eError != PVRSRV_OK)
@@ -523,6 +553,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE                                  hDevCookie,
        psSyncData->ui32WriteOpsComplete = 0;
        psSyncData->ui32ReadOpsPending = 0;
        psSyncData->ui32ReadOpsComplete = 0;
+       psSyncData->ui32ReadOps2Pending = 0;
+       psSyncData->ui32ReadOps2Complete = 0;
        psSyncData->ui32LastOpDumpVal = 0;
        psSyncData->ui32LastReadOpDumpVal = 0;
 
@@ -538,6 +570,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE                                  hDevCookie,
 
        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->sReadOps2CompleteDevVAddr.uiAddr = psKernelSyncInfo->psSyncDataMemInfoKM->sDevVAddr.uiAddr + offsetof(PVRSRV_SYNC_DATA, ui32ReadOps2Complete);
        psKernelSyncInfo->ui32UID = g_ui32SyncUID++;
 
        
@@ -693,9 +726,10 @@ static PVRSRV_ERROR FlushKernelOps(PVRSRV_SYNC_DATA *psSyncData)
 }
 #endif 
 
-static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
-                                                                                 IMG_UINT32    ui32Param,
-                                                                                 IMG_BOOL      bFromAllocator)
+IMG_EXPORT
+PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
+                                                                  IMG_UINT32   ui32Param,
+                                                                  PVRSRV_FREE_CALLBACK_ORIGIN eCallbackOrigin)
 {
        PVRSRV_ERROR eError = PVRSRV_OK;
 
@@ -705,39 +739,38 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
        psMemInfo->ui32RefCount--;
 
        
-       if(((psMemInfo->ui32Flags & PVRSRV_MEM_EXPORTED) != 0) && (bFromAllocator == IMG_TRUE))
+       if (psMemInfo->ui32RefCount == 0)
        {
+               if((psMemInfo->ui32Flags & PVRSRV_MEM_EXPORTED) != 0)
+               {
 #if defined (SUPPORT_SID_INTERFACE)
-               IMG_SID hMemInfo = 0;
+                       IMG_SID hMemInfo = 0;
 #else
-               IMG_HANDLE hMemInfo = IMG_NULL;
+                       IMG_HANDLE hMemInfo = IMG_NULL;
 #endif
 
-               
-               eError = PVRSRVFindHandle(KERNEL_HANDLE_BASE,
-                                                                &hMemInfo,
-                                                                psMemInfo,
-                                                                PVRSRV_HANDLE_TYPE_MEM_INFO);
-               if(eError != PVRSRV_OK)
-               {
-                       PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: can't find exported meminfo in the global handle list"));
-                       return eError;
-               }
 
-               
-               eError = PVRSRVReleaseHandle(KERNEL_HANDLE_BASE,
-                                                                       hMemInfo,
-                                                                       PVRSRV_HANDLE_TYPE_MEM_INFO);
-               if(eError != PVRSRV_OK)
-               {
-                       PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: PVRSRVReleaseHandle failed for exported meminfo"));
-                       return eError;
+                       eError = PVRSRVFindHandle(KERNEL_HANDLE_BASE,
+                                                                        &hMemInfo,
+                                                                        psMemInfo,
+                                                                        PVRSRV_HANDLE_TYPE_MEM_INFO);
+                       if(eError != PVRSRV_OK)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: can't find exported meminfo in the global handle list"));
+                               return eError;
+                       }
+
+
+                       eError = PVRSRVReleaseHandle(KERNEL_HANDLE_BASE,
+                                                                               hMemInfo,
+                                                                               PVRSRV_HANDLE_TYPE_MEM_INFO);
+                       if(eError != PVRSRV_OK)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: PVRSRVReleaseHandle failed for exported meminfo"));
+                               return eError;
+                       }
                }
-       }
 
-       
-       if (psMemInfo->ui32RefCount == 0)
-       {
 #if defined (PVRSRV_FLUSH_KERNEL_OPS_LAST_ONLY)
                if (psMemInfo->psKernelSyncInfo)
                {
@@ -773,7 +806,7 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
        
        if (eError == PVRSRV_OK)
        {
-               eError = FreeDeviceMem2(psMemInfo, bFromAllocator);
+               eError = FreeDeviceMem2(psMemInfo, eCallbackOrigin);
        }
 
        return eError;
@@ -787,7 +820,8 @@ static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID  pvParam,
        
        PVR_UNREFERENCED_PARAMETER(bDummy);
 
-       return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE);
+       return FreeMemCallBackCommon(psMemInfo, ui32Param,
+                                                                PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR);
 }
 
 
@@ -819,13 +853,15 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE                                hDevCookie,
 
 
 IMG_EXPORT
-PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE                                   hDevCookie,
-                                                                                                PVRSRV_PER_PROCESS_DATA        *psPerProc,
-                                                                                                IMG_HANDLE                                     hDevMemHeap,
-                                                                                                IMG_UINT32                                     ui32Flags,
-                                                                                                IMG_SIZE_T                                     ui32Size,
-                                                                                                IMG_SIZE_T                                     ui32Alignment,
-                                                                                                PVRSRV_KERNEL_MEM_INFO         **ppsMemInfo)
+PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE                           hDevCookie,
+                                                                                                 PVRSRV_PER_PROCESS_DATA       *psPerProc,
+                                                                                                 IMG_HANDLE                            hDevMemHeap,
+                                                                                                 IMG_UINT32                            ui32Flags,
+                                                                                                 IMG_SIZE_T                            ui32Size,
+                                                                                                 IMG_SIZE_T                            ui32Alignment,
+                                                                                                 IMG_PVOID                                     pvPrivData,
+                                                                                                 IMG_UINT32                            ui32PrivDataLength,
+                                                                                                 PVRSRV_KERNEL_MEM_INFO        **ppsMemInfo)
 {
        PVRSRV_KERNEL_MEM_INFO  *psMemInfo;
        PVRSRV_ERROR                    eError;
@@ -854,6 +890,8 @@ PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE                                        hDevCookie,
                                                        ui32Flags,
                                                        ui32Size,
                                                        ui32Alignment,
+                                                       pvPrivData,
+                                                       ui32PrivDataLength,
                                                        &psMemInfo);
 
        if (eError != PVRSRV_OK)
@@ -981,7 +1019,8 @@ static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID  pvParam,
        
        PVR_UNREFERENCED_PARAMETER(bDummy);
 
-       return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE);
+       return FreeMemCallBackCommon(psMemInfo, ui32Param,
+                                                                PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR);
 }
 
 
@@ -1266,7 +1305,8 @@ static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID  pvParam,
        }
 
        
-       eError = FreeMemCallBackCommon(psMapData->psSrcMemInfo, 0, IMG_FALSE);
+       eError = FreeMemCallBackCommon(psMapData->psSrcMemInfo, 0,
+                                                                  PVRSRV_FREE_CALLBACK_ORIGIN_IMPORTER);
 
        OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_MAP_DEVICE_MEM_DATA), psMapData, IMG_NULL);
        
@@ -1508,7 +1548,8 @@ static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID  pvParam,
 
        OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL);
 
-       return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE);
+       return FreeMemCallBackCommon(psMemInfo, ui32Param,
+                                                                PVRSRV_FREE_CALLBACK_ORIGIN_ALLOCATOR);
 }
 
 
index 5b5d1ac..746494a 100755 (executable)
@@ -80,6 +80,8 @@ PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA  *psPerProc,
        if(OSAllocPages(psKernelMemInfo->ui32Flags,
                                        psKernelMemInfo->uAllocSize,
                                        (IMG_UINT32)HOST_PAGESIZE(),
+                                       IMG_NULL,
+                                       0,
                                        &psKernelMemInfo->pvLinAddrKM,
                                        &psKernelMemInfo->sMemBlk.hOSMemHandle)
                != PVRSRV_OK)
index 5c87407..b287797 100755 (executable)
@@ -95,10 +95,11 @@ PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32     ui32CallerID,
        PVRSRV_ERROR    eError;
        SYS_DATA                *psSysData;
        IMG_UINT32              ui32Timeout = 100;
+       IMG_BOOL        bTryLock = (ui32CallerID == ISR_ID);
 
        SysAcquireData(&psSysData);
 
-       eError = OSPowerLockWrap();
+       eError = OSPowerLockWrap(bTryLock);
        if (eError != PVRSRV_OK)
        {
                return eError;
@@ -112,7 +113,7 @@ PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32     ui32CallerID,
                {
                        break;
                }
-               else if (ui32CallerID == ISR_ID)
+               else if (bTryLock)
                {
                        
 
index 5396409..ac63704 100755 (executable)
@@ -35,6 +35,7 @@
 #if defined(TTRACE)
 #include "ttrace.h"
 #endif
+#include "perfkm.h"
 
 #include "pvrversion.h"
 
@@ -263,6 +264,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData)
        PDUMPINIT();
        g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT;
 
+       PERFINIT();
        return eError;
 
 Error:
@@ -283,6 +285,9 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData)
                PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed - invalid param"));
                return;
        }
+
+       PERFDEINIT();
+
 #if defined(TTRACE)
        
        if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTARCE) > 0)
@@ -642,6 +647,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; 
 
@@ -672,6 +702,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;
 }
@@ -808,7 +839,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo)
                                                                                |PVRSRV_MISC_INFO_DDKVERSION_PRESENT
                                                                                |PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT
                                                                                |PVRSRV_MISC_INFO_RESET_PRESENT
-                                                                               |PVRSRV_MISC_INFO_FREEMEM_PRESENT))
+                                                                               |PVRSRV_MISC_INFO_FREEMEM_PRESENT
+                                                                               |PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT))
        {
                PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetMiscInfoKM: invalid state request flags"));
                return PVRSRV_ERROR_INVALID_PARAMS;
@@ -930,8 +962,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo)
                
                psMiscInfo->aui32DDKVersion[0] = PVRVERSION_MAJ;
                psMiscInfo->aui32DDKVersion[1] = PVRVERSION_MIN;
-               psMiscInfo->aui32DDKVersion[2] = PVRVERSION_BRANCH;
-               psMiscInfo->aui32DDKVersion[3] = PVRVERSION_BUILD;
+               psMiscInfo->aui32DDKVersion[2] = PVRVERSION_BUILD_HI;
+               psMiscInfo->aui32DDKVersion[3] = PVRVERSION_BUILD_LO;
 
                pszStr = psMiscInfo->pszMemoryStr;
                ui32StrLen = psMiscInfo->ui32MemoryStrLen;
@@ -990,7 +1022,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo)
 #if defined (SUPPORT_SID_INTERFACE)
                        PVR_DBG_BREAK
 #else
-                       
+
                        psPerProc = PVRSRVFindPerProcessData();
 
                        if(PVRSRVLookupHandle(psPerProc->psHandleBase,
@@ -1025,6 +1057,35 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo)
                }
        }
 
+       if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT) != 0UL)
+       {
+#if !defined (SUPPORT_SID_INTERFACE)
+               PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+               PVRSRV_PER_PROCESS_DATA *psPerProc;
+#endif
+
+               psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT;
+
+#if defined (SUPPORT_SID_INTERFACE)
+               PVR_DBG_BREAK
+#else
+
+               psPerProc = PVRSRVFindPerProcessData();
+
+               if(PVRSRVLookupHandle(psPerProc->psHandleBase,
+                                                         (IMG_PVOID *)&psKernelMemInfo,
+                                                         psMiscInfo->sGetRefCountCtl.u.psKernelMemInfo,
+                                                         PVRSRV_HANDLE_TYPE_MEM_INFO) != PVRSRV_OK)
+               {
+                       PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoKM: "
+                                                                       "Can't find kernel meminfo"));
+                       return PVRSRV_ERROR_INVALID_PARAMS;
+               }
+
+               psMiscInfo->sGetRefCountCtl.ui32RefCount = psKernelMemInfo->ui32RefCount;
+#endif
+       }
+
 #if defined(PVRSRV_RESET_ON_HWTIMEOUT)
        if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_RESET_PRESENT) != 0UL)
        {
index 8925d3c..cf105e5 100755 (executable)
  ******************************************************************************/
 
 #include "services_headers.h"
+#include "pvr_bridge_km.h"
 
 #include "lists.h"
 #include "ttrace.h"
 
+#if defined(SUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED)
+#define DC_NUM_COMMANDS_PER_TYPE               2
+#else
 #define DC_NUM_COMMANDS_PER_TYPE               1
+#endif
 
 typedef struct _DEVICE_COMMAND_DATA_
 {
        PFN_CMD_PROC                    pfnCmdProc;
        PCOMMAND_COMPLETE_DATA  apsCmdCompleteData[DC_NUM_COMMANDS_PER_TYPE];
        IMG_UINT32                              ui32CCBOffset;
+       IMG_UINT32                              ui32MaxDstSyncCount;
+       IMG_UINT32                              ui32MaxSrcSyncCount;
 } DEVICE_COMMAND_DATA;
 
 
@@ -83,11 +90,11 @@ void ProcSeqShowQueue(struct seq_file *sfile,void* el)
                                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].ui32ReadOps2Pending,
+                                                                       psSyncData->ui32ReadOps2Complete,
                                                                        psCmd->psSrcSync[i].ui32WriteOpsPending,
                                                                        psSyncData->ui32WriteOpsComplete,
-                                                                       psCmd->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
+                                                                       psCmd->psSrcSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                                                        psCmd->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr);
                        }
                }
@@ -138,6 +145,48 @@ void* ProcSeqOff2ElementQueue(struct seq_file * sfile, loff_t off)
 #define SYNCOPS_STALE(ui32OpsComplete, ui32OpsPending)                                 \
        ((ui32OpsComplete) >= (ui32OpsPending))
 
+#ifdef INLINE_IS_PRAGMA
+#pragma inline(PVRSRVGetWriteOpsPending)
+#endif
+static INLINE
+IMG_UINT32 PVRSRVGetWriteOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp)
+{
+       IMG_UINT32 ui32WriteOpsPending;
+
+       if(bIsReadOp)
+       {
+               ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending;
+       }
+       else
+       {
+
+
+
+               ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending++;
+       }
+
+       return ui32WriteOpsPending;
+}
+
+#ifdef INLINE_IS_PRAGMA
+#pragma inline(PVRSRVGetReadOpsPending)
+#endif
+static INLINE
+IMG_UINT32 PVRSRVGetReadOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp)
+{
+       IMG_UINT32 ui32ReadOpsPending;
+
+       if(bIsReadOp)
+       {
+               ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOps2Pending++;
+       }
+       else
+       {
+               ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOps2Pending;
+       }
+
+       return ui32ReadOpsPending;
+}
 
 static IMG_VOID QueueDumpCmdComplete(COMMAND_COMPLETE_DATA *psCmdCompleteData,
                                                                         IMG_UINT32                             i,
@@ -151,9 +200,9 @@ static IMG_VOID QueueDumpCmdComplete(COMMAND_COMPLETE_DATA *psCmdCompleteData,
        {
                PVR_LOG(("\t%s %u: ROC DevVAddr:0x%X ROP:0x%x ROC:0x%x, WOC DevVAddr:0x%X WOP:0x%x WOC:0x%x",
                                bIsSrc ? "SRC" : "DEST", i,
-                               psSyncObject[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
-                               psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsPending,
-                               psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete,
+                               psSyncObject[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
+                               psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOps2Pending,
+                               psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOps2Complete,
                                psSyncObject[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
                                psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsPending,
                                psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete))
@@ -503,12 +552,27 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue,
                                                                                                PVRSRV_KERNEL_SYNC_INFO *apsDstSync[],
                                                                                                IMG_UINT32                      ui32SrcSyncCount,
                                                                                                PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[],
-                                                                                               IMG_SIZE_T                      ui32DataByteSize )
+                                                                                               IMG_SIZE_T                      ui32DataByteSize,
+                                                                                               PFN_QUEUE_COMMAND_COMPLETE pfnCommandComplete,
+                                                                                               IMG_HANDLE                      hCallbackData)
 {
        PVRSRV_ERROR    eError;
        PVRSRV_COMMAND  *psCommand;
        IMG_SIZE_T              ui32CommandSize;
        IMG_UINT32              i;
+       SYS_DATA *psSysData;
+       DEVICE_COMMAND_DATA *psDeviceCommandData;
+
+
+       SysAcquireData(&psSysData);
+       psDeviceCommandData = psSysData->apsDeviceCommandData[ui32DevIndex];
+
+       if ((psDeviceCommandData[CommandType].ui32MaxDstSyncCount < ui32DstSyncCount) ||
+          (psDeviceCommandData[CommandType].ui32MaxSrcSyncCount < ui32SrcSyncCount))
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVInsertCommandKM: Too many syncs"));
+               return PVRSRV_ERROR_INVALID_PARAMS;
+       }
 
        
        ui32DataByteSize = (ui32DataByteSize + 3UL) & ~3UL;
@@ -545,6 +609,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO   *psQueue,
                                                                + (ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT)));
        psCommand->uDataSize            = ui32DataByteSize;
 
+       psCommand->pfnCommandComplete = pfnCommandComplete;
+       psCommand->hCallbackData = hCallbackData;
+
        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);
@@ -557,12 +624,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue,
 
                psCommand->psDstSync[i].psKernelSyncInfoKM = apsDstSync[i];
                psCommand->psDstSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsDstSync[i], IMG_FALSE);
-               psCommand->psDstSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE);
+               psCommand->psDstSync[i].ui32ReadOps2Pending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE);
+
+               apsDstSync[i]->ui32RefCount++;
 
                PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVInsertCommandKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x",
-                               i, psCommand->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
+                               i, psCommand->psDstSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCommand->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCommand->psDstSync[i].ui32ReadOpsPending,
+                               psCommand->psDstSync[i].ui32ReadOps2Pending,
                                psCommand->psDstSync[i].ui32WriteOpsPending));
        }
 
@@ -574,12 +643,14 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue,
 
                psCommand->psSrcSync[i].psKernelSyncInfoKM = apsSrcSync[i];
                psCommand->psSrcSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsSrcSync[i], IMG_TRUE);
-               psCommand->psSrcSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE);
+               psCommand->psSrcSync[i].ui32ReadOps2Pending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE);
+
+               apsSrcSync[i]->ui32RefCount++;
 
                PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVInsertCommandKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x",
-                               i, psCommand->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
+                               i, psCommand->psSrcSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCommand->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCommand->psSrcSync[i].ui32ReadOpsPending,
+                               psCommand->psSrcSync[i].ui32ReadOps2Pending,
                                psCommand->psSrcSync[i].ui32WriteOpsPending));
        }
        PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_END, QUEUE_TOKEN_INSERTKM);
@@ -622,8 +693,43 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVSubmitCommandKM(PVRSRV_QUEUE_INFO *psQueue,
        return PVRSRV_OK;
 }
 
+static
+PVRSRV_ERROR CheckIfSyncIsQueued(PVRSRV_SYNC_OBJECT *psSync, COMMAND_COMPLETE_DATA *psCmdData)
+{
+       IMG_UINT32 k;
+
+       if (psCmdData->bInUse)
+       {
+               for (k=0;k<psCmdData->ui32SrcSyncCount;k++)
+               {
+                       if (psSync->psKernelSyncInfoKM == psCmdData->psSrcSync[k].psKernelSyncInfoKM)
+                       {
+                               PVRSRV_SYNC_DATA *psSyncData = psSync->psKernelSyncInfoKM->psSyncData;
+                               IMG_UINT32 ui32WriteOpsComplete = psSyncData->ui32WriteOpsComplete;
+
+
 
 
+                               if (ui32WriteOpsComplete == psSync->ui32WriteOpsPending)
+                               {
+                                       return PVRSRV_OK;
+                               }
+                               else
+                               {
+                                       if (SYNCOPS_STALE(ui32WriteOpsComplete, psSync->ui32WriteOpsPending))
+                                       {
+                                               PVR_DPF((PVR_DBG_WARNING,
+                                                               "CheckIfSyncIsQueued: Stale syncops psSyncData:0x%x ui32WriteOpsComplete:0x%x ui32WriteOpsPending:0x%x",
+                                                               (IMG_UINTPTR_T)psSyncData, ui32WriteOpsComplete, psSync->ui32WriteOpsPending));
+                                               return PVRSRV_OK;
+                                       }
+                               }
+                       }
+               }
+       }
+       return PVRSRV_ERROR_FAILED_DEPENDENCIES;
+}
+
 static
 PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                     *psSysData,
                                                                  PVRSRV_COMMAND        *psCommand,
@@ -647,14 +753,14 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                        *psSysData,
                PVRSRV_SYNC_DATA *psSyncData = psWalkerObj->psKernelSyncInfoKM->psSyncData;
 
                ui32WriteOpsComplete = psSyncData->ui32WriteOpsComplete;
-               ui32ReadOpsComplete = psSyncData->ui32ReadOpsComplete;
+               ui32ReadOpsComplete = psSyncData->ui32ReadOps2Complete;
                
                if ((ui32WriteOpsComplete != psWalkerObj->ui32WriteOpsPending)
-               ||      (ui32ReadOpsComplete != psWalkerObj->ui32ReadOpsPending))
+               ||      (ui32ReadOpsComplete != psWalkerObj->ui32ReadOps2Pending))
                {
                        if (!bFlush ||
                                !SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) ||
-                               !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending))
+                               !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOps2Pending))
                        {
                                return PVRSRV_ERROR_FAILED_DEPENDENCIES;
                        }
@@ -670,15 +776,15 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                        *psSysData,
        {
                PVRSRV_SYNC_DATA *psSyncData = psWalkerObj->psKernelSyncInfoKM->psSyncData;
 
-               ui32ReadOpsComplete = psSyncData->ui32ReadOpsComplete;
+               ui32ReadOpsComplete = psSyncData->ui32ReadOps2Complete;
                ui32WriteOpsComplete = psSyncData->ui32WriteOpsComplete;
                
                if ((ui32WriteOpsComplete != psWalkerObj->ui32WriteOpsPending)
-               || (ui32ReadOpsComplete != psWalkerObj->ui32ReadOpsPending))
+               || (ui32ReadOpsComplete != psWalkerObj->ui32ReadOps2Pending))
                {
                        if (!bFlush &&
                                SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) &&
-                               SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending))
+                               SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOps2Pending))
                        {
                                PVR_DPF((PVR_DBG_WARNING,
                                                "PVRSRVProcessCommand: Stale syncops psSyncData:0x%x ui32WriteOpsComplete:0x%x ui32WriteOpsPending:0x%x",
@@ -687,9 +793,24 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                 *psSysData,
 
                        if (!bFlush ||
                                !SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) ||
-                               !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending))
+                               !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOps2Pending))
                        {
-                               return PVRSRV_ERROR_FAILED_DEPENDENCIES;
+                               IMG_UINT32 j;
+                               PVRSRV_ERROR eError;
+                               IMG_BOOL bFound = IMG_FALSE;
+
+                               psDeviceCommandData = psSysData->apsDeviceCommandData[psCommand->ui32DevIndex];
+                               for (j=0;j<DC_NUM_COMMANDS_PER_TYPE;j++)
+                               {
+                                       eError = CheckIfSyncIsQueued(psWalkerObj, psDeviceCommandData[psCommand->CommandType].apsCmdCompleteData[j]);
+
+                                       if (eError == PVRSRV_OK)
+                                       {
+                                               bFound = IMG_TRUE;
+                                       }
+                               }
+                               if (!bFound)
+                                       return PVRSRV_ERROR_FAILED_DEPENDENCIES;
                        }
                }
                psWalkerObj++;
@@ -724,13 +845,15 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                        *psSysData,
                psCmdCompleteData->psDstSync[i] = psCommand->psDstSync[i];
 
                PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVProcessCommand: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x (CCB:%u)",
-                               i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
+                               i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCmdCompleteData->psDstSync[i].ui32ReadOpsPending,
+                               psCmdCompleteData->psDstSync[i].ui32ReadOps2Pending,
                                psCmdCompleteData->psDstSync[i].ui32WriteOpsPending,
                                ui32CCBOffset));
        }
 
+       psCmdCompleteData->pfnCommandComplete = psCommand->pfnCommandComplete;
+       psCmdCompleteData->hCallbackData = psCommand->hCallbackData;
 
        
        psCmdCompleteData->ui32SrcSyncCount = psCommand->ui32SrcSyncCount;
@@ -739,9 +862,9 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA                  *psSysData,
                psCmdCompleteData->psSrcSync[i] = psCommand->psSrcSync[i];
 
                PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVProcessCommand: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x (CCB:%u)",
-                               i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr,
+                               i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCmdCompleteData->psSrcSync[i].ui32ReadOpsPending,
+                               psCmdCompleteData->psSrcSync[i].ui32ReadOps2Pending,
                                psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending,
                                ui32CCBOffset));
        }
@@ -885,36 +1008,51 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE      hCmdCookie,
        {
                psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete++;
 
+               if (--psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->ui32RefCount == 0)
+               {
+                       PVRSRVFreeSyncInfoKM(psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM);
+               }
+
                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,
+                               i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCmdCompleteData->psDstSync[i].ui32ReadOpsPending,
+                               psCmdCompleteData->psDstSync[i].ui32ReadOps2Pending,
                                psCmdCompleteData->psDstSync[i].ui32WriteOpsPending));
        }
 
        
        for (i=0; i<psCmdCompleteData->ui32SrcSyncCount; i++)
        {
-               psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete++;
+               psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOps2Complete++;
+
+               if (--psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->ui32RefCount == 0)
+               {
+                       PVRSRVFreeSyncInfoKM(psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM);
+               }
 
                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,
+                               i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOps2CompleteDevVAddr.uiAddr,
                                psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr,
-                               psCmdCompleteData->psSrcSync[i].ui32ReadOpsPending,
+                               psCmdCompleteData->psSrcSync[i].ui32ReadOps2Pending,
                                psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending));
        }
 
        PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_END,
                        QUEUE_TOKEN_COMMAND_COMPLETE);
 
+       if (psCmdCompleteData->pfnCommandComplete)
+       {
+               psCmdCompleteData->pfnCommandComplete(psCmdCompleteData->hCallbackData);
+       }
+
        
        psCmdCompleteData->bInUse = IMG_FALSE;
 
@@ -973,7 +1111,8 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32                ui32DevIndex,
        {
                psDeviceCommandData[ui32CmdTypeCounter].pfnCmdProc = ppfnCmdProcList[ui32CmdTypeCounter];
                psDeviceCommandData[ui32CmdTypeCounter].ui32CCBOffset = 0;
-               
+               psDeviceCommandData[ui32CmdTypeCounter].ui32MaxDstSyncCount = ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0];
+               psDeviceCommandData[ui32CmdTypeCounter].ui32MaxSrcSyncCount = ui32MaxSyncsPerCmd[ui32CmdTypeCounter][1];
                for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++)
                {
                        
@@ -1061,6 +1200,7 @@ PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex,
                                
                                if (psCmdCompleteData != IMG_NULL)
                                {
+                                       PVR_ASSERT(psCmdCompleteData->bInUse == IMG_FALSE);
                                        OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, psCmdCompleteData->ui32AllocSize,
                                                          psCmdCompleteData, IMG_NULL);
                                        psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter] = IMG_NULL;
index e93f05f..84a2162 100755 (executable)
@@ -115,6 +115,8 @@ struct _RA_ARENA_
                                                         IMG_SIZE_T *pActualSize,
                                                         BM_MAPPING **ppsMapping,
                                                         IMG_UINT32 uFlags,
+                                                        IMG_PVOID pvPrivData,
+                                                        IMG_UINT32 ui32PrivDataLength,
                                                         IMG_UINTPTR_T *pBase);
        IMG_VOID (*pImportFree) (IMG_VOID *,
                                                 IMG_UINTPTR_T,
@@ -191,6 +193,8 @@ _RequestAllocFail (IMG_VOID *_h,
                                  IMG_SIZE_T *_pActualSize,
                                  BM_MAPPING **_ppsMapping,
                                  IMG_UINT32 _uFlags,
+                                 IMG_PVOID _pvPrivData,
+                                 IMG_UINT32 _ui32PrivDataLength,
                                  IMG_UINTPTR_T *_pBase)
 {
        PVR_UNREFERENCED_PARAMETER (_h);
@@ -199,6 +203,8 @@ _RequestAllocFail (IMG_VOID *_h,
        PVR_UNREFERENCED_PARAMETER (_ppsMapping);
        PVR_UNREFERENCED_PARAMETER (_uFlags);
        PVR_UNREFERENCED_PARAMETER (_pBase);
+       PVR_UNREFERENCED_PARAMETER (_pvPrivData);
+       PVR_UNREFERENCED_PARAMETER (_ui32PrivDataLength);
 
        return IMG_FALSE;
 }
@@ -847,7 +853,9 @@ RA_Create (IMG_CHAR *name,
                   BM_MAPPING *psMapping,
                   IMG_SIZE_T uQuantum,
                   IMG_BOOL (*imp_alloc)(IMG_VOID *, IMG_SIZE_T uSize, IMG_SIZE_T *pActualSize,
-                                    BM_MAPPING **ppsMapping, IMG_UINT32 _flags, IMG_UINTPTR_T *pBase),
+                                                                BM_MAPPING **ppsMapping, IMG_UINT32 _flags,
+                                                                IMG_PVOID pvPrivData, IMG_UINT32 ui32PrivDataLength,
+                                                                IMG_UINTPTR_T *pBase),
                   IMG_VOID (*imp_free) (IMG_VOID *, IMG_UINTPTR_T, BM_MAPPING *),
                   IMG_VOID (*backingstore_free) (IMG_VOID*, IMG_SIZE_T, IMG_SIZE_T, IMG_HANDLE),
                   IMG_VOID *pImportHandle)
@@ -1071,6 +1079,8 @@ RA_Alloc (RA_ARENA *pArena,
                  IMG_UINT32 uFlags,
                  IMG_UINT32 uAlignment,
                  IMG_UINT32 uAlignmentOffset,
+                 IMG_PVOID pvPrivData,
+                 IMG_UINT32 ui32PrivDataLength,
                  IMG_UINTPTR_T *base)
 {
        IMG_BOOL bResult;
@@ -1124,7 +1134,8 @@ RA_Alloc (RA_ARENA *pArena,
 
                bResult =
                        pArena->pImportAlloc (pArena->pImportHandle, uImportSize, &uImportSize,
-                                                                &psImportMapping, uFlags, &import_base);
+                                                                 &psImportMapping, uFlags,
+                                                                 pvPrivData, ui32PrivDataLength, &import_base);
                if (bResult)
                {
                        BT *pBT;
index a71dce4..761cd4c 100755 (executable)
@@ -197,23 +197,32 @@ MMU_PDumpPageTables       (MMU_HEAP *pMMUHeap,
 static IMG_VOID PageTest(IMG_VOID* pMem, IMG_DEV_PHYADDR sDevPAddr);
 #endif
 
+#define PT_DUMP 1
+
 #define PT_DEBUG 0
-#if PT_DEBUG
+#if (PT_DEBUG || PT_DUMP) && defined(PVRSRV_NEED_PVR_DPF)
 static IMG_VOID DumpPT(MMU_PT_INFO *psPTInfoList)
 {
        IMG_UINT32 *p = (IMG_UINT32*)psPTInfoList->PTPageCpuVAddr;
        IMG_UINT32 i;
 
-       
+
        for(i = 0; i < 1024; i += 8)
        {
-               PVR_DPF((PVR_DBG_WARNING,
+               PVR_DPF((PVR_DBG_ERROR,
                                 "%08X %08X %08X %08X %08X %08X %08X %08X\n",
                                 p[i + 0], p[i + 1], p[i + 2], p[i + 3],
                                 p[i + 4], p[i + 5], p[i + 6], p[i + 7]));
        }
 }
+#else
+static INLINE IMG_VOID DumpPT(MMU_PT_INFO *psPTInfoList)
+{
+       PVR_UNREFERENCED_PARAMETER(psPTInfoList);
+}
+#endif
 
+#if PT_DEBUG
 static IMG_VOID CheckPT(MMU_PT_INFO *psPTInfoList)
 {
        IMG_UINT32 *p = (IMG_UINT32*) psPTInfoList->PTPageCpuVAddr;
@@ -226,18 +235,13 @@ static IMG_VOID CheckPT(MMU_PT_INFO *psPTInfoList)
 
        if(psPTInfoList->ui32ValidPTECount != ui32Count)
        {
-               PVR_DPF((PVR_DBG_WARNING, "ui32ValidPTECount: %u ui32Count: %u\n",
+               PVR_DPF((PVR_DBG_ERROR, "ui32ValidPTECount: %u ui32Count: %u\n",
                                 psPTInfoList->ui32ValidPTECount, ui32Count));
                DumpPT(psPTInfoList);
                BUG();
        }
 }
 #else 
-static INLINE IMG_VOID DumpPT(MMU_PT_INFO *psPTInfoList)
-{
-       PVR_UNREFERENCED_PARAMETER(psPTInfoList);
-}
-
 static INLINE IMG_VOID CheckPT(MMU_PT_INFO *psPTInfoList)
 {
        PVR_UNREFERENCED_PARAMETER(psPTInfoList);
@@ -445,10 +449,12 @@ _AllocPageTableMemory (MMU_HEAP *pMMUHeap,
        {
                
                if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                  pMMUHeap->ui32PTSize,
-                                                  SGX_MMU_PAGE_SIZE,
-                                                  (IMG_VOID **)&psPTInfoList->PTPageCpuVAddr,
-                                                  &psPTInfoList->hPTPageOSMemHandle) != PVRSRV_OK)
+                                                pMMUHeap->ui32PTSize,
+                                                SGX_MMU_PAGE_SIZE,
+                                                IMG_NULL,
+                                                0,
+                                                (IMG_VOID **)&psPTInfoList->PTPageCpuVAddr,
+                                                &psPTInfoList->hPTPageOSMemHandle) != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR, "_AllocPageTableMemory: ERROR call to OSAllocPages failed"));
                        return IMG_FALSE;
@@ -483,6 +489,8 @@ _AllocPageTableMemory (MMU_HEAP *pMMUHeap,
                                        0,
                                        SGX_MMU_PAGE_SIZE,
                                        0,
+                                       IMG_NULL,
+                                       0,
                                        &(sSysPAddr.uiAddr))!= IMG_TRUE)
                {
                        PVR_DPF((PVR_DBG_ERROR, "_AllocPageTableMemory: ERROR call to RA_Alloc failed"));
@@ -1273,10 +1281,12 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
        if(psDeviceNode->psLocalDevMemArena == IMG_NULL)
        {
                if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                       SGX_MMU_PAGE_SIZE,
-                                                       SGX_MMU_PAGE_SIZE,
-                                                       &pvPDCpuVAddr,
-                                                       &hPDOSMemHandle) != PVRSRV_OK)
+                                                SGX_MMU_PAGE_SIZE,
+                                                SGX_MMU_PAGE_SIZE,
+                                                IMG_NULL,
+                                                0,
+                                                &pvPDCpuVAddr,
+                                                &hPDOSMemHandle) != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed"));
                        return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES;
@@ -1304,10 +1314,12 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                {
                        
                        if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               &psDevInfo->pvDummyPTPageCpuVAddr,
-                                                               &psDevInfo->hDummyPTPageOSMemHandle) != PVRSRV_OK)
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        IMG_NULL,
+                                                        0,
+                                                        &psDevInfo->pvDummyPTPageCpuVAddr,
+                                                        &psDevInfo->hDummyPTPageOSMemHandle) != PVRSRV_OK)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed"));
                                return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES;
@@ -1327,10 +1339,12 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
 
                        
                        if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               &psDevInfo->pvDummyDataPageCpuVAddr,
-                                                               &psDevInfo->hDummyDataPageOSMemHandle) != PVRSRV_OK)
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        IMG_NULL,
+                                                        0,
+                                                        &psDevInfo->pvDummyDataPageCpuVAddr,
+                                                        &psDevInfo->hDummyDataPageOSMemHandle) != PVRSRV_OK)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed"));
                                return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES;
@@ -1355,10 +1369,12 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                        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)
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        IMG_NULL,
+                                                        0,
+                                                        &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;
@@ -1386,10 +1402,12 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
 
                        
                        if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               SGX_MMU_PAGE_SIZE,
-                                                               &psDevInfo->pvBRN31620DummyPTCpuVAddr,
-                                                               &psDevInfo->hBRN31620DummyPTOSMemHandle) != PVRSRV_OK)
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        SGX_MMU_PAGE_SIZE,
+                                                        IMG_NULL,
+                                                        0,
+                                                        &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;
@@ -1424,6 +1442,8 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                                        0,
                                        SGX_MMU_PAGE_SIZE,
                                        0,
+                                       IMG_NULL,
+                                       0,
                                        &(sSysPAddr.uiAddr))!= IMG_TRUE)
                {
                        PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed"));
@@ -1459,6 +1479,8 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                                                0,
                                                SGX_MMU_PAGE_SIZE,
                                                0,
+                                               IMG_NULL,
+                                               0,
                                                &(sSysPAddr.uiAddr))!= IMG_TRUE)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed"));
@@ -1486,6 +1508,8 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                                                0,
                                                SGX_MMU_PAGE_SIZE,
                                                0,
+                                               IMG_NULL,
+                                               0,
                                                &(sSysPAddr.uiAddr))!= IMG_TRUE)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed"));
@@ -1519,6 +1543,8 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                                                0,
                                                SGX_MMU_PAGE_SIZE,
                                                0,
+                                               IMG_NULL,
+                                               0,
                                                &(sSysPAddr.uiAddr))!= IMG_TRUE)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed"));
@@ -1553,6 +1579,8 @@ MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, I
                                                0,
                                                SGX_MMU_PAGE_SIZE,
                                                0,
+                                               IMG_NULL,
+                                               0,
                                                &(sSysPAddr.uiAddr))!= IMG_TRUE)
                        {
                                PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed"));
@@ -2476,6 +2504,8 @@ MMU_Alloc (MMU_HEAP *pMMUHeap,
                                                        0,
                                                        uDevVAddrAlignment,
                                                        0,
+                                                       IMG_NULL,
+                                                       0,
                                                        &uiAddr);
                if(!bStatus)
                {
@@ -2728,6 +2758,9 @@ MMU_MapPage (MMU_HEAP *pMMUHeap,
                                                                        ui32Index ));
                        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 PT_DUMP
+                       DumpPT(ppsPTInfoList[0]);
+#endif
                }
 #if !defined(FIX_HW_BRN_31620)
                PVR_ASSERT((uTmp & SGX_MMU_PTE_VALID) == 0);
@@ -3157,6 +3190,8 @@ PVRSRV_ERROR MMU_BIFResetPDAlloc(PVRSRV_SGXDEV_INFO *psDevInfo)
                eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
                                                      3 * SGX_MMU_PAGE_SIZE,
                                                      SGX_MMU_PAGE_SIZE,
+                                                         IMG_NULL,
+                                                         0,
                                                      (IMG_VOID **)&pui8MemBlock,
                                                      &hOSMemHandle);
                if (eError != PVRSRV_OK)
@@ -3188,6 +3223,8 @@ PVRSRV_ERROR MMU_BIFResetPDAlloc(PVRSRV_SGXDEV_INFO *psDevInfo)
                                        0,
                                        SGX_MMU_PAGE_SIZE,
                                        0,
+                                       IMG_NULL,
+                                       0,
                                        &(sMemBlockSysPAddr.uiAddr)) != IMG_TRUE)
                {
                        PVR_DPF((PVR_DBG_ERROR, "MMU_BIFResetPDAlloc: ERROR call to RA_Alloc failed"));
@@ -3284,10 +3321,12 @@ PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE *psDeviceNode)
        {
                
                eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                  SGX_MMU_PAGE_SIZE,
-                                                  SGX_MMU_PAGE_SIZE,
-                                                  (IMG_VOID **)&pui32PT,
-                                                  &hPTPageOSMemHandle);
+                                                         SGX_MMU_PAGE_SIZE,
+                                                         SGX_MMU_PAGE_SIZE,
+                                                         IMG_NULL,
+                                                         0,
+                                                         (IMG_VOID **)&pui32PT,
+                                                         &hPTPageOSMemHandle);
                if (eError != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to OSAllocPages failed"));
@@ -3296,10 +3335,12 @@ PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE *psDeviceNode)
                ui32PTOffset = 0;
 
                eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY,
-                                                  SGX_MMU_PAGE_SIZE,
-                                                  SGX_MMU_PAGE_SIZE,
-                                                  (IMG_VOID **)&pui32PD,
-                                                  &hPDPageOSMemHandle);
+                                                         SGX_MMU_PAGE_SIZE,
+                                                         SGX_MMU_PAGE_SIZE,
+                                                         IMG_NULL,
+                                                         0,
+                                                         (IMG_VOID **)&pui32PD,
+                                                         &hPDPageOSMemHandle);
                if (eError != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to OSAllocPages failed"));
@@ -3344,6 +3385,8 @@ PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE   *psDeviceNode)
                                        0,
                                        SGX_MMU_PAGE_SIZE,
                                        0,
+                                       IMG_NULL,
+                                       0,
                                        &(psDevInfo->sBRN22997SysPAddr.uiAddr))!= IMG_TRUE)
                {
                        PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to RA_Alloc failed"));
@@ -3615,7 +3658,6 @@ PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode)
 
 #if defined(PDUMP)
        sMMUAttrib = psDevInfo->sMMUAttrib;
-
        MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode,
                                                SGX_MMU_PAGE_MASK,
                                                SGX_MMU_PT_SIZE * sizeof(IMG_UINT32));
index 92bbab0..90f6dd5 100755 (executable)
@@ -96,7 +96,7 @@
        #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE         0xEC000000
        #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE        (0x01C00000-0x00001000)
 
-       #define SGX_KERNEL_DATA_HEAP_BASE                       0xF0000000
+       #define SGX_KERNEL_DATA_HEAP_BASE                       0xF0000000
        #define SGX_KERNEL_DATA_HEAP_SIZE                       (0x03000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET))
 
        
        #define SGX_GENERAL_MAPPING_HEAP_SIZE           (0x08000000-0x00001000)
        #endif
 
+       #if !defined(SUPPORT_MEMORY_TILING)
        #define SGX_GENERAL_HEAP_BASE                            0x10000000
        #define SGX_GENERAL_HEAP_SIZE                           (0xC2000000-0x00001000)
+       #else
+               #include <sgx_msvdx_defs.h>
+               
+               
+               #define SGX_GENERAL_HEAP_BASE                            0x10000000
+               #define SGX_GENERAL_HEAP_SIZE                           (0xB5000000-0x00001000)
+
+               #define SGX_VPB_TILED_HEAP_STRIDE                       TILING_TILE_STRIDE_2K
+               #define SGX_VPB_TILED_HEAP_BASE          0xC5000000
+               #define SGX_VPB_TILED_HEAP_SIZE (0x0D000000-0x00001000)
+
+               
+               #if((SGX_VPB_TILED_HEAP_BASE & SGX_BIF_TILING_ADDR_INV_MASK) != 0)
+               #error "sgxconfig.h: SGX_VPB_TILED_HEAP has insufficient alignment"
+               #endif
+
+       #endif 
 
        
        #define SGX_3DPARAMETERS_HEAP_SIZE                      0x10000000
        #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_BASE                       0xF4000000
        #define SGX_KERNEL_DATA_HEAP_SIZE                       (0x05000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET))
 
        
 
 #else
        #define SGX_GENERAL_HEAP_BASE                            0x00001000
+#if defined(SUPPORT_LARGE_GENERAL_HEAP)
+       #define SGX_GENERAL_HEAP_SIZE                           (0x0B800000-0x00001000-0x00001000)
+#else
        #define SGX_GENERAL_HEAP_SIZE                           (0x08800000-0x00001000-0x00001000)
 #endif
+#endif
        
+#if defined(SUPPORT_LARGE_GENERAL_HEAP)
+       #define SGX_3DPARAMETERS_HEAP_SIZE                      0x01000000
+#else
        #define SGX_3DPARAMETERS_HEAP_SIZE                      0x04000000
+#endif
 
        
 #if !defined(HYBRID_SHARED_PB_SIZE)
 #endif
 #endif
 
+#if defined(SUPPORT_LARGE_GENERAL_HEAP)
+       #define SGX_SHARED_3DPARAMETERS_HEAP_BASE                0x0B800000
+#else
        #define SGX_SHARED_3DPARAMETERS_HEAP_BASE                0x08800000
+#endif
+
        
 
        #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE            (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE)
        #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"
+#if defined(SUPPORT_MEMORY_TILING)
+       #if ((SGX_GENERAL_HEAP_BASE + SGX_GENERAL_HEAP_SIZE) >= SGX_VPB_TILED_HEAP_BASE)
+               #error "sgxconfig.h: ERROR: SGX_GENERAL_HEAP overlaps SGX_VPB_TILED_HEAP"
+       #endif
+       #if ((SGX_VPB_TILED_HEAP_BASE + SGX_VPB_TILED_HEAP_SIZE) >= SGX_SHARED_3DPARAMETERS_HEAP_BASE)
+               #error "sgxconfig.h: ERROR: SGX_VPB_TILED_HEAP overlaps SGX_3DPARAMETERS_HEAP"
+       #endif
+#else
+       #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
 #endif
 
 #if (((SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE + SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE) >= SGX_TADATA_HEAP_BASE) && (SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE > 0))
index c85b8d1..8fe92e3 100755 (executable)
@@ -94,6 +94,7 @@ typedef struct _PVRSRV_SGXDEV_INFO_
        
        IMG_UINT32                              ui32CoreClockSpeed;
        IMG_UINT32                              ui32uKernelTimerClock;
+       IMG_BOOL                                bSGXIdle;
 
        PVRSRV_STUB_PBDESC              *psStubPBDescListKM;
 
@@ -101,6 +102,7 @@ typedef struct _PVRSRV_SGXDEV_INFO_
        
        IMG_DEV_PHYADDR                 sKernelPDDevPAddr;
 
+       IMG_UINT32                              ui32HeapCount;
        IMG_VOID                                *pvDeviceMemoryHeap;
        PPVRSRV_KERNEL_MEM_INFO psKernelCCBMemInfo;                     
        PVRSRV_SGX_KERNEL_CCB   *psKernelCCB;                   
@@ -127,8 +129,12 @@ typedef struct _PVRSRV_SGXDEV_INFO_
        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; 
+       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; 
@@ -136,10 +142,6 @@ typedef struct _PVRSRV_SGXDEV_INFO_
 #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;
 
@@ -211,6 +213,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;
 
        
@@ -337,6 +343,9 @@ typedef struct _SGX_BRIDGE_INIT_INFO_KM_
        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];
@@ -367,9 +376,6 @@ typedef struct _SGX_BRIDGE_INIT_INFO_KM_
 #if defined(SGX_FEATURE_OVERLAPPED_SPM)
        IMG_HANDLE hKernelTmpRgnHeaderMemInfo;
 #endif
-#if defined(SGX_FEATURE_SPM_MODE_0)
-       IMG_HANDLE hKernelTmpDPMStateMemInfo;
-#endif
 
        IMG_UINT32 ui32EDMTaskReg0;
        IMG_UINT32 ui32EDMTaskReg1;
@@ -539,6 +545,9 @@ PVRSRV_ERROR SGXPostClockSpeedChange(IMG_HANDLE                             hDevHandle,
 
 IMG_VOID SGXPanic(PVRSRV_SGXDEV_INFO   *psDevInfo);
 
+IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO  *psDevInfo,
+                                                  IMG_BOOL                             bDumpSGXRegs);
+
 PVRSRV_ERROR SGXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode);
 
 #if defined(SGX_DYNAMIC_TIMING_INFO)
index 1968e41..b0fc7b2 100755 (executable)
@@ -141,6 +141,10 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc,
 
        psDevInfo->psKernelSGXTA3DCtlMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXTA3DCtlMemInfo;
 
+#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)
@@ -161,15 +165,16 @@ static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc,
        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
 #if defined(SGX_FEATURE_OVERLAPPED_SPM)
        psDevInfo->psKernelTmpRgnHeaderMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelTmpRgnHeaderMemInfo;
 #endif
-#if defined(SGX_FEATURE_SPM_MODE_0)
-       psDevInfo->psKernelTmpDPMStateMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelTmpDPMStateMemInfo;
-#endif
        
        psDevInfo->ui32ClientBuildOptions = psInitInfo->ui32ClientBuildOptions;
 
@@ -278,6 +283,75 @@ static PVRSRV_ERROR SGXRunScript(PVRSRV_SGXDEV_INFO *psDevInfo, SGX_INIT_COMMAND
        return PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION;
 }
 
+#if defined(SUPPORT_MEMORY_TILING)
+static PVRSRV_ERROR SGX_AllocMemTilingRangeInt(PVRSRV_SGXDEV_INFO *psDevInfo,
+                                                                                          IMG_UINT32 ui32Start,
+                                                                                          IMG_UINT32 ui32End,
+                                                                               IMG_UINT32 ui32TilingStride,
+                                                                               IMG_UINT32 *pui32RangeIndex)
+{
+       IMG_UINT32 i;
+       IMG_UINT32 ui32Offset;
+       IMG_UINT32 ui32Val;
+
+
+       for(i=0; i < SGX_BIF_NUM_TILING_RANGES; i++)
+       {
+               if((psDevInfo->ui32MemTilingUsage & (1U << i)) == 0)
+               {
+
+                       psDevInfo->ui32MemTilingUsage |= 1U << i;
+
+                       if(pui32RangeIndex != IMG_NULL)
+                       {
+                               *pui32RangeIndex = i;
+                       }
+                       goto RangeAllocated;
+               }
+       }
+
+       PVR_DPF((PVR_DBG_ERROR,"SGX_AllocMemTilingRange: all tiling ranges in use"));
+       return PVRSRV_ERROR_EXCEEDED_HW_LIMITS;
+
+RangeAllocated:
+
+
+       if(ui32Start & ~SGX_BIF_TILING_ADDR_MASK)
+       {
+               PVR_DPF((PVR_DBG_WARNING,"SGX_AllocMemTilingRangeInt: Tiling range start (0x%08X) fails"
+                                               "alignment test", ui32Start));
+       }
+       if((ui32End + 0x00001000) & ~SGX_BIF_TILING_ADDR_MASK)
+       {
+               PVR_DPF((PVR_DBG_WARNING,"SGX_AllocMemTilingRangeInt: Tiling range end (0x%08X) fails"
+                                               "alignment test", ui32End));
+       }
+
+       ui32Offset = EUR_CR_BIF_TILE0 + (i<<2);
+
+       ui32Val = ((ui32TilingStride << EUR_CR_BIF_TILE0_CFG_SHIFT) & EUR_CR_BIF_TILE0_CFG_MASK)
+                       | (((ui32End>>SGX_BIF_TILING_ADDR_LSB) << EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK)
+                       | (((ui32Start>>SGX_BIF_TILING_ADDR_LSB) << EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK)
+                       | (EUR_CR_BIF_TILE0_ENABLE << EUR_CR_BIF_TILE0_CFG_SHIFT);
+
+       OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val);
+       PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val);
+
+#if defined(SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS)
+       ui32Offset = EUR_CR_BIF_TILE0_ADDR_EXT + (i<<2);
+
+       ui32Val = (((ui32End>>SGX_BIF_TILING_EXT_ADDR_LSB) << EUR_CR_BIF_TILE0_ADDR_EXT_MAX_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MAX_MASK)
+                       | (((ui32Start>>SGX_BIF_TILING_EXT_ADDR_LSB) << EUR_CR_BIF_TILE0_ADDR_EXT_MIN_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MIN_MASK);
+
+       OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val);
+       PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val);
+#endif
+
+       return PVRSRV_OK;
+}
+
+#endif
+
 PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO  *psDevInfo,
                                                   IMG_BOOL                             bHardwareRecovery)
 {
@@ -339,6 +413,37 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO      *psDevInfo,
        }
 #endif 
 
+#if defined(SUPPORT_MEMORY_TILING)
+       {
+
+               DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap = psDevInfo->pvDeviceMemoryHeap;
+               IMG_UINT32 i;
+
+               psDevInfo->ui32MemTilingUsage = 0;
+
+               for(i=0; i<psDevInfo->ui32HeapCount; i++)
+               {
+                       if(psDeviceMemoryHeap[i].ui32XTileStride > 0)
+                       {
+
+                               eError = SGX_AllocMemTilingRangeInt(
+                                               psDevInfo,
+                                               psDeviceMemoryHeap[i].sDevVAddrBase.uiAddr,
+                                               psDeviceMemoryHeap[i].sDevVAddrBase.uiAddr
+                                                       + psDeviceMemoryHeap[i].ui32HeapSize,
+                                               psDeviceMemoryHeap[i].ui32XTileStride,
+                                               NULL);
+                               if(eError != PVRSRV_OK)
+                               {
+                                       PVR_DPF((PVR_DBG_ERROR, "Unable to allocate SGX BIF tiling range for heap: %s",
+                                                                                       psDeviceMemoryHeap[i].pszName));
+                                       break;
+                               }
+                       }
+               }
+       }
+#endif
+
        
 
        PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "SGX initialisation script part 2\n");
@@ -414,6 +519,7 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO       *psDevInfo,
        {
                PVR_DPF((PVR_DBG_ERROR, "SGXInitialise: Wait for uKernel initialisation failed"));
                #if !defined(FIX_HW_BRN_23281)
+               SGXDumpDebugInfo(psDevInfo, IMG_FALSE);
                PVR_DBG_BREAK;
                #endif 
                return PVRSRV_ERROR_RETRY;
@@ -525,6 +631,7 @@ static PVRSRV_ERROR DevInitSGXPart1 (IMG_VOID *pvDeviceNode)
        psDeviceNode->pvDevice = (IMG_PVOID)psDevInfo;
 
        
+       psDevInfo->ui32HeapCount = psDeviceNode->sDevMemoryInfo.ui32HeapCount;
        psDevInfo->pvDeviceMemoryHeap = (IMG_VOID*)psDeviceMemoryHeap;
 
        
@@ -906,8 +1013,8 @@ static IMG_VOID SGXDumpDebugReg (PVRSRV_SGXDEV_INFO        *psDevInfo,
        PVR_LOG(("(P%u) %s%08X", ui32CoreNum, pszName, ui32RegVal));
 }
 
-static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO   *psDevInfo,
-                                                                 IMG_BOOL                              bDumpSGXRegs)
+IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO  *psDevInfo,
+                                                  IMG_BOOL                             bDumpSGXRegs)
 {
        IMG_UINT32      ui32CoreNum;
 
@@ -1183,7 +1290,7 @@ IMG_VOID SGXOSTimer(IMG_VOID *pvData)
                                        
                #if defined(FIX_HW_BRN_29997)
                                        IMG_UINT32      ui32BIFCtrl;
-                                       
+
                                        ui32BIFCtrl = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL);
                                        OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_PAUSE_MASK);
                                        
@@ -1204,7 +1311,7 @@ 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;
@@ -1231,12 +1338,13 @@ SGX_NoUKernel_LockUp:
                psSGXHostCtl->ui32HostDetectedLockups ++;
 
                
-               HWRecoveryResetSGX(psDeviceNode, 0, KERNEL_ID);
+               HWRecoveryResetSGX(psDeviceNode, 0, ISR_ID);
        }
 }
 #endif 
 
 
+
 #if defined(SYS_USING_INTERRUPTS)
 
 IMG_BOOL SGX_ISRHandler (IMG_VOID *pvData)
@@ -1338,78 +1446,25 @@ static IMG_VOID SGX_MISRHandler (IMG_VOID *pvData)
 }
 #endif 
 
-
-
 #if defined(SUPPORT_MEMORY_TILING)
+
+IMG_INTERNAL
 PVRSRV_ERROR SGX_AllocMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode,
-                                                                               PVRSRV_KERNEL_MEM_INFO  *psMemInfo,
-                                                                               IMG_UINT32 ui32TilingStride,
-                                                                               IMG_UINT32 *pui32RangeIndex)
+                                                                        PVRSRV_KERNEL_MEM_INFO *psMemInfo,
+                                                                        IMG_UINT32 ui32XTileStride,
+                                                                        IMG_UINT32 *pui32RangeIndex)
 {
-#if defined(SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS)
-       PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice;
-       IMG_UINT32 i;
-       IMG_UINT32 ui32Start;
-       IMG_UINT32 ui32End;
-       IMG_UINT32 ui32Offset;
-       IMG_UINT32 ui32Val;
-
-       
-       for(i=0; i<10; i++)
-       {
-               if((psDevInfo->ui32MemTilingUsage & (1U << i)) == 0)
-               {
-                       
-                       psDevInfo->ui32MemTilingUsage |= 1U << i;
-                       
-                       *pui32RangeIndex = i;
-                       goto RangeAllocated;
-               }
-       }
-
-       PVR_DPF((PVR_DBG_ERROR,"SGX_AllocMemTilingRange: all tiling ranges in use"));
-       return PVRSRV_ERROR_EXCEEDED_HW_LIMITS;
-
-RangeAllocated:
-       ui32Offset = EUR_CR_BIF_TILE0 + (i<<2);
-
-       ui32Start = psMemInfo->sDevVAddr.uiAddr;
-       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)
-                       | (((ui32Start>>20) << EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK)
-                       | (0x8 << EUR_CR_BIF_TILE0_CFG_SHIFT);
-
-       
-       OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val);
-       PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val);
-
-       ui32Offset = EUR_CR_BIF_TILE0_ADDR_EXT + (i<<2);
-
-       ui32Val = (((ui32End>>12) << EUR_CR_BIF_TILE0_ADDR_EXT_MAX_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MAX_MASK)
-                       | (((ui32Start>>12) << EUR_CR_BIF_TILE0_ADDR_EXT_MIN_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MIN_MASK);
-
-       
-       OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val);
-       PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val);
-
-       return PVRSRV_OK;
-#else
-       PVR_UNREFERENCED_PARAMETER(psDeviceNode);
-       PVR_UNREFERENCED_PARAMETER(psMemInfo);
-       PVR_UNREFERENCED_PARAMETER(ui32TilingStride);
-       PVR_UNREFERENCED_PARAMETER(pui32RangeIndex);
-
-       PVR_DPF((PVR_DBG_ERROR,"SGX_AllocMemTilingRange: device does not support memory tiling"));
-       return PVRSRV_ERROR_NOT_SUPPORTED;
-#endif
+       return SGX_AllocMemTilingRangeInt(psDeviceNode->pvDevice,
+               psMemInfo->sDevVAddr.uiAddr,
+               psMemInfo->sDevVAddr.uiAddr + ((IMG_UINT32) psMemInfo->uAllocSize) + SGX_MMU_PAGE_SIZE - 1,
+               ui32XTileStride,
+               pui32RangeIndex);
 }
 
+IMG_INTERNAL
 PVRSRV_ERROR SGX_FreeMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode,
                                                                                IMG_UINT32 ui32RangeIndex)
 {
-#if defined(SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS)
        PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice;
        IMG_UINT32 ui32Offset;
        IMG_UINT32 ui32Val;
@@ -1432,16 +1487,11 @@ PVRSRV_ERROR SGX_FreeMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode,
        PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val);
 
        return PVRSRV_OK;
-#else
-       PVR_UNREFERENCED_PARAMETER(psDeviceNode);
-       PVR_UNREFERENCED_PARAMETER(ui32RangeIndex);
-
-       PVR_DPF((PVR_DBG_ERROR,"SGX_FreeMemTilingRange: device does not support memory tiling"));
-       return PVRSRV_ERROR_NOT_SUPPORTED;
-#endif
 }
+
 #endif
 
+
 static IMG_VOID SGXCacheInvalidate(PVRSRV_DEVICE_NODE *psDeviceNode)
 {
        PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice;
@@ -1551,7 +1601,7 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode)
        
 
 
-       
+
        psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_GENERAL_HEAP_ID);
        psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_GENERAL_HEAP_BASE;
        psDeviceMemoryHeap->ui32HeapSize = SGX_GENERAL_HEAP_SIZE;
@@ -1561,7 +1611,7 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode)
        psDeviceMemoryHeap->pszName = "General";
        psDeviceMemoryHeap->pszBSName = "General BS";
        psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT;
-       
+
        psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE;
 #if !defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP)
        
@@ -1569,6 +1619,23 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode)
 #endif
        psDeviceMemoryHeap++;
 
+#if defined(SUPPORT_MEMORY_TILING)
+
+       psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_VPB_TILED_HEAP_ID);
+       psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_VPB_TILED_HEAP_BASE;
+       psDeviceMemoryHeap->ui32HeapSize = SGX_VPB_TILED_HEAP_SIZE;
+       psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE
+                                                                                                               | PVRSRV_MEM_RAM_BACKED_ALLOCATION
+                                                                                                               | PVRSRV_HAP_SINGLE_PROCESS;
+       psDeviceMemoryHeap->pszName = "VPB Tiled";
+       psDeviceMemoryHeap->pszBSName = "VPB Tiled BS";
+       psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT;
+
+       psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE;
+       psDeviceMemoryHeap->ui32XTileStride = SGX_VPB_TILED_HEAP_STRIDE;
+       PVR_DPF((PVR_DBG_WARNING, "VPB tiling heap tiling stride = 0x%x", psDeviceMemoryHeap->ui32XTileStride));
+       psDeviceMemoryHeap++;
+#endif
 
        
        psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_TADATA_HEAP_ID);
@@ -1932,7 +1999,6 @@ PVRSRV_ERROR SGXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode)
                PVR_LOG(("(FAIL) SGXInit: Incompatible driver DDK revision (%d)/device DDK revision (%d).",
                                PVRVERSION_BUILD, psSGXFeatures->ui32DDKBuild));
                eError = PVRSRV_ERROR_DDK_VERSION_MISMATCH;
-               PVR_DBG_BREAK;
                goto chk_exit;
        }
        else
@@ -2667,6 +2733,8 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO  *psDevInfo,
                        return PVRSRV_OK;
                }
 
+#if defined(DEBUG)
+
                case SGX_MISC_INFO_PANIC:
                {
                        PVR_LOG(("User requested SGX panic"));
@@ -2675,6 +2743,7 @@ PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO  *psDevInfo,
 
                        return PVRSRV_OK;
                }
+#endif
 
                default:
                {
index 3811914..f17c1f4 100755 (executable)
@@ -248,9 +248,11 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
 
                                psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr;
                                psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr;
+                               psHWDeviceSyncList->asSyncData[i].sReadOps2CompleteDevVAddr = psSyncInfo->sReadOps2CompleteDevVAddr;
 
                                psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending;
                                psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++;
+                               psHWDeviceSyncList->asSyncData[i].ui32ReadOps2PendingVal = psSyncInfo->psSyncData->ui32ReadOps2Pending;
 
        #if defined(PDUMP)
                                if (PDumpIsCaptureFrameKM())
@@ -262,6 +264,8 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                                                                                                + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal);
                                        IMG_UINT32 ui32ROpsOffset = ui32SyncOffset
                                                                                                + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal);
+                                       IMG_UINT32 ui32ROps2Offset = ui32SyncOffset
+                                                                                               + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOps2PendingVal);
 
                                        PDUMPCOMMENT("HWDeviceSyncObject for RT: %i\r\n", i);
 
@@ -315,6 +319,15 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                                                 sizeof(IMG_UINT32),
                                                 0,
                                                MAKEUNIQUETAG(psHWDstSyncListMemInfo));
+
+
+                                       PDUMPCOMMENT("Modify RT %d ROps2PendingVal in HWDevSyncList\r\n", i);
+                                       PDUMPMEM(&ui32ModifiedValue,
+                                               psHWDstSyncListMemInfo,
+                                               ui32ROps2Offset,
+                                               sizeof(IMG_UINT32),
+                                               0,
+                                               MAKEUNIQUETAG(psHWDstSyncListMemInfo));
                                }
        #endif  
                        }
@@ -322,8 +335,10 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                        {
                                psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr.uiAddr = 0;
                                psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr.uiAddr = 0;
+                               psHWDeviceSyncList->asSyncData[i].sReadOps2CompleteDevVAddr.uiAddr = 0;
 
                                psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = 0;
+                               psHWDeviceSyncList->asSyncData[i].ui32ReadOps2PendingVal = 0;
                                psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = 0;
                        }
                }
@@ -508,7 +523,7 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                        if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) &&
                                (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0))
                        {
-                               
+
                                PDUMPCOMMENT("Init RT ROpsComplete\r\n");
                                PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal,
                                        psSyncInfo->psSyncDataMemInfoKM,
@@ -516,7 +531,7 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                                        sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete),
                                        0,
                                        MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM));
-                               
+
                                PDUMPCOMMENT("Init RT WOpsComplete\r\n");
                                        PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal,
                                                psSyncInfo->psSyncDataMemInfoKM,
@@ -524,6 +539,14 @@ PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick)
                                                sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete),
                                                0,
                                                MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM));
+
+                               PDUMPCOMMENT("Init RT WOpsComplete\r\n");
+                                       PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal,
+                                               psSyncInfo->psSyncDataMemInfoKM,
+                                               offsetof(PVRSRV_SYNC_DATA, ui32ReadOps2Complete),
+                                               sizeof(psSyncInfo->psSyncData->ui32ReadOps2Complete),
+                                               0,
+                                               MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM));
                        }
 
                        psSyncInfo->psSyncData->ui32LastReadOpDumpVal++;
index 3947cdd..696941f 100755 (executable)
@@ -202,6 +202,7 @@ static IMG_VOID SGXPollForClockGating (PVRSRV_SGXDEV_INFO   *psDevInfo,
                                                IMG_FALSE) != PVRSRV_OK)
        {
                PVR_DPF((PVR_DBG_ERROR,"SGXPollForClockGating: %s failed.", pszComment));
+               SGXDumpDebugInfo(psDevInfo, IMG_FALSE);
                PVR_DBG_BREAK;
        }
        #endif 
index bf4a81c..1a0fc1d 100755 (executable)
@@ -153,7 +153,7 @@ static IMG_VOID SGXResetSleep(PVRSRV_SGXDEV_INFO    *psDevInfo,
                                                          IMG_UINT32                    ui32PDUMPFlags,
                                                          IMG_BOOL                              bPDump)
 {
-#if defined(PDUMP)
+#if defined(PDUMP) || defined(EMULATOR)
        IMG_UINT32      ui32ReadRegister;
 
        #if defined(SGX_FEATURE_MP)
@@ -178,6 +178,11 @@ static IMG_VOID SGXResetSleep(PVRSRV_SGXDEV_INFO   *psDevInfo,
 #endif
        }
 
+#if defined(EMULATOR)
+
+
+       OSReadHWReg(psDevInfo->pvRegsBaseKM, ui32ReadRegister);
+#endif
 }
 
 
@@ -400,6 +405,10 @@ 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);
@@ -569,6 +578,9 @@ IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO        *psDevInfo,
                #if defined(PVR_SLC_8KB_ADDRESS_MODE)
                                                (4 << EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SHIFT) |
                #endif
+               #if defined(FIX_HW_BRN_33809)
+                       (2 << 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");
index 22d03f8..92ee0bc 100755 (executable)
@@ -227,9 +227,11 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
 
                                psSharedTransferCmd->asDstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending;
                                psSharedTransferCmd->asDstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending;
+                               psSharedTransferCmd->asDstSyncs[i].ui32ReadOps2PendingVal = psSyncInfo->psSyncData->ui32ReadOps2Pending;
 
                                psSharedTransferCmd->asDstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr;
                                psSharedTransferCmd->asDstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr;
+                               psSharedTransferCmd->asDstSyncs[i].sReadOps2CompleteDevVAddr = psSyncInfo->sReadOps2CompleteDevVAddr;
                                i++;
                        }
                }
@@ -301,6 +303,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
                        {
                                if (abDstSyncEnable[i])
                                {
+                                       IMG_UINT32 ui32PDumpReadOp2 = 0;
                                        psSyncInfo = psKick->ahDstSyncInfo[loop];
 
                                        PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n");
@@ -318,6 +321,14 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
                                                        sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal),
                                                        psKick->ui32PDumpFlags,
                                                        MAKEUNIQUETAG(psCCBMemInfo));
+
+                                       PDUMPCOMMENT("Hack dest surface read op2 in transfer cmd\r\n");
+                                       PDUMPMEM(&ui32PDumpReadOp2,
+                                                       psCCBMemInfo,
+                                                       psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOps2PendingVal)),
+                                                       sizeof(ui32PDumpReadOp2),
+                                                       psKick->ui32PDumpFlags,
+                                                       MAKEUNIQUETAG(psCCBMemInfo));
                                        i++;
                                }
                        }
@@ -538,9 +549,11 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK
 
                ps2DCmd->sDstSyncData.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending;
                ps2DCmd->sDstSyncData.ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending;
+               ps2DCmd->sDstSyncData.ui32ReadOps2PendingVal = psSyncInfo->psSyncData->ui32ReadOps2Pending;
 
                ps2DCmd->sDstSyncData.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr;
                ps2DCmd->sDstSyncData.sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr;
+               ps2DCmd->sDstSyncData.sReadOps2CompleteDevVAddr = psSyncInfo->sReadOps2CompleteDevVAddr;
        }
 
        
@@ -593,6 +606,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK
 
                if (psKick->hDstSyncInfo != IMG_NULL)
                {
+                       IMG_UINT32 ui32PDumpReadOp2 = 0;
                        psSyncInfo = psKick->hDstSyncInfo;
 
                        PDUMPCOMMENT("Hack dest surface write op in 2D cmd\r\n");
@@ -610,6 +624,13 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK
                                        sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal),
                                        psKick->ui32PDumpFlags,
                                        MAKEUNIQUETAG(psCCBMemInfo));
+                       PDUMPCOMMENT("Hack dest surface read op2 in 2D cmd\r\n");
+                       PDUMPMEM(&ui32PDumpReadOp2,
+                                       psCCBMemInfo,
+                                       psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32ReadOps2PendingVal),
+                                       sizeof(ui32PDumpReadOp2),
+                                       psKick->ui32PDumpFlags,
+                                       MAKEUNIQUETAG(psCCBMemInfo));
                }
 
                
index 811c39f..3267ee0 100755 (executable)
@@ -89,6 +89,21 @@ IMG_VOID SGXTestActivePowerEvent (PVRSRV_DEVICE_NODE *psDeviceNode,
        PVRSRV_SGXDEV_INFO      *psDevInfo = psDeviceNode->pvDevice;
        SGXMKIF_HOST_CTL        *psSGXHostCtl = psDevInfo->psSGXHostCtl;
 
+#if defined(SYS_SUPPORTS_SGX_IDLE_CALLBACK)
+       if (!psDevInfo->bSGXIdle &&
+               ((psSGXHostCtl->ui32InterruptFlags & PVRSRV_USSE_EDM_INTERRUPT_IDLE) != 0))
+       {
+               psDevInfo->bSGXIdle = IMG_TRUE;
+               SysSGXIdleTransition(psDevInfo->bSGXIdle);
+       }
+       else if (psDevInfo->bSGXIdle &&
+                       ((psSGXHostCtl->ui32InterruptFlags & PVRSRV_USSE_EDM_INTERRUPT_IDLE) == 0))
+       {
+               psDevInfo->bSGXIdle = IMG_FALSE;
+               SysSGXIdleTransition(psDevInfo->bSGXIdle);
+       }
+#endif
+
        if (((psSGXHostCtl->ui32InterruptFlags & PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER) != 0) &&
                ((psSGXHostCtl->ui32InterruptClearFlags & PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER) == 0))
        {
@@ -570,16 +585,6 @@ PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE            *psDeviceNode,
        eError = SGXScheduleCCBCommand(psDeviceNode, eCmdType, psCommandData, ui32CallerID, ui32PDumpFlags, hDevMemContext, bLastInScene);
 
        PVRSRVPowerUnlock(ui32CallerID);
-
-       
-       if (ui32CallerID != ISR_ID)
-       {
-               
-
-
-               SGXTestActivePowerEvent(psDeviceNode, ui32CallerID);
-       }
-
        return eError;
 }
 
@@ -659,6 +664,7 @@ PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode,
                if (eError != PVRSRV_OK)
                {
                                PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command"));
+                               SGXDumpDebugInfo(psDevInfo, IMG_FALSE);
                                PVR_DBG_BREAK;
                                return eError;
                }
@@ -674,6 +680,7 @@ PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode,
                {
                        PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType));
                        eError = PVRSRV_ERROR_TIMEOUT;
+                       SGXDumpDebugInfo(psDevInfo, IMG_FALSE);
                        PVR_DBG_BREAK;
                }
                #endif
index 65e71d1..c7c58eb 100755 (executable)
@@ -57,6 +57,9 @@ pvrsrvkm-y += \
        services4/srvkm/common/mem_debug.o \
        services4/srvkm/common/osfunc_common.o
 
+pvrsrvkm-$(CONFIG_ION_OMAP) += \
+       services4/srvkm/env/linux/ion.o
+
 ifneq ($(W),1)
 CFLAGS_osfunc.o := -Werror
 CFLAGS_mutils.o := -Werror
diff --git a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.c b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.c
new file mode 100644 (file)
index 0000000..f897ffa
--- /dev/null
@@ -0,0 +1,104 @@
+/**********************************************************************
+ *
+ * Copyright (C) Imagination Technologies Ltd. All rights reserved.
+ * 
+ * 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 "ion.h"
+
+#include "services.h"
+#include "servicesint.h"
+#include "mutex.h"
+#include "lock.h"
+#include "mm.h"
+#include "handle.h"
+#include "perproc.h"
+#include "env_perproc.h"
+#include "private_data.h"
+#include "pvr_debug.h"
+
+#include <linux/module.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+
+extern struct ion_client *gpsIONClient;
+
+struct ion_handle *
+PVRSRVExportFDToIONHandle(int fd, struct ion_client **client)
+{
+       struct ion_handle *psIONHandle = IMG_NULL;
+       PVRSRV_FILE_PRIVATE_DATA *psPrivateData;
+       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+       LinuxMemArea *psLinuxMemArea;
+       PVRSRV_ERROR eError;
+       struct file *psFile;
+
+       /* Take the bridge mutex so the handle won't be freed underneath us */
+       LinuxLockMutex(&gPVRSRVLock);
+
+       psFile = fget(fd);
+       if(!psFile)
+               goto err_unlock;
+
+       psPrivateData = psFile->private_data;
+       if(!psPrivateData)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "%s: struct file* has no private_data; "
+                                                               "invalid export handle", __func__));
+               goto err_fput;
+       }
+
+       eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE,
+                                                               (IMG_PVOID *)&psKernelMemInfo,
+                                                               psPrivateData->hKernelMemInfo,
+                                                               PVRSRV_HANDLE_TYPE_MEM_INFO);
+       if(eError != PVRSRV_OK)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "%s: Failed to look up MEM_INFO handle",
+                                                               __func__));
+               goto err_fput;
+       }
+
+       psLinuxMemArea = (LinuxMemArea *)psKernelMemInfo->sMemBlk.hOSMemHandle;
+       BUG_ON(psLinuxMemArea == IMG_NULL);
+
+       if(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_ION)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "%s: Valid handle, but not an ION buffer",
+                                                               __func__));
+               goto err_fput;
+       }
+
+       psIONHandle = psLinuxMemArea->uData.sIONTilerAlloc.psIONHandle;
+       if(client)
+               *client = gpsIONClient;
+
+err_fput:
+       fput(psFile);
+err_unlock:
+       /* Allow PVRSRV clients to communicate with srvkm again */
+       LinuxUnLockMutex(&gPVRSRVLock);
+       return psIONHandle;
+}
+
+EXPORT_SYMBOL(PVRSRVExportFDToIONHandle);
diff --git a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.h b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/ion.h
new file mode 100644 (file)
index 0000000..13f20e6
--- /dev/null
@@ -0,0 +1,36 @@
+/**********************************************************************
+ *
+ * Copyright (C) Imagination Technologies Ltd. All rights reserved.
+ * 
+ * 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 __IMG_LINUX_ION_H__
+#define __IMG_LINUX_ION_H__
+
+#include <linux/ion.h>
+#include <linux/omap_ion.h>
+
+struct ion_handle *PVRSRVExportFDToIONHandle(int fd,
+                                                                                        struct ion_client **client);
+
+#endif /* __IMG_LINUX_ION_H__ */
index 3b59aec..6663ad1 100644 (file)
@@ -68,7 +68,8 @@ typedef enum {
     DEBUG_MEM_ALLOC_TYPE_IOREMAP,
     DEBUG_MEM_ALLOC_TYPE_IO,
     DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE,
-    DEBUG_MEM_ALLOC_TYPE_COUNT
+    DEBUG_MEM_ALLOC_TYPE_COUNT,
+    DEBUG_MEM_ALLOC_TYPE_ION
 }DEBUG_MEM_ALLOC_TYPE;
 
 typedef struct _DEBUG_MEM_ALLOC_REC
@@ -1076,6 +1077,113 @@ FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea)
     LinuxMemAreaStructFree(psLinuxMemArea);
 }
 
+#if defined(CONFIG_ION_OMAP)
+
+#include "env_perproc.h"
+
+#include <linux/ion.h>
+#include <linux/omap_ion.h>
+
+extern struct ion_client *gpsIONClient;
+
+LinuxMemArea *
+NewIONLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags,
+                   IMG_PVOID pvPrivData, IMG_UINT32 ui32PrivDataLength)
+{
+    struct omap_ion_tiler_alloc_data sAllocData;
+    LinuxMemArea *psLinuxMemArea;
+    u32 *pu32PageAddrs;
+    int iNumPages;
+
+    psLinuxMemArea = LinuxMemAreaStructAlloc();
+    if(!psLinuxMemArea)
+    {
+        PVR_DPF((PVR_DBG_ERROR, "%s: Failed to allocate LinuxMemArea struct", __func__));
+        goto err_out;
+    }
+
+
+    BUG_ON(ui32PrivDataLength != offsetof(struct omap_ion_tiler_alloc_data, handle));
+    memcpy(&sAllocData, pvPrivData, offsetof(struct omap_ion_tiler_alloc_data, handle));
+
+    if(omap_ion_tiler_alloc(gpsIONClient, &sAllocData) < 0)
+    {
+        PVR_DPF((PVR_DBG_ERROR, "%s: Failed to allocate via ion_tiler", __func__));
+        goto err_free;
+    }
+
+    if(omap_tiler_pages(gpsIONClient, sAllocData.handle, &iNumPages,
+                                               &pu32PageAddrs) < 0)
+    {
+        PVR_DPF((PVR_DBG_ERROR, "%s: Failed to compute tiler pages", __func__));
+        goto err_free;
+    }
+
+
+    BUG_ON(ui32Bytes != iNumPages * PAGE_SIZE);
+
+#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS)
+    DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_ION,
+                           sAllocData.handle,
+                           0,
+                           0,
+                           NULL,
+                           PAGE_ALIGN(ui32Bytes),
+                           "unknown",
+                           0
+                           );
+#endif
+
+    psLinuxMemArea->eAreaType = LINUX_MEM_AREA_ION;
+    psLinuxMemArea->uData.sIONTilerAlloc.pCPUPhysAddrs = (IMG_CPU_PHYADDR *)pu32PageAddrs;
+    psLinuxMemArea->uData.sIONTilerAlloc.psIONHandle = sAllocData.handle;
+    psLinuxMemArea->ui32ByteSize = ui32Bytes;
+    psLinuxMemArea->ui32AreaFlags = ui32AreaFlags;
+    INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList);
+
+
+    if(ui32AreaFlags & (PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_UNCACHED))
+    {
+        psLinuxMemArea->bNeedsCacheInvalidate = IMG_TRUE;
+    }
+
+#if defined(DEBUG_LINUX_MEM_AREAS)
+    DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags);
+#endif
+
+err_out:
+    return psLinuxMemArea;
+
+err_free:
+    LinuxMemAreaStructFree(psLinuxMemArea);
+    psLinuxMemArea = IMG_NULL;
+    goto err_out;
+}
+
+
+IMG_VOID
+FreeIONLinuxMemArea(LinuxMemArea *psLinuxMemArea)
+{
+#if defined(DEBUG_LINUX_MEM_AREAS)
+    DebugLinuxMemAreaRecordRemove(psLinuxMemArea);
+#endif
+
+    ion_free(gpsIONClient, psLinuxMemArea->uData.sIONTilerAlloc.psIONHandle);
+
+#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS)
+    DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_ION,
+                              psLinuxMemArea->uData.sIONTilerAlloc.psIONHandle,
+                              __FILE__, __LINE__);
+#endif
+
+
+    psLinuxMemArea->uData.sIONTilerAlloc.pCPUPhysAddrs = IMG_NULL;
+    psLinuxMemArea->uData.sIONTilerAlloc.psIONHandle = IMG_NULL;
+
+    LinuxMemAreaStructFree(psLinuxMemArea);
+}
+
+#endif
 
 struct page*
 LinuxMemAreaOffsetToPage(LinuxMemArea *psLinuxMemArea,
@@ -1278,15 +1386,18 @@ LinuxMemAreaDeepFree(LinuxMemArea *psLinuxMemArea)
         case LINUX_MEM_AREA_IOREMAP:
             FreeIORemapLinuxMemArea(psLinuxMemArea);
             break;
-       case LINUX_MEM_AREA_EXTERNAL_KV:
-           FreeExternalKVLinuxMemArea(psLinuxMemArea);
-           break;
+        case LINUX_MEM_AREA_EXTERNAL_KV:
+            FreeExternalKVLinuxMemArea(psLinuxMemArea);
+            break;
         case LINUX_MEM_AREA_IO:
             FreeIOLinuxMemArea(psLinuxMemArea);
             break;
         case LINUX_MEM_AREA_SUB_ALLOC:
             FreeSubLinuxMemArea(psLinuxMemArea);
             break;
+        case LINUX_MEM_AREA_ION:
+            FreeIONLinuxMemArea(psLinuxMemArea);
+            break;
         default:
             PVR_DPF((PVR_DBG_ERROR, "%s: Unknown are type (%d)\n",
                      __FUNCTION__, psLinuxMemArea->eAreaType));
@@ -1490,6 +1601,13 @@ LinuxMemAreaToCpuPAddr(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset)
             CpuPAddr.uiAddr = VMallocToPhys(pCpuVAddr);
             break;
         }
+        case LINUX_MEM_AREA_ION:
+        {
+            IMG_UINT32 ui32PageIndex = PHYS_TO_PFN(ui32ByteOffset);
+            CpuPAddr = psLinuxMemArea->uData.sIONTilerAlloc.pCPUPhysAddrs[ui32PageIndex];
+            CpuPAddr.uiAddr += ADDR_TO_PAGE_OFFSET(ui32ByteOffset);
+            break;
+        }
         case LINUX_MEM_AREA_ALLOC_PAGES:
         {
             struct page *page;
@@ -1509,8 +1627,9 @@ LinuxMemAreaToCpuPAddr(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset)
         }
         default:
         {
-            PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)\n",
+            PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)",
                      __FUNCTION__, psLinuxMemArea->eAreaType));
+            dump_stack();
             PVR_ASSERT(CpuPAddr.uiAddr);
            break;
         }
@@ -1529,19 +1648,20 @@ LinuxMemAreaPhysIsContig(LinuxMemArea *psLinuxMemArea)
         case LINUX_MEM_AREA_IO:
             return IMG_TRUE;
 
-       case LINUX_MEM_AREA_EXTERNAL_KV:
-           return psLinuxMemArea->uData.sExternalKV.bPhysContig;
+        case LINUX_MEM_AREA_EXTERNAL_KV:
+            return psLinuxMemArea->uData.sExternalKV.bPhysContig;
 
+        case LINUX_MEM_AREA_ION:
         case LINUX_MEM_AREA_VMALLOC:
         case LINUX_MEM_AREA_ALLOC_PAGES:
-           return IMG_FALSE;
+            return IMG_FALSE;
 
         case LINUX_MEM_AREA_SUB_ALLOC:
              
-           return LinuxMemAreaPhysIsContig(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea);
+            return LinuxMemAreaPhysIsContig(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea);
 
         default:
-            PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)\n",
+            PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)",
                      __FUNCTION__, psLinuxMemArea->eAreaType));
            break;
     }
@@ -1567,6 +1687,8 @@ LinuxMemAreaTypeToString(LINUX_MEM_AREA_TYPE eMemAreaType)
             return "LINUX_MEM_AREA_SUB_ALLOC";
         case LINUX_MEM_AREA_ALLOC_PAGES:
             return "LINUX_MEM_AREA_ALLOC_PAGES";
+        case LINUX_MEM_AREA_ION:
+            return "LINUX_MEM_AREA_ION";
         default:
             PVR_ASSERT(0);
     }
index b32f5e8..aac8ec0 100755 (executable)
@@ -83,7 +83,8 @@ typedef enum {
     LINUX_MEM_AREA_VMALLOC,
     LINUX_MEM_AREA_ALLOC_PAGES,
     LINUX_MEM_AREA_SUB_ALLOC,
-    LINUX_MEM_AREA_TYPE_COUNT
+    LINUX_MEM_AREA_TYPE_COUNT,
+    LINUX_MEM_AREA_ION,
 }LINUX_MEM_AREA_TYPE;
 
 typedef struct _LinuxMemArea LinuxMemArea;
@@ -126,6 +127,12 @@ struct _LinuxMemArea {
             struct page **pvPageList;
            IMG_HANDLE hBlockPageList;
         }sPageList;
+        struct _sIONTilerAlloc
+        {
+
+            IMG_CPU_PHYADDR *pCPUPhysAddrs;
+            struct ion_handle *psIONHandle;
+        }sIONTilerAlloc;
         struct _sSubAlloc
         {
             
@@ -279,6 +286,38 @@ LinuxMemArea *NewAllocPagesLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32Are
 IMG_VOID FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea);
 
 
+#if defined(CONFIG_ION_OMAP)
+
+LinuxMemArea *
+NewIONLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags,
+                   IMG_PVOID pvPrivData, IMG_UINT32 ui32PrivDataLength);
+
+
+IMG_VOID FreeIONLinuxMemArea(LinuxMemArea *psLinuxMemArea);
+
+#else
+
+static inline LinuxMemArea *
+NewIONLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags,
+                   IMG_PVOID pvPrivData, IMG_UINT32 ui32PrivDataLength)
+{
+    PVR_UNREFERENCED_PARAMETER(ui32Bytes);
+    PVR_UNREFERENCED_PARAMETER(ui32AreaFlags);
+    PVR_UNREFERENCED_PARAMETER(pvPrivData);
+    PVR_UNREFERENCED_PARAMETER(ui32PrivDataLength);
+    BUG();
+    return IMG_NULL;
+}
+
+static inline IMG_VOID FreeIONLinuxMemArea(LinuxMemArea *psLinuxMemArea)
+{
+    PVR_UNREFERENCED_PARAMETER(psLinuxMemArea);
+    BUG();
+}
+
+#endif
+
+
 LinuxMemArea *NewSubLinuxMemArea(LinuxMemArea *psParentLinuxMemArea,
                                  IMG_UINT32 ui32ByteOffset,
                                  IMG_UINT32 ui32Bytes);
index 00c8b9d..516bf0a 100755 (executable)
@@ -39,6 +39,9 @@
 #include <linux/wrapper.h>
 #endif
 #include <linux/slab.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+#include <linux/highmem.h>
+#endif
 #include <asm/io.h>
 #include <asm/page.h>
 #include <asm/shmparam.h>
@@ -74,7 +77,7 @@
 #error "The mmap code requires PVR_SECURE_HANDLES"
 #endif
 
-static PVRSRV_LINUX_MUTEX g_sMMapMutex;
+PVRSRV_LINUX_MUTEX g_sMMapMutex;
 
 static LinuxKMemCache *g_psMemmapCache = NULL;
 static LIST_HEAD(g_sMMapAreaList);
@@ -672,19 +675,80 @@ MMapVClose(struct vm_area_struct* ps_vma)
     LinuxUnLockMutex(&g_sMMapMutex);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+static int MMapVAccess(struct vm_area_struct *ps_vma, unsigned long addr,
+                                          void *buf, int len, int write)
+{
+    PKV_OFFSET_STRUCT psOffsetStruct;
+    LinuxMemArea *psLinuxMemArea;
+    unsigned long ulOffset;
+       int iRetVal = -EINVAL;
+       IMG_VOID *pvKernelAddr;
+
+       LinuxLockMutex(&g_sMMapMutex);
+
+       psOffsetStruct = (PKV_OFFSET_STRUCT)ps_vma->vm_private_data;
+       psLinuxMemArea = psOffsetStruct->psLinuxMemArea;
+       ulOffset = addr - ps_vma->vm_start;
+
+    if (ulOffset+len > psLinuxMemArea->ui32ByteSize)
+
+               goto exit_unlock;
+
+       pvKernelAddr = LinuxMemAreaToCpuVAddr(psLinuxMemArea);
+
+       if (pvKernelAddr)
+       {
+               memcpy(buf, pvKernelAddr+ulOffset, len);
+               iRetVal = len;
+       }
+       else
+       {
+               IMG_UINT32 pfn, ui32OffsetInPage;
+               struct page *page;
+
+               pfn = LinuxMemAreaToCpuPFN(psLinuxMemArea, ulOffset);
+
+               if (!pfn_valid(pfn))
+                       goto exit_unlock;
+
+               page = pfn_to_page(pfn);
+               ui32OffsetInPage = ADDR_TO_PAGE_OFFSET(ulOffset);
+
+               if (ui32OffsetInPage+len > PAGE_SIZE)
+
+                       goto exit_unlock;
+
+               pvKernelAddr = kmap(page);
+               memcpy(buf, pvKernelAddr+ui32OffsetInPage, len);
+               kunmap(page);
+
+               iRetVal = len;
+       }
+
+exit_unlock:
+       LinuxUnLockMutex(&g_sMMapMutex);
+    return iRetVal;
+}
+#endif
 
 static struct vm_operations_struct MMapIOOps =
 {
        .open=MMapVOpen,
-       .close=MMapVClose
+       .close=MMapVClose,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+       .access=MMapVAccess,
+#endif
 };
 
 
 int
 PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma)
 {
-    IMG_UINT32 ui32ByteSize;
+    LinuxMemArea *psFlushMemArea = IMG_NULL;
     PKV_OFFSET_STRUCT psOffsetStruct;
+    IMG_UINT32 ui32ByteSize;
+    IMG_VOID *pvBase = IMG_NULL;
     int iRetVal = 0;
 
     PVR_UNREFERENCED_PARAMETER(pFile);
@@ -706,11 +770,11 @@ PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma)
         LinuxUnLockMutex(&g_sMMapMutex);
 
 #if !defined(SUPPORT_DRI_DRM_EXT)
-       
+
         return drm_mmap(pFile, ps_vma);
 #else
-       
-       return -ENOENT;
+
+        return -ENOENT;
 #endif
 #else
         PVR_UNREFERENCED_PARAMETER(pFile);
@@ -722,6 +786,7 @@ PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma)
 #endif
         goto unlock_and_return;
     }
+
     list_del(&psOffsetStruct->sMMapItem);
     psOffsetStruct->bOnMMapList = IMG_FALSE;
 
@@ -754,14 +819,14 @@ PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma)
             
             break;
         case PVRSRV_HAP_WRITECOMBINE:
-           ps_vma->vm_page_prot = PGPROT_WC(ps_vma->vm_page_prot);
+            ps_vma->vm_page_prot = PGPROT_WC(ps_vma->vm_page_prot);
             break;
         case PVRSRV_HAP_UNCACHED:
             ps_vma->vm_page_prot = PGPROT_UC(ps_vma->vm_page_prot);
             break;
         default:
             PVR_DPF((PVR_DBG_ERROR, "%s: unknown cache type", __FUNCTION__));
-           iRetVal = -EINVAL;
+            iRetVal = -EINVAL;
            goto unlock_and_return;
     }
     
@@ -781,35 +846,38 @@ PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma)
     
     if(psOffsetStruct->psLinuxMemArea->bNeedsCacheInvalidate)
     {
-        IMG_UINT32 ui32RealByteSize, ui32ByteOffset;
-        IMG_VOID *pvBase;
+        IMG_UINT32 ui32ByteOffset, ui32DummyByteSize;
 
         DetermineUsersSizeAndByteOffset(psOffsetStruct->psLinuxMemArea,
-                                        &ui32RealByteSize,
+                                        &ui32DummyByteSize,
                                         &ui32ByteOffset);
 
-        ui32RealByteSize = psOffsetStruct->psLinuxMemArea->ui32ByteSize;
         pvBase = (IMG_VOID *)ps_vma->vm_start + ui32ByteOffset;
+        psFlushMemArea = psOffsetStruct->psLinuxMemArea;
 
-        OSInvalidateCPUCacheRangeKM(psOffsetStruct->psLinuxMemArea,
-                                    pvBase, ui32RealByteSize);
         psOffsetStruct->psLinuxMemArea->bNeedsCacheInvalidate = IMG_FALSE;
     }
 
     
     MMapVOpenNoLock(ps_vma);
-    
+
     PVR_DPF((PVR_DBG_MESSAGE, "%s: Mapped area at offset 0x%08lx\n",
              __FUNCTION__, ps_vma->vm_pgoff));
-    
+
 unlock_and_return:
     if (iRetVal != 0 && psOffsetStruct != IMG_NULL)
     {
-       DestroyOffsetStruct(psOffsetStruct);
+        DestroyOffsetStruct(psOffsetStruct);
     }
 
     LinuxUnLockMutex(&g_sMMapMutex);
-    
+
+    if(psFlushMemArea)
+    {
+        OSInvalidateCPUCacheRangeKM(psFlushMemArea, pvBase,
+                                                                       psFlushMemArea->ui32ByteSize);
+    }
+
     return iRetVal;
 }
 
index 1a96e7c..0385e17 100755 (executable)
@@ -32,7 +32,7 @@
 #endif
 #endif
 
-#if defined(SUPPORT_DRI_DRM)
+#if defined(SUPPORT_DRI_DRM) && !defined(SUPPORT_DRI_DRM_PLUGIN)
 #define        PVR_MOD_STATIC
 #else
        
 #if defined(SUPPORT_DRI_DRM)
 #include "pvr_drm.h"
 #endif
-#define DRVNAME                PVRSRV_MODNAME
+#if defined(PVR_LDM_MODULE)
+#define        DRVNAME         PVR_LDM_DRIVER_REGISTRATION_NAME
+#endif
 #define DEVNAME                PVRSRV_MODNAME
 
 #if defined(SUPPORT_DRI_DRM)
@@ -121,11 +123,19 @@ module_param(gPVRDebugLevel, uint, 0644);
 MODULE_PARM_DESC(gPVRDebugLevel, "Sets the level of debug output (default 0x7)");
 #endif 
 
+#if defined(CONFIG_ION_OMAP)
+#include <linux/ion.h>
+#include <linux/omap_ion.h>
+extern struct ion_device *omap_ion_device;
+struct ion_client *gpsIONClient;
+EXPORT_SYMBOL(gpsIONClient);
+#endif
+
  
 EXPORT_SYMBOL(PVRGetDisplayClassJTable);
 EXPORT_SYMBOL(PVRGetBufferClassJTable);
 
-#if defined(PVR_LDM_MODULE)
+#if defined(PVR_LDM_MODULE) && !defined(SUPPORT_DRI_DRM)
 static struct class *psPvrClass;
 #endif
 
@@ -256,16 +266,27 @@ static int __devinit PVRSRVDriverProbe(LDM_DEV *pDevice, const struct pci_device
 #endif 
        
        psSysData = SysAcquireDataNoCheck();
-       if ( psSysData == IMG_NULL)
+       if (psSysData == IMG_NULL)
        {
                gpsPVRLDMDev = pDevice;
-
                if (SysInitialise() != PVRSRV_OK)
                {
                        return -ENODEV;
                }
        }
 
+#if defined(CONFIG_ION_OMAP)
+       gpsIONClient = ion_client_create(omap_ion_device,
+                                                                        1 << ION_HEAP_TYPE_CARVEOUT |
+                                                                        1 << OMAP_ION_HEAP_TYPE_TILER,
+                                                                        "pvr");
+       if (IS_ERR_OR_NULL(gpsIONClient))
+       {
+               PVR_DPF((PVR_DBG_ERROR, "PVRSRVDriverProbe: Couldn't create ion client"));
+               return PTR_ERR(gpsIONClient);
+       }
+#endif
+
        return 0;
 }
 
@@ -281,6 +302,11 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice)
 
        PVR_TRACE(("PVRSRVDriverRemove(pDevice=%p)", pDevice));
 
+#if defined(CONFIG_ION_OMAP)
+       ion_client_destroy(gpsIONClient);
+       gpsIONClient = IMG_NULL;
+#endif
+
        SysAcquireData(&psSysData);
        
 #if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL)
@@ -314,7 +340,12 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice)
 
 
 #if defined(PVR_LDM_MODULE) || defined(PVR_DRI_DRM_PLATFORM_DEV)
+#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) && \
+       !defined(SUPPORT_DRI_DRM_PLUGIN)
+void PVRSRVDriverShutdown(struct drm_device *pDevice)
+#else
 PVR_MOD_STATIC void PVRSRVDriverShutdown(LDM_DEV *pDevice)
+#endif
 {
        PVR_TRACE(("PVRSRVDriverShutdown(pDevice=%p)", pDevice));
 
@@ -325,7 +356,8 @@ PVR_MOD_STATIC void PVRSRVDriverShutdown(LDM_DEV *pDevice)
 
 
 #if defined(PVR_LDM_MODULE) || defined(SUPPORT_DRI_DRM)
-#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV)
+#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) && \
+       !defined(SUPPORT_DRI_DRM_PLUGIN)
 int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state)
 #else
 PVR_MOD_STATIC int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state)
@@ -343,7 +375,8 @@ PVR_MOD_STATIC int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state)
 }
 
 
-#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV)
+#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) && \
+       !defined(SUPPORT_DRI_DRM_PLUGIN)
 int PVRSRVDriverResume(struct drm_device *pDevice)
 #else
 PVR_MOD_STATIC int PVRSRVDriverResume(LDM_DEV *pDevice)
@@ -476,6 +509,7 @@ static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile)
 #endif
 {
        PVRSRV_FILE_PRIVATE_DATA *psPrivateData;
+       int err = 0;
 
        LinuxLockMutex(&gPVRSRVLock);
 
@@ -490,6 +524,31 @@ static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile)
                list_del(&psPrivateData->sDRMAuthListItem);
 #endif
 
+               if(psPrivateData->hKernelMemInfo)
+               {
+                       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+
+
+                       if(PVRSRVLookupHandle(KERNEL_HANDLE_BASE,
+                                                                 (IMG_PVOID *)&psKernelMemInfo,
+                                                                 psPrivateData->hKernelMemInfo,
+                                                                 PVRSRV_HANDLE_TYPE_MEM_INFO) != PVRSRV_OK)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "%s: Failed to look up export handle", __FUNCTION__));
+                               err = -EFAULT;
+                               goto err_unlock;
+                       }
+
+
+                       if(FreeMemCallBackCommon(psKernelMemInfo, 0,
+                                                                        PVRSRV_FREE_CALLBACK_ORIGIN_EXTERNAL) != PVRSRV_OK)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "%s: FreeMemCallBackCommon failed", __FUNCTION__));
+                               err = -EFAULT;
+                               goto err_unlock;
+                       }
+               }
+
                
                gui32ReleasePID = psPrivateData->ui32OpenPID;
                PVRSRVProcessDisconnect(psPrivateData->ui32OpenPID);
@@ -504,10 +563,12 @@ static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile)
 #endif
        }
 
+err_unlock:
        LinuxUnLockMutex(&gPVRSRVLock);
-
-#if !defined(SUPPORT_DRI_DRM)
-       return 0;
+#if defined(SUPPORT_DRI_DRM)
+       return;
+#else
+       return err;
 #endif
 }
 
@@ -522,8 +583,10 @@ static int __init PVRCore_Init(void)
 #if !defined(PVR_LDM_MODULE)
        PVRSRV_ERROR eError;
 #else
+#if !defined(SUPPORT_DRI_DRM)
        struct device *psDev;
 #endif
+#endif
 
 #if !defined(SUPPORT_DRI_DRM)
        
@@ -559,7 +622,7 @@ static int __init PVRCore_Init(void)
 
 #if defined(PVR_LDM_MODULE)
 
-#if defined(PVR_LDM_PLATFORM_MODULE)
+#if defined(PVR_LDM_PLATFORM_MODULE) || defined(SUPPORT_DRI_DRM_PLUGIN)
        if ((error = platform_driver_register(&powervr_driver)) != 0)
        {
                PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to register platform driver (%d)", error));
@@ -577,7 +640,7 @@ static int __init PVRCore_Init(void)
                goto init_failed;
        }
 #endif
-#endif 
+#endif
 
 #if defined(PVR_LDM_PCI_MODULE)
        if ((error = pci_register_driver(&powervr_driver)) != 0)
@@ -586,9 +649,10 @@ static int __init PVRCore_Init(void)
 
                goto init_failed;
        }
-#endif 
+#endif
+#endif
 
-#else 
+#if !defined(PVR_LDM_MODULE)
        
        if ((eError = SysInitialise()) != PVRSRV_OK)
        {
@@ -616,7 +680,6 @@ static int __init PVRCore_Init(void)
        }
 
        PVR_TRACE(("PVRCore_Init: major device %d", AssignedMajorNumber));
-#endif 
 
 #if defined(PVR_LDM_MODULE)
        
@@ -640,17 +703,18 @@ static int __init PVRCore_Init(void)
                error = -EBUSY;
                goto destroy_class;
        }
-#endif 
+#endif
+#endif
 
        return 0;
 
+#if !defined(SUPPORT_DRI_DRM)
 #if defined(PVR_LDM_MODULE)
 destroy_class:
        class_destroy(psPvrClass);
 unregister_device:
-       unregister_chrdev((IMG_UINT)AssignedMajorNumber, DRVNAME);
+       unregister_chrdev((IMG_UINT)AssignedMajorNumber, DEVNAME);
 #endif
-#if !defined(SUPPORT_DRI_DRM)
 sys_deinit:
 #endif
 #if defined(PVR_LDM_MODULE)
@@ -704,16 +768,17 @@ static void __exit PVRCore_Cleanup(void)
        SysAcquireData(&psSysData);
 #endif
 
+#if !defined(SUPPORT_DRI_DRM)
+
 #if defined(PVR_LDM_MODULE)
        device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0));
        class_destroy(psPvrClass);
 #endif
 
-#if !defined(SUPPORT_DRI_DRM)
 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22))
        if (
 #endif 
-               unregister_chrdev((IMG_UINT)AssignedMajorNumber, DRVNAME)
+               unregister_chrdev((IMG_UINT)AssignedMajorNumber, DEVNAME)
 #if !(LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22))
                                                                ;
 #else  
index 7cf61f0..f4a34b3 100755 (executable)
 #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                (500)
+#endif
 
 #if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS)
 PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID *ppvCpuVAddr, IMG_HANDLE *phBlockAlloc)
@@ -166,6 +170,8 @@ PVRSRV_ERROR
 OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags,
                                  IMG_UINT32 ui32Size,
                                  IMG_UINT32 ui32PageSize,
+                                 IMG_PVOID pvPrivData,
+                                 IMG_UINT32 ui32PrivDataLength,
                                  IMG_VOID **ppvCpuVAddr,
                                  IMG_HANDLE *phOSMemHandle)
 {
@@ -182,6 +188,22 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags,
     }
 #endif
 
+    if(ui32AllocFlags & PVRSRV_MEM_ION)
+    {
+
+        BUG_ON((ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK) != PVRSRV_HAP_SINGLE_PROCESS);
+
+        psLinuxMemArea = NewIONLinuxMemArea(ui32Size, ui32AllocFlags,
+                                                                                       pvPrivData, ui32PrivDataLength);
+        if(!psLinuxMemArea)
+        {
+            return PVRSRV_ERROR_OUT_OF_MEMORY;
+        }
+
+        PVRMMapRegisterArea(psLinuxMemArea);
+        goto ExitSkipSwitch;
+    }
+
     switch(ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK)
     {
         case PVRSRV_HAP_KERNEL_ONLY:
@@ -196,7 +218,6 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags,
         case PVRSRV_HAP_SINGLE_PROCESS:
         {
             
-            
             psLinuxMemArea = NewAllocPagesLinuxMemArea(ui32Size, ui32AllocFlags);
             if(!psLinuxMemArea)
             {
@@ -228,6 +249,7 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags,
             return PVRSRV_ERROR_INVALID_PARAMS;
     }
 
+ExitSkipSwitch:
     *ppvCpuVAddr = LinuxMemAreaToCpuVAddr(psLinuxMemArea);
     *phOSMemHandle = psLinuxMemArea;
     
@@ -348,6 +370,18 @@ OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_UINT32 ui32ByteOffset)
 }
 
 
+IMG_BOOL OSMemHandleIsPhysContig(IMG_VOID *hOSMemHandle)
+{
+       LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle;
+
+       PVR_ASSERT(psLinuxMemArea);
+
+       if(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_EXTERNAL_KV)
+               return psLinuxMemArea->uData.sExternalKV.bPhysContig;
+
+       return IMG_FALSE;
+}
+
 
 IMG_VOID OSMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_UINT32 ui32Size)
 {
@@ -1051,8 +1085,10 @@ IMG_BOOL OSIsResourceLocked (PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID)
 
 
 #if !defined(SYS_CUSTOM_POWERLOCK_WRAP)
-PVRSRV_ERROR OSPowerLockWrap (IMG_VOID)
+PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock)
 {
+       PVR_UNREFERENCED_PARAMETER(bTryLock);
+
        return PVRSRV_OK;
 }
 
@@ -1799,8 +1835,12 @@ static TIMER_CALLBACK_DATA sTimers[OS_MAX_TIMERS];
 #if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE)
 DEFINE_MUTEX(sTimerStructLock);
 #else
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
  
 static spinlock_t sTimerStructLock = __SPIN_LOCK_UNLOCKED();
+#else
+static DEFINE_SPINLOCK(sTimerStructLock);
+#endif
 #endif
 
 static void OSTimerCallbackBody(TIMER_CALLBACK_DATA *psTimerCBData)
@@ -2342,6 +2382,47 @@ PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem)
     return PVRSRV_OK;
 }
 
+#if defined(CONFIG_TI_TILER)
+
+static IMG_UINT32 CPUAddrToTilerPhy(IMG_UINT32 uiAddr)
+{
+       IMG_UINT32 ui32PhysAddr = 0;
+       pte_t *ptep, pte;
+       pgd_t *pgd;
+       pmd_t *pmd;
+
+       pgd = pgd_offset(current->mm, uiAddr);
+       if (pgd_none(*pgd) || pgd_bad(*pgd))
+               goto err_out;
+
+       pmd = pmd_offset(pgd, uiAddr);
+       if (pmd_none(*pmd) || pmd_bad(*pmd))
+               goto err_out;
+
+       ptep = pte_offset_map(pmd, uiAddr);
+       if (!ptep)
+               goto err_out;
+
+       pte = *ptep;
+       if (!pte_present(pte))
+               goto err_out;
+
+       ui32PhysAddr = (pte & PAGE_MASK) | (~PAGE_MASK & uiAddr);
+
+
+       if (ui32PhysAddr < 0x60000000 && ui32PhysAddr > 0x7fffffff)
+       {
+               PVR_DPF((PVR_DBG_ERROR, "CPUAddrToTilerPhy: Not in tiler range"));
+               ui32PhysAddr = 0;
+               goto err_out;
+       }
+
+err_out:
+       return ui32PhysAddr;
+}
+
+#endif
+
 PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID *pvCPUVAddr, 
                                     IMG_UINT32 ui32Bytes, 
                                     IMG_SYS_PHYADDR *psSysPAddr,
@@ -2359,7 +2440,6 @@ PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID *pvCPUVAddr,
     sWrapMemInfo *psInfo = NULL;
     IMG_BOOL bHavePageStructs = IMG_FALSE;
     IMG_BOOL bHaveNoPageStructs = IMG_FALSE;
-    IMG_BOOL bPFNMismatch = IMG_FALSE;
     IMG_BOOL bMMapSemHeld = IMG_FALSE;
     PVRSRV_ERROR eError = PVRSRV_ERROR_OUT_OF_MEMORY;
 
@@ -2532,20 +2612,20 @@ PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID *pvCPUVAddr,
        }
        if (psInfo->ppsPages[i] == NULL)
        {
+#if defined(CONFIG_TI_TILER)
 
-           bHaveNoPageStructs = IMG_TRUE;
-
-#if defined(VM_PFNMAP)
-           if ((psVMArea->vm_flags & VM_PFNMAP) != 0)
-           {
-               IMG_UINT32 ulPFNRaw = ((ulAddr - psVMArea->vm_start) >> PAGE_SHIFT) + psVMArea->vm_pgoff;
-
-               if (ulPFNRaw != ulPFN)
-               {
-                       bPFNMismatch = IMG_TRUE;
-               }
-           }
+               IMG_UINT32 ui32TilerAddr = CPUAddrToTilerPhy(ulAddr);
+               if (ui32TilerAddr)
+               {
+                       bHavePageStructs = IMG_TRUE;
+                       psInfo->iNumPagesMapped++;
+                       psInfo->psPhysAddr[i].uiAddr = ui32TilerAddr;
+                       psSysPAddr[i].uiAddr = ui32TilerAddr;
+                       continue;
+               }
 #endif
+
+           bHaveNoPageStructs = IMG_TRUE;
        }
        else
        {
@@ -2599,13 +2679,6 @@ PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID *pvCPUVAddr,
        goto error;
     }
 
-    if (bPFNMismatch)
-    {
-        PVR_DPF((PVR_DBG_ERROR,
-            "OSAcquirePhysPageAddr: PFN calculation mismatch for VM_PFNMAP region"));
-       goto error;
-    }
-
 exit:
     PVR_ASSERT(bMMapSemHeld);
     up_read(&current->mm->mmap_sem);
@@ -2615,7 +2688,7 @@ exit:
 
     if (bHaveNoPageStructs)
     {
-        PVR_DPF((PVR_DBG_WARNING,
+        PVR_DPF((PVR_DBG_MESSAGE,
             "OSAcquirePhysPageAddr: Region contains pages which can't be locked down (no page structures)"));
     }
 
@@ -2642,7 +2715,12 @@ error:
 }
 
 typedef void (*InnerCacheOp_t)(const void *pvStart, const void *pvEnd);
+
+#if defined(__arm__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+typedef void (*OuterCacheOp_t)(phys_addr_t uStart, phys_addr_t uEnd);
+#else
 typedef void (*OuterCacheOp_t)(unsigned long ulStart, unsigned long ulEnd);
+#endif
 
 #if defined(CONFIG_OUTER_CACHE)
 
@@ -2681,9 +2759,18 @@ static unsigned long AllocPagesAreaToPhys(LinuxMemArea *psLinuxMemArea,
        return page_to_pfn(pPage) << PAGE_SHIFT;
 }
 
+static unsigned long IONAreaToPhys(LinuxMemArea *psLinuxMemArea,
+                                                                  IMG_VOID *pvRangeAddrStart,
+                                                                  IMG_UINT32 ui32PageNumOffset,
+                                                                  IMG_UINT32 ui32PageNum)
+{
+       IMG_CPU_PHYADDR CpuPAddr;
+       CpuPAddr = psLinuxMemArea->uData.sIONTilerAlloc.pCPUPhysAddrs[ui32PageNumOffset + ui32PageNum];
+       return CpuPAddr.uiAddr;
+}
+
 #endif 
 
-#ifndef __mips__
 static
 IMG_VOID *FindMMapBaseVAddr(struct list_head *psMMapOffsetStructList,
                                                        IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length)
@@ -2708,6 +2795,8 @@ IMG_VOID *FindMMapBaseVAddr(struct list_head *psMMapOffsetStructList,
        return IMG_NULL;
 }
 
+extern PVRSRV_LINUX_MUTEX g_sMMapMutex;
+
 static
 IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                                                         IMG_VOID *pvRangeAddrStart,
@@ -2727,8 +2816,10 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
 
        PVR_ASSERT(psLinuxMemArea != IMG_NULL);
 
-       ui32AreaLength = psLinuxMemArea->ui32ByteSize;
+       LinuxLockMutex(&g_sMMapMutex);
+
        psMMapOffsetStructList = &psLinuxMemArea->sMMapOffsetStructList;
+       ui32AreaLength = psLinuxMemArea->ui32ByteSize;
 
        PVR_ASSERT(ui32Length <= ui32AreaLength);
 
@@ -2758,8 +2849,6 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                        else
                        {
                                
-                               
-
                                pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList,
                                                                                           pvRangeAddrStart, ui32Length);
                                if(!pvMinVAddr)
@@ -2786,7 +2875,6 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                        if (psLinuxMemArea->uData.sExternalKV.bPhysContig == IMG_TRUE)
                        {
                                PVR_DPF((PVR_DBG_WARNING, "%s: Attempt to flush contiguous external memory", __func__));
-
                                goto err_blocked;
                        }
 
@@ -2794,12 +2882,9 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                        if (psLinuxMemArea->uData.sExternalKV.pvExternalKV != IMG_NULL)
                        {
                                PVR_DPF((PVR_DBG_WARNING, "%s: Attempt to flush external memory with a kernel virtual address", __func__));
-
                                goto err_blocked;
                        }
 
-                       
-
                        pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList,
                                                                                   pvRangeAddrStart, ui32Length);
                        if(!pvMinVAddr)
@@ -2814,6 +2899,22 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                        break;
                }
 
+               case LINUX_MEM_AREA_ION:
+               {
+                       pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList,
+                                                                                  pvRangeAddrStart, ui32Length);
+                       if(!pvMinVAddr)
+                               goto err_blocked;
+
+                       pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length);
+
+#if defined(CONFIG_OUTER_CACHE)
+                       ui32PageNumOffset = ((ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr)) >> PAGE_SHIFT;
+                       pfnMemAreaToPhys = IONAreaToPhys;
+#endif
+                       break;
+               }
+
                case LINUX_MEM_AREA_ALLOC_PAGES:
                {
                        pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList,
@@ -2834,6 +2935,8 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle,
                        PVR_DBG_BREAK;
        }
 
+       LinuxUnLockMutex(&g_sMMapMutex);
+
 #if defined(CONFIG_OUTER_CACHE)
        PVR_ASSERT(pfnMemAreaToPhys != IMG_NULL);
 
@@ -2874,11 +2977,10 @@ err_blocked:
                                                          "%p-%p (type %d)", __func__,
                         pvRangeAddrStart, pvRangeAddrStart + ui32Length,
                         psLinuxMemArea->eAreaType));
+       LinuxUnLockMutex(&g_sMMapMutex);
        return IMG_FALSE;
 }
 
-#endif
-
 #if defined(__i386__)
 
 #define ROUND_UP(x,a) (((x) + (a) - 1) & ~((a) - 1))
@@ -2957,7 +3059,7 @@ IMG_VOID OSCleanCPUCacheKM(IMG_VOID)
        
        ON_EACH_CPU(per_cpu_cache_flush, NULL, 1);
 #if defined(CONFIG_OUTER_CACHE) && !defined(PVR_NO_FULL_CACHE_OPS)
-       outer_clean_all();
+       outer_clean_range(0, ULONG_MAX);
 #endif
 }
 
@@ -2969,10 +3071,12 @@ IMG_VOID OSFlushCPUCacheKM(IMG_VOID)
 #endif
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static inline size_t pvr_dmac_range_len(const void *pvStart, const void *pvEnd)
 {
        return (size_t)((char *)pvEnd - (char *)pvStart);
 }
+#endif
 
 static void pvr_dmac_inv_range(const void *pvStart, const void *pvEnd)
 {
index 99c6dc3..13d9b0d 100755 (executable)
@@ -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 e433269..80a7d2c 100755 (executable)
@@ -296,7 +296,11 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig
                                goto unlock_and_return;
                        }
 
-                       psMapDevMemIN->hKernelMemInfo = psPrivateData->hKernelMemInfo;
+                       if (put_user(psPrivateData->hKernelMemInfo, &psMapDevMemIN->hKernelMemInfo) != 0)
+                       {
+                               err = -EFAULT;
+                               goto unlock_and_return;
+                       }
                        break;
                }
 
@@ -376,21 +380,48 @@ PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsig
                        PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT =
                                (PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *)psBridgePackageKM->pvParamOut;
                        PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile);
+                       PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+
+
+                       if(PVRSRVLookupHandle(KERNEL_HANDLE_BASE,
+                                                                 (IMG_PVOID *)&psKernelMemInfo,
+                                                                 psExportDeviceMemOUT->hMemInfo,
+                                                                 PVRSRV_HANDLE_TYPE_MEM_INFO) != PVRSRV_OK)
+                       {
+                               PVR_DPF((PVR_DBG_ERROR, "%s: Failed to look up export handle", __FUNCTION__));
+                               err = -EFAULT;
+                               goto unlock_and_return;
+                       }
+
+
+                       psKernelMemInfo->ui32RefCount++;
 
                        psPrivateData->hKernelMemInfo = psExportDeviceMemOUT->hMemInfo;
 #if defined(SUPPORT_MEMINFO_IDS)
-                       psExportDeviceMemOUT->ui64Stamp = psPrivateData->ui64Stamp = ++ui64Stamp;
+                       psPrivateData->ui64Stamp = ++ui64Stamp;
+
+                       psKernelMemInfo->ui64Stamp = psPrivateData->ui64Stamp;
+                       if (put_user(psPrivateData->ui64Stamp, &psExportDeviceMemOUT->ui64Stamp) != 0)
+                       {
+                               err = -EFAULT;
+                               goto unlock_and_return;
+                       }
 #endif
                        break;
                }
 
 #if defined(SUPPORT_MEMINFO_IDS)
                case PVRSRV_BRIDGE_MAP_DEV_MEMORY:
+               case PVRSRV_BRIDGE_MAP_DEV_MEMORY_2:
                {
                        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 (put_user(psPrivateData->ui64Stamp, &psMapDeviceMemoryOUT->sDstClientMemInfo.ui64Stamp) != 0)
+                       {
+                               err = -EFAULT;
+                               goto unlock_and_return;
+                       }
                        break;
                }
 
@@ -398,7 +429,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 (put_user(++ui64Stamp, &psDeviceClassMemoryOUT->sClientMemInfo.ui64Stamp) != 0)
+                       {
+                               err = -EFAULT;
+                               goto unlock_and_return;
+                       }
                        break;
                }
 #endif 
index b210ebb..ff27e71 100755 (executable)
 #include "mutex.h"
 #include "linkage.h"
 
+#if !defined(CONFIG_PREEMPT)
+#define        PVR_DEBUG_ALWAYS_USE_SPINLOCK
+#endif
+
 static IMG_BOOL VBAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz,
                                                 const IMG_CHAR* pszFormat, va_list VArgs)
                                                 IMG_FORMAT_PRINTF(3, 0);
@@ -68,55 +72,77 @@ IMG_UINT32 gPVRDebugLevel =
 
 #define        PVR_MAX_MSG_LEN PVR_MAX_DEBUG_MESSAGE_LEN
 
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
 static IMG_CHAR gszBufferNonIRQ[PVR_MAX_MSG_LEN + 1];
+#endif
 
 static IMG_CHAR gszBufferIRQ[PVR_MAX_MSG_LEN + 1];
 
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
 static PVRSRV_LINUX_MUTEX gsDebugMutexNonIRQ;
+#endif
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
  
 static spinlock_t gsDebugLockIRQ = __SPIN_LOCK_UNLOCKED();
+#else
+static DEFINE_SPINLOCK(gsDebugLockIRQ);
+#endif
 
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
 #if !defined (USE_SPIN_LOCK)  
 #define        USE_SPIN_LOCK (in_interrupt() || !preemptible())
 #endif
+#endif
 
 static inline void GetBufferLock(unsigned long *pulLockFlags)
 {
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        if (USE_SPIN_LOCK)
+#endif
        {
                spin_lock_irqsave(&gsDebugLockIRQ, *pulLockFlags);
        }
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        else
        {
                LinuxLockMutex(&gsDebugMutexNonIRQ);
        }
+#endif
 }
 
 static inline void ReleaseBufferLock(unsigned long ulLockFlags)
 {
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        if (USE_SPIN_LOCK)
+#endif
        {
                spin_unlock_irqrestore(&gsDebugLockIRQ, ulLockFlags);
        }
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        else
        {
                LinuxUnLockMutex(&gsDebugMutexNonIRQ);
        }
+#endif
 }
 
 static inline void SelectBuffer(IMG_CHAR **ppszBuf, IMG_UINT32 *pui32BufSiz)
 {
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        if (USE_SPIN_LOCK)
+#endif
        {
                *ppszBuf = gszBufferIRQ;
                *pui32BufSiz = sizeof(gszBufferIRQ);
        }
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
        else
        {
                *ppszBuf = gszBufferNonIRQ;
                *pui32BufSiz = sizeof(gszBufferNonIRQ);
        }
+#endif
 }
 
 static IMG_BOOL VBAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, const IMG_CHAR* pszFormat, va_list VArgs)
@@ -138,7 +164,9 @@ static IMG_BOOL VBAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, const IMG_CHAR
 
 IMG_VOID PVRDPFInit(IMG_VOID)
 {
+#if !defined(PVR_DEBUG_ALWAYS_USE_SPINLOCK)
     LinuxInitMutex(&gsDebugMutexNonIRQ);
+#endif
 }
 
 IMG_VOID PVRSRVReleasePrintf(const IMG_CHAR *pszFormat, ...)
index 7b2e72a..42c976d 100755 (executable)
        #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
                
                #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
                
                #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_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)
+               #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_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_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_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
        
        #define SGX_CORE_DEFINED
 #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
                #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 == 116
+               #if defined(SGX_FEATURE_MP)
+                       #define FIX_HW_BRN_31425
+               #endif
+               #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP)
+                       #define FIX_HW_BRN_33657
+               #endif
+               #define FIX_HW_BRN_33809
        #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
        
        #define SGX_CORE_DEFINED
 #endif
        #else
        #if SGX_CORE_REV == 1014
        #else
+       #if SGX_CORE_REV == 10141
+       #else
        #if SGX_CORE_REV == SGX_CORE_REV_HEAD
                
        #else
        #endif
        #endif
        #endif
+       #endif
        
        #define SGX_CORE_DEFINED
 #endif
        #endif
 
        #if SGX_CORE_REV == 1251
+               #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: SGX554 Core Revision unspecified"
        #endif
index 9183f86..bdf36fe 100755 (executable)
@@ -71,7 +71,6 @@
        #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
@@ -98,7 +97,6 @@
        #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_EXTENDED_PERF_COUNTERS
        #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE
        #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_MULTI_EVENT_KICK
        #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE
        #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING)
-               #if defined(USE_SGX_CORE_REV_HEAD)
-                       #define SGX_FEATURE_FAST_RENDER_CONTEXT_SWITCH
-               #endif
-               #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH
-               #define SGX_FEATURE_ISP_CONTEXT_SWITCH_REV_2
+               #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH
        #endif
 #else
 #if defined(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_2D_HARDWARE
        #define SGX_FEATURE_PTLA
index 60d7695..34bc7e9 100755 (executable)
@@ -86,6 +86,8 @@ struct _BM_HEAP_
        
        struct _BM_HEAP_                *psNext;
        struct _BM_HEAP_                **ppsThis;
+
+       IMG_UINT32                              ui32XTileStride;
 };
 
 struct _BM_CONTEXT_
@@ -154,6 +156,8 @@ BM_Alloc (IMG_HANDLE                        hDevMemHeap,
                        IMG_SIZE_T                      uSize,
                        IMG_UINT32                      *pui32Flags,
                        IMG_UINT32                      uDevVAddrAlignment,
+                       IMG_PVOID                       pvPrivData,
+                       IMG_UINT32                      ui32PrivDataLength,
                        BM_HANDLE                       *phBuf);
 
 IMG_BOOL
index 4d544cd..3d76ba8 100755 (executable)
@@ -83,7 +83,7 @@ IMG_BOOL OSUnMapPhysToLin(IMG_VOID *pvLinAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32
 PVRSRV_ERROR OSReservePhys(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle);
 PVRSRV_ERROR OSUnReservePhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle);
 
-#if defined(__linux__) && defined(__KERNEL__)
+#if (defined(__linux__) && defined(__KERNEL__)) || (UNDER_CE >= 600)
 
 IMG_VOID OSFlushCPUCacheKM(IMG_VOID);
 
@@ -304,7 +304,8 @@ IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID);
 IMG_UINTPTR_T OSGetCurrentThreadID( IMG_VOID );
 IMG_VOID OSMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size);
 
-PVRSRV_ERROR OSAllocPages_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_UINT32 ui32PageSize, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phPageAlloc);
+PVRSRV_ERROR OSAllocPages_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_UINT32 ui32PageSize,
+                                                          IMG_PVOID pvPrivData, IMG_UINT32 ui32PrivDataLength, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phPageAlloc);
 PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hPageAlloc);
 
 
@@ -313,9 +314,9 @@ PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pv
                (PVR_TRACE(("OSAllocMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): " logStr " (size = 0x%lx)", size)), \
                        OSAllocMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__))
 
-       #define OSAllocPages(flags, size, pageSize, linAddr, pageAlloc) \
+       #define OSAllocPages(flags, size, pageSize, privdata, privdatalength, linAddr, pageAlloc) \
                (PVR_TRACE(("OSAllocPages(" #flags ", " #size ", " #pageSize ", " #linAddr ", " #pageAlloc "): (size = 0x%lx)", size)), \
-                       OSAllocPages_Impl(flags, size, pageSize, linAddr, pageAlloc))
+                       OSAllocPages_Impl(flags, size, pageSize, linAddr, privdata, privdatalength, pageAlloc))
                
        #define OSFreeMem(flags, size, linAddr, blockAlloc) \
                (PVR_TRACE(("OSFreeMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): (pointer = 0x%X)", linAddr)), \
@@ -400,6 +401,19 @@ static INLINE IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_HANDLE hOSMemHandle, IMG
        return sCpuPAddr;
 }
 #endif
+
+#if defined(__linux__)
+IMG_BOOL OSMemHandleIsPhysContig(IMG_VOID *hOSMemHandle);
+#else
+#ifdef INLINE_IS_PRAGMA
+#pragma inline(OSMemHandleIsPhysContig)
+#endif
+static INLINE IMG_BOOL OSMemHandleIsPhysContig(IMG_HANDLE hOSMemHandle)
+{
+       return IMG_FALSE;
+}
+#endif
+
 PVRSRV_ERROR OSInitEnvData(IMG_PVOID *ppvEnvSpecificData);
 PVRSRV_ERROR OSDeInitEnvData(IMG_PVOID pvEnvSpecificData);
 IMG_CHAR* OSStringCopy(IMG_CHAR *pszDest, const IMG_CHAR *pszSrc);
@@ -461,7 +475,7 @@ IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID);
 #define OSPowerLockWrap SysPowerLockWrap
 #define OSPowerLockUnwrap SysPowerLockUnwrap
 #else
-PVRSRV_ERROR OSPowerLockWrap(IMG_VOID);
+PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock);
 
 IMG_VOID OSPowerLockUnwrap(IMG_VOID);
 #endif 
diff --git a/drivers/staging/mrst/pvr/services4/srvkm/include/perfkm.h b/drivers/staging/mrst/pvr/services4/srvkm/include/perfkm.h
new file mode 100644 (file)
index 0000000..e12bc2e
--- /dev/null
@@ -0,0 +1,36 @@
+/**********************************************************************
+ *
+ * Copyright (C) Imagination Technologies Ltd. All rights reserved.
+ * 
+ * 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 _PERFKM_H_
+#define _PERFKM_H_
+
+#include "img_types.h"
+
+#define PERFINIT()
+#define PERFDEINIT()
+
+#endif 
+
index ab89527..974f6da 100755 (executable)
@@ -39,12 +39,14 @@ extern "C" {
  typedef struct _COMMAND_COMPLETE_DATA_
  {
        IMG_BOOL                        bInUse;
-               
-       IMG_UINT32                      ui32DstSyncCount;       
-       IMG_UINT32                      ui32SrcSyncCount;       
-       PVRSRV_SYNC_OBJECT      *psDstSync;                     
-       PVRSRV_SYNC_OBJECT      *psSrcSync;                     
-       IMG_UINT32                      ui32AllocSize;          
+
+       IMG_UINT32                      ui32DstSyncCount;
+       IMG_UINT32                      ui32SrcSyncCount;
+       PVRSRV_SYNC_OBJECT      *psDstSync;
+       PVRSRV_SYNC_OBJECT      *psSrcSync;
+       IMG_UINT32                      ui32AllocSize;
+       PFN_QUEUE_COMMAND_COMPLETE      pfnCommandComplete;
+       IMG_HANDLE                                      hCallbackData;
  }COMMAND_COMPLETE_DATA, *PCOMMAND_COMPLETE_DATA;
 
 #if !defined(USE_CODE)
@@ -76,7 +78,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO     *psQueue,
                                                                                                PVRSRV_KERNEL_SYNC_INFO *apsDstSync[],
                                                                                                IMG_UINT32                      ui32SrcSyncCount,
                                                                                                PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[],
-                                                                                               IMG_SIZE_T                      ui32DataByteSize );
+                                                                                               IMG_SIZE_T                      ui32DataByteSize,
+                                                                                               PFN_QUEUE_COMMAND_COMPLETE pfnCommandComplete,
+                                                                                               IMG_HANDLE                      hCallbackData);
 
 IMG_IMPORT
 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetQueueSpaceKM(PVRSRV_QUEUE_INFO *psQueue,
index db141f6..7476302 100755 (executable)
@@ -89,6 +89,8 @@ RA_Create (IMG_CHAR *name,
                                 IMG_SIZE_T *pActualSize,
                                 BM_MAPPING **ppsMapping,
                                 IMG_UINT32 uFlags,
+                                IMG_PVOID pvPrivData,
+                                IMG_UINT32 ui32PrivDataLength,
                                 IMG_UINTPTR_T *pBase),
            IMG_VOID (*imp_free) (IMG_VOID *,
                                 IMG_UINTPTR_T,
@@ -115,7 +117,9 @@ RA_Alloc (RA_ARENA *pArena,
           BM_MAPPING **ppsMapping, 
           IMG_UINT32 uFlags,
           IMG_UINT32 uAlignment,
-                 IMG_UINT32 uAlignmentOffset,
+          IMG_UINT32 uAlignmentOffset,
+          IMG_PVOID pvPrivData,
+          IMG_UINT32 ui32PrivDataLength,
           IMG_UINTPTR_T *pBase);
 
 IMG_VOID 
index 7770b82..6bb1037 100755 (executable)
@@ -102,6 +102,10 @@ typedef struct _SYS_DATA_TAG_
 
 
 
+#if defined (CUSTOM_DISPLAY_SEGMENT)
+PVRSRV_ERROR SysGetDisplaySegmentAddress (IMG_VOID *pvDevInfo, IMG_VOID *pvPhysicalAddress, IMG_UINT32 *pui32Length);
+#endif
+
 PVRSRV_ERROR SysInitialise(IMG_VOID);
 PVRSRV_ERROR SysFinalise(IMG_VOID);
 
@@ -128,8 +132,12 @@ PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex,
                                                                         PVRSRV_DEV_POWER_STATE eNewPowerState,
                                                                         PVRSRV_DEV_POWER_STATE eCurrentPowerState);
 
+#if defined(SYS_SUPPORTS_SGX_IDLE_CALLBACK)
+IMG_VOID SysSGXIdleTransition(IMG_BOOL bSGXIdle);
+#endif
+
 #if defined(SYS_CUSTOM_POWERLOCK_WRAP)
-PVRSRV_ERROR SysPowerLockWrap(IMG_VOID);
+PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock);
 IMG_VOID SysPowerLockUnwrap(IMG_VOID);
 #endif
 
index 877500a..1596002 100755 (executable)
@@ -474,8 +474,6 @@ PVRSRV_ERROR SysInitialise(IMG_VOID)
                return eError;
        }
 
-       
-
 
        eError = PVRSRVRegisterDevice(gpsSysData, SGXRegisterDevice,
                                                                  DEVICE_SGX_INTERRUPT, &gui32SGXDeviceID);
@@ -705,6 +703,8 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
 {
        PVRSRV_ERROR eError;
 
+       PVR_UNREFERENCED_PARAMETER(psSysData);
+
        SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData;
 
 #if (defined(SYS_USING_INTERRUPTS) && !defined(SUPPORT_DRI_DRM_EXT))
@@ -717,7 +717,7 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
 #if defined(SYS_USING_INTERRUPTS) && !defined(SUPPORT_DRI_DRM_EXT)
        if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_LISR_INSTALLED))
        {
-               eError = OSUninstallSystemLISR(psSysData);
+               eError = OSUninstallSystemLISR(gpsSysData);
                if (eError != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallSystemLISR failed"));
@@ -728,7 +728,7 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
 
        if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_MISR_INSTALLED))
        {
-               eError = OSUninstallMISR(psSysData);
+               eError = OSUninstallMISR(gpsSysData);
                if (eError != PVRSRV_OK)
                {
                        PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallMISR failed"));
@@ -1397,6 +1397,15 @@ PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32                  ui32DeviceIndex,
        return PVRSRV_OK;
 }
 
+#if defined(SYS_SUPPORTS_SGX_IDLE_CALLBACK)
+
+IMG_VOID SysSGXIdleTransition(IMG_BOOL bSGXIdle)
+{
+       PVR_DPF((PVR_DBG_MESSAGE, "SysSGXIdleTransition switch to %u", bSGXIdle));
+}
+
+#endif
+
 #if defined(SUPPORT_DRI_DRM_EXT)
 int SYSPVRServiceSGXInterrupt(struct drm_device *dev)
 {
index 97758bc..c069445 100755 (executable)
@@ -71,9 +71,11 @@ typedef struct _SYS_SPECIFIC_DATA_TAG_
 #if defined(SUPPORT_DRI_DRM)
        struct drm_device *psDRMDev;
 #endif
+       IMG_UINT32 ui32SGXFreqListSize;
+       IMG_UINT32 *pui32SGXFreqList;
+       IMG_UINT32 ui32SGXFreqListIndex;
 } SYS_SPECIFIC_DATA;
 
 #endif 
 
 
index ae08ebe..f1cb02a 100755 (executable)
  * 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__*/