gpu: update to 2.5.3.2.2; add auto freq switch; fix some game crash.
author杜坤明 <dkm@rockchip.com>
Sat, 4 Jun 2011 06:36:15 +0000 (14:36 +0800)
committer杜坤明 <dkm@rockchip.com>
Sat, 4 Jun 2011 06:36:15 +0000 (14:36 +0800)
47 files changed:
drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c [changed mode: 0755->0644]
drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/makefile.linux
drivers/staging/rk29/vivante/config
drivers/staging/rk29/vivante/hal/inc/gc_hal.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/inc/gc_hal_base.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_compiler.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_driver.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_dump.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_engine.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_enum.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/inc/gc_hal_mem.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/inc/gc_hal_profiler.h
drivers/staging/rk29/vivante/hal/inc/gc_hal_raster.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/inc/gc_hal_types.h
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel.c
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel.h
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_event.c [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_heap.c
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_mmu.c
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_precomp.h
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_video_memory.c
drivers/staging/rk29/vivante/hal/kernel/makefile.linux
drivers/staging/rk29/vivante/hal/makefile.linux
drivers/staging/rk29/vivante/hal/os/libGAL.def.mak [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_debug.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_device.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_device.h
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_linux.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_linux.h [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.h
drivers/staging/rk29/vivante/hal/os/qnx/inc/gc_hal_common_qnx.h [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_debug.c [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.c [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.h [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_driver.c [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.c [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.h [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.c [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.h [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/kernel/makefile.linux [deleted file]
drivers/staging/rk29/vivante/hal/os/qnx/makefile.linux [deleted file]
drivers/staging/rk29/vivante/hal/user/gc_hal_user_context.h

old mode 100755 (executable)
new mode 100644 (file)
index e518bd6..9bfaa9a
@@ -26,7 +26,8 @@
 
 #define _GC_OBJ_ZONE    gcvZONE_HARDWARE
 
-#if gcdENABLE_AUTO_FREQ
+// dkm: gcdENABLE_AUTO_FREQ
+#if (1==gcdENABLE_AUTO_FREQ)
 #include <linux/time.h>
 #include <linux/clk.h>
 u32 usec_run = 0;
@@ -90,9 +91,33 @@ inline void cal_run_idle(gceCHIPPOWERSTATE State)
     
     lastState = State;
 }
-
+#elif (2==gcdENABLE_AUTO_FREQ)
+#include <linux/clk.h>
+gceCHIPPOWERSTATE lastState = gcvPOWER_IDLE;
+int lasthighfreq = 0;
+extern int needhighfreq;
+struct clk *clk_gpu = NULL;
+inline void get_idle_change(gceCHIPPOWERSTATE State)
+{
+    if(gcvPOWER_ON!=lastState && gcvPOWER_ON==State)  //gcvPOWER_IDLE->gcvPOWER_ON
+    {
+        if(lasthighfreq != needhighfreq) {
+            int gpufreq = needhighfreq ? 552 : 360;
+            clk_gpu = clk_get(NULL, "gpu");
+            clk_set_parent(clk_gpu, clk_get(NULL, "general_pll"));
+            clk_set_rate(clk_get(NULL, "codec_pll"), gpufreq*1000000);
+            clk_set_rate(clk_gpu, gpufreq*1000000);
+            clk_set_parent(clk_gpu, clk_get(NULL, "codec_pll"));
+            lasthighfreq = needhighfreq;
+            
+            printk("gpu: change freq to %d \n", gpufreq); 
+        }
+    }
+    lastState = State;
+}
 #endif
 
+// dkm: gcdENABLE_LONG_IDLE_POWEROFF
 #if gcdENABLE_LONG_IDLE_POWEROFF
 #include <linux/workqueue.h>
 struct delayed_work poweroff_work;
@@ -122,7 +147,8 @@ _IdentifyHardware(
     OUT gctUINT32_PTR ChipRevision,
     OUT gctUINT32_PTR ChipFeatures,
     OUT gctUINT32_PTR ChipMinorFeatures0,
-    OUT gctUINT32_PTR ChipMinorFeatures1
+    OUT gctUINT32_PTR ChipMinorFeatures1,
+    OUT gctUINT32_PTR ChipMinorFeatures2
     )
 {
     gceSTATUS status;
@@ -200,6 +226,7 @@ _IdentifyHardware(
         /* GC500 rev 1.x and GC300 rev < 2.0 doesn't have these registers. */
         *ChipMinorFeatures0 = 0;
         *ChipMinorFeatures1 = 0;
+        *ChipMinorFeatures2 = 0;
     }
     else
     {
@@ -209,6 +236,8 @@ _IdentifyHardware(
                                0x00034,
                                ChipMinorFeatures0));
 
+        *ChipMinorFeatures0 = ((((gctUINT32) (*ChipMinorFeatures0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
+
         if (((((gctUINT32) (*ChipMinorFeatures0)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))))
         )
         {
@@ -217,19 +246,35 @@ _IdentifyHardware(
                 gckOS_ReadRegister(Os,
                                    0x00074,
                                    ChipMinorFeatures1));
+
+            /* Read chip minor featuress register #1. */
+#if defined GC_MINOR_FEATURES2_Address
+            gcmkONERROR(
+                gckOS_ReadRegister(Os,
+                                   GC_MINOR_FEATURES2_Address,
+                                   ChipMinorFeatures2));
+#else
+            /* Chip doesn't has minor features register 2. */
+            *ChipMinorFeatures2 = 0;
+#endif
         }
         else
         {
-            /* Chip doesn't has minor features register #1. */
+            /* Chip doesn't has minor features register #1 or 2. */
             *ChipMinorFeatures1 = 0;
+            *ChipMinorFeatures2 = 0;
         }
     }
 
+    *ChipMinorFeatures0 = ((((gctUINT32) (*ChipMinorFeatures0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
+
     /* Success. */
-    gcmkFOOTER_ARG("*ChipModel=%x *ChipRevision=%x *ChipFeatures=%08x "
-                   "*ChipMinorFeatures0=%08X *ChipMinorFeatures1=%08x",
+    gcmkFOOTER_ARG("*ChipModel=%x *ChipRevision=%x *ChipFeatures=0x%08x "
+                   "*ChipMinorFeatures0=0x%08X *ChipMinorFeatures1=0x%08x "
+                   "*ChipMinorFeatures2=0x%08x",
                    *ChipModel, *ChipRevision, *ChipFeatures,
-                   *ChipMinorFeatures0, *ChipMinorFeatures1);
+                   *ChipMinorFeatures0, *ChipMinorFeatures1,
+                   *ChipMinorFeatures2);
     return gcvSTATUS_OK;
 
 OnError:
@@ -387,6 +432,7 @@ gckHARDWARE_Construct(
     gctUINT32 chipFeatures;
     gctUINT32 chipMinorFeatures0;
     gctUINT32 chipMinorFeatures1;
+    gctUINT32 chipMinorFeatures2;
     gctUINT16 data = 0xff00;
 
     gcmkHEADER_ARG("Os=0x%x", Os);
@@ -405,7 +451,8 @@ gckHARDWARE_Construct(
                                   &chipRevision,
                                   &chipFeatures,
                                   &chipMinorFeatures0,
-                                  &chipMinorFeatures1));
+                                  &chipMinorFeatures1,
+                                  &chipMinorFeatures2));
 
     /* Allocate the gckHARDWARE object. */
     gcmkONERROR(gckOS_Allocate(Os,
@@ -422,6 +469,7 @@ gckHARDWARE_Construct(
     hardware->chipFeatures       = chipFeatures;
     hardware->chipMinorFeatures0 = chipMinorFeatures0;
     hardware->chipMinorFeatures1 = chipMinorFeatures1;
+    hardware->chipMinorFeatures2 = chipMinorFeatures2;
     hardware->powerBaseAddress   = (  (chipModel == gcv300)
                                    && (chipRevision < 0x2000)
                                    ) ? 0x100 : 0x00;
@@ -451,6 +499,7 @@ gckHARDWARE_Construct(
     /* Return pointer to the gckHARDWARE object. */
     *Hardware = hardware;
 
+// dkm: gcdENABLE_LONG_IDLE_POWEROFF
 #if gcdENABLE_LONG_IDLE_POWEROFF
     INIT_DELAYED_WORK(&poweroff_work, time_to_poweroff);
     gHardware = hardware;
@@ -814,6 +863,10 @@ gckHARDWARE_QueryMemory(
 **          If 'ChipMinorFeatures1' is not gcvNULL, the variable it points to
 **          will receive the minor feature set 1 of the chip.
 **
+**      gctUINT32 * ChipMinorFeatures2
+**          If 'ChipMinorFeatures2' is not gcvNULL, the variable it points to
+**          will receive the minor feature set 2 of the chip.
+**
 */
 gceSTATUS
 gckHARDWARE_QueryChipIdentity(
@@ -822,7 +875,8 @@ gckHARDWARE_QueryChipIdentity(
     OUT gctUINT32 * ChipRevision,
     OUT gctUINT32* ChipFeatures,
     OUT gctUINT32* ChipMinorFeatures,
-    OUT gctUINT32* ChipMinorFeatures1
+    OUT gctUINT32* ChipMinorFeatures1,
+    OUT gctUINT32* ChipMinorFeatures2
     )
 {
     gcmkHEADER_ARG("Hardware=0x%x", Hardware);
@@ -885,12 +939,21 @@ gckHARDWARE_QueryChipIdentity(
         *ChipMinorFeatures1 = Hardware->chipMinorFeatures1;
     }
 
+    /* Return minor feature set 2. */
+    if (ChipMinorFeatures2 != gcvNULL)
+    {
+        *ChipMinorFeatures2 = Hardware->chipMinorFeatures2;
+    }
+
     /* Success. */
     gcmkFOOTER_ARG("*ChipModel=0x%x *ChipRevision=0x%x *ChipFeatures=0x%08x "
-                   "*ChipMinorFeatures=0x%08x *ChipMinorFeatures1=0x%08x",
+                   "*ChipMinorFeatures=0x%08x *ChipMinorFeatures1=0x%08x "
+                   "*ChipMinorFeatures2=0x%08x",
                    gcmOPT_VALUE(ChipModel), gcmOPT_VALUE(ChipRevision),
                    gcmOPT_VALUE(ChipFeatures), gcmOPT_VALUE(ChipMinorFeatures),
-                   gcmOPT_VALUE(ChipMinorFeatures1));
+                   gcmOPT_VALUE(ChipMinorFeatures1),
+                   gcmOPT_VALUE(ChipMinorFeatures2));
+
     return gcvSTATUS_OK;
 }
 
@@ -2641,6 +2704,7 @@ gckHARDWARE_GetIdle(
     pollCount = Wait ? 100 : 1;
 
     /* At most, try for 1 second. */
+    // dkm: 1000³¬Ê±Ì«³¤ÁË£¬¸ÄΪ200
     for (retry = 0; retry < 200; ++retry)
     {
         /* If we have to wait, try 100 polls per millisecond. */
@@ -2896,6 +2960,7 @@ gckHARDWARE_SetPowerManagementState(
     gctBOOL stall = gcvTRUE;
     gctBOOL broadcast = gcvFALSE;
     gctUINT32 process, thread;
+// dkm: gcdENABLE_LONG_IDLE_POWEROFF
 #if gcdENABLE_LONG_IDLE_POWEROFF
     gceCHIPPOWERSTATE curState = State;
 #endif
@@ -2942,6 +3007,7 @@ gckHARDWARE_SetPowerManagementState(
         },
 
         /* gcvPOWER_SUSPEND      */
+        // dkm: Õâ±ß©ÁËgcvPOWER_FLAG_INITIALIZE
         {   /* ON                */ gcvPOWER_FLAG_INITIALIZE |
                                     gcvPOWER_FLAG_START   |
                                     gcvPOWER_FLAG_RELEASE |
@@ -2949,6 +3015,7 @@ gckHARDWARE_SetPowerManagementState(
             /* OFF               */ gcvPOWER_FLAG_SAVE |
                                     gcvPOWER_FLAG_OFF  |
                                     gcvPOWER_FLAG_CLOCK_OFF,
+        // dkm: Õâ±ß©ÁËgcvPOWER_FLAG_INITIALIZE
             /* IDLE              */ gcvPOWER_FLAG_INITIALIZE |
                                     gcvPOWER_FLAG_START |
                                     gcvPOWER_FLAG_DELAY,
@@ -2963,22 +3030,26 @@ gckHARDWARE_SetPowerManagementState(
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (64) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)))|
-        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) ,
+        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))), 
+
         /* gcvPOWER_OFF */
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)))|
-        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) ,
+        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))), 
+
         /* gcvPOWER_IDLE */
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)))|
-        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) ,
+        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))), 
+
         /* gcvPOWER_SUSPEND */
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))|
         ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)))|
-        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))), };
+        ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))), 
+    };
 
     gcmkHEADER_ARG("Hardware=0x%x State=%d", Hardware, State);
 
@@ -3039,11 +3110,7 @@ gckHARDWARE_SetPowerManagementState(
     default:
         break;
     }
-
-#if gcdENABLE_AUTO_FREQ
-    cal_run_idle(State);
-#endif
-    
+   
     /* Get current process and thread IDs. */
     gcmkONERROR(gckOS_GetProcessID(&process));
     gcmkONERROR(gckOS_GetThreadID(&thread));
@@ -3064,7 +3131,8 @@ gckHARDWARE_SetPowerManagementState(
                 gcmkFOOTER_NO();
                 return gcvSTATUS_OK;
             }
-            else if(gcvPOWER_IDLE==State)   // dkm add 110330
+            // dkm: add 110330
+            else if(gcvPOWER_IDLE==State)
             {
                 /* Bail out on idle broadcast with other process is setting power. */
                 gcmkFOOTER_NO();
@@ -3087,11 +3155,19 @@ gckHARDWARE_SetPowerManagementState(
     Hardware->powerProcess = process;
     Hardware->powerThread  = thread;
     mutexAcquired          = gcvTRUE;
+    
+// dkm: gcdENABLE_AUTO_FREQ
+#if (1==gcdENABLE_AUTO_FREQ)
+    cal_run_idle(State);
+#elif (2==gcdENABLE_AUTO_FREQ)
+    get_idle_change(State);
+#endif
 
     /* Grab control flags and clock. */
     flag  = flags[Hardware->chipPowerState][State];
     clock = clocks[State];
 
+// dkm: gcdENABLE_LONG_IDLE_POWEROFF
 #if gcdENABLE_LONG_IDLE_POWEROFF
     if(gcvPOWER_IDLE_BROADCAST==curState) {
         cancel_delayed_work_sync(&poweroff_work);
@@ -3105,15 +3181,16 @@ gckHARDWARE_SetPowerManagementState(
 
     if ((flag == 0) || (Hardware->settingPowerState))
     {
+// dkm: gcdENABLE_LONG_IDLE_POWEROFF
 #if gcdENABLE_LONG_IDLE_POWEROFF
         if( (gcvPOWER_OFF==Hardware->chipPowerState) && (gcvPOWER_OFF==State) && (gcvFALSE==broadcast) )
         {
             Hardware->broadcast = gcvFALSE;
         }
 #endif
+        Hardware->powerProcess = Hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        Hardware->powerProcess = 0;
-        Hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
 
         /* No need to do anything. */
@@ -3125,9 +3202,9 @@ gckHARDWARE_SetPowerManagementState(
     &&  (Hardware->chipPowerState == gcvPOWER_OFF)
     )
     {
+        Hardware->powerProcess = Hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        Hardware->powerProcess = 0;
-        Hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
 
         /* No broadcast while GPU is forced power off. */
@@ -3217,6 +3294,9 @@ gckHARDWARE_SetPowerManagementState(
     {
         /* Stop the command parser. */
         gcmkONERROR(gckCOMMAND_Stop(command));
+
+        /* Stop the Isr. */
+        gcmkONERROR(Hardware->stopIsr(Hardware->isrContext));
     }
 
     /* Write the clock control register. */
@@ -3265,6 +3345,9 @@ gckHARDWARE_SetPowerManagementState(
     {
         /* Start the command processor. */
         gcmkONERROR(gckCOMMAND_Start(command));
+
+        /* Start the Isr. */
+        gcmkONERROR(Hardware->startIsr(Hardware->isrContext));
     }
 
     if (flag & gcvPOWER_FLAG_RELEASE)
@@ -3277,10 +3360,9 @@ gckHARDWARE_SetPowerManagementState(
     Hardware->chipPowerState    = State;
     Hardware->broadcast         = broadcast;
     Hardware->settingPowerState = gcvFALSE;
+    Hardware->powerProcess      = Hardware->powerThread = 0x0;
 
     /* Release the power mutex. */
-    Hardware->powerProcess = 0;
-    Hardware->powerThread = 0;
     gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
 
     /* Success. */
@@ -3304,9 +3386,8 @@ OnError:
     if (mutexAcquired)
     {
         Hardware->settingPowerState = gcvFALSE;
+        Hardware->powerProcess = Hardware->powerThread = 0x0;
 
-        Hardware->powerProcess = 0;
-        Hardware->powerThread = 0;
         gcmkVERIFY_OK(gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex));
     }
 
@@ -3904,3 +3985,39 @@ gckHARDWARE_NeedBaseAddress(
     return gcvSTATUS_OK;
 }
 
+gceSTATUS
+gckHARDWARE_SetIsrManager(
+   IN gckHARDWARE Hardware,
+   IN gctISRMANAGERFUNC StartIsr,
+   IN gctISRMANAGERFUNC StopIsr,
+   IN gctPOINTER Context
+   )
+{
+    gceSTATUS status = gcvSTATUS_OK;
+
+    gcmkHEADER_ARG("Hardware=0x%x, StartIsr=0x%x, StopIsr=0x%x, Context=0x%x",
+                   Hardware, StartIsr, StopIsr, Context);
+
+    /* Verify the arguments. */
+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+
+    if (StartIsr == gcvNULL ||
+        StopIsr == gcvNULL ||
+        Context == gcvNULL)
+    {
+        status = gcvSTATUS_INVALID_ARGUMENT;
+
+        gcmkFOOTER();
+        return status;
+    }
+
+    Hardware->startIsr = StartIsr;
+    Hardware->stopIsr = StopIsr;
+    Hardware->isrContext = Context;
+
+    /* Success. */
+    gcmkFOOTER();
+
+    return status;
+}
+
old mode 100755 (executable)
new mode 100644 (file)
index 2b8592a..67b7d53
@@ -46,6 +46,7 @@ struct _gckHARDWARE
     gctUINT32                   chipFeatures;
     gctUINT32                   chipMinorFeatures0;
     gctUINT32                   chipMinorFeatures1;
+    gctUINT32                   chipMinorFeatures2;
     gctBOOL                     allowFastClear;
     gctBOOL                     allowCompression;
     gctUINT32                   powerBaseAddress;
@@ -69,6 +70,10 @@ struct _gckHARDWARE
     gctBOOL                     broadcast;
     gctBOOL                     settingPowerState;
     gctUINT32                   lastWaitLink;
+
+    gctISRMANAGERFUNC           startIsr;
+    gctISRMANAGERFUNC           stopIsr;
+    gctPOINTER                  isrContext;
 };
 
 gceSTATUS
index ca9f433c72978a5946be2ad4a959ced768b8c9b4..fc674ca4813da7e15081478fb2beb3d24179f9f1 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #  
-#    Copyright (C) 2005 - 2010 by Vivante Corp.
+#    Copyright (C) 2005 - 2011 by Vivante Corp.
 #  
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
index 779ac82311b4a855035787f2c6b9eb510fd4b91a..f57be0d2750a37bc2168bc9b876f5d25528ab180 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #  
-#    Copyright (C) 2005 - 2010 by Vivante Corp.
+#    Copyright (C) 2005 - 2011 by Vivante Corp.
 #  
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
old mode 100755 (executable)
new mode 100644 (file)
index cbfa92c..f1a37bd
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@
 #ifndef __gc_hal_h_
 #define __gc_hal_h_
 
+// dkm: ·½±ãµ÷ÓÃϵͳµÄº¯Êý
 #include <linux/kernel.h>
 #include "gc_hal_types.h"
 #include "gc_hal_enum.h"
@@ -775,6 +776,14 @@ gckOS_WaitSignal(
     IN gctUINT32 Wait
     );
 
+/* Wait for a signal uninterruptibly. */
+gceSTATUS
+gckOS_WaitSignalUninterruptible(
+    IN gckOS Os,
+    IN gctSIGNAL Signal,
+    IN gctUINT32 Wait
+    );
+
 /* Map a user signal to the kernel space. */
 gceSTATUS
 gckOS_MapSignal(
@@ -1053,14 +1062,6 @@ gckHEAP_ProfileEnd(
     IN gctCONST_STRING Title
     );
 
-#if defined gcdHAL_TEST
-gceSTATUS
-gckHEAP_Test(
-    IN gckHEAP Heap,
-    IN gctSIZE_T Vectors,
-    IN gctSIZE_T MaxSize
-    );
-#endif
 
 /******************************************************************************\
 ******************************** gckVIDMEM Object ******************************
@@ -1457,7 +1458,8 @@ gckHARDWARE_QueryChipIdentity(
     OUT gctUINT32* ChipRevision,
     OUT gctUINT32* ChipFeatures,
     OUT gctUINT32* ChipMinorFeatures,
-    OUT gctUINT32* ChipMinorFeatures1
+    OUT gctUINT32* ChipMinorFeatures1,
+    OUT gctUINT32* ChipMinorFeatures2
     );
 
 /* Query the specifications sof the hardware. */
@@ -1607,6 +1609,16 @@ gckHARDWARE_Reset(
     IN gckHARDWARE Hardware
     );
 
+typedef gceSTATUS (*gctISRMANAGERFUNC)(gctPOINTER Context);
+
+gceSTATUS
+gckHARDWARE_SetIsrManager(
+    IN gckHARDWARE Hardware,
+    IN gctISRMANAGERFUNC StartIsr,
+    IN gctISRMANAGERFUNC StopIsr,
+    IN gctPOINTER Context
+    );
+
 /******************************************************************************\
 ***************************** gckINTERRUPT Object ******************************
 \******************************************************************************/
@@ -1859,14 +1871,6 @@ gckMMU_FreeHandleMemory(
     );
 #endif
 
-#if defined gcdHAL_TEST
-gceSTATUS
-gckMMU_Test(
-    IN gckMMU Mmu,
-    IN gctSIZE_T Vectors,
-    IN gctINT MaxSize
-    );
-#endif
 
 gceSTATUS
 gckHARDWARE_QueryProfileRegisters(
index 7d6714f64cb6c94666d40af9d1185757a936cee3..3e7b65ae029c4f0b04c31b973889b47543e653f1 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -193,6 +193,13 @@ gcoHAL_QueryChipIdentity(
     OUT gctUINT32* ChipMinorFeatures
     );
 
+/* Query the minor features of the hardware. */
+gceSTATUS gcoHAL_QueryChipMinorFeatures(
+    IN gcoHAL Hal,
+    OUT gctUINT32* NumFeatures,
+    OUT gctUINT32* ChipMinorFeatures
+    );
+
 /* Query the amount of video memory. */
 gceSTATUS
 gcoHAL_QueryVideoMemory(
@@ -1406,6 +1413,13 @@ gcoSURF_QueryOrientation(
     OUT gceORIENTATION * Orientation
     );
 
+/*Reset the hal member of a surface*/
+gceSTATUS
+gcoSURF_ResetHal(
+    IN gcoSURF Surface,
+    IN gcoHAL Hal
+    );
+
 /******************************************************************************\
 ********************************* gcoDUMP Object ********************************
 \******************************************************************************/
@@ -1588,14 +1602,6 @@ gcoHEAP_ProfileEnd(
     IN gctCONST_STRING Title
     );
 
-#if defined gcdHAL_TEST
-gceSTATUS
-gcoHEAP_Test(
-    IN gcoHEAP Heap,
-    IN gctSIZE_T Vectors,
-    IN gctSIZE_T MaxSize
-    );
-#endif
 
 /******************************************************************************\
 ******************************* Debugging Macros *******************************
index 1f6cf3ff82961535aa243d261cabba3f545ad7ab..a85a54a2bd68531f515b71cd79562fc7a8a630ef 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
index c1a983514b87e860040119cb3217562834f18e97..7a44306d5e13d055ab112c5edda08232285f8dbc 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -194,6 +194,9 @@ typedef struct _gcsHAL_INTERFACE
             /* Supported minor feature 1 fields. */
             OUT gctUINT32               chipMinorFeatures1;
 
+            /* Supported minor feature 2 fields. */
+            OUT gctUINT32               chipMinorFeatures2;
+
             /* Number of streams supported. */
             OUT gctUINT32               streamCount;
 
index 2264b60cf612d7a437b11e007a4f3385163811d7..b3e80c91685b0f9f4fc3b3889c82828abfc07ede 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
index 3cca85fd1a56f94d3f7479e4ca83d91d655457d0..6ceac6ec1893166b58431e2f446a292762cb185c 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -265,7 +265,6 @@ gcoSURF_ClearRect(
        );
 
 /* TO BE REMOVED */
-#if 1
        gceSTATUS
        depr_gcoSURF_Resolve(
                IN gcoSURF SrcSurface,
@@ -294,7 +293,6 @@ gcoSURF_ClearRect(
                IN gcsPOINT_PTR DestOrigin,
                IN gcsPOINT_PTR RectSize
                );
-#endif
 
 /* Resample surface. */
 gceSTATUS
@@ -833,7 +831,8 @@ gco3D_SetStencilWriteMask(
 gceSTATUS
 gco3D_SetStencilReference(
        IN gco3D Engine,
-       IN gctUINT8 Reference
+       IN gctUINT8 Reference,
+       IN gctBOOL Front
        );
 
 /* Set stencil compare. */
@@ -996,6 +995,27 @@ gco3D_SetCentroids(
 /*----------------------------------------------------------------------------*/
 /*-------------------------- gco3D Fragment Processor ------------------------*/
 
+/* Set the fragment processor configuration. */
+gceSTATUS
+gco3D_SetWClipEnable(
+       IN gco3D Engine,
+       IN gctBOOL Enable
+    );
+
+gceSTATUS
+gco3D_SetWPlaneLimitF(
+       IN gco3D Engine,
+       IN gctFLOAT Value
+    );
+
+gceSTATUS
+gco3D_SetWPlaneLimitX(
+       IN gco3D Engine,
+       IN gctFIXED_POINT Value
+    );
+/*----------------------------------------------------------------------------*/
+/*-------------------------- gco3D Fragment Processor ------------------------*/
+
 /* Set the fragment processor configuration. */
 gceSTATUS
 gco3D_SetFragmentConfiguration(
old mode 100755 (executable)
new mode 100644 (file)
index d1cba5c..88787b1
@@ -94,8 +94,21 @@ typedef enum _gceFEATURE
     gcvFEATURE_VG_DOUBLE_BUFFER,
     gcvFEATURE_MC20,
     gcvFEATURE_SUPER_TILED,
+
+    gcvFEATURE_2D_FILTERBLIT_PLUS_ALPHABLEND,
     gcvFEATURE_2D_DITHER,
+    gcvFEATURE_2D_A8_TARGET,
+    gcvFEATURE_2D_FILTERBLIT_FULLROTATION,
+    gcvFEATURE_2D_BITBLIT_FULLROTATION,
+
     gcvFEATURE_WIDE_LINE,
+    gcvFEATURE_FC_FLUSH_STALL,
+
+    gcvFEATURE_FULL_DIRECTFB,
+    gcvFEATURE_HALF_FLOAT_PIPE,
+    gcvFEATURE_LINE_LOOP,
+    gcvFEATURE_2D_YUV_BLIT,
+    gcvFEATURE_2D_TILING,
 }
 gceFEATURE;
 
@@ -155,7 +168,9 @@ typedef enum _gceSURF_ROTATION
     gcvSURF_0_DEGREE,
     gcvSURF_90_DEGREE,
     gcvSURF_180_DEGREE,
-    gcvSURF_270_DEGREE
+    gcvSURF_270_DEGREE,
+    gcvSURF_FLIP_X,
+    gcvSURF_FLIP_Y,
 }
 gceSURF_ROTATION;
 
@@ -284,14 +299,6 @@ typedef enum _gceSURF_FORMAT
     gcvSURF_G32R32F,
     gcvSURF_A32B32G32R32F,
 
-#if 0
-    /* FIXME: remove HDR support for now. */
-    /* HDR formats. */
-    gcvSURF_HDR7E3              = 1200,
-    gcvSURF_HDR6E4,
-    gcvSURF_HDR5E5,
-    gcvSURF_HDR6E5,
-#endif
 }
 gceSURF_FORMAT;
 
@@ -412,7 +419,12 @@ typedef enum _gceSURF_BLEND_FACTOR_MODE
     gcvSURF_BLEND_INVERSED,
     gcvSURF_BLEND_COLOR,
     gcvSURF_BLEND_COLOR_INVERSED,
-    gcvSURF_BLEND_SRC_ALPHA_SATURATED
+    gcvSURF_BLEND_SRC_ALPHA_SATURATED,
+    gcvSURF_BLEND_STRAIGHT_NO_CROSS,
+    gcvSURF_BLEND_INVERSED_NO_CROSS,
+    gcvSURF_BLEND_COLOR_NO_CROSS,
+    gcvSURF_BLEND_COLOR_INVERSED_NO_CROSS,
+    gcvSURF_BLEND_SRC_ALPHA_SATURATED_CROSS
 }
 gceSURF_BLEND_FACTOR_MODE;
 
@@ -463,9 +475,11 @@ typedef enum _gce2D_COMMAND
     gcv2D_STRETCH,
     gcv2D_HOR_FILTER,
     gcv2D_VER_FILTER,
+    gcv2D_MULTI_SOURCE_BLEND,
 }
 gce2D_COMMAND;
 
+#ifndef VIVANTE_NO_3D
 /* Texture functions. */
 typedef enum _gceTEXTURE_FUNCTION
 {
@@ -499,6 +513,7 @@ typedef enum _gceTEXTURE_CHANNEL
     gcvFROM_ONE_MINUS_ALPHA
 }
 gceTEXTURE_CHANNEL;
+#endif /* VIVANTE_NO_3D */
 
 /* Filter types. */
 typedef enum _gceFILTER_TYPE
@@ -526,15 +541,46 @@ typedef enum _gceENDIAN_HINT
 }
 gceENDIAN_HINT;
 
-/* Endian hints. */
+/* Tiling modes. */
 typedef enum _gceTILING
 {
     gcvLINEAR,
     gcvTILED,
-    gcvSUPERTILED
+    gcvSUPERTILED,
+    gcvMULTI_TILED,
+    gcvMULTI_SUPERTILED,
 }
 gceTILING;
 
+/* 2D pattern type. */
+typedef enum _gce2D_PATTERN
+{
+    gcv2D_PATTERN_SOLID = 0,
+    gcv2D_PATTERN_MONO,
+    gcv2D_PATTERN_COLOR,
+    gcv2D_PATTERN_INVALID
+}
+gce2D_PATTERN;
+
+/* 2D source type. */
+typedef enum _gce2D_SOURCE
+{
+    gcv2D_SOURCE_MASKED = 0,
+    gcv2D_SOURCE_MONO,
+    gcv2D_SOURCE_COLOR,
+    gcv2D_SOURCE_INVALID
+}
+gce2D_SOURCE;
+
+/* Pipes. */
+typedef enum _gcePIPE_SELECT
+{
+    gcvPIPE_INVALID = ~0,
+    gcvPIPE_3D      =  0,
+    gcvPIPE_2D
+}
+gcePIPE_SELECT;
+
 /******************************************************************************\
 ****************************** Object Declarations *****************************
 \******************************************************************************/
@@ -551,3 +597,4 @@ typedef struct gcs2D_PROFILE *      gcs2D_PROFILE_PTR;
 
 #endif /* __gc_hal_enum_h_ */
 
+
index 9b7d28ccb1a5c0832217eb3dd52007f7513dfd07..8653f34c2d32566a8e87d3c470ef00ed4a2b903b 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
old mode 100755 (executable)
new mode 100644 (file)
index eb3debc..9260467
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 */
 #define USE_SUPER_SAMPLING          0
 
+/* PROFILE_HAL_COUNTERS, PROFILE_HW_COUNTERS, PROFILE_SHADER_COUNTERS are not runtime configurable. */
 /*
     PROFILE_HAL_COUNTERS
 
     This define enables HAL counter profiling support.
     HW and SHADER Counter profiling depends on this.
 */
+/*
 #define PROFILE_HAL_COUNTERS        1
-
+*/
 /*
     PROFILE_HW_COUNTERS
 
     This define enables HW counter profiling support.
 */
+/*
 #define PROFILE_HW_COUNTERS         1
-
+*/
 /*
     PROFILE_SHADER_COUNTERS
 
     This define enables SHADER counter profiling support.
 */
+/*
 #define PROFILE_SHADER_COUNTERS     1
-
+*/
 /*
     COMMAND_PROCESSOR_VERSION
 
     Size of the MMU page table in bytes.  Each 4 bytes can hold 4kB worth of
     virtual data.
 */
+// dkm£º ÐèÒª¸ÄΪ256,·ñÔòÓеÄÓÎÏ·²»¹»
 #define gcdMMU_SIZE                 (256 << 10)
 
 /*
 
 
 /*
-    gcdENABLE_AUTO_FREQ
-
-    ¸ù¾ÝGPU¸ººÉ×Ô¶¯µ÷½ÚGPUµÄCOREƵÂÊ
+    dkm: gcdENABLE_AUTO_FREQ
+    0: ¹Ø±Õ×Ô¶¯µ÷Ƶ
+    1: ¸ù¾ÝGPU¸ººÉ×Ô¶¯µ÷½ÚGPUµÄCOREƵÂÊ
+    2: ¸ù¾ÝÊÇ·ñÓÐ3DÓ¦ÓÃ×Ô¶¯µ÷Ƶ(ÓÐ3DÓ¦ÓÃÔÚÅÜʱ¸ßƵ£¬·ñÔòµÍƵ)
 */
-#define gcdENABLE_AUTO_FREQ                 0
+#define gcdENABLE_AUTO_FREQ                 2
 
 
 /*
-    gcdENABLE_MEM_CACHE
+    dkm: gcdENABLE_MEM_CACHE
 
     ÅäÖÃGPUËùʹÓõÄmemoryÊÇ·ñ±»ARM Cache»òWriteCombineס
     1: Cached
 
 
 /*
-    gcdENABLE_DELAY_EARLY_SUSPEND
+    dkm: gcdENABLE_DELAY_EARLY_SUSPEND
 
     ÔÚgpu_early_suspendÖÐʹÓÃÑÓʱ¹¤×÷¶ÓÁÐÀ´Ö´ÐÐsuspend,
     ±ÜÃâgpu_early_suspend¹ýÔçÖ´Ðе¼ÖÂÓû§Ï̵߳ÄÊÂÇ黹´¦Àí¸É¾»
 
 
 /*
-    gcdENABLE_LONG_IDLE_POWEROFF
+    dkm: gcdENABLE_LONG_IDLE_POWEROFF
 
     ³¤Ê±¼äIDLEºó½øÈëPowerOff, ¸Ã¹¦ÄÜ¿ªÆôºóÐèÒª°ÑEarlySuspend¹¦Äܹصô
     ÕâÑù¿ÉÒÔʹijЩ²»Ê¹ÓÃGPUµÄ³¡¾°µÄ¹¦ºÄ½øÒ»²½½µµÍ£¬ÈçÊÓƵ²¥·Åʱ£¬Ò»¼¶´ý»úʱ£¬
index 4e283bfa8802df494734aa016e6bfe4266a67529..bd9b30981971d9f51f81805ac92f832ce6530444 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -41,6 +41,569 @@ extern "C" {
 #define gcmPROFILE_GC(Hal, Enum, Value) do { } while (gcvFALSE)
 #endif
 
+#ifndef gcdNEW_PROFILER_FILE
+#define gcdNEW_PROFILER_FILE    1
+#endif
+
+#ifdef gcdNEW_PROFILER_FILE
+
+/* Category Constants. */
+#define VPHEADER        0x010000
+#define VPG_INFO        0x020000
+#define VPG_TIME        0x030000
+#define VPG_MEM         0x040000
+#define VPG_ES11        0x050000
+#define VPG_ES20        0x060000
+#define VPG_VG11        0x070000
+#define VPG_HAL         0x080000
+#define VPG_HW          0x090000
+#define VPG_GPU         0x0a0000
+#define VPG_VS          0x0b0000
+#define VPG_PS          0x0c0000
+#define VPG_PA          0x0d0000
+#define VPG_SETUP       0x0e0000
+#define VPG_RA          0x0f0000
+#define VPG_TX          0x100000
+#define VPG_PE          0x110000
+#define VPG_MC          0x120000
+#define VPG_AXI         0x130000
+#define VPG_PROG               0x140000
+#define        VPG_PVS                 0x150000
+#define VPG_PPS                        0x160000
+#define VPG_FRAME       0x170000
+#define VPG_END         0xff0000
+
+/* Info. */
+#define VPC_INFOCOMPANY         (VPG_INFO + 1)
+#define VPC_INFOVERSION         (VPG_INFO + 2)
+#define VPC_INFORENDERER        (VPG_INFO + 3)
+#define VPC_INFOREVISION        (VPG_INFO + 4)
+#define VPC_INFODRIVER          (VPG_INFO + 5)
+
+/* Counter Constants. */
+#define VPC_ELAPSETIME  0x030001
+#define VPC_CPUTIME             0x030002
+
+#define VPC_MEMMAXRES                   0x040001
+#define VPC_MEMSHARED                   0x040002
+#define VPC_MEMUNSHAREDDATA             0x040003
+#define VPC_MEMUNSHAREDSTACK    0x040004
+
+/* OpenGL ES11 Counters. */
+#define VPC_ES11ACTIVETEXTURE   (VPG_ES11 + 1)
+#define VPC_ES11ALPHAFUNC       (VPG_ES11 + 2)
+#define VPC_ES11ALPHAFUNCX      (VPG_ES11 + 3)
+#define VPC_ES11BINDBUFFER      (VPG_ES11 + 4)
+#define VPC_ES11BINDTEXTURE     (VPG_ES11 + 5)
+#define VPC_ES11BLENDFUNC       (VPG_ES11 + 6)
+#define VPC_ES11BUFFERDATA      (VPG_ES11 + 7)
+#define VPC_ES11BUFFERSUBDATA   (VPG_ES11 + 8)
+#define VPC_ES11CLEAR   (VPG_ES11 + 9)
+#define VPC_ES11CLEARCOLOR      (VPG_ES11 + 10)
+#define VPC_ES11CLEARCOLORX     (VPG_ES11 + 11)
+#define VPC_ES11CLEARDEPTHF     (VPG_ES11 + 12)
+#define VPC_ES11CLEARDEPTHX     (VPG_ES11 + 13)
+#define VPC_ES11CLEARSTENCIL    (VPG_ES11 + 14)
+#define VPC_ES11CLIENTACTIVETEXTURE     (VPG_ES11 + 15)
+#define VPC_ES11CLIPPLANEF      (VPG_ES11 + 16)
+#define VPC_ES11CLIPPLANEX      (VPG_ES11 + 17)
+#define VPC_ES11COLOR4F (VPG_ES11 + 18)
+#define VPC_ES11COLOR4UB        (VPG_ES11 + 19)
+#define VPC_ES11COLOR4X (VPG_ES11 + 20)
+#define VPC_ES11COLORMASK       (VPG_ES11 + 21)
+#define VPC_ES11COLORPOINTER    (VPG_ES11 + 22)
+#define VPC_ES11COMPRESSEDTEXIMAGE2D    (VPG_ES11 + 23)
+#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + 24)
+#define VPC_ES11COPYTEXIMAGE2D  (VPG_ES11 + 25)
+#define VPC_ES11COPYTEXSUBIMAGE2D       (VPG_ES11 + 26)
+#define VPC_ES11CULLFACE        (VPG_ES11 + 27)
+#define VPC_ES11DELETEBUFFERS   (VPG_ES11 + 28)
+#define VPC_ES11DELETETEXTURES  (VPG_ES11 + 29)
+#define VPC_ES11DEPTHFUNC       (VPG_ES11 + 30)
+#define VPC_ES11DEPTHMASK       (VPG_ES11 + 31)
+#define VPC_ES11DEPTHRANGEF     (VPG_ES11 + 32)
+#define VPC_ES11DEPTHRANGEX     (VPG_ES11 + 33)
+#define VPC_ES11DISABLE (VPG_ES11 + 34)
+#define VPC_ES11DISABLECLIENTSTATE      (VPG_ES11 + 35)
+#define VPC_ES11DRAWARRAYS      (VPG_ES11 + 36)
+#define VPC_ES11DRAWELEMENTS    (VPG_ES11 + 37)
+#define VPC_ES11ENABLE  (VPG_ES11 + 38)
+#define VPC_ES11ENABLECLIENTSTATE       (VPG_ES11 + 39)
+#define VPC_ES11FINISH  (VPG_ES11 + 40)
+#define VPC_ES11FLUSH   (VPG_ES11 + 41)
+#define VPC_ES11FOGF    (VPG_ES11 + 42)
+#define VPC_ES11FOGFV   (VPG_ES11 + 43)
+#define VPC_ES11FOGX    (VPG_ES11 + 44)
+#define VPC_ES11FOGXV   (VPG_ES11 + 45)
+#define VPC_ES11FRONTFACE       (VPG_ES11 + 46)
+#define VPC_ES11FRUSTUMF        (VPG_ES11 + 47)
+#define VPC_ES11FRUSTUMX        (VPG_ES11 + 48)
+#define VPC_ES11GENBUFFERS      (VPG_ES11 + 49)
+#define VPC_ES11GENTEXTURES     (VPG_ES11 + 50)
+#define VPC_ES11GETBOOLEANV     (VPG_ES11 + 51)
+#define VPC_ES11GETBUFFERPARAMETERIV    (VPG_ES11 + 52)
+#define VPC_ES11GETCLIPPLANEF   (VPG_ES11 + 53)
+#define VPC_ES11GETCLIPPLANEX   (VPG_ES11 + 54)
+#define VPC_ES11GETERROR        (VPG_ES11 + 55)
+#define VPC_ES11GETFIXEDV       (VPG_ES11 + 56)
+#define VPC_ES11GETFLOATV       (VPG_ES11 + 57)
+#define VPC_ES11GETINTEGERV     (VPG_ES11 + 58)
+#define VPC_ES11GETLIGHTFV      (VPG_ES11 + 59)
+#define VPC_ES11GETLIGHTXV      (VPG_ES11 + 60)
+#define VPC_ES11GETMATERIALFV   (VPG_ES11 + 61)
+#define VPC_ES11GETMATERIALXV   (VPG_ES11 + 62)
+#define VPC_ES11GETPOINTERV     (VPG_ES11 + 63)
+#define VPC_ES11GETSTRING       (VPG_ES11 + 64)
+#define VPC_ES11GETTEXENVFV     (VPG_ES11 + 65)
+#define VPC_ES11GETTEXENVIV     (VPG_ES11 + 66)
+#define VPC_ES11GETTEXENVXV     (VPG_ES11 + 67)
+#define VPC_ES11GETTEXPARAMETERFV       (VPG_ES11 + 68)
+#define VPC_ES11GETTEXPARAMETERIV       (VPG_ES11 + 69)
+#define VPC_ES11GETTEXPARAMETERXV       (VPG_ES11 + 70)
+#define VPC_ES11HINT    (VPG_ES11 + 71)
+#define VPC_ES11ISBUFFER        (VPG_ES11 + 72)
+#define VPC_ES11ISENABLED       (VPG_ES11 + 73)
+#define VPC_ES11ISTEXTURE       (VPG_ES11 + 74)
+#define VPC_ES11LIGHTF  (VPG_ES11 + 75)
+#define VPC_ES11LIGHTFV (VPG_ES11 + 76)
+#define VPC_ES11LIGHTMODELF     (VPG_ES11 + 77)
+#define VPC_ES11LIGHTMODELFV    (VPG_ES11 + 78)
+#define VPC_ES11LIGHTMODELX     (VPG_ES11 + 79)
+#define VPC_ES11LIGHTMODELXV    (VPG_ES11 + 80)
+#define VPC_ES11LIGHTX  (VPG_ES11 + 81)
+#define VPC_ES11LIGHTXV (VPG_ES11 + 82)
+#define VPC_ES11LINEWIDTH       (VPG_ES11 + 83)
+#define VPC_ES11LINEWIDTHX      (VPG_ES11 + 84)
+#define VPC_ES11LOADIDENTITY    (VPG_ES11 + 85)
+#define VPC_ES11LOADMATRIXF     (VPG_ES11 + 86)
+#define VPC_ES11LOADMATRIXX     (VPG_ES11 + 87)
+#define VPC_ES11LOGICOP (VPG_ES11 + 88)
+#define VPC_ES11MATERIALF       (VPG_ES11 + 89)
+#define VPC_ES11MATERIALFV      (VPG_ES11 + 90)
+#define VPC_ES11MATERIALX       (VPG_ES11 + 91)
+#define VPC_ES11MATERIALXV      (VPG_ES11 + 92)
+#define VPC_ES11MATRIXMODE      (VPG_ES11 + 93)
+#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + 94)
+#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + 95)
+#define VPC_ES11MULTMATRIXF     (VPG_ES11 + 96)
+#define VPC_ES11MULTMATRIXX     (VPG_ES11 + 97)
+#define VPC_ES11NORMAL3F        (VPG_ES11 + 98)
+#define VPC_ES11NORMAL3X        (VPG_ES11 + 99)
+#define VPC_ES11NORMALPOINTER   (VPG_ES11 + 100)
+#define VPC_ES11ORTHOF  (VPG_ES11 + 101)
+#define VPC_ES11ORTHOX  (VPG_ES11 + 102)
+#define VPC_ES11PIXELSTOREI     (VPG_ES11 + 103)
+#define VPC_ES11POINTPARAMETERF (VPG_ES11 + 104)
+#define VPC_ES11POINTPARAMETERFV        (VPG_ES11 + 105)
+#define VPC_ES11POINTPARAMETERX (VPG_ES11 + 106)
+#define VPC_ES11POINTPARAMETERXV        (VPG_ES11 + 107)
+#define VPC_ES11POINTSIZE       (VPG_ES11 + 108)
+#define VPC_ES11POINTSIZEX      (VPG_ES11 + 109)
+#define VPC_ES11POLYGONOFFSET   (VPG_ES11 + 110)
+#define VPC_ES11POLYGONOFFSETX  (VPG_ES11 + 111)
+#define VPC_ES11POPMATRIX       (VPG_ES11 + 112)
+#define VPC_ES11PUSHMATRIX      (VPG_ES11 + 113)
+#define VPC_ES11READPIXELS      (VPG_ES11 + 114)
+#define VPC_ES11ROTATEF (VPG_ES11 + 115)
+#define VPC_ES11ROTATEX (VPG_ES11 + 116)
+#define VPC_ES11SAMPLECOVERAGE  (VPG_ES11 + 117)
+#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + 118)
+#define VPC_ES11SCALEF  (VPG_ES11 + 119)
+#define VPC_ES11SCALEX  (VPG_ES11 + 120)
+#define VPC_ES11SCISSOR (VPG_ES11 + 121)
+#define VPC_ES11SHADEMODEL      (VPG_ES11 + 122)
+#define VPC_ES11STENCILFUNC     (VPG_ES11 + 123)
+#define VPC_ES11STENCILMASK     (VPG_ES11 + 124)
+#define VPC_ES11STENCILOP       (VPG_ES11 + 125)
+#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + 126)
+#define VPC_ES11TEXENVF (VPG_ES11 + 127)
+#define VPC_ES11TEXENVFV        (VPG_ES11 + 128)
+#define VPC_ES11TEXENVI (VPG_ES11 + 129)
+#define VPC_ES11TEXENVIV        (VPG_ES11 + 130)
+#define VPC_ES11TEXENVX (VPG_ES11 + 131)
+#define VPC_ES11TEXENVXV        (VPG_ES11 + 132)
+#define VPC_ES11TEXIMAGE2D      (VPG_ES11 + 133)
+#define VPC_ES11TEXPARAMETERF   (VPG_ES11 + 134)
+#define VPC_ES11TEXPARAMETERFV  (VPG_ES11 + 135)
+#define VPC_ES11TEXPARAMETERI   (VPG_ES11 + 136)
+#define VPC_ES11TEXPARAMETERIV  (VPG_ES11 + 137)
+#define VPC_ES11TEXPARAMETERX   (VPG_ES11 + 138)
+#define VPC_ES11TEXPARAMETERXV  (VPG_ES11 + 139)
+#define VPC_ES11TEXSUBIMAGE2D   (VPG_ES11 + 140)
+#define VPC_ES11TRANSLATEF      (VPG_ES11 + 141)
+#define VPC_ES11TRANSLATEX      (VPG_ES11 + 142)
+#define VPC_ES11VERTEXPOINTER   (VPG_ES11 + 143)
+#define VPC_ES11VIEWPORT        (VPG_ES11 + 144)
+#define VPC_ES11CALLS   (VPG_ES11 + 145)
+#define VPC_ES11DRAWCALLS       (VPG_ES11 + 146)
+#define VPC_ES11STATECHANGECALLS        (VPG_ES11 + 147)
+#define VPC_ES11POINTCOUNT      (VPG_ES11 + 148)
+#define VPC_ES11LINECOUNT       (VPG_ES11 + 149)
+#define VPC_ES11TRIANGLECOUNT   (VPG_ES11 + 150)
+
+/* OpenGLES 2.x */
+#define VPC_ES20ACTIVETEXTURE   (VPG_ES20 + 1)
+#define VPC_ES20ATTACHSHADER    (VPG_ES20 + 2)
+#define VPC_ES20BINDATTRIBLOCATION      (VPG_ES20 + 3)
+#define VPC_ES20BINDBUFFER      (VPG_ES20 + 4)
+#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + 5)
+#define VPC_ES20BINDRENDERBUFFER        (VPG_ES20 + 6)
+#define VPC_ES20BINDTEXTURE     (VPG_ES20 + 7)
+#define VPC_ES20BLENDCOLOR      (VPG_ES20 + 8)
+#define VPC_ES20BLENDEQUATION   (VPG_ES20 + 9)
+#define VPC_ES20BLENDEQUATIONSEPARATE   (VPG_ES20 + 10)
+#define VPC_ES20BLENDFUNC       (VPG_ES20 + 11)
+#define VPC_ES20BLENDFUNCSEPARATE       (VPG_ES20 + 12)
+#define VPC_ES20BUFFERDATA      (VPG_ES20 + 13)
+#define VPC_ES20BUFFERSUBDATA   (VPG_ES20 + 14)
+#define VPC_ES20CHECKFRAMEBUFFERSTATUS  (VPG_ES20 + 15)
+#define VPC_ES20CLEAR   (VPG_ES20 + 16)
+#define VPC_ES20CLEARCOLOR      (VPG_ES20 + 17)
+#define VPC_ES20CLEARDEPTHF     (VPG_ES20 + 18)
+#define VPC_ES20CLEARSTENCIL    (VPG_ES20 + 19)
+#define VPC_ES20COLORMASK       (VPG_ES20 + 20)
+#define VPC_ES20COMPILESHADER   (VPG_ES20 + 21)
+#define VPC_ES20COMPRESSEDTEXIMAGE2D    (VPG_ES20 + 22)
+#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + 23)
+#define VPC_ES20COPYTEXIMAGE2D  (VPG_ES20 + 24)
+#define VPC_ES20COPYTEXSUBIMAGE2D       (VPG_ES20 + 25)
+#define VPC_ES20CREATEPROGRAM   (VPG_ES20 + 26)
+#define VPC_ES20CREATESHADER    (VPG_ES20 + 27)
+#define VPC_ES20CULLFACE        (VPG_ES20 + 28)
+#define VPC_ES20DELETEBUFFERS   (VPG_ES20 + 29)
+#define VPC_ES20DELETEFRAMEBUFFERS      (VPG_ES20 + 30)
+#define VPC_ES20DELETEPROGRAM   (VPG_ES20 + 31)
+#define VPC_ES20DELETERENDERBUFFERS     (VPG_ES20 + 32)
+#define VPC_ES20DELETESHADER    (VPG_ES20 + 33)
+#define VPC_ES20DELETETEXTURES  (VPG_ES20 + 34)
+#define VPC_ES20DEPTHFUNC       (VPG_ES20 + 35)
+#define VPC_ES20DEPTHMASK       (VPG_ES20 + 36)
+#define VPC_ES20DEPTHRANGEF     (VPG_ES20 + 37)
+#define VPC_ES20DETACHSHADER    (VPG_ES20 + 38)
+#define VPC_ES20DISABLE (VPG_ES20 + 39)
+#define VPC_ES20DISABLEVERTEXATTRIBARRAY        (VPG_ES20 + 40)
+#define VPC_ES20DRAWARRAYS      (VPG_ES20 + 41)
+#define VPC_ES20DRAWELEMENTS    (VPG_ES20 + 42)
+#define VPC_ES20ENABLE  (VPG_ES20 + 43)
+#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + 44)
+#define VPC_ES20FINISH  (VPG_ES20 + 45)
+#define VPC_ES20FLUSH   (VPG_ES20 + 46)
+#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + 47)
+#define VPC_ES20FRAMEBUFFERTEXTURE2D    (VPG_ES20 + 48)
+#define VPC_ES20FRONTFACE       (VPG_ES20 + 49)
+#define VPC_ES20GENBUFFERS      (VPG_ES20 + 50)
+#define VPC_ES20GENERATEMIPMAP  (VPG_ES20 + 51)
+#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + 52)
+#define VPC_ES20GENRENDERBUFFERS        (VPG_ES20 + 53)
+#define VPC_ES20GENTEXTURES     (VPG_ES20 + 54)
+#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + 55)
+#define VPC_ES20GETACTIVEUNIFORM        (VPG_ES20 + 56)
+#define VPC_ES20GETATTACHEDSHADERS      (VPG_ES20 + 57)
+#define VPC_ES20GETATTRIBLOCATION       (VPG_ES20 + 58)
+#define VPC_ES20GETBOOLEANV     (VPG_ES20 + 59)
+#define VPC_ES20GETBUFFERPARAMETERIV    (VPG_ES20 + 60)
+#define VPC_ES20GETERROR        (VPG_ES20 + 61)
+#define VPC_ES20GETFLOATV       (VPG_ES20 + 62)
+#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV     (VPG_ES20 + 63)
+#define VPC_ES20GETINTEGERV     (VPG_ES20 + 64)
+#define VPC_ES20GETPROGRAMIV    (VPG_ES20 + 65)
+#define VPC_ES20GETPROGRAMINFOLOG       (VPG_ES20 + 66)
+#define VPC_ES20GETRENDERBUFFERPARAMETERIV      (VPG_ES20 + 67)
+#define VPC_ES20GETSHADERIV     (VPG_ES20 + 68)
+#define VPC_ES20GETSHADERINFOLOG        (VPG_ES20 + 69)
+#define VPC_ES20GETSHADERPRECISIONFORMAT        (VPG_ES20 + 70)
+#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + 71)
+#define VPC_ES20GETSTRING       (VPG_ES20 + 72)
+#define VPC_ES20GETTEXPARAMETERFV       (VPG_ES20 + 73)
+#define VPC_ES20GETTEXPARAMETERIV       (VPG_ES20 + 74)
+#define VPC_ES20GETUNIFORMFV    (VPG_ES20 + 75)
+#define VPC_ES20GETUNIFORMIV    (VPG_ES20 + 76)
+#define VPC_ES20GETUNIFORMLOCATION      (VPG_ES20 + 77)
+#define VPC_ES20GETVERTEXATTRIBFV       (VPG_ES20 + 78)
+#define VPC_ES20GETVERTEXATTRIBIV       (VPG_ES20 + 79)
+#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + 80)
+#define VPC_ES20HINT    (VPG_ES20 + 81)
+#define VPC_ES20ISBUFFER        (VPG_ES20 + 82)
+#define VPC_ES20ISENABLED       (VPG_ES20 + 83)
+#define VPC_ES20ISFRAMEBUFFER   (VPG_ES20 + 84)
+#define VPC_ES20ISPROGRAM       (VPG_ES20 + 85)
+#define VPC_ES20ISRENDERBUFFER  (VPG_ES20 + 86)
+#define VPC_ES20ISSHADER        (VPG_ES20 + 87)
+#define VPC_ES20ISTEXTURE       (VPG_ES20 + 88)
+#define VPC_ES20LINEWIDTH       (VPG_ES20 + 89)
+#define VPC_ES20LINKPROGRAM     (VPG_ES20 + 90)
+#define VPC_ES20PIXELSTOREI     (VPG_ES20 + 91)
+#define VPC_ES20POLYGONOFFSET   (VPG_ES20 + 92)
+#define VPC_ES20READPIXELS      (VPG_ES20 + 93)
+#define VPC_ES20RELEASESHADERCOMPILER   (VPG_ES20 + 94)
+#define VPC_ES20RENDERBUFFERSTORAGE     (VPG_ES20 + 95)
+#define VPC_ES20SAMPLECOVERAGE  (VPG_ES20 + 96)
+#define VPC_ES20SCISSOR (VPG_ES20 + 97)
+#define VPC_ES20SHADERBINARY    (VPG_ES20 + 98)
+#define VPC_ES20SHADERSOURCE    (VPG_ES20 + 99)
+#define VPC_ES20STENCILFUNC     (VPG_ES20 + 100)
+#define VPC_ES20STENCILFUNCSEPARATE     (VPG_ES20 + 101)
+#define VPC_ES20STENCILMASK     (VPG_ES20 + 102)
+#define VPC_ES20STENCILMASKSEPARATE     (VPG_ES20 + 103)
+#define VPC_ES20STENCILOP       (VPG_ES20 + 104)
+#define VPC_ES20STENCILOPSEPARATE       (VPG_ES20 + 105)
+#define VPC_ES20TEXIMAGE2D      (VPG_ES20 + 106)
+#define VPC_ES20TEXPARAMETERF   (VPG_ES20 + 107)
+#define VPC_ES20TEXPARAMETERFV  (VPG_ES20 + 108)
+#define VPC_ES20TEXPARAMETERI   (VPG_ES20 + 109)
+#define VPC_ES20TEXPARAMETERIV  (VPG_ES20 + 110)
+#define VPC_ES20TEXSUBIMAGE2D   (VPG_ES20 + 111)
+#define VPC_ES20UNIFORM1F       (VPG_ES20 + 112)
+#define VPC_ES20UNIFORM1FV      (VPG_ES20 + 113)
+#define VPC_ES20UNIFORM1I       (VPG_ES20 + 114)
+#define VPC_ES20UNIFORM1IV      (VPG_ES20 + 115)
+#define VPC_ES20UNIFORM2F       (VPG_ES20 + 116)
+#define VPC_ES20UNIFORM2FV      (VPG_ES20 + 117)
+#define VPC_ES20UNIFORM2I       (VPG_ES20 + 118)
+#define VPC_ES20UNIFORM2IV      (VPG_ES20 + 119)
+#define VPC_ES20UNIFORM3F       (VPG_ES20 + 120)
+#define VPC_ES20UNIFORM3FV      (VPG_ES20 + 121)
+#define VPC_ES20UNIFORM3I       (VPG_ES20 + 122)
+#define VPC_ES20UNIFORM3IV      (VPG_ES20 + 123)
+#define VPC_ES20UNIFORM4F       (VPG_ES20 + 124)
+#define VPC_ES20UNIFORM4FV      (VPG_ES20 + 125)
+#define VPC_ES20UNIFORM4I       (VPG_ES20 + 126)
+#define VPC_ES20UNIFORM4IV      (VPG_ES20 + 127)
+#define VPC_ES20UNIFORMMATRIX2FV        (VPG_ES20 + 128)
+#define VPC_ES20UNIFORMMATRIX3FV        (VPG_ES20 + 129)
+#define VPC_ES20UNIFORMMATRIX4FV        (VPG_ES20 + 130)
+#define VPC_ES20USEPROGRAM      (VPG_ES20 + 131)
+#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + 132)
+#define VPC_ES20VERTEXATTRIB1F  (VPG_ES20 + 133)
+#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + 134)
+#define VPC_ES20VERTEXATTRIB2F  (VPG_ES20 + 135)
+#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + 136)
+#define VPC_ES20VERTEXATTRIB3F  (VPG_ES20 + 137)
+#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + 138)
+#define VPC_ES20VERTEXATTRIB4F  (VPG_ES20 + 139)
+#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + 140)
+#define VPC_ES20VERTEXATTRIBPOINTER     (VPG_ES20 + 141)
+#define VPC_ES20VIEWPORT        (VPG_ES20 + 142)
+#define VPC_ES20CALLS   (VPG_ES20 + 143)
+#define VPC_ES20DRAWCALLS   (VPG_ES20 + 144)
+#define VPC_ES20STATECHANGECALLS    (VPG_ES20 + 145)
+#define VPC_ES20POINTCOUNT   (VPG_ES20 + 146)
+#define VPC_ES20LINECOUNT    (VPG_ES20 + 147)
+#define VPC_ES20TRIANGLECOUNT    (VPG_ES20 + 148)
+
+/* VG11 Counters. */
+#define VPC_VG11APPENDPATH              (VPG_VG11 + 1)
+#define VPC_VG11APPENDPATHDATA          (VPG_VG11 + 2)
+#define VPC_VG11CHILDIMAGE              (VPG_VG11 + 3)
+#define VPC_VG11CLEAR                   (VPG_VG11 + 4)
+#define VPC_VG11CLEARGLYPH              (VPG_VG11 + 5)
+#define VPC_VG11CLEARIMAGE              (VPG_VG11 + 6)
+#define VPC_VG11CLEARPATH               (VPG_VG11 + 7)
+#define VPC_VG11COLORMATRIX             (VPG_VG11 + 8)
+#define VPC_VG11CONVOLVE                (VPG_VG11 + 9)
+#define VPC_VG11COPYIMAGE               (VPG_VG11 + 10)
+#define VPC_VG11COPYMASK                (VPG_VG11 + 11)
+#define VPC_VG11COPYPIXELS              (VPG_VG11 + 12)
+#define VPC_VG11CREATEFONT              (VPG_VG11 + 13)
+#define VPC_VG11CREATEIMAGE             (VPG_VG11 + 14)
+#define VPC_VG11CREATEMASKLAYER         (VPG_VG11 + 15)
+#define VPC_VG11CREATEPAINT             (VPG_VG11 + 16)
+#define VPC_VG11CREATEPATH              (VPG_VG11 + 17)
+#define VPC_VG11DESTROYFONT             (VPG_VG11 + 18)
+#define VPC_VG11DESTROYIMAGE            (VPG_VG11 + 19)
+#define VPC_VG11DESTROYMASKLAYER        (VPG_VG11 + 20)
+#define VPC_VG11DESTROYPAINT            (VPG_VG11 + 21)
+#define VPC_VG11DESTROYPATH             (VPG_VG11 + 22)
+#define VPC_VG11DRAWGLYPH               (VPG_VG11 + 23)
+#define VPC_VG11DRAWGLYPHS              (VPG_VG11 + 24)
+#define VPC_VG11DRAWIMAGE               (VPG_VG11 + 25)
+#define VPC_VG11DRAWPATH                (VPG_VG11 + 26)
+#define VPC_VG11FILLMASKLAYER           (VPG_VG11 + 27)
+#define VPC_VG11FINISH                  (VPG_VG11 + 28)
+#define VPC_VG11FLUSH                   (VPG_VG11 + 29)
+#define VPC_VG11GAUSSIANBLUR            (VPG_VG11 + 30)
+#define VPC_VG11GETCOLOR                (VPG_VG11 + 31)
+#define VPC_VG11GETERROR                (VPG_VG11 + 32)
+#define VPC_VG11GETF                    (VPG_VG11 + 33)
+#define VPC_VG11GETFV                   (VPG_VG11 + 34)
+#define VPC_VG11GETI                    (VPG_VG11 + 35)
+#define VPC_VG11GETIMAGESUBDATA         (VPG_VG11 + 36)
+#define VPC_VG11GETIV                   (VPG_VG11 + 37)
+#define VPC_VG11GETMATRIX               (VPG_VG11 + 38)
+#define VPC_VG11GETPAINT                (VPG_VG11 + 39)
+#define VPC_VG11GETPARAMETERF           (VPG_VG11 + 40)
+#define VPC_VG11GETPARAMETERFV          (VPG_VG11 + 41)
+#define VPC_VG11GETPARAMETERI           (VPG_VG11 + 42)
+#define VPC_VG11GETPARAMETERIV          (VPG_VG11 + 43)
+#define VPC_VG11GETPARAMETERVECTORSIZE  (VPG_VG11 + 44)
+#define VPC_VG11GETPARENT               (VPG_VG11 + 45)
+#define VPC_VG11GETPATHCAPABILITIES     (VPG_VG11 + 46)
+#define VPC_VG11GETPIXELS               (VPG_VG11 + 47)
+#define VPC_VG11GETSTRING               (VPG_VG11 + 48)
+#define VPC_VG11GETVECTORSIZE           (VPG_VG11 + 49)
+#define VPC_VG11HARDWAREQUERY           (VPG_VG11 + 50)
+#define VPC_VG11IMAGESUBDATA            (VPG_VG11 + 51)
+#define VPC_VG11INTERPOLATEPATH         (VPG_VG11 + 52)
+#define VPC_VG11LOADIDENTITY            (VPG_VG11 + 53)
+#define VPC_VG11LOADMATRIX              (VPG_VG11 + 54)
+#define VPC_VG11LOOKUP                  (VPG_VG11 + 55)
+#define VPC_VG11LOOKUPSINGLE            (VPG_VG11 + 56)
+#define VPC_VG11MASK                    (VPG_VG11 + 57)
+#define VPC_VG11MODIFYPATHCOORDS        (VPG_VG11 + 58)
+#define VPC_VG11MULTMATRIX              (VPG_VG11 + 59)
+#define VPC_VG11PAINTPATTERN            (VPG_VG11 + 60)
+#define VPC_VG11PATHBOUNDS              (VPG_VG11 + 61)
+#define VPC_VG11PATHLENGTH              (VPG_VG11 + 62)
+#define VPC_VG11PATHTRANSFORMEDBOUNDS   (VPG_VG11 + 63)
+#define VPC_VG11POINTALONGPATH          (VPG_VG11 + 64)
+#define VPC_VG11READPIXELS              (VPG_VG11 + 65)
+#define VPC_VG11REMOVEPATHCAPABILITIES  (VPG_VG11 + 66)
+#define VPC_VG11RENDERTOMASK            (VPG_VG11 + 67)
+#define VPC_VG11ROTATE                  (VPG_VG11 + 68)
+#define VPC_VG11SCALE                   (VPG_VG11 + 69)
+#define VPC_VG11SEPARABLECONVOLVE       (VPG_VG11 + 70)
+#define VPC_VG11SETCOLOR                (VPG_VG11 + 71)
+#define VPC_VG11SETF                    (VPG_VG11 + 72)
+#define VPC_VG11SETFV                   (VPG_VG11 + 73)
+#define VPC_VG11SETGLYPHTOIMAGE         (VPG_VG11 + 74)
+#define VPC_VG11SETGLYPHTOPATH          (VPG_VG11 + 75)
+#define VPC_VG11SETI                    (VPG_VG11 + 76)
+#define VPC_VG11SETIV                   (VPG_VG11 + 77)
+#define VPC_VG11SETPAINT                (VPG_VG11 + 78)
+#define VPC_VG11SETPARAMETERF           (VPG_VG11 + 79)
+#define VPC_VG11SETPARAMETERFV          (VPG_VG11 + 80)
+#define VPC_VG11SETPARAMETERI           (VPG_VG11 + 81)
+#define VPC_VG11SETPARAMETERIV          (VPG_VG11 + 82)
+#define VPC_VG11SETPIXELS               (VPG_VG11 + 83)
+#define VPC_VG11SHEAR                   (VPG_VG11 + 84)
+#define VPC_VG11TRANSFORMPATH           (VPG_VG11 + 85)
+#define VPC_VG11TRANSLATE               (VPG_VG11 + 86)
+#define VPC_VG11WRITEPIXELS             (VPG_VG11 + 87)
+#define VPC_VG11CALLS                                   (VPG_VG11 + 88)
+#define VPC_VG11DRAWCALLS                               (VPG_VG11 + 89)
+#define VPC_VG11STATECHANGECALLS                (VPG_VG11 + 90)
+#define VPC_VG11FILLCOUNT                               (VPG_VG11 + 91)
+#define VPC_VG11STROKECOUNT                             (VPG_VG11 + 92)
+
+/* HAL Counters. */
+#define VPC_HALVERTBUFNEWBYTEALLOC              (VPG_HAL + 1)
+#define VPC_HALVERTBUFTOTALBYTEALLOC    (VPG_HAL + 2)
+#define VPC_HALVERTBUFNEWOBJALLOC               (VPG_HAL + 3)
+#define VPC_HALVERTBUFTOTALOBJALLOC             (VPG_HAL + 4)
+#define VPC_HALINDBUFNEWBYTEALLOC               (VPG_HAL + 5)
+#define VPC_HALINDBUFTOTALBYTEALLOC             (VPG_HAL + 6)
+#define VPC_HALINDBUFNEWOBJALLOC                (VPG_HAL + 7)
+#define VPC_HALINDBUFTOTALOBJALLOC              (VPG_HAL + 8)
+#define VPC_HALTEXBUFNEWBYTEALLOC               (VPG_HAL + 9)
+#define VPC_HALTEXBUFTOTALBYTEALLOC             (VPG_HAL + 10)
+#define VPC_HALTEXBUFNEWOBJALLOC                (VPG_HAL + 11)
+#define VPC_HALTEXBUFTOTALOBJALLOC              (VPG_HAL + 12)
+
+#define VPC_VG11TRANSLATE               (VPG_VG11 + 86)
+#define VPC_VG11WRITEPIXELS             (VPG_VG11 + 87)
+#define VPC_VG11CALLS                                   (VPG_VG11 + 88)
+#define VPC_VG11DRAWCALLS                               (VPG_VG11 + 89)
+#define VPC_VG11STATECHANGECALLS                (VPG_VG11 + 90)
+#define VPC_VG11FILLCOUNT                               (VPG_VG11 + 91)
+#define VPC_VG11STROKECOUNT                             (VPG_VG11 + 92)
+
+/* HAL Counters. */
+#define VPC_HALVERTBUFNEWBYTEALLOC              (VPG_HAL + 1)
+#define VPC_HALVERTBUFTOTALBYTEALLOC    (VPG_HAL + 2)
+#define VPC_HALVERTBUFNEWOBJALLOC               (VPG_HAL + 3)
+#define VPC_HALVERTBUFTOTALOBJALLOC             (VPG_HAL + 4)
+#define VPC_HALINDBUFNEWBYTEALLOC               (VPG_HAL + 5)
+#define VPC_HALINDBUFTOTALBYTEALLOC             (VPG_HAL + 6)
+#define VPC_HALINDBUFNEWOBJALLOC                (VPG_HAL + 7)
+#define VPC_HALINDBUFTOTALOBJALLOC              (VPG_HAL + 8)
+#define VPC_HALTEXBUFNEWBYTEALLOC               (VPG_HAL + 9)
+#define VPC_HALTEXBUFTOTALBYTEALLOC             (VPG_HAL + 10)
+#define VPC_HALTEXBUFNEWOBJALLOC                (VPG_HAL + 11)
+#define VPC_HALTEXBUFTOTALOBJALLOC              (VPG_HAL + 12)
+
+/* HW: GPU Counters. */
+#define VPC_GPUCYCLES                                   (VPG_GPU + 1)
+#define VPC_GPUREAD64BYTE                               (VPG_GPU + 2)
+#define VPC_GPUWRITE64BYTE                              (VPG_GPU + 3)
+
+/* HW: Shader Counters. */
+#define VPC_VSINSTCOUNT                         (VPG_VS + 1)
+#define VPC_VSBRANCHINSTCOUNT           (VPG_VS + 2)
+#define VPC_VSTEXLDINSTCOUNT            (VPG_VS + 3)
+#define VPC_VSRENDEREDVERTCOUNT         (VPG_VS + 4)
+/* HW: PS Count. */
+#define VPC_PSINSTCOUNT             (VPG_PS + 1)
+#define VPC_PSBRANCHINSTCOUNT       (VPG_PS + 2)
+#define VPC_PSTEXLDINSTCOUNT        (VPG_PS + 3)
+#define VPC_PSRENDEREDPIXCOUNT          (VPG_PS + 4)
+
+
+/* HW: PA Counters. */
+#define VPC_PAINVERTCOUNT                       (VPG_PA + 1)
+#define VPC_PAINPRIMCOUNT                       (VPG_PA + 2)
+#define VPC_PAOUTPRIMCOUNT                      (VPG_PA + 3)
+#define VPC_PADEPTHCLIPCOUNT            (VPG_PA + 4)
+#define VPC_PATRIVIALREJCOUNT           (VPG_PA + 5)
+#define VPC_PACULLCOUNT                         (VPG_PA + 6)
+
+/* HW: Setup Counters. */
+#define VPC_SETRIANGLECOUNT                     (VPG_SETUP + 1)
+#define VPC_SELINECOUNT                         (VPG_SETUP + 2)
+
+/* HW: RA Counters. */
+#define VPC_RAVALIDPIXCOUNT                     (VPG_RA + 1)
+#define VPC_RATOTALQUADCOUNT            (VPG_RA + 2)
+#define VPC_RAVALIDQUADCOUNTEZ          (VPG_RA + 3)
+#define VPC_RATOTALPRIMCOUNT            (VPG_RA + 4)
+#define VPC_RAPIPECACHEMISSCOUNT        (VPG_RA + 5)
+#define VPC_RAPREFCACHEMISSCOUNT        (VPG_RA + 6)
+#define VPC_RAEEZCULLCOUNT                      (VPG_RA + 7)
+
+/* HW: TEX Counters. */
+#define VPC_TXTOTBILINEARREQ            (VPG_TX + 1)
+#define VPC_TXTOTTRILINEARREQ           (VPG_TX + 2)
+#define VPC_TXTOTDISCARDTEXREQ          (VPG_TX + 3)
+#define VPC_TXTOTTEXREQ                         (VPG_TX + 4)
+#define VPC_TXMEMREADCOUNT                      (VPG_TX + 5)
+#define VPC_TXMEMREADIN8BCOUNT          (VPG_TX + 6)
+#define VPC_TXCACHEMISSCOUNT            (VPG_TX + 7)
+#define VPC_TXCACHEHITTEXELCOUNT        (VPG_TX + 8)
+#define VPC_TXCACHEMISSTEXELCOUNT       (VPG_TX + 9)
+
+/* HW: PE Counters. */
+#define VPC_PEKILLEDBYCOLOR                     (VPG_PE + 1)
+#define VPC_PEKILLEDBYDEPTH                     (VPG_PE + 2)
+#define VPC_PEDRAWNBYCOLOR                      (VPG_PE + 3)
+#define VPC_PEDRAWNBYDEPTH                      (VPG_PE + 4)
+
+/* HW: MC Counters. */
+#define VPC_MCREADREQ8BPIPE                     (VPG_MC + 1)
+#define VPC_MCREADREQ8BIP                       (VPG_MC + 2)
+#define VPC_MCWRITEREQ8BPIPE            (VPG_MC + 3)
+
+/* HW: AXI Counters. */
+#define VPC_AXIREADREQSTALLED           (VPG_AXI + 1)
+#define VPC_AXIWRITEREQSTALLED          (VPG_AXI + 2)
+#define VPC_AXIWRITEDATASTALLED         (VPG_AXI + 3)
+
+/* PROGRAM: Shader program counters. */
+#define        VPC_PVSINSTRCOUNT                       (VPG_PVS + 1)
+#define VPC_PVSALUINSTRCOUNT           (VPG_PVS + 2)
+#define VPC_PVSTEXINSTRCOUNT           (VPG_PVS + 3)
+#define VPC_PVSATTRIBCOUNT                     (VPG_PVS + 4)
+#define VPC_PVSUNIFORMCOUNT                    (VPG_PVS + 5)
+#define VPC_PVSFUNCTIONCOUNT           (VPG_PVS + 6)
+
+#define        VPC_PPSINSTRCOUNT                       (VPG_PPS + 1)
+#define VPC_PPSALUINSTRCOUNT           (VPG_PPS + 2)
+#define VPC_PPSTEXINSTRCOUNT           (VPG_PPS + 3)
+#define VPC_PPSATTRIBCOUNT                     (VPG_PPS + 4)
+#define VPC_PPSUNIFORMCOUNT                    (VPG_PPS + 5)
+#define VPC_PPSFUNCTIONCOUNT           (VPG_PPS + 6)
+
+#endif
+
+
 /* HW profile information. */
 typedef struct _gcsPROFILER_COUNTERS
 {
@@ -122,6 +685,9 @@ gcsPROFILER_COUNTERS;
 typedef struct _gcsPROFILER
 {
     gctUINT32       enable;
+       gctBOOL                 enableHal;
+       gctBOOL                 enableHW;
+       gctBOOL                 enableSH;
 
     gctBOOL         useSocket;
     gctINT          sockFd;
@@ -141,7 +707,7 @@ typedef struct _gcsPROFILER
     gctUINT64       frameStartCPUTimeusec;
     gctUINT64       frameEndCPUTimeusec;
 
-#if PROFILE_HAL_COUNTERS
+/* #if PROFILE_HAL_COUNTERS */
     gctUINT32       vertexBufferTotalBytesAlloc;
     gctUINT32       vertexBufferNewBytesAlloc;
     int             vertexBufferTotalObjectsAlloc;
@@ -163,7 +729,7 @@ typedef struct _gcsPROFILER
     gctUINT32       drawTriangleCount;
     gctUINT32       drawVertexCount;
     gctUINT32       redundantStateChangeCalls;
-#endif
+/* #endif */
 }
 gcsPROFILER;
 
old mode 100755 (executable)
new mode 100644 (file)
index 4ff9c22..8d4c46e
@@ -597,6 +597,32 @@ gco2D_FilterBlitEx(
        IN gcsRECT_PTR DestSubRect
        );
 
+gceSTATUS
+gco2D_FilterBlitEx2(
+    IN gco2D                Engine,
+    IN gctUINT32_PTR        SrcAddresses,
+    IN gctUINT32            SrcAddressNum,
+    IN gctUINT32_PTR        SrcStrides,
+    IN gctUINT32            SrcStrideNum,
+    IN gceTILING            SrcTiling,
+    IN gceSURF_FORMAT       SrcFormat,
+    IN gceSURF_ROTATION     SrcRotation,
+    IN gctUINT32            SrcSurfaceWidth,
+    IN gctUINT32            SrcSurfaceHeight,
+    IN gcsRECT_PTR          SrcRect,
+    IN gctUINT32_PTR        DestAddresses,
+    IN gctUINT32            DestAddressNum,
+    IN gctUINT32_PTR        DestStrides,
+    IN gctUINT32            DestStrideNum,
+    IN gceTILING            DestTiling,
+    IN gceSURF_FORMAT       DestFormat,
+    IN gceSURF_ROTATION     DestRotation,
+    IN gctUINT32            DestSurfaceWidth,
+    IN gctUINT32            DestSurfaceHeight,
+    IN gcsRECT_PTR          DestRect,
+    IN gcsRECT_PTR          DestSubRect
+    );
+
 /* Enable alpha blending engine in the hardware and disengage the ROP engine. */
 gceSTATUS
 gco2D_EnableAlphaBlend(
@@ -780,6 +806,34 @@ gco2D_EnableDither(
        IN gctBOOL Enable
        );
 
+gceSTATUS
+gco2D_SetGenericSource(
+    IN gco2D               Engine,
+    IN gctUINT32_PTR       Addresses,
+    IN gctUINT32           AddressNum,
+    IN gctUINT32_PTR       Strides,
+    IN gctUINT32           StrideNum,
+    IN gceTILING           Tiling,
+    IN gceSURF_FORMAT      Format,
+    IN gceSURF_ROTATION    Rotation,
+    IN gctUINT32           SurfaceWidth,
+    IN gctUINT32           SurfaceHeight
+);
+
+gceSTATUS
+gco2D_SetGenericTarget(
+    IN gco2D               Engine,
+    IN gctUINT32_PTR       Addresses,
+    IN gctUINT32           AddressNum,
+    IN gctUINT32_PTR       Strides,
+    IN gctUINT32           StrideNum,
+    IN gceTILING           Tiling,
+    IN gceSURF_FORMAT      Format,
+    IN gceSURF_ROTATION    Rotation,
+    IN gctUINT32           SurfaceWidth,
+    IN gctUINT32           SurfaceHeight
+);
+
 #ifdef __cplusplus
 }
 #endif
index d572d5fbb67e54746622e486c9afdf521a243f4d..eeea9aca4a7a8101fb820611f465bd46ea5352c8 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
 *
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
@@ -71,7 +71,7 @@ extern "C" {
 #endif
 
 #ifndef gcdDEBUG
-#      if (defined(DBG) && DBG) || defined(DEBUG) || defined(_DEBUG)
+#if (defined(DBG) && DBG) || defined(DEBUG) || defined(_DEBUG)
 #              define gcdDEBUG                 1
 #      else
 #              define gcdDEBUG                 0
@@ -79,15 +79,15 @@ extern "C" {
 #endif
 
 #ifdef _USRDLL
-#      ifdef _MSC_VER
-#              ifdef HAL_EXPORTS
+#ifdef _MSC_VER
+#ifdef HAL_EXPORTS
 #                      define HALAPI           __declspec(dllexport)
 #              else
 #                      define HALAPI           __declspec(dllimport)
 #              endif
 #              define HALDECL                  __cdecl
 #      else
-#              ifdef HAL_EXPORTS
+#ifdef HAL_EXPORTS
 #                      define HALAPI
 #              else
 #                      define HALAPI           extern
@@ -255,6 +255,7 @@ typedef enum _gceSTATUS
        gcvSTATUS_DATA_TOO_LARGE                =       14,
        gcvSTATUS_INVALID_CONFIG                =       15,
        gcvSTATUS_CHANGED                               =       16,
+       gcvSTATUS_NOT_SUPPORT_DITHER    =   17,
 
        gcvSTATUS_INVALID_ARGUMENT              =       -1,
        gcvSTATUS_INVALID_OBJECT                =       -2,
@@ -278,6 +279,9 @@ typedef enum _gceSTATUS
        gcvSTATUS_NOT_ALIGNED                   =       -20,
        gcvSTATUS_INVALID_REQUEST               =       -21,
        gcvSTATUS_GPU_NOT_RESPONDING    =       -22,
+       gcvSTATUS_TIMER_OVERFLOW        =   -23,
+       gcvSTATUS_VERSION_MISMATCH      =   -24,
+       gcvSTATUS_LOCKED                =   -25,
 
        /* Linker errors. */
        gcvSTATUS_GLOBAL_TYPE_MISMATCH  =       -1000,
@@ -412,8 +416,8 @@ gceSTATUS;
 */
 #define gcmSETMASKEDFIELD(reg, field, value) \
 ( \
-       gcmSETFIELD(~0, reg, field, value) & \
-       gcmSETFIELDVALUE(~0, reg, MASK_ ## field, ENABLED) \
+       ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? reg_field) - (0 ? reg_field) + 1) == 32) ? ~0 : (~(~0 << ((1 ? reg_field) - (0 ? reg_field) + 1))))))) << (0 ? reg_field))) | (((gctUINT32) ((gctUINT32) (value) & ((gctUINT32) ((((1 ? reg_field) - (0 ? reg_field) + 1) == 32) ? ~0 : (~(~0 << ((1 ? reg_field) - (0 ? reg_field) + 1))))))) << (0 ? reg_field)))&\
+       ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? reg_MASK_##field) - (0 ? reg_MASK_##field) + 1) == 32) ? ~0 : (~(~0 << ((1 ? reg_MASK_##field) - (0 ? reg_MASK_##field) + 1))))))) << (0 ? reg_MASK_##field))) | (((gctUINT32) (reg_MASK_##field_ENABLED&((gctUINT32)((((1?reg_MASK_##field)-(0?reg_MASK_##field)+1)==32)?~0:(~(~0<<((1?reg_MASK_##field)-(0?reg_MASK_##field)+1)))))))<<(0?reg_MASK_##field)))\
 )
 
 /*******************************************************************************
index e795ecdc1ced3f5df4e32f352aa0f56668a974bd..d850810c6eca7521a56eb57c13a7b198fe3d9abe 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
 */
 
 #ifdef ANDROID
+#if gcdNEW_PROFILER_FILE
+#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.vpd"
+#else
 #define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.xml"
+#endif
+#else
+#if gcdNEW_PROFILER_FILE
+#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.vpd"            /* "vpd" means "vprofile data" */
 #else
 #define DEFAULT_PROFILE_FILE_NAME   "vprofiler.xml"
 #endif
+#endif
 
 gceSTATUS
 gckKERNEL_Construct(
@@ -465,7 +473,8 @@ gckKERNEL_Dispatch(
                 &Interface->u.QueryChipIdentity.chipRevision,
                 &Interface->u.QueryChipIdentity.chipFeatures,
                 &Interface->u.QueryChipIdentity.chipMinorFeatures,
-                &Interface->u.QueryChipIdentity.chipMinorFeatures1));
+                &Interface->u.QueryChipIdentity.chipMinorFeatures1,
+                &Interface->u.QueryChipIdentity.chipMinorFeatures2));
 
         /* Query chip specifications. */
         gcmkONERROR(
@@ -1243,4 +1252,3 @@ OnError:
     gcmkFOOTER();
     return status;
 }
-
index 35adeb725f8bf08e1bc022a6c38023b956410cbd..8fe566bb1263a86265f12a21f94d1d5f39219421 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -403,4 +403,3 @@ gckHARDWARE_QueryIdle(
 #endif
 
 #endif /* __gc_hal_kernel_h_ */
-
old mode 100755 (executable)
new mode 100644 (file)
index 0d0bb37..5cd08fd
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
+*  
 *    Copyright (C) 2005 - 2011 by Vivante Corp.
-*
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -30,6 +30,7 @@
 
 #define _GC_OBJ_ZONE    gcvZONE_COMMAND
 
+
 /******************************************************************************\
 ********************************* Support Code *********************************
 \******************************************************************************/
@@ -758,8 +759,8 @@ gckCOMMAND_Commit(
     gctBOOL semaAcquired = gcvFALSE;
     gctINT32 atomValue;
     gctBOOL atomIncremented = gcvFALSE;
-    gctUINT32 process, thread;
     gctBOOL powerAcquired = gcvFALSE;
+    gctUINT32 process, thread;
 
     gcmkHEADER_ARG("Command=0x%x CommandBuffer=0x%x Context=0x%x",
                    Command, CommandBuffer, Context);
@@ -773,6 +774,22 @@ gckCOMMAND_Commit(
     return gcvSTATUS_OK;
 #endif
 
+// dkm: gcdENABLE_AUTO_FREQ
+#if (2==gcdENABLE_AUTO_FREQ)
+    {
+        static int cnt = 0;
+        extern void mod_gpu_timer(void);
+        extern int needhighfreq;
+        
+        if( (++cnt>20) && (0==Command->pipeSelect) ) {
+            cnt = 0;
+            mod_gpu_timer();
+            needhighfreq = 1;
+            //printk("needhighfreq = 1! \n");
+        }
+    }
+#endif
+
     gcmkONERROR(
         _AddMap(Command->os,
                 CommandBuffer,
@@ -833,11 +850,12 @@ gckCOMMAND_Commit(
                                     &atomValue));
     atomIncremented = gcvTRUE;
 
+    /* Release the power mutex. */
     if (powerAcquired)
     {
+        hardware->powerProcess = hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        hardware->powerProcess = 0;
-        hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(Command->os, hardware->powerMutex));
         powerAcquired = gcvFALSE;
     }
@@ -1362,9 +1380,9 @@ OnError:
 
     if (powerAcquired)
     {
+        hardware->powerProcess = hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        hardware->powerProcess = 0;
-        hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(Command->os, hardware->powerMutex));
     }
 
@@ -1408,12 +1426,13 @@ gckCOMMAND_Reserve(
     gceSTATUS status;
     gctSIZE_T requiredBytes, bytes;
     gctBOOL acquired = gcvFALSE;
-    gctBOOL semaAcquired = gcvFALSE; // This value must be gcvFALSE
-    gckHARDWARE hardware = gcvNULL;
+    // dkm: This value must be gcvFALSE
+    gctBOOL semaAcquired = gcvFALSE; 
     gctINT32 atomValue;
     gctBOOL atomIncremented = gcvFALSE;
-    gctUINT32 process, thread;
     gctBOOL powerAcquired = gcvFALSE;
+    gckHARDWARE hardware = gcvNULL;
+    gctUINT32 process, thread;
 
     gcmkHEADER_ARG("Command=0x%x RequestedBytes=%lu", Command, RequestedBytes);
 
@@ -1450,7 +1469,7 @@ gckCOMMAND_Reserve(
                                    hardware->powerMutex, gcvINFINITE));
 
             hardware->powerProcess = process;
-            hardware->powerThread  = thread;
+           hardware->powerThread  = thread;
             powerAcquired = gcvTRUE;
         }
     }
@@ -1466,9 +1485,9 @@ gckCOMMAND_Reserve(
 
     if (powerAcquired)
     {
+        hardware->powerProcess = hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        hardware->powerProcess = 0;
-        hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(Command->os,
                                        Command->kernel->hardware->powerMutex));
         powerAcquired = gcvFALSE;
@@ -1555,9 +1574,9 @@ OnError:
 
     if (powerAcquired)
     {
+        hardware->powerProcess = hardware->powerThread = 0x0;
+
         /* Release the power mutex. */
-        hardware->powerProcess = 0;
-        hardware->powerThread = 0;
         gcmkONERROR(gckOS_ReleaseMutex(Command->os,
                                        Command->kernel->hardware->powerMutex));
     }
@@ -1846,7 +1865,7 @@ gckCOMMAND_Stall(
     do
     {
         /* Wait for the signal. */
-        status = gckOS_WaitSignal(os, signal, 250);
+        status = gckOS_WaitSignalUninterruptible(os, signal, 250);
 
         if (status == gcvSTATUS_TIMEOUT)
         {
@@ -1940,4 +1959,3 @@ OnError:
     gcmkFOOTER();
     return status;
 }
-
old mode 100755 (executable)
new mode 100644 (file)
index 122bca9..213f4f5
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -979,8 +979,6 @@ gckEVENT_Interrupt(
     /* Combine current interrupt status with pending flags. */
     Event->pending |= Data;
 
-    //printk("& ");
-
     /* Success. */
     gcmkFOOTER_NO();
     return gcvSTATUS_OK;
@@ -1473,4 +1471,3 @@ OnError:
     gcmkFOOTER();
     return status;
 }
-
index ee65306352d8b949be7eaf386adccbfb692d4df9..cb5fb91851c09ebbac9ba349b1592b4739b4d1d1 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -43,7 +43,7 @@ typedef struct _gcskNODE
 {
        /* Number of byets in node. */
        gctSIZE_T                                       bytes;
-
+       
        /* Pointer to next free node, or gcvNULL to mark the node as freed, or
        ** gcdIN_USE to mark the node as used. */
        gcskNODE_PTR                            next;
@@ -166,7 +166,7 @@ _CompactKernelHeap(
        gcskHEAP_PTR heap, next;
        gctPOINTER p;
        gcskHEAP_PTR freeList = gcvNULL;
-
+       
        gcmkHEADER_ARG("Heap=0x%x", Heap);
 
        /* Walk all the heaps. */
@@ -537,7 +537,7 @@ gckHEAP_Allocate(
                        {
                                /* Compact the heap. */
                                gcmkVERIFY_OK(_CompactKernelHeap(Heap));
-
+                               
 #if gcdDEBUG
                                gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_HEAP,
                                                           "===== KERNEL HEAP =====");
@@ -578,8 +578,8 @@ gckHEAP_Allocate(
 
        /* Allocate a new heap. */
        gcmkONERROR(
-               gckOS_AllocateVirtualMemory(Heap->os,
-                                                               Heap->allocationSize,
+               gckOS_AllocateVirtualMemory(Heap->os, 
+                                                               Heap->allocationSize, 
                                                                &memory));
 
        gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HEAP,
@@ -654,7 +654,7 @@ UseNode:
                {
                        heap->next->prev = heap->prev;
                }
-
+               
                /* Move the heap to the front of the list. */
                heap->next               = Heap->heap;
                heap->prev               = gcvNULL;
@@ -777,7 +777,7 @@ gckHEAP_Free(
 
        /* Mark the node as freed. */
        node->next = gcvNULL;
-
+       
 #if VIVANTE_PROFILER || gcdDEBUG
        /* Update profile counters. */
        Heap->allocBytes -= node->bytes;
@@ -857,200 +857,3 @@ gckHEAP_ProfileEnd(
 ***** Test Code ****************************************************************
 *******************************************************************************/
 
-#if defined gcdHAL_TEST
-
-#include <stdlib.h>
-#define gcmRANDOM(n) (rand() % n)
-
-typedef struct
-{
-       gctSIZE_T       bytes;
-       gctPOINTER      memory;
-}
-gcskHEAP_TEST;
-
-gceSTATUS
-gckHEAP_Test(
-       IN gckHEAP Heap,
-       IN gctSIZE_T Vectors,
-       IN gctSIZE_T MaxSize
-       )
-{
-       gctSIZE_T nodeCount = MaxSize / 4;
-       gcskHEAP_TEST * nodes = gcvNULL;
-       gctSIZE_T bytes, index, i;
-       gceSTATUS status, failure = gcvSTATUS_OK;
-       gctUINT8_PTR memory;
-       gcskHEAP_PTR heap, current;
-
-       /* Allocate the node array. */
-       gcmkONERROR(
-               gckOS_AllocateMemory(Heap->os,
-                                                        nodeCount * gcmSIZEOF(gcskHEAP_TEST),
-                                                        (gctPOINTER *) &nodes));
-
-       /* Mark all nodes as free. */
-       gcmkONERROR(
-               gckOS_ZeroMemory(nodes, nodeCount * gcmSIZEOF(gcskHEAP_TEST)));
-
-       gcmkONERROR(gckHEAP_ProfileStart(Heap));
-
-       /* Loop through all vectors. */
-       while (Vectors-- > 0)
-       {
-               /* Get a random index. */
-               index = gcmRANDOM(nodeCount);
-
-               /* Test if we need to allocate pages. */
-               if (nodes[index].bytes == 0)
-               {
-                       /* Generate a random byte size. */
-                       do
-                       {
-                               bytes = gcmALIGN(gcmRANDOM(MaxSize), gcmSIZEOF(gctSIZE_T));
-                       }
-                       while (bytes == 0);
-
-                       /* Allocate pages. */
-                       status = gckHEAP_Allocate(Heap, bytes, (gctPOINTER *) &memory);
-
-                       if (gcmIS_SUCCESS(status))
-                       {
-                               /* Mark node as allocated. */
-                               nodes[index].bytes  = bytes;
-                               nodes[index].memory = memory;
-
-                               /* Put signature in the memory. */
-                               for (i = 0; i < bytes; i += gcmSIZEOF(gctSIZE_T))
-                               {
-                                       *(gctSIZE_T_PTR) (memory + i) = index;
-                               }
-                       }
-                       else
-                       {
-                               gcmkTRACE(gcvLEVEL_WARNING,
-                                                 "%s(%d): Failed to allocate %lu bytes",
-                                                 __FUNCTION__, __LINE__, bytes);
-                       }
-               }
-               else
-               {
-                       /* Verify the memory. */
-                       memory = nodes[index].memory;
-                       for (i = 0; i < nodes[index].bytes; i += gcmSIZEOF(gctSIZE_T))
-                       {
-                               if (*(gctSIZE_T_PTR) (memory + i) != index)
-                               {
-                                       gcmkFATAL("%s(%d): Corruption detected at index %lu",
-                                                         __FUNCTION__, __LINE__, index);
-
-                                       failure = gcvSTATUS_HEAP_CORRUPTED;
-                               }
-                       }
-
-                       /* Free the memory. */
-                       status = gckHEAP_Free(Heap, memory);
-
-                       if (gcmIS_ERROR(status))
-                       {
-                               gcmkFATAL("%s(%d): Cannot free %lu bytes at 0x%x (index=%lu)",
-                                                 __FUNCTION__, __LINE__,
-                                                 nodes[index].bytes, memory, index);
-
-                               failure = status;
-                       }
-
-                       /* Mark the node as free. */
-                       nodes[index].bytes = 0;
-               }
-
-               /* Verify the heap chain. */
-               i = 0;
-               for (current = Heap->heap; current != gcvNULL; current = current->next)
-               {
-                       gctSIZE_T j;
-                       for (heap = Heap->heap, j = 0; j < i; heap = heap->next, ++j)
-                       {
-                               if (heap == current)
-                               {
-                                       gcmkFATAL("%s(%d): Linked list corrupted for heap 0x%x",
-                                                         __FUNCTION__, __LINE__, current);
-
-                                       failure = gcvSTATUS_HEAP_CORRUPTED;
-                               }
-                       }
-
-                       if (heap != current)
-                       {
-                               gcmkFATAL("%s(%d): Linked list corrupted for heap 0x%x",
-                                                 __FUNCTION__, __LINE__, current);
-
-                               failure = gcvSTATUS_HEAP_CORRUPTED;
-                       }
-
-                       ++i;
-               }
-       }
-
-       /* Walk the entire array of nodes. */
-       for (index = 0; index < nodeCount; ++index)
-       {
-               /* Test if we need to free pages. */
-               if (nodes[index].bytes != 0)
-               {
-                       /* Verify the memory. */
-                       memory = nodes[index].memory;
-                       for (i = 0; i < nodes[index].bytes; i += gcmSIZEOF(gctSIZE_T))
-                       {
-                               if (*(gctSIZE_T_PTR) (memory + i) != index)
-                               {
-                                       gcmkFATAL("%s(%d): Corruption detected at page %lu",
-                                                         __FUNCTION__, __LINE__, index);
-
-                                       failure = gcvSTATUS_HEAP_CORRUPTED;
-                               }
-                       }
-
-                       /* Free the memory. */
-                       status = gckHEAP_Free(Heap, memory);
-
-                       if (gcmIS_ERROR(status))
-                       {
-                               gcmkFATAL("%s(%d): Cannot free %u bytes at 0x%x (index=%lu)",
-                                                 __FUNCTION__, __LINE__,
-                                                 nodes[index].bytes, memory, index);
-
-                               failure = status;
-                       }
-               }
-       }
-
-       /* Perform garbage collection. */
-       gcmkONERROR(_CompactKernelHeap(Heap));
-
-       /* Show profiling. */
-       gcmkONERROR(gckHEAP_ProfileEnd(Heap, "Profile"));
-
-       /* Verify we did not loose any nodes. */
-       if (Heap->heap != gcvNULL)
-       {
-               gcmkFATAL("%s(%d): Detected leaking in the heap.",
-                                 __FUNCTION__, __LINE__);
-
-               failure = gcvSTATUS_HEAP_CORRUPTED;
-       }
-
-OnError:
-       /* Roll back. */
-       if (nodes != gcvNULL)
-       {
-               gcmkVERIFY_OK(
-                       gckOS_FreeMemory(Heap->os, nodes));
-       }
-
-       /* Return the status. */
-       gcmkFOOTER();
-       return status;
-}
-#endif
-
index ed77149566d75597511c250cd19e273c82e728cc..b23dcf6b3a3253a32a04e62fc934169c5429ce88 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -75,9 +75,9 @@ _Link(
 
 static gceSTATUS
 _AddFree(
-       IN gckMMU Mmu,
-       IN gctUINT32 Index,
-       IN gctUINT32 Node,
+       IN gckMMU Mmu, 
+       IN gctUINT32 Index, 
+       IN gctUINT32 Node, 
        IN gctUINT32 Count
        )
 {
@@ -201,7 +201,7 @@ OnError:
 **             gckMMU * Mmu
 **                     Pointer to a variable that receives the gckMMU object pointer.
 */
-gceSTATUS
+gceSTATUS 
 gckMMU_Construct(
        IN gckKERNEL Kernel,
        IN gctSIZE_T MmuSize,
@@ -213,7 +213,7 @@ gckMMU_Construct(
        gceSTATUS status;
        gckMMU mmu = gcvNULL;
        gctUINT32_PTR pageTable;
-
+       
        gcmkHEADER_ARG("Kernel=0x%x MmuSize=%lu", Kernel, MmuSize);
 
        /* Verify the arguments. */
@@ -290,7 +290,7 @@ OnError:
                {
                        /* Free the page table. */
                        gcmkVERIFY_OK(
-                               gckOS_FreeContiguous(os,
+                               gckOS_FreeContiguous(os, 
                                                                         mmu->pageTablePhysical,
                                                                         (gctPOINTER) mmu->pageTableLogical,
                                                                         mmu->pageTableSize));
@@ -303,7 +303,7 @@ OnError:
                                gckOS_DeleteMutex(os, mmu->pageTableMutex));
                }
 
-#ifdef __QNXNTO__
+#ifdef __QNXNTO__              
                if (mmu->nodeMutex != gcvNULL)
                {
                        /* Delete the mutex. */
@@ -339,7 +339,7 @@ OnError:
 **
 **             Nothing.
 */
-gceSTATUS
+gceSTATUS 
 gckMMU_Destroy(
        IN gckMMU Mmu
        )
@@ -349,7 +349,7 @@ gckMMU_Destroy(
 #endif
 
        gcmkHEADER_ARG("Mmu=0x%x", Mmu);
-
+       
        /* Verify the arguments. */
        gcmkVERIFY_OBJECT(Mmu, gcvOBJ_MMU);
 
@@ -425,7 +425,7 @@ gckMMU_AllocatePages(
        gctUINT32_PTR pageTable;
        gctBOOL gotIt;
        gctUINT32 address;
-
+       
        gcmkHEADER_ARG("Mmu=0x%x PageCount=%lu", Mmu, PageCount);
 
        /* Verify the arguments. */
@@ -594,7 +594,7 @@ OnError:
 **
 **             Nothing.
 */
-gceSTATUS
+gceSTATUS 
 gckMMU_FreePages(
        IN gckMMU Mmu,
        IN gctPOINTER PageTable,
@@ -602,7 +602,7 @@ gckMMU_FreePages(
        )
 {
        gctUINT32_PTR pageTable;
-
+       
        gcmkHEADER_ARG("Mmu=0x%x PageTable=0x%x PageCount=%lu",
                                   Mmu, PageTable, PageCount);
 
@@ -628,7 +628,7 @@ gckMMU_FreePages(
 
        /* We have free nodes. */
        Mmu->freeNodes = gcvTRUE;
-
+       
        /* Success. */
        gcmkFOOTER_NO();
        return gcvSTATUS_OK;
@@ -760,169 +760,3 @@ OnError:
 ****************************** T E S T   C O D E ******************************
 ******************************************************************************/
 
-#if defined gcdHAL_TEST
-
-#include <stdlib.h>
-#define gcmRANDOM(n) (rand() % n)
-
-typedef struct
-{
-       gctSIZE_T pageCount;
-       gctUINT32_PTR pageTable;
-}
-gcsMMU_TEST;
-
-gceSTATUS
-gckMMU_Test(
-       IN gckMMU Mmu,
-       IN gctSIZE_T Vectors,
-       IN gctINT MaxSize
-       )
-{
-       const gctINT nodeCount = MaxSize / 4;
-       gcsMMU_TEST * nodes = gcvNULL;
-       gceSTATUS status, failure = gcvSTATUS_OK;
-       gctSIZE_T i, count;
-       gctUINT32_PTR pageTable;
-       gctINT index;
-
-       /* Allocate the node array. */
-       gcmkONERROR(
-               gckOS_Allocate(Mmu->os,
-                                          nodeCount * gcmSIZEOF(gcsMMU_TEST),
-                                          (gctPOINTER *) &nodes));
-
-       /* Mark all nodes as free. */
-       gcmkONERROR(
-               gckOS_ZeroMemory(nodes, nodeCount * gcmSIZEOF(gcsMMU_TEST)));
-
-       /* Loop through all vectors. */
-       while (Vectors-- > 0)
-       {
-               /* Get a random index. */
-               index = gcmRANDOM(nodeCount);
-
-               /* Test if we need to allocate pages. */
-               if (nodes[index].pageCount == 0)
-               {
-                       /* Generate a random page count. */
-                       do
-                       {
-                               count = gcmRANDOM(MaxSize);
-                       }
-                       while (count == 0);
-
-                       /* Allocate pages. */
-                       status = gckMMU_AllocatePages(Mmu,
-                                                                                 count,
-                                                                                 (gctPOINTER *) &pageTable,
-                                                                                 gcvNULL);
-
-                       if (gcmIS_SUCCESS(status))
-                       {
-                               /* Mark node as allocated. */
-                               nodes[index].pageCount = count;
-                               nodes[index].pageTable = pageTable;
-
-                               /* Put signature in the page table. */
-                               for (i = 0; i < count; ++i)
-                               {
-                                       pageTable[i] = (index << 8) | gcvMMU_USED;
-                               }
-                       }
-                       else
-                       {
-                               gcmkTRACE(gcvLEVEL_WARNING,
-                                                "gckMMU_Test: Failed to allocate %u pages",
-                                                count);
-                       }
-               }
-               else
-               {
-                       /* Verify the page table. */
-                       pageTable = nodes[index].pageTable;
-                       for (i = 0; i < nodes[index].pageCount; ++i)
-                       {
-                               if (pageTable[i] != ((index << 8) | gcvMMU_USED))
-                               {
-                                       gcmkFATAL("gckMMU_Test: Corruption detected at page %u",
-                                                        index);
-
-                                       failure = gcvSTATUS_HEAP_CORRUPTED;
-                               }
-                       }
-
-                       /* Free the pages. */
-                       status = gckMMU_FreePages(Mmu, pageTable, nodes[index].pageCount);
-
-                       if (gcmIS_ERROR(status))
-                       {
-                               gcmkFATAL("gckMMU_Test: Cannot free %u pages at 0x%x (index=%u)",
-                                                nodes[index].pageCount, pageTable, index);
-
-                               failure = status;
-                       }
-
-                       /* Mark the node as free. */
-                       nodes[index].pageCount = 0;
-               }
-       }
-
-       /* Walk the entire array of nodes. */
-       for (index = 0; index < nodeCount; ++index)
-       {
-               /* Test if we need to free pages. */
-               if (nodes[index].pageCount != 0)
-               {
-                       /* Verify the page table. */
-                       pageTable = nodes[index].pageTable;
-                       for (i = 0; i < nodes[index].pageCount; ++i)
-                       {
-                               if (pageTable[i] != ((index << 8) | gcvMMU_USED))
-                               {
-                                       gcmkFATAL("gckMMU_Test: Corruption detected at page %u",
-                                                        index);
-
-                                       failure = gcvSTATUS_HEAP_CORRUPTED;
-                               }
-                       }
-
-                       /* Free the pages. */
-                       status = gckMMU_FreePages(Mmu, pageTable, nodes[index].pageCount);
-
-                       if (gcmIS_ERROR(status))
-                       {
-                               gcmkFATAL("gckMMU_Test: Cannot free %u pages at 0x%x (index=%u)",
-                                                nodes[index].pageCount, pageTable, index);
-
-                               failure = status;
-                       }
-               }
-       }
-
-       /* Perform garbage collection. */
-       gcmkONERROR(_Collect(Mmu));
-
-       /* Verify we did not loose any nodes. */
-       if ((Mmu->heapList != 0)
-       ||  ((Mmu->pageTableLogical[0] & 0xFF) != gcvMMU_FREE)
-       ||  (Mmu->pageTableEntries != (Mmu->pageTableLogical[0] >> 8))
-       )
-       {
-               gcmkFATAL("gckMMU_Test: Detected leaking in the page table.");
-
-               failure = gcvSTATUS_HEAP_CORRUPTED;
-       }
-
-OnError:
-       /* Free the array of nodes. */
-       if (nodes != gcvNULL)
-       {
-               gcmkVERIFY_OK(gckOS_Free(Mmu->os, nodes));
-       }
-
-       /* Return test status. */
-       return failure;
-}
-#endif
-
index 0379a7528416c8dd27328772b6a46fbead7e58f3..58ebb140c3e499c519e76dc939cea5a6e9f85408 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -29,4 +29,3 @@
 #include "gc_hal_kernel.h"
 
 #endif /* __gc_hal_kernel_precomp_h_ */
-
index 3adb5c6779ad5c6d0963cf471c8379505fbde6cc..c82a51adf55dbbad29adf14438d5ed2d5ec5a1bb 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -822,6 +822,15 @@ gckVIDMEM_AllocateLinear(
 
     acquired = gcvTRUE;
 
+    // dkm: ¶ÔÓÚ»¨ÆÁËÀ»úµÄÎÊÌ⣬¸Ð¾õVVÕâô×öÖ»Êǹæ±Ü£¬»¹ÊÇûÓÐÕÒµ½ÎÊÌâµÄÔ­Òò
+       if (Type == gcvSURF_TILE_STATUS
+    && (Bytes + (1 << 20) > Memory->freeBytes)
+       )
+    {
+        /* Not enough memory. */
+        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
+       }
+
     if (Bytes > Memory->freeBytes)
     {
         /* Not enough memory. */
@@ -987,8 +996,8 @@ gckVIDMEM_Free(
                            "Node 0x%x is locked (%d)",
                            Node, Node->VidMem.locked);
 
-            /* Node is locked. */
-            gcmkONERROR(gcvSTATUS_MEMORY_LOCKED);
+            /* Force unlock. */
+            Node->VidMem.locked = 0;
         }
 
         /* Extract pointer to gckVIDMEM object owning the node. */
@@ -1072,8 +1081,8 @@ gckVIDMEM_Free(
                        "gckVIDMEM_Free: Virtual node 0x%x is locked (%d)",
                        Node, Node->Virtual.locked);
 
-        /* Node is locked. */
-        gcmkONERROR(gcvSTATUS_MEMORY_LOCKED);
+        /* Force unlock. */
+        Node->Virtual.locked = 0;
     }
 
 #ifdef __QNXNTO__
@@ -1751,4 +1760,3 @@ gckVIDMEM_SetPID(
     return gcvSTATUS_OK;
 }
 #endif
-
index d4dc5bbaa3386002b7d4573b71168612177cba73..2abd9946f02bb405d751c4f50840757d546baadc 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #  
-#    Copyright (C) 2005 - 2010 by Vivante Corp.
+#    Copyright (C) 2005 - 2011 by Vivante Corp.
 #  
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
index 5d4112255130140ce5e14e8e02164e5d30293f79..3051c63712cf85d1315500b42274c945f0cced33 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #  
-#    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
+#    Copyright (c) 2005 - 2011 by Vivante Corp.  All rights reserved.
 #  
 #    The material in this file is confidential and contains trade secrets
 #    of Vivante Corporation. This is proprietary information owned by
@@ -10,7 +10,7 @@
 #  
 ##############################################################################
 #  
-#    Auto-generated file on 12/17/2010. Do not edit!!!
+#    Auto-generated file on 5/20/2011. Do not edit!!!
 #  
 ##############################################################################
 
old mode 100755 (executable)
new mode 100644 (file)
index eb56599..20e8e81
@@ -4,13 +4,13 @@
 #  
 #    The material in this file is confidential and contains trade secrets
 #    of Vivante Corporation. This is proprietary information owned by
-#    Vivante Corporation. No part of this work may be disclosed,
-#    reproduced, copied, transmitted, or used in any way for any purpose,
+#    Vivante Corporation. No part of this work may be disclosed, 
+#    reproduced, copied, transmitted, or used in any way for any purpose, 
 #    without the express written permission of Vivante Corporation.
 #  
 ##############################################################################
 #  
-#    Auto-generated file on 1/7/2011. Do not edit!!!
+#    Auto-generated file on 5/20/2011. Do not edit!!!
 #  
 ##############################################################################
 
@@ -111,9 +111,11 @@ EXPORTS
 
        ; gcoHAL
        gcoHAL_Construct
+       gcoHAL_ConstructGlobal
        gcoHAL_Destroy
        gcoHAL_IsFeatureAvailable
        gcoHAL_QueryChipIdentity
+       gcoHAL_QueryChipMinorFeatures
        gcoHAL_Call
        gcoHAL_QueryVideoMemory
        gcoHAL_MapMemory
@@ -152,6 +154,10 @@ EXPORTS
        gcoDUMP_DumpData
        gcoDUMP_Delete
        gcfDump
+       gcfDumpApi
+       gcfDumpArray
+       gcfDumpArrayToken
+       gcfDumpApiData
 
        ; gcoSURF
        gcoSURF_Construct
@@ -187,6 +193,7 @@ EXPORTS
        gcoSURF_SetOrientation
        gcoSURF_QueryOrientation
        gcoSURF_QueryReferenceCount
+       gcoSURF_ResetHal
 
 !IFNDEF VIVANTE_NO_3D
        gcoSURF_IsTileStatusSupported
@@ -280,7 +287,9 @@ EXPORTS
        gco2D_ProfileEngine
        gco2D_GetMaximumDataCount
        gco2D_EnableDither
-
+    gco2D_SetGenericSource;
+    gco2D_SetGenericTarget;
+    gco2D_FilterBlitEx2;
 
 !IFNDEF VIVANTE_NO_3D
        gco3D_Construct
@@ -359,6 +368,9 @@ EXPORTS
        gco3D_SetAlphaTextureFunction
        gco3D_Semaphore
        gco3D_SetCentroids
+       gco3D_SetWClipEnable
+       gco3D_SetWPlaneLimitF
+       gco3D_SetWPlaneLimitX   
 !ENDIF
 
 !IFNDEF VIVANTE_NO_3D
index 078a1c7d9ddde806ecd4058d6f0d17195e788c2d..34c4be3c44cd93d3367b03b6805d56bf96cb40cb 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -27,7 +27,7 @@
 
 /*
     gcdBUFFERED_OUTPUT
-
+    
     When set to non-zero, all output is collected into a buffer with the
     specified size.  Once the buffer gets full, or the token "$$FLUSH$$" has
     been received, the debug buffer will be printed to the console.
@@ -55,17 +55,17 @@ OutputDebugString(
     gctINT n, i;
 
     n = (String != gcvNULL) ? strlen(String) + 1 : 0;
-
+    
     if ((n == 0) || (outputBufferIndex + n > gcmSIZEOF(outputBuffer)))
     {
         for (i = 0; i < outputBufferIndex; i += strlen(outputBuffer + i) + 1)
         {
             printk(outputBuffer + i);
         }
-
+        
         outputBufferIndex = 0;
     }
-
+    
     if (n > 0)
     {
         memcpy(outputBuffer + outputBufferIndex, String, n);
@@ -87,7 +87,7 @@ _Print(
 {
     char buffer[1024];
     int i, n;
-
+    
     if (strcmp(Message, "$$FLUSH$$") == 0)
     {
        spin_lock(&_lock);
@@ -97,22 +97,22 @@ _Print(
         spin_unlock(&_lock);
         return;
     }
-
+    
     if (strncmp(Message, "--", 2) == 0)
     {
         if (_indent == 0)
         {
             printk("ERROR: _indent=0\n");
         }
-
+        
         _indent -= 2;
     }
-
+    
     for (i = 0; i < _indent; ++i)
     {
         buffer[i] = ' ';
     }
-
+    
     /* Print message to buffer. */
     n = vsnprintf(buffer + i, sizeof(buffer) - i, Message, Arguments);
     if ((n <= 0) || (buffer[i + n - 1] != '\n'))
@@ -127,7 +127,7 @@ _Print(
        OutputDebugString(buffer);
     }
     spin_unlock(&_lock);
-
+    
     if (strncmp(Message, "++", 2) == 0)
     {
         _indent += 2;
@@ -325,7 +325,7 @@ gckOS_DebugFatal(
 **      Nothing.
 */
 
-void
+void 
 gckOS_SetDebugLevel(
     IN gctUINT32 Level
     )
@@ -348,7 +348,7 @@ gckOS_SetDebugLevel(
 **
 **      Nothing.
 */
-void
+void 
 gckOS_SetDebugZone(
     IN gctUINT32 Zone
     )
@@ -375,7 +375,7 @@ gckOS_SetDebugZone(
 **      Nothing.
 */
 
-void
+void 
 gckOS_SetDebugLevelZone(
     IN gctUINT32 Level,
     IN gctUINT32 Zone
@@ -405,7 +405,7 @@ gckOS_SetDebugLevelZone(
 **      Nothing.
 */
 
-void
+void 
 gckOS_SetDebugZones(
     IN gctUINT32 Zones,
     IN gctBOOL Enable
@@ -446,4 +446,3 @@ gckOS_Verify(
 {
     _lastError = Status;
 }
-
index 8fd9af9f7790c50d4c0bfb8464886a58cc08cada..9440eed8271e20dd7753b5462c8a92f901fda831 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -488,7 +488,7 @@ gckGALDEVICE_Construct(
         device->registerBase = (gctPOINTER) ioremap_nocache(RegisterMemBase,
                                                         RegisterMemSize);
         if (!device->registerBase)
-        {
+    {
             gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
                       "[galcore] gckGALDEVICE_Construct: Unable to map location->0x%lX for size->%ld",
               RegisterMemBase,
@@ -496,6 +496,7 @@ gckGALDEVICE_Construct(
 
             return gcvSTATUS_OUT_OF_RESOURCES;
         }
+        // dkm: print te regbase
         printk("---- gpu regbase: 0x%08x ---- \n", (unsigned int)device->registerBase);
 
         physical += RegisterMemSize;
@@ -515,6 +516,12 @@ gckGALDEVICE_Construct(
     /* construct the gckKERNEL object. */
     gcmkVERIFY_OK(gckKERNEL_Construct(device->os, device, &device->kernel));
 
+    /* Setup the Isr manager. */
+    gcmkVERIFY_OK(gckHARDWARE_SetIsrManager(device->kernel->hardware,
+                                            (gctISRMANAGERFUNC)gckGALDEVICE_Setup_ISR,
+                                            (gctISRMANAGERFUNC)gckGALDEVICE_Release_ISR,
+                                            device));
+
     gcmkVERIFY_OK(gckHARDWARE_SetFastClear(device->kernel->hardware,
                                           FastClear,
                                           Compression));
@@ -612,7 +619,7 @@ gckGALDEVICE_Construct(
         {
             /* map internal memory */
             device->externalPhysical = (gctPHYS_ADDR)physical;
-// dkm: gcdENABLE_MEM_CACHE
+// dkm: gcdENABLE_MEM_CACHE\r
 #if (1==gcdENABLE_MEM_CACHE)
             device->externalLogical = (gctPOINTER)ioremap_cached(
                     physical, device->externalSize);
@@ -731,7 +738,7 @@ gckGALDEVICE_Construct(
 
             device->contiguousPhysical = (gctPHYS_ADDR) ContiguousBase;
             device->contiguousSize     = ContiguousSize;
-// dkm: gcdENABLE_MEM_CACHE
+// dkm: gcdENABLE_MEM_CACHE\r
 #if (1==gcdENABLE_MEM_CACHE)
             device->contiguousBase     = (gctPOINTER) ioremap_cached(ContiguousBase, ContiguousSize);
 #else
@@ -851,4 +858,3 @@ gckGALDEVICE_Destroy(
 
     return gcvSTATUS_OK;
 }
-
index 01629d99b85a4930b7a1498a9e8f2c42ffb223b2..57122e8ab14d0ae73090bdcf6811d2409e18ed3e 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
+*  
 *    Copyright (C) 2005 - 2011 by Vivante Corp.
-*
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -91,9 +91,10 @@ typedef enum _gceMEMORY_TYPE
     gcvVIDEO_MEMORY
 }
 gceMEMORY_TYPE;
+
 typedef struct MEMORY_RECORD
 {
-           gceMEMORY_TYPE          type;
+    gceMEMORY_TYPE          type;
 
     union
     {
@@ -129,6 +130,7 @@ typedef struct _gcsHAL_PRIVATE_DATA
 
 #if gcdkUSE_MEMORY_RECORD
        MEMORY_RECORD           memoryRecordList;
+
 #if gcdkREPORT_VIDMEM_USAGE
     gctUINT64           allocatedMem[gcvSURF_NUM_TYPES];
     gctUINT64           maxAllocatedMem[gcvSURF_NUM_TYPES];
@@ -182,4 +184,3 @@ gceSTATUS gckGALDEVICE_Destroy(
        );
 
 #endif /* __gc_hal_kernel_device_h_ */
-
index 84014a611417f5dcc0ac2004e54a4035b7e62d60..0e0fd06dbee62ac281b71d660b76875782a5d9d3 100644 (file)
@@ -1,29 +1,30 @@
 /****************************************************************************
-*
+*  
 *    Copyright (C) 2005 - 2011 by Vivante Corp.
-*
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
 
 
 #include <linux/device.h>
-#include <linux/miscdevice.h>
 #include <linux/slab.h>
+// dkm: add
+#include <linux/miscdevice.h>
 #include <linux/earlysuspend.h>
 #include <linux/delay.h>
 #include <linux/workqueue.h>
@@ -35,6 +36,7 @@
 #if USE_PLATFORM_DRIVER
 #include <linux/platform_device.h>
 #endif
+// dkm: add
 #include <mach/rk29_iomap.h>
 #include <mach/cru.h>
 #include <mach/pmu.h>
@@ -64,6 +66,7 @@ module_param(contiguousSize, long, 0644);
 ulong contiguousBase = 0;
 module_param(contiguousBase, ulong, 0644);
 
+// dkm: change to 16 from 32
 long bankSize = 16 << 20;
 module_param(bankSize, long, 0644);
 
@@ -83,10 +86,12 @@ int showArgs = 0;
 module_param(showArgs, int, 0644);
 
 #if ENABLE_GPU_CLOCK_BY_DRIVER
+// dkm: change
 unsigned long coreClock = 552*1000000;
 module_param(coreClock, ulong, 0644);
 #endif
 
+// gcdkREPORT_VIDMEM_USAGE add by vv
 #if gcdkREPORT_VIDMEM_USAGE
 #include <linux/proc_fs.h>
 
@@ -171,6 +176,7 @@ static void gckDeviceProc_UnRegister(void)
 }
 #endif
 
+// dkm: add
 int shutdown = 0;
 
 static int drv_open(struct inode *inode, struct file *filp);
@@ -187,7 +193,8 @@ struct file_operations driver_fops =
     .mmap      = drv_mmap,
 };
 
-#if gcdENABLE_AUTO_FREQ
+// dkm: gcdENABLE_AUTO_FREQ
+#if (1==gcdENABLE_AUTO_FREQ)
 #include <linux/timer.h>
 struct timer_list gpu_timer;
 extern void get_run_idle(u32 *run, u32 *idle);
@@ -233,8 +240,22 @@ void gputimer_callback(unsigned long arg)
     
     printk("%8d /%8d = %3d %%, needfreq = %dM (%d)\n", (int)run, (int)(run+idle), precent, freq, power_cnt);
 }
+#elif(2==gcdENABLE_AUTO_FREQ)
+#include <linux/timer.h>
+struct timer_list gpu_timer;
+int needhighfreq = 0;
+void mod_gpu_timer(void)
+{
+    mod_timer(&gpu_timer, jiffies + 3*HZ);
+}
+void gputimer_callback(unsigned long arg)
+{
+    needhighfreq = 0;
+    //printk("needhighfreq = 0! \n");
+}
 #endif
 
+// dkm: gcdENABLE_DELAY_EARLY_SUSPEND
 #if (1==gcdENABLE_DELAY_EARLY_SUSPEND)
 struct delayed_work suspend_work;
 void real_suspend(struct work_struct *work)
@@ -264,9 +285,9 @@ int drv_open(struct inode *inode, struct file* filp)
     {
        return -ENOTTY;
     }
-       /* Zero the memory. */
+    
+    /* Zero the memory. */
     gckOS_ZeroMemory(private, gcmSIZEOF(gcsHAL_PRIVATE_DATA));
-       
 
     private->device                            = galDevice;
     private->mappedMemory              = gcvNULL;
@@ -281,15 +302,17 @@ int drv_open(struct inode *inode, struct file* filp)
        gcmkVERIFY_OK(
                gckKERNEL_AttachProcess(galDevice->kernel, gcvTRUE));
 
-    if (!galDevice->contiguousMapped)
+    if (galDevice->contiguousSize != 0 
+        && !galDevice->contiguousMapped)
     {
        gcmkVERIFY_OK(gckOS_MapMemory(galDevice->os,
                                                                        galDevice->contiguousPhysical,
                                                                        galDevice->contiguousSize,
                                                                        &private->contiguousLogical));
     }
-
+    
     filp->private_data = private;
+// gcdkREPORT_VIDMEM_USAGE add by vv
 #if gcdkREPORT_VIDMEM_USAGE
     s_gckHalPrivate = private;
 #endif
@@ -311,18 +334,23 @@ int drv_release(struct inode* inode, struct file* filp)
     gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
                  "Entering drv_close\n");
 
-    gcmkVERIFY_OK(
-               gckOS_DestroyAllUserSignals(galDevice->os));
-
     private = filp->private_data;
     gcmkASSERT(private != gcvNULL);
 
     device = private->device;
 
+#ifndef ANDROID
+       gcmkVERIFY_OK(gckCOMMAND_Stall(device->kernel->command));
+#endif
+
+    gcmkVERIFY_OK(
+               gckOS_DestroyAllUserSignals(galDevice->os));
+
 #if gcdkUSE_MEMORY_RECORD
        FreeAllMemoryRecord(galDevice->os, private, &private->memoryRecordList);
 
 #ifdef ANDROID
+// dkm: ±£ÁôdelayµÄ×ö·¨
        gcmkVERIFY_OK(gckOS_Delay(galDevice->os, 1000));
 #else
        gcmkVERIFY_OK(gckCOMMAND_Stall(device->kernel->command));
@@ -343,6 +371,7 @@ int drv_release(struct inode* inode, struct file* filp)
        /* A process gets detached. */
        gcmkVERIFY_OK(
                gckKERNEL_AttachProcess(galDevice->kernel, gcvFALSE));
+// gcdkREPORT_VIDMEM_USAGE add by vv
 #if gcdkREPORT_VIDMEM_USAGE
     s_gckHalPrivate = NULL;
 #endif
@@ -354,7 +383,7 @@ int drv_release(struct inode* inode, struct file* filp)
 }
 
 int drv_ioctl(struct inode *inode,
-             struct file *filp,
+             struct file *filp, 
              unsigned int ioctlCode,
              unsigned long arg)
 {
@@ -364,9 +393,10 @@ int drv_ioctl(struct inode *inode,
     gckGALDEVICE device;
     gceSTATUS status;
     gcsHAL_PRIVATE_DATA_PTR private;
-
+    
     private = filp->private_data;
 
+    // dkm: add
     if(shutdown)
     {
         return -ENOTTY;
@@ -379,9 +409,9 @@ int drv_ioctl(struct inode *inode,
 
        return -ENOTTY;
     }
-
+    
     device = private->device;
-
+    
     if (device == gcvNULL)
     {
        gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
@@ -389,7 +419,7 @@ int drv_ioctl(struct inode *inode,
 
        return -ENOTTY;
     }
-
+       
     if (ioctlCode != IOCTL_GCHAL_INTERFACE
                && ioctlCode != IOCTL_GCHAL_KERNEL_INTERFACE)
     {
@@ -401,7 +431,7 @@ int drv_ioctl(struct inode *inode,
     copyLen = copy_from_user(&drvArgs,
                             (void *) arg,
                             sizeof(DRIVER_ARGS));
-
+                            
     if (copyLen != 0)
     {
        /* The input buffer is not big enough. So fail the I/O. */
@@ -411,7 +441,7 @@ int drv_ioctl(struct inode *inode,
     /* Now bring in the gcsHAL_INTERFACE structure. */
     if ((drvArgs.InputBufferSize  != sizeof(gcsHAL_INTERFACE))
     ||  (drvArgs.OutputBufferSize != sizeof(gcsHAL_INTERFACE))
-    )
+    ) 
     {
        return -ENOTTY;
     }
@@ -419,19 +449,19 @@ int drv_ioctl(struct inode *inode,
     copyLen = copy_from_user(&iface,
                             drvArgs.InputBuffer,
                             sizeof(gcsHAL_INTERFACE));
-
+    
     if (copyLen != 0)
     {
         /* The input buffer is not big enough. So fail the I/O. */
         return -ENOTTY;
     }
-
+       
 #if gcdkUSE_MEMORY_RECORD
        if (iface.command == gcvHAL_EVENT_COMMIT)
        {
                MEMORY_RECORD_PTR mr;
                gcsQUEUE_PTR queue = iface.u.Event.queue;
-
+               
                while (queue != gcvNULL)
                {
                        gcsQUEUE_PTR record, next;
@@ -444,7 +474,7 @@ int drv_ioctl(struct inode *inode,
 
                        switch (record->iface.command)
                        {
-                       case gcvHAL_FREE_NON_PAGED_MEMORY:
+            case gcvHAL_FREE_NON_PAGED_MEMORY:
                        mr = FindMemoryRecord(device->os,
                                       private,
                                       &private->memoryRecordList,
@@ -481,22 +511,23 @@ int drv_ioctl(struct inode *inode,
                                gcmkPRINT("*ERROR* Invalid contiguous memory for free");
                        }
                 break;
+
                        case gcvHAL_FREE_VIDEO_MEMORY:
-                                       mr = FindVideoMemoryRecord(device->os,
+                               mr = FindVideoMemoryRecord(device->os,
                                            private,
                                            &private->memoryRecordList,
                                            record->iface.u.FreeVideoMemory.node);
-
-                               if (mr != gcvNULL)
-                               {
-                                       DestroyVideoMemoryRecord(device->os, private, mr);
-                               }
-                               else
-                               {
-                                       gcmkPRINT("*ERROR* Invalid video memory for free");
-                               }
+                               
+                       if (mr != gcvNULL)
+                       {
+                               DestroyVideoMemoryRecord(device->os, private, mr);
+                       }
+                       else
+                       {
+                               gcmkPRINT("*ERROR* Invalid video memory for free");
+                       }
                 break;
-
+                               
                        default:
                                break;
                        }
@@ -516,7 +547,7 @@ int drv_ioctl(struct inode *inode,
 
     status = gckKERNEL_Dispatch(device->kernel,
                (ioctlCode == IOCTL_GCHAL_INTERFACE) , &iface);
-
+    
     if (gcmIS_ERROR(status))
     {
        gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DRIVER,
@@ -531,7 +562,7 @@ int drv_ioctl(struct inode *inode,
                      iface.command,
                      iface.status);
     }
-
+    
     /* See if this was a LOCK_VIDEO_MEMORY command. */
     else if (iface.command == gcvHAL_LOCK_VIDEO_MEMORY)
     {
@@ -543,7 +574,7 @@ int drv_ioctl(struct inode *inode,
                        /* Compute offset into mapped memory. */
                gctUINT32 offset = (gctUINT8 *) iface.u.LockVideoMemory.memory
                                - (gctUINT8 *) device->contiguousBase;
-
+                         
            /* Compute offset into user-mapped region. */
            iface.u.LockVideoMemory.memory =
                (gctUINT8 *)  private->mappedMemory + offset;
@@ -614,37 +645,39 @@ int drv_ioctl(struct inode *inode,
     }
        else if (iface.command == gcvHAL_ALLOCATE_VIDEO_MEMORY)
        {
-               gctSIZE_T bytes = (iface.u.AllocateVideoMemory.node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
-                                               ? iface.u.AllocateVideoMemory.node->VidMem.bytes
+               gctSIZE_T bytes = (iface.u.AllocateVideoMemory.node->VidMem.memory->object.type == gcvOBJ_VIDMEM) 
+                                               ? iface.u.AllocateVideoMemory.node->VidMem.bytes 
                                                : iface.u.AllocateVideoMemory.node->Virtual.bytes;
+
                CreateVideoMemoryRecord(device->os,
-                                                       private,
-                                                       &private->memoryRecordList,
-                                                       iface.u.AllocateVideoMemory.node,
-                                                       iface.u.AllocateVideoMemory.type & 0xFF,
-                                                       bytes);
+                                private,
+                                                           &private->memoryRecordList,
+                                                           iface.u.AllocateVideoMemory.node,
+                                                           iface.u.AllocateVideoMemory.type & 0xFF,
+                                                           bytes);
        }
        else if (iface.command == gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY)
        {
                gctSIZE_T bytes = (iface.u.AllocateLinearVideoMemory.node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
-                                               ? iface.u.AllocateLinearVideoMemory.node->VidMem.bytes
+                                               ? iface.u.AllocateLinearVideoMemory.node->VidMem.bytes 
                                                : iface.u.AllocateLinearVideoMemory.node->Virtual.bytes;
+
                CreateVideoMemoryRecord(device->os,
-                                                       private,
-                                                       &private->memoryRecordList,
-                                                       iface.u.AllocateLinearVideoMemory.node,
-                                                       iface.u.AllocateLinearVideoMemory.type & 0xFF,
-                                                       bytes);
+                                private,
+                                                           &private->memoryRecordList,
+                                                           iface.u.AllocateLinearVideoMemory.node,
+                                                           iface.u.AllocateLinearVideoMemory.type & 0xFF,
+                                                           bytes);
        }
        else if (iface.command == gcvHAL_FREE_VIDEO_MEMORY)
        {
                MEMORY_RECORD_PTR mr;
-
+               
                mr = FindVideoMemoryRecord(device->os,
-                                                       private,
-                                                       &private->memoryRecordList,
-                                                       iface.u.FreeVideoMemory.node);
-
+                                   private,
+                                   &private->memoryRecordList,
+                                   iface.u.FreeVideoMemory.node);
+               
                if (mr != gcvNULL)
                {
                        DestroyVideoMemoryRecord(device->os, private, mr);
@@ -706,9 +739,9 @@ static int drv_mmap(struct file * filp, struct vm_area_struct * vma)
                                 (gctUINT32) device->contiguousPhysical >> PAGE_SHIFT,
                                 size,
                                 vma->vm_page_prot);
-
+                                                  
        private->mappedMemory = (ret == 0) ? (gctPOINTER) vma->vm_start : gcvNULL;
-
+                                                  
        return ret;
     }
     else
@@ -717,16 +750,14 @@ static int drv_mmap(struct file * filp, struct vm_area_struct * vma)
     }
 }
 
-
+// dkm: add
 static struct miscdevice miscdev = {
     .name = "galcore",
     .fops = &driver_fops,
     .minor = MISC_DYNAMIC_MINOR,
 };
 
-
-
-
+// dkm: ÐÞ¸Ädrv_init
 #if !USE_PLATFORM_DRIVER
 static int __init drv_init(void)
 #else
@@ -795,6 +826,9 @@ static int drv_init(void)
                printk("  compression     = %d\n",      compression);
                printk("  signal          = %d\n",      signal);
                printk("  baseAddress     = 0x%08lX\n", baseAddress);
+#if ENABLE_GPU_CLOCK_BY_DRIVER
+        printk("  coreClock       = %lu\n",     coreClock);
+#endif
        }
 
     /* Create the GAL device. */
@@ -809,7 +843,7 @@ static int drv_init(void)
                                        baseAddress,
                                        signal,
                                        &device));
-
+       
     /* Start the GAL device. */
     if (gcmIS_ERROR(gckGALDEVICE_Start(device)))
     {
@@ -874,21 +908,23 @@ static int drv_init(void)
        device_create(gpuClass, NULL, MKDEV(major, 0), NULL, "galcore");
 #else
        device_create(gpuClass, NULL, MKDEV(major, 0), "galcore");
-#endif
 #endif
 
+#endif
+       
     gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
                  "[galcore] irqLine->%ld, contiguousSize->%lu, memBase->0x%lX\n",
                  irqLine,
                  contiguousSize,
                  registerMemBase);
-
+       
     gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER,
                  "[galcore] driver registered successfully.\n");
 
     return 0;
 }
 
+// dkm: ÐÞ¸Ädrv_exit
 #if !USE_PLATFORM_DRIVER
 static void __exit drv_exit(void)
 #else
@@ -961,7 +997,7 @@ module_exit(drv_exit);
 #endif
 
 
-
+// dkm: CONFIG_HAS_EARLYSUSPEND
 #if CONFIG_HAS_EARLYSUSPEND
 static void gpu_early_suspend(struct early_suspend *h)
 {
@@ -1019,6 +1055,7 @@ static int __devinit gpu_probe(struct platform_device *pdev)
                goto gpu_probe_fail;
        }
        registerMemBase = res->start;
+    // dkm: ²»ÄÜ+1
        registerMemSize = res->end - res->start;
 
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM,"gpu_mem");
@@ -1027,21 +1064,30 @@ static int __devinit gpu_probe(struct platform_device *pdev)
                goto gpu_probe_fail;
        }
        contiguousBase  = res->start;
-       contiguousSize  = res->end-res->start;
+    // dkm: ²»ÄÜ+1
+       contiguousSize  = res->end - res->start;
 
-#if gcdENABLE_AUTO_FREQ
+// dkm: gcdENABLE_AUTO_FREQ
+#if (1==gcdENABLE_AUTO_FREQ)
     init_timer(&gpu_timer);
     gpu_timer.function = gputimer_callback;
     gpu_timer.expires = jiffies + 15*HZ;
     add_timer(&gpu_timer);
+#elif(2==gcdENABLE_AUTO_FREQ)
+    init_timer(&gpu_timer);
+    gpu_timer.function = gputimer_callback;
+    gpu_timer.expires = jiffies + 3*HZ;
+    add_timer(&gpu_timer);
 #endif
 
+// dkm: CONFIG_HAS_EARLYSUSPEND
 #if CONFIG_HAS_EARLYSUSPEND
 #if (2!=gcdENABLE_DELAY_EARLY_SUSPEND)
     register_early_suspend(&gpu_early_suspend_info);
 #endif
 #endif
 
+// dkm: gcdENABLE_DELAY_EARLY_SUSPEND
 #if (1==gcdENABLE_DELAY_EARLY_SUSPEND)
     INIT_DELAYED_WORK(&suspend_work, real_suspend);
 #endif
@@ -1052,17 +1098,19 @@ static int __devinit gpu_probe(struct platform_device *pdev)
                return ret;
        }
 
-gpu_probe_fail:
+gpu_probe_fail:        
        printk(KERN_INFO "Failed to register gpu driver.\n");
        return ret;
 }
 
 static int __devinit gpu_remove(struct platform_device *pdev)
 {
+// dkm: gcdENABLE_DELAY_EARLY_SUSPEND
 #if (1==gcdENABLE_DELAY_EARLY_SUSPEND)
     cancel_delayed_work_sync(&suspend_work);
 #endif
        drv_exit();
+
        return 0;
 }
 
@@ -1071,16 +1119,16 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state
        gceSTATUS status;
        gckGALDEVICE device;
     
+// dkm: gcdENABLE_DELAY_EARLY_SUSPEND
 #if (1==gcdENABLE_DELAY_EARLY_SUSPEND)
     cancel_delayed_work_sync(&suspend_work);
 #endif
        device = platform_get_drvdata(dev);
-
+       
        status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF);
 
        if (gcmIS_ERROR(status))
        {
-           printk("%s fail!\n", __func__);
                return -1;
        }
 
@@ -1093,18 +1141,25 @@ static int __devinit gpu_resume(struct platform_device *dev)
        gckGALDEVICE device;
 
        device = platform_get_drvdata(dev);
-
+       
        status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_ON);
 
        if (gcmIS_ERROR(status))
        {
-           printk("%s fail!\n", __func__);
                return -1;
        }
-    
+
+       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_IDLE_BROADCAST);
+
+       if (gcmIS_ERROR(status))
+       {
+               return -1;
+       }
+
        return 0;
 }
 
+// dkm: add
 static void __devinit gpu_shutdown(struct platform_device *dev)
 {
 #if (1==gcdENABLE_DELAY_EARLY_SUSPEND)
@@ -1117,6 +1172,7 @@ static void __devinit gpu_shutdown(struct platform_device *dev)
 static struct platform_driver gpu_driver = {
        .probe          = gpu_probe,
        .remove         = gpu_remove,
+    // dkm add
     .shutdown   = gpu_shutdown,
        .suspend        = gpu_suspend,
        .resume         = gpu_resume,
@@ -1126,7 +1182,7 @@ static struct platform_driver gpu_driver = {
        }
 };
 
-#if 0
+#if 0 // by dkm
 #ifndef CONFIG_DOVE_GPU
 static struct resource gpu_resources[] = {
     {
@@ -1190,6 +1246,7 @@ static int __init gpu_init(void)
        ret = platform_driver_register(&gpu_driver);
        if (!ret)
        {
+// add by vv
 #if gcdkREPORT_VIDMEM_USAGE
         gckDeviceProc_Register();
 #endif
@@ -1220,6 +1277,7 @@ static void __exit gpu_exit(void)
 #endif
 #endif
 
+// add by vv
 #if gcdkREPORT_VIDMEM_USAGE
    gckDeviceProc_UnRegister();
 #endif
index 36546c9ae899c936e4981eba01c7999fb7b86141..d497ceee7d977c65093fdddc6bb4004b57f38d67 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -53,7 +53,7 @@ gckKERNEL_QueryVideoMemory(
        )
 {
        gckGALDEVICE device;
-
+       
        gcmkHEADER_ARG("Kernel=%p", Kernel);
 
        /* Verify the arguments. */
@@ -100,7 +100,7 @@ gckKERNEL_QueryVideoMemory(
 **                     Pointer to a variable that will hold the pointer to the gckVIDMEM
 **                     object belonging to the requested pool.
 */
-gceSTATUS
+gceSTATUS 
 gckKERNEL_GetVideoMemoryPool(
        IN gckKERNEL Kernel,
        IN gcePOOL Pool,
@@ -109,7 +109,7 @@ gckKERNEL_GetVideoMemoryPool(
 {
        gckGALDEVICE device;
        gckVIDMEM videoMemory;
-
+       
        gcmkHEADER_ARG("Kernel=%p Pool=%d", Kernel, Pool);
 
        /* Verify the arguments. */
@@ -173,7 +173,7 @@ gckKERNEL_GetVideoMemoryPool(
 **                     Pointer to a variable that will hold the base address of the mapped
 **                     memory region.
 */
-gceSTATUS
+gceSTATUS 
 gckKERNEL_MapMemory(
        IN gckKERNEL Kernel,
        IN gctPHYS_ADDR Physical,
@@ -208,7 +208,7 @@ gckKERNEL_MapMemory(
 **
 **             Nothing.
 */
-gceSTATUS
+gceSTATUS 
 gckKERNEL_UnmapMemory(
        IN gckKERNEL Kernel,
        IN gctPHYS_ADDR Physical,
@@ -243,7 +243,7 @@ gckKERNEL_UnmapMemory(
 **                     Pointer to a variable that will hold the logical address of the
 **                     specified memory address.
 */
-gceSTATUS
+gceSTATUS 
 gckKERNEL_MapVideoMemory(
        IN gckKERNEL Kernel,
        IN gctBOOL InUserSpace,
@@ -258,7 +258,7 @@ gckKERNEL_MapVideoMemory(
     gctUINT32 offset, base;
     gceSTATUS status;
     gctPOINTER logical;
-
+    
     gcmkHEADER_ARG("Kernel=%p InUserSpace=%d Address=%08x",
                           Kernel, InUserSpace, Address);
 
@@ -305,7 +305,7 @@ gckKERNEL_MapVideoMemory(
                gcmkVERIFY_OK(
                        gckHARDWARE_SplitMemory(Kernel->hardware,
                                                                        device->contiguousVidMem->baseAddress,
-                                                                       &pool,
+                                                                       &pool, 
                                                                        &base));
 
                offset -= base;
@@ -322,7 +322,7 @@ gckKERNEL_MapVideoMemory(
     /* Success. */
     gcmkFOOTER_ARG("*Logical=%p", *Logical);
     return gcvSTATUS_OK;
-
+    
 OnError:
        /* Retunn the status. */
        gcmkFOOTER();
@@ -347,7 +347,7 @@ OnError:
 **
 **             Nothing.
 */
-gceSTATUS
+gceSTATUS 
 gckKERNEL_Notify(
        IN gckKERNEL Kernel,
        IN gceNOTIFY Notification,
@@ -355,7 +355,7 @@ gckKERNEL_Notify(
        )
 {
        gceSTATUS status;
-
+       
        gcmkHEADER_ARG("Kernel=%p Notification=%d Data=%d",
                                   Kernel, Notification, Data);
 
@@ -391,21 +391,20 @@ gckKERNEL_QuerySettings(
        )
 {
        gckGALDEVICE device;
-
+       
        gcmkHEADER_ARG("Kernel=%p", Kernel);
-
+       
        /* Verify the arguments. */
        gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
        gcmkVERIFY_ARGUMENT(Settings != gcvNULL);
-
+       
        /* Extract the pointer to the gckGALDEVICE class. */
     device = (gckGALDEVICE) Kernel->context;
-
+       
        /* Fill in signal. */
        Settings->signal = device->signal;
-
+       
        /* Success. */
        gcmkFOOTER_ARG("Settings->signal=%d", Settings->signal);
        return gcvSTATUS_OK;
 }
-
old mode 100755 (executable)
new mode 100644 (file)
index 3cc30d7..5166b0a
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -47,7 +47,7 @@
 
 #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
 #include <linux/clk.h>
-#endif
+#endif 
 
 #define NTSTRSAFE_NO_CCH_FUNCTIONS
 #include "gc_hal.h"
@@ -57,6 +57,7 @@
 #include "gc_hal_kernel_os.h"
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+// dkm: pid_task²»ÐУ¬µÃ¸ÄΪget_pid_task
 #define FIND_TASK_BY_PID(x) get_pid_task(find_vpid(x), PIDTYPE_PID)
 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
 #define FIND_TASK_BY_PID(x) find_task_by_vpid(x)
@@ -79,11 +80,10 @@ GetOrder(
        )
 {
     gctINT order = 0;
-
+    
        while ((1 << order) <  numPages) order++;
-
+    
        return order;
 }
 
 #endif /* __gc_hal_kernel_linux_h_ */
-
index 7356af9dd64295b646bcf09b3158ca201a19f54e..1f0d9a40995e6a8708f8ce3a058071ab77fbcbf7 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
+*  
 *    Copyright (C) 2005 - 2011 by Vivante Corp.
-*
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -34,7 +34,7 @@
 #include <linux/dma-mapping.h>
 #endif /* NO_DMA_COHERENT */
 
-
+// dkm: add
 #include <linux/delay.h>
 #include <mach/pmu.h>
 #include <mach/cru.h>
 
 #define _GC_OBJ_ZONE    gcvZONE_OS
 
+// dkm: add
 #define PAGE_ALLOC_LIMIT                    1   // ÏÞÖÆPageÉêÇë
 #define PAGE_ALLOC_LIMIT_SIZE               0   // ÏÞÖÆPageÉêÇëµÄ´óС,µ¥Î»ÎªM
 
+// dkm: PAGE_ALLOC_LIMIT
 #if PAGE_ALLOC_LIMIT
 int g_pages_alloced = 0;
 #endif
@@ -70,9 +72,11 @@ int g_pages_alloced = 0;
 #define MEMORY_MAP_UNLOCK(os) \
     gcmkVERIFY_OK(gckOS_ReleaseMutex((os), (os)->memoryMapLock))
 
+// add by vv
 // 512MÄÚ´æµÄÇé¿öÏÂ,²âÊÔ¼¸¸öÓÎÏ·°ÑÄÚ´æºÄ¹â£¬ÆäÖµ¾Íµ½40£¬Òò´Ë100Ó¦¸ÃÊǹ»ÓõÄ
 #define gcdkUSE_NON_PAGED_MEMORY_CACHE         100 
 
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
 typedef struct _gcsNonPagedMemoryCache
 {
@@ -144,6 +148,8 @@ struct _gckOS
         gctPOINTER              lock;
     } signal;
 #endif
+
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     gctUINT                      cacheSize;
     gcsNonPagedMemoryCache *     cacheHead;
@@ -427,7 +433,7 @@ OnProcessExit(
 #endif
 }
 
-
+// dkm: add
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
 gceSTATUS
 gckOS_AllocateNonPagedMemoryFromSystem(
@@ -447,7 +453,8 @@ gckOS_AllocateNonPagedMemoryFromSystem(
 #ifdef NO_DMA_COHERENT
     struct page *   page;
     long            size, order;
-    gctPOINTER      vaddr;
+    gctPOINTER      vaddr, reserved_vaddr;
+    gctUINT32       reserved_size;
 #endif
 
     /* Verify the arguments. */
@@ -496,7 +503,26 @@ gckOS_AllocateNonPagedMemoryFromSystem(
         return gcvSTATUS_OUT_OF_MEMORY;
     }
 
-    vaddr           = (gctPOINTER)page_address(page);
+    /* 
+     * On some system ioremap_nocache fails when 
+     * given a size of more than 1 page if all
+     * of the pages haven't been marked as reserved 
+     * first. Allocating a single page works without
+     * any changes though.
+     */
+    vaddr = (gctPOINTER)page_address(page);
+
+    reserved_vaddr = vaddr;
+    reserved_size  = size;
+
+    while (reserved_size > 0)
+    {
+        SetPageReserved(virt_to_page(reserved_vaddr));
+
+        reserved_vaddr += PAGE_SIZE;
+        reserved_size  -= PAGE_SIZE;
+    }
+
 // dkm: gcdENABLE_MEM_CACHE
 #if (1==gcdENABLE_MEM_CACHE)
     addr            = ioremap_cached(virt_to_phys(vaddr), size);
@@ -510,13 +536,6 @@ gckOS_AllocateNonPagedMemoryFromSystem(
     dma_cache_maint(vaddr, size, DMA_FROM_DEVICE);
 #endif
 
-    while (size > 0)
-    {
-        SetPageReserved(virt_to_page(vaddr));
-
-        vaddr   += PAGE_SIZE;
-        size    -= PAGE_SIZE;
-    }
 #endif
 
     if (addr == gcvNULL)
@@ -634,8 +653,7 @@ gckOS_AllocateNonPagedMemoryFromSystem(
 
 // dkm: gcdENABLE_MEM_CACHE
 #if (2==gcdENABLE_MEM_CACHE)
-        //mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
-        mdlMap->vma->vm_page_prot = pgprot_noncached(mdlMap->vma->vm_page_prot);
+        mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
 #elif (1==gcdENABLE_MEM_CACHE)
         // NULL
 #else
@@ -716,7 +734,6 @@ gckOS_AllocateNonPagedMemoryFromSystem(
     /* Success. */
     return gcvSTATUS_OK;
 }
-
 #endif
 
 /*******************************************************************************
@@ -823,10 +840,12 @@ gckOS_Construct(
     os->signal.currentID = 0;
 #endif
 
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     os->cacheSize = 0;
     os->cacheHead = gcvNULL;
     os->cacheTail = gcvNULL;
+    // dkm: add
     {
         int i = 0;
         gctPHYS_ADDR Physical;
@@ -911,6 +930,7 @@ gckOS_Destroy(
     /* Verify the arguments. */
     gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
 
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     _FreeAllNonPagedMemoryCache(Os);
 #endif
@@ -950,6 +970,14 @@ gckOS_Destroy(
         gcmkVERIFY_OK(
             gckHEAP_Destroy(heap));
     }
+    else
+    {
+        gcmkTRACE_ZONE(gcvLEVEL_ERROR,
+            gcvZONE_OS,
+            "Failed to destroy signal, it was not unmampped \n"
+            );
+        return gcvSTATUS_INVALID_ARGUMENT;
+    }
 
     /* Destroy the memory lock. */
     gcmkVERIFY_OK(
@@ -1022,7 +1050,7 @@ gckOS_Allocate(
 
 OnError:
     /* Return the status. */
-    /* gcmkFOOTER(); */
+    /*gcmkFOOTER();*/
     return status;
 }
 
@@ -1075,7 +1103,7 @@ gckOS_Free(
 
 OnError:
     /* Return the status. */
-    /* gcmkFOOTER(); */
+   /* gcmkFOOTER();*/
     return status;
 }
 
@@ -1379,6 +1407,7 @@ gckOS_MapMemory(
         }
 #else
 
+// dkm: gcdENABLE_MEM_CACHE
 #if (2==gcdENABLE_MEM_CACHE)
         mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
 #elif (1==gcdENABLE_MEM_CACHE)
@@ -1460,6 +1489,7 @@ gckOS_UnmapMemory(
     PLINUX_MDL_MAP          mdlMap;
     PLINUX_MDL              mdl = (PLINUX_MDL)Physical;
     struct task_struct *    task;
+    // dkm: add
     struct mm_struct *      mm;
 
     /* Verify the arguments. */
@@ -1499,6 +1529,7 @@ gckOS_UnmapMemory(
 
         /* Get the current pointer for the task with stored pid. */
         task = FIND_TASK_BY_PID(mdlMap->pid);
+        // dkm: add
         if(task) {
             mm = get_task_mm(task);
             put_task_struct(task);
@@ -1506,6 +1537,7 @@ gckOS_UnmapMemory(
             mm = gcvNULL;
         }
 
+        // dkm: modify
         if (mm)
         {
             down_write(&mm->mmap_sem);
@@ -1530,6 +1562,7 @@ gckOS_UnmapMemory(
     return gcvSTATUS_OK;
 }
 
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
 
 static gctBOOL
@@ -1788,7 +1821,8 @@ gckOS_AllocateNonPagedMemory(
 #ifdef NO_DMA_COHERENT
     struct page *   page;
     long            size, order;
-    gctPOINTER      vaddr;
+    gctPOINTER      vaddr, reserved_vaddr;
+    gctUINT32       reserved_size;
 #endif
 
     /* Verify the arguments. */
@@ -1821,6 +1855,7 @@ gckOS_AllocateNonPagedMemory(
     MEMORY_LOCK(Os);
 
 #ifndef NO_DMA_COHERENT
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     addr = _GetNonPagedMemoryCache(Os,
                 mdl->numPages * PAGE_SIZE,
@@ -1842,6 +1877,7 @@ gckOS_AllocateNonPagedMemory(
 #else
     size    = mdl->numPages * PAGE_SIZE;
     order   = get_order(size);
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     page = _GetNonPagedMemoryCache(Os, order);
 
@@ -1860,7 +1896,26 @@ gckOS_AllocateNonPagedMemory(
         return gcvSTATUS_OUT_OF_MEMORY;
     }
 
-    vaddr           = (gctPOINTER)page_address(page);
+    /* 
+     * On some system ioremap_nocache fails when 
+     * given a size of more than 1 page if all
+     * of the pages haven't been marked as reserved 
+     * first. Allocating a single page works without
+     * any changes though.
+     */
+    vaddr = (gctPOINTER)page_address(page);
+
+    reserved_vaddr = vaddr;
+    reserved_size  = size;
+
+    while (reserved_size > 0)
+    {
+        SetPageReserved(virt_to_page(reserved_vaddr));
+
+        reserved_vaddr += PAGE_SIZE;
+        reserved_size  -= PAGE_SIZE;
+    }
+
 // dkm: gcdENABLE_MEM_CACHE
 #if (1==gcdENABLE_MEM_CACHE)
     addr            = ioremap_cached(virt_to_phys(vaddr), size);
@@ -1874,13 +1929,6 @@ gckOS_AllocateNonPagedMemory(
     dma_cache_maint(vaddr, size, DMA_FROM_DEVICE);
 #endif
 
-    while (size > 0)
-    {
-        SetPageReserved(virt_to_page(vaddr));
-
-        vaddr   += PAGE_SIZE;
-        size    -= PAGE_SIZE;
-    }
 #endif
 
     if (addr == gcvNULL)
@@ -1998,8 +2046,7 @@ gckOS_AllocateNonPagedMemory(
 
 // dkm: gcdENABLE_MEM_CACHE
 #if (2==gcdENABLE_MEM_CACHE)
-        //mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
-        mdlMap->vma->vm_page_prot = pgprot_noncached(mdlMap->vma->vm_page_prot);
+        mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
 #elif (1==gcdENABLE_MEM_CACHE)
         // NULL
 #else
@@ -2115,6 +2162,7 @@ gceSTATUS gckOS_FreeNonPagedMemory(
     PLINUX_MDL              mdl;
     PLINUX_MDL_MAP          mdlMap;
     struct task_struct *    task;
+    // dkm: add
     struct mm_struct *      mm;
 
 #ifdef NO_DMA_COHERENT
@@ -2138,6 +2186,7 @@ gceSTATUS gckOS_FreeNonPagedMemory(
     MEMORY_LOCK(Os);
 
 #ifndef NO_DMA_COHERENT
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     if (!_AddNonPagedMemoryCache(Os,
                                  mdl->numPages * PAGE_SIZE,
@@ -2167,6 +2216,7 @@ gceSTATUS gckOS_FreeNonPagedMemory(
         size    -= PAGE_SIZE;
     }
 
+// add by vv
 #if gcdkUSE_NON_PAGED_MEMORY_CACHE
     if (!_AddNonPagedMemoryCache(Os,
                                  get_order(mdl->numPages * PAGE_SIZE),
@@ -2189,6 +2239,7 @@ gceSTATUS gckOS_FreeNonPagedMemory(
         {
             /* Get the current pointer for the task with stored pid. */
             task = FIND_TASK_BY_PID(mdlMap->pid);
+            // dkm: add
             if(task) {
                 mm = get_task_mm(task);
                 put_task_struct(task);
@@ -2196,6 +2247,7 @@ gceSTATUS gckOS_FreeNonPagedMemory(
                 mm = gcvNULL;
             }
 
+            // dkm: modify
             if (mm)
             {
                 down_write(&mm->mmap_sem);
@@ -2822,7 +2874,7 @@ gckOS_AcquireMutex(
             return gcvSTATUS_OK;
         }
 
-               if (Timeout-- == 0) break;
+        if (Timeout-- == 0) break;
 
         /* Wait for 1 millisecond. */
         gcmkVERIFY_OK(gckOS_Delay(Os, 1));
@@ -3197,7 +3249,7 @@ gckOS_Delay(
         /* Convert timeval to jiffies. */
         jiffies = timeval_to_jiffies(&now);
 
-       /* Schedule timeout. */
+        /* Schedule timeout. */
         schedule_timeout_interruptible(jiffies);
     }
 
@@ -3232,7 +3284,7 @@ gceSTATUS gckOS_MemoryBarrier(
     /* Verify thearguments. */
     gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
 
-    //mb();
+    // dkm: change to dsb from mb
     dsb();
 
     /* Success. */
@@ -3320,6 +3372,7 @@ gceSTATUS gckOS_AllocatePagedMemoryEx(
 
     if (Contiguous)
     {
+// dkm: PAGE_ALLOC_LIMIT
 #if PAGE_ALLOC_LIMIT
         if( (g_pages_alloced + numPages) > (256*PAGE_ALLOC_LIMIT_SIZE) ) {
             //printk("full %d! \n", g_pages_alloced);
@@ -3488,6 +3541,7 @@ gceSTATUS gckOS_FreePagedMemory(
     if (mdl->contiguous)
     {
         free_pages((unsigned long)mdl->addr, GetOrder(mdl->numPages));
+// dkm: PAGE_ALLOC_LIMIT
 #if PAGE_ALLOC_LIMIT
         g_pages_alloced -= mdl->numPages;
         //printk("free %d / %d \n", mdl->numPages, g_pages_alloced);
@@ -3654,6 +3708,8 @@ gceSTATUS gckOS_LockPages(
 
         mdlMap->vma->vm_flags |= VM_RESERVED;
         /* Make this mapping non-cached. */
+
+// dkm: gcdENABLE_MEM_CACHE
 #if (2==gcdENABLE_MEM_CACHE)
         mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot);
 #elif (1==gcdENABLE_MEM_CACHE)
@@ -3890,6 +3946,7 @@ gceSTATUS gckOS_UnlockPages(
     PLINUX_MDL_MAP          mdlMap;
     PLINUX_MDL              mdl = (PLINUX_MDL)Physical;
     struct task_struct *    task;
+    // dkm: add
     struct mm_struct *      mm;
 
     /* Verify the arguments. */
@@ -3914,6 +3971,7 @@ gceSTATUS gckOS_UnlockPages(
         {
             /* Get the current pointer for the task with stored pid. */
             task = FIND_TASK_BY_PID(mdlMap->pid);
+            // dkm: add
             if(task) {
                 mm = get_task_mm(task);
                 put_task_struct(task);
@@ -3921,6 +3979,7 @@ gceSTATUS gckOS_UnlockPages(
                 mm = gcvNULL;
             }
 
+            // dkm: modify
             if (mm)
             {
                 down_write(&mm->mmap_sem);
@@ -4521,6 +4580,7 @@ gckOS_UserSignal(
             /* Success. */
             status = gcvSTATUS_OK;
         }
+        // dkm: add
         put_task_struct(task);
     }
     else
@@ -4743,6 +4803,63 @@ gckOS_WaitSignal(
     return status;
 }
 
+/*******************************************************************************
+**
+**  gckOS_WaitSignalUninterruptible
+**
+**  Wait for a signal to become signaled uninterruptibly.
+**
+**  INPUT:
+**
+**      gckOS Os
+**          Pointer to an gckOS object.
+**
+**      gctSIGNAL Signal
+**          Pointer to the gctSIGNAL.
+**
+**      gctUINT32 Wait
+**          Number of milliseconds to wait.
+**          Pass the value of gcvINFINITE for an infinite wait.
+**
+**  OUTPUT:
+**
+**      Nothing.
+*/
+gceSTATUS
+gckOS_WaitSignalUninterruptible(
+    IN gckOS Os,
+    IN gctSIGNAL Signal,
+    IN gctUINT32 Wait
+    )
+{
+    gceSTATUS status;
+    gcsSIGNAL_PTR signal;
+    gctUINT timeout;
+    gctUINT rc;
+
+    gcmkHEADER_ARG("Os=0x%x Signal=0x%x Wait=%u", Os, Signal, Wait);
+
+    /* Verify the arguments. */
+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+    gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
+
+    signal = (gcsSIGNAL_PTR) Signal;
+
+    /* Convert wait to milliseconds. */
+    timeout = (Wait == gcvINFINITE) ? MAX_SCHEDULE_TIMEOUT : Wait*HZ/1000;
+
+    /* Linux bug ? */
+    if (!signal->manualReset && timeout == 0) timeout = 1;
+
+    rc = wait_for_completion_timeout(&signal->event, timeout);
+    status = ((rc == 0) && !signal->event.done) ? gcvSTATUS_TIMEOUT
+                                                : gcvSTATUS_OK;
+
+    /* Return status. */
+    gcmkFOOTER();
+    return status;
+}
+
 /*******************************************************************************
 **
 **  gckOS_MapSignal
@@ -5370,7 +5487,7 @@ gckOS_DestroyAllUserSignals(
         if (Os->signal.table[signal] != gcvNULL &&
             ((gcsSIGNAL_PTR)Os->signal.table[signal])->process == (gctHANDLE) current->tgid)
         {
-                       gckOS_Signal(Os, Os->signal.table[signal], gcvTRUE);
+            gckOS_Signal(Os, Os->signal.table[signal], gcvTRUE);
 
             gckOS_DestroySignal(Os, Os->signal.table[signal]);
 
@@ -5987,7 +6104,7 @@ gckOS_ZeroMemory(
 MEMORY_RECORD_PTR
 CreateMemoryRecord(
     gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
     MEMORY_RECORD_PTR List,
     gceMEMORY_TYPE Type,
        gctSIZE_T Bytes,
@@ -6124,11 +6241,12 @@ CreateVideoMemoryRecord(
 void
 DestroyVideoMemoryRecord(
     gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
     MEMORY_RECORD_PTR Mr
     )
 {
-       gcmkASSERT(Mr->type == gcvVIDEO_MEMORY);
+    gcmkASSERT(Mr->type == gcvVIDEO_MEMORY);
+
     MEMORY_LOCK(Os);
 
 #if gcdkREPORT_VIDMEM_USAGE
@@ -6178,15 +6296,33 @@ FindVideoMemoryRecord(
 void
 FreeAllMemoryRecord(
     gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
     MEMORY_RECORD_PTR List
     )
 {
     MEMORY_RECORD_PTR mr;
     gctUINT i = 0;
 
-    MEMORY_LOCK(Os);
+#if gcdkREPORT_VIDMEM_USAGE
+    gctUINT type;
 
+    printk("------------------------------------\n");
+    printk("   Type         Current          Max\n");
+
+    for (type = 0; type < gcvSURF_NUM_TYPES; type++)
+    {
+        printk("[%8s]  %8llu KB  %8llu KB\n", 
+               _MemTypes[type],
+               private->allocatedMem[type] / 1024,
+               private->maxAllocatedMem[type] / 1024);
+    }
+
+    printk("[   TOTAL]  %8llu KB  %8llu KB\n",
+           private->totalAllocatedMem / 1024,
+           private->maxTotalAllocatedMem / 1024);
+#endif
+
+    MEMORY_LOCK(Os);
 
     while (List->next != List)
     {
@@ -6256,7 +6392,6 @@ FreeAllMemoryRecord(
             break;
         }
 
-
         kfree(mr);
 
         MEMORY_LOCK(Os);
@@ -6303,6 +6438,7 @@ gckOS_CacheFlush(
     IN gctSIZE_T Bytes
     )
 {
+// dkm: gcdENABLE_MEM_CACHE
 #if (1==gcdENABLE_MEM_CACHE)
     dmac_clean_range(Logical, Logical+Bytes);
 #elif (2==gcdENABLE_MEM_CACHE)
@@ -6341,6 +6477,7 @@ gckOS_CacheInvalidate(
     IN gctSIZE_T Bytes
     )
 {
+// dkm: gcdENABLE_MEM_CACHE
 #if (1==gcdENABLE_MEM_CACHE)
     dmac_flush_range(Logical, Logical+Bytes);
 #elif (2==gcdENABLE_MEM_CACHE)
@@ -6445,9 +6582,9 @@ gckOS_Broadcast(
         break;
 
     case gcvBROADCAST_GPU_STUCK:
-               gcmkONERROR(gckHARDWARE_GetIdle(Hardware, gcvFALSE, &idle));
+        gcmkONERROR(gckHARDWARE_GetIdle(Hardware, gcvFALSE, &idle));
         gcmkONERROR(gckOS_ReadRegister(Os, 0x00C, &axi));
-               gcmkONERROR(gckOS_ReadRegister(Os, 0x664, &dma));
+        gcmkONERROR(gckOS_ReadRegister(Os, 0x664, &dma));
         gcmkPRINT("!!FATAL!! GPU Stuck");
         gcmkPRINT("  idle=0x%08X axi=0x%08X cmd=0x%08X", idle, axi, dma);
 
@@ -6474,7 +6611,7 @@ gckOS_Broadcast(
         {
             gcmkONERROR(gckOS_WriteRegister(Os, 0x470, i << 16));
             gcmkPRINT("%d: Write 0x%08X to DebugControl0(0x470)", i, i << 16);
-
+            
             gcmkONERROR(gckOS_ReadRegister(Os, 0x454, &debugSignalsPe));
             gcmkPRINT("%d: debugSignalsPe(0x454)=0x%08X", i, debugSignalsPe);
 
@@ -6485,7 +6622,7 @@ gckOS_Broadcast(
         {
             gcmkONERROR(gckOS_WriteRegister(Os, 0x478, i));
             gcmkPRINT("%d: Write 0x%08X to DebugControl2(0x478)", i, i);
-
+            
             gcmkONERROR(gckOS_ReadRegister(Os, 0x468, &debugSignalsMc));
             gcmkPRINT("%d: debugSignalsMc(0x468)=0x%08X", i, debugSignalsMc);
 
@@ -6807,6 +6944,7 @@ gckOS_GetThreadID(
 **
 **      Nothing.
 */
+// dkm: modify
 gceSTATUS
 gckOS_SetGPUPower(
     IN gckOS Os,
index 5428259de8d190fa289f485f370672f8d8b50a5a..aef1b69600f29ef47c3f06a56d8c1455bfafc7e5 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
+*  
 *    Copyright (C) 2005 - 2011 by Vivante Corp.
-*
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -72,11 +72,11 @@ gceSTATUS
 gckOS_DestroyAllUserSignals(
      IN gckOS Os
      );
-
+       
 #ifdef gcdkUSE_MEMORY_RECORD
 MEMORY_RECORD_PTR
 CreateMemoryRecord(
-gckOS Os,
+    gckOS Os,
     gcsHAL_PRIVATE_DATA_PTR private,
     MEMORY_RECORD_PTR List,
     gceMEMORY_TYPE Type,
@@ -106,7 +106,7 @@ FindMemoryRecord(
 MEMORY_RECORD_PTR
 CreateVideoMemoryRecord(
        gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
        MEMORY_RECORD_PTR List,
        gcuVIDMEM_NODE_PTR Node,
        gceSURF_TYPE Type,
@@ -116,25 +116,24 @@ CreateVideoMemoryRecord(
 void
 DestroyVideoMemoryRecord(
        gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
        MEMORY_RECORD_PTR Mr
        );
-
+       
 MEMORY_RECORD_PTR
 FindVideoMemoryRecord(
        gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
        MEMORY_RECORD_PTR List,
        gcuVIDMEM_NODE_PTR Node
        );
-
-void
+       
+void 
 FreeAllMemoryRecord(
        gckOS Os,
-       gcsHAL_PRIVATE_DATA_PTR private,
+    gcsHAL_PRIVATE_DATA_PTR private,
        MEMORY_RECORD_PTR List
        );
 #endif
-
+       
 #endif /* __gc_hal_kernel_os_h_ */
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/inc/gc_hal_common_qnx.h b/drivers/staging/rk29/vivante/hal/os/qnx/inc/gc_hal_common_qnx.h
deleted file mode 100644 (file)
index 0f514b2..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-/*
- * gc_hal_common_qnx.h
- *
- *  Created on: Jul 7, 2010
- *      Author: tarang
- */
-
-#ifndef GC_HAL_COMMON_QNX_H_
-#define GC_HAL_COMMON_QNX_H_
-
-/******************************************************************************\
-******************************* QNX Control Codes ******************************
-\******************************************************************************/
-#ifndef _IOMGR_VIVANTE
-#define _IOMGR_VIVANTE                                         (_IOMGR_PRIVATE_BASE + 0x301)
-#endif
-
-/*******************************************************************************
-**     Signal management.
-**
-**     Is much simpler in Neutrino versus Linux :-)
-**
-**     Neutrino pulses are equivalent to RT signals (queued, small payload) except
-**     they are explicitly received on a channel. We therefore dedicate a thread
-**     to handle them.
-**
-**     We don't use RT signals because:
-**     1. They can be delivered on any thread.
-**     2. We don't support SA_RESTART so blocking kernel calls can fail. It would be
-**        impossible to robustly handle this condition in all libraries.
-**
-**     Only downside is that more information needs to be passed between client/server
-**     (signals require only PID, pulses require connection ID and receive ID).
-*/
-
-typedef struct _gcsSIGNAL
-{
-       /* Pointer to gcoOS object. */
-       gcoOS                   os;
-
-       /* Signaled state. */
-       gctBOOL                 state;
-
-       /* Manual reset flag. */
-       gctBOOL                 manual;
-
-       /* Mutex. */
-       pthread_mutex_t mutex;
-
-       /* Condition. */
-       pthread_cond_t  condition;
-
-       /* Number of signals pending in the command queue. */
-       gctINT                  pending;
-
-       /* Number of signals received. */
-       gctINT                  received;
-}
-gcsSIGNAL;
-
-#endif /* GC_HAL_COMMON_QNX_H_ */
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_debug.c b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_debug.c
deleted file mode 100644 (file)
index c382c12..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#include "gc_hal_kernel_qnx.h"
-#include <stdarg.h>
-
-/*
-       gcdBUFFERED_OUTPUT
-
-       When set to non-zero, all output is collected into a buffer with the
-       specified size.  Once the buffer gets full, or the token "$$FLUSH$$" has
-       been received, the debug buffer will be printed to the console.
-*/
-#define gcdBUFFERED_OUTPUT     0
-
-/******************************************************************************\
-******************************** Debug Variables *******************************
-\******************************************************************************/
-
-static gceSTATUS _lastError  = gcvSTATUS_OK;
-static gctUINT32 _debugLevel = gcvLEVEL_ERROR;
-static gctUINT32 _debugZones = gcvZONE_NONE;
-static gctINT    _indent     = 0;
-
-static void
-OutputDebugString(
-       IN gctCONST_STRING String
-       )
-{
-#if gcdBUFFERED_OUTPUT
-       static gctCHAR outputBuffer[gcdBUFFERED_OUTPUT];
-       static gctINT outputBufferIndex = 0;
-       gctINT n, i;
-
-       n = (String != gcvNULL) ? strlen(String) + 1 : 0;
-
-       if ((n == 0) || (outputBufferIndex + n > gcmSIZEOF(outputBuffer)))
-       {
-               for (i = 0; i < outputBufferIndex; i += strlen(outputBuffer + i) + 1)
-               {
-                       printf(outputBuffer + i);
-               }
-
-               outputBufferIndex = 0;
-       }
-
-       if (n > 0)
-       {
-               memcpy(outputBuffer + outputBufferIndex, String, n);
-               outputBufferIndex += n;
-       }
-#else
-       if (String != gcvNULL)
-       {
-               printf(String);
-       }
-#endif
-}
-
-static void
-_Print(
-       IN gctCONST_STRING Message,
-       IN va_list Arguments
-       )
-{
-       char buffer[1024];
-       int i, n;
-
-       if (strcmp(Message, "$$FLUSH$$") == 0)
-       {
-               OutputDebugString(gcvNULL);
-               return;
-       }
-
-       if (strncmp(Message, "--", 2) == 0)
-       {
-               if (_indent == 0)
-               {
-                       printf("ERROR: _indent=0\n");
-               }
-
-               _indent -= 2;
-       }
-
-       for (i = 0; i < _indent; ++i)
-       {
-               buffer[i] = ' ';
-       }
-
-       /* Print message to buffer. */
-       n = vsnprintf(buffer + i, sizeof(buffer) - i, Message, Arguments);
-       if ((n <= 0) || (buffer[i + n - 1] != '\n'))
-       {
-               /* Append new-line. */
-               strncat(buffer, "\n", sizeof(buffer));
-       }
-
-       /* Output to debugger. */
-       OutputDebugString(buffer);
-
-       if (strncmp(Message, "++", 2) == 0)
-       {
-               _indent += 2;
-       }
-}
-
-/******************************************************************************\
-********************************* Debug Macros *********************************
-\******************************************************************************/
-
-#define _DEBUGPRINT(Message) \
-{ \
-       va_list arguments; \
-       \
-       va_start(arguments, Message); \
-       _Print(Message, arguments); \
-       va_end(arguments); \
-}
-
-/******************************************************************************\
-********************************** Debug Code **********************************
-\******************************************************************************/
-
-/*******************************************************************************
-**
-**     gckOS_Print
-**
-**     Send a message to the debugger.
-**
-**     INPUT:
-**
-**             gctCONST_STRING Message
-**                     Pointer to message.
-**
-**             ...
-**                     Optional arguments.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_Print(
-       IN gctCONST_STRING Message,
-       ...
-       )
-{
-       _DEBUGPRINT(Message);
-}
-
-/*******************************************************************************
-**
-**     gckOS_DebugTrace
-**
-**     Send a leveled message to the debugger.
-**
-**     INPUT:
-**
-**             gctUINT32 Level
-**                     Debug level of message.
-**
-**             gctCONST_STRING Message
-**                     Pointer to message.
-**
-**             ...
-**                     Optional arguments.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_DebugTrace(
-       IN gctUINT32 Level,
-       IN gctCONST_STRING Message,
-       ...
-       )
-{
-       if (Level > _debugLevel)
-       {
-               return;
-       }
-
-       _DEBUGPRINT(Message);
-}
-
-/*******************************************************************************
-**
-**     gckOS_DebugTraceZone
-**
-**     Send a leveled and zoned message to the debugger.
-**
-**     INPUT:
-**
-**             gctUINT32 Level
-**                     Debug level for message.
-**
-**             gctUINT32 Zone
-**                     Debug zone for message.
-**
-**             gctCONST_STRING Message
-**                     Pointer to message.
-**
-**             ...
-**                     Optional arguments.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_DebugTraceZone(
-       IN gctUINT32 Level,
-       IN gctUINT32 Zone,
-       IN gctCONST_STRING Message,
-       ...
-       )
-{
-       if ((Level > _debugLevel) || !(Zone & _debugZones))
-       {
-               return;
-       }
-
-       _DEBUGPRINT(Message);
-}
-
-/*******************************************************************************
-**
-**     gckOS_DebugBreak
-**
-**     Break into the debugger.
-**
-**     INPUT:
-**
-**             Nothing.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-void
-gckOS_DebugBreak(
-       void
-       )
-{
-       gckOS_DebugTrace(gcvLEVEL_ERROR, "gckOS_DebugBreak");
-}
-
-/*******************************************************************************
-**
-**     gckOS_DebugFatal
-**
-**     Send a message to the debugger and break into the debugger.
-**
-**     INPUT:
-**
-**             gctCONST_STRING Message
-**                     Pointer to message.
-**
-**             ...
-**                     Optional arguments.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-void
-gckOS_DebugFatal(
-       IN gctCONST_STRING Message,
-       ...
-       )
-{
-       _DEBUGPRINT(Message);
-
-       /* Break into the debugger. */
-       gckOS_DebugBreak();
-}
-
-/*******************************************************************************
-**
-**     gckOS_SetDebugLevel
-**
-**     Set the debug level.
-**
-**     INPUT:
-**
-**             gctUINT32 Level
-**                     New debug level.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_SetDebugLevel(
-       IN gctUINT32 Level
-       )
-{
-       _debugLevel = Level;
-}
-
-/*******************************************************************************
-**
-**     gckOS_SetDebugZone
-**
-**     Set the debug zone.
-**
-**     INPUT:
-**
-**             gctUINT32 Zone
-**                     New debug zone.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-void
-gckOS_SetDebugZone(
-       IN gctUINT32 Zone
-       )
-{
-       _debugZones = Zone;
-}
-
-/*******************************************************************************
-**
-**     gckOS_SetDebugLevelZone
-**
-**     Set the debug level and zone.
-**
-**     INPUT:
-**
-**             gctUINT32 Level
-**                     New debug level.
-**
-**             gctUINT32 Zone
-**                     New debug zone.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_SetDebugLevelZone(
-       IN gctUINT32 Level,
-       IN gctUINT32 Zone
-       )
-{
-       _debugLevel = Level;
-       _debugZones = Zone;
-}
-
-/*******************************************************************************
-**
-**     gckOS_SetDebugZones
-**
-**     Enable or disable debug zones.
-**
-**     INPUT:
-**
-**             gctUINT32 Zones
-**                     Debug zones to enable or disable.
-**
-**             gctBOOL Enable
-**                     Set to gcvTRUE to enable the zones (or the Zones with the current
-**                     zones) or gcvFALSE to disable the specified Zones.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_SetDebugZones(
-       IN gctUINT32 Zones,
-       IN gctBOOL Enable
-       )
-{
-       if (Enable)
-       {
-               /* Enable the zones. */
-               _debugZones |= Zones;
-       }
-       else
-       {
-               /* Disable the zones. */
-               _debugZones &= ~Zones;
-       }
-}
-
-/*******************************************************************************
-**
-**     gckOS_Verify
-**
-**     Called to verify the result of a function call.
-**
-**     INPUT:
-**
-**             gceSTATUS Status
-**                     Function call result.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-
-void
-gckOS_Verify(
-       IN gceSTATUS Status
-       )
-{
-       _lastError = Status;
-}
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.c b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.c
deleted file mode 100644 (file)
index 80f0818..0000000
+++ /dev/null
@@ -1,812 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-
-#include "gc_hal_kernel_qnx.h"
-#include <sys/mman.h>
-#include <sys/siginfo.h>
-
-#define _GC_OBJ_ZONE   gcvZONE_DEVICE
-
-/******************************************************************************\
-******************************** gckGALDEVICE Code *******************************
-\******************************************************************************/
-
-gceSTATUS
-gckGALDEVICE_AllocateMemory(
-       IN gckGALDEVICE Device,
-       IN gctSIZE_T Bytes,
-    OUT gctPOINTER *Logical,
-    OUT gctPHYS_ADDR *Physical,
-    OUT gctUINT32 *PhysAddr
-       )
-{
-       gceSTATUS status;
-
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-       gcmkVERIFY_ARGUMENT(Logical != NULL);
-       gcmkVERIFY_ARGUMENT(Physical != NULL);
-       gcmkVERIFY_ARGUMENT(PhysAddr != NULL);
-
-       status = gckOS_AllocateContiguous(Device->os,
-                                         gcvFALSE,
-                                         &Bytes,
-                                         Physical,
-                                         Logical);
-
-       if (gcmIS_ERROR(status))
-       {
-               gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
-                                  "gckGALDEVICE_AllocateMemory: error status->0x%x",
-                                  status);
-
-               return status;
-       }
-
-       *PhysAddr = (gctUINT32)(*(off_t*) Physical) - Device->baseAddress;
-       gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                          "gckGALDEVICE_AllocateMemory: phys_addr->0x%x phsical->0x%x Logical->0x%x",
-                          (gctUINT32)*Physical,
-                                  (gctUINT32)*PhysAddr,
-                                  (gctUINT32)*Logical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckGALDEVICE_FreeMemory(
-       IN gckGALDEVICE Device,
-       IN gctPOINTER Logical,
-       IN gctPHYS_ADDR Physical)
-{
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-
-    return gckOS_FreeContiguous(Device->os,
-                                                               Physical,
-                                                               Logical,
-                                                               0);
-}
-
-/* TODO. fix global sigevent to be part of device. */
-struct sigevent irqEvent;
-
-const struct sigevent* isrRoutine(void* arg, int id)
-{
-    gckGALDEVICE device = (gckGALDEVICE)arg;
-
-       /* Call kernel interrupt notification. */
-    if (gckKERNEL_Notify(device->kernel,
-                                                gcvNOTIFY_INTERRUPT,
-                                                gcvTRUE) == gcvSTATUS_OK)
-    {
-               InterruptUnmask(device->irqLine, device->irqId);
-
-               return &irqEvent;
-    }
-
-    return gcvNULL;
-}
-
-static void* threadRoutine(void *ctxt)
-{
-    gckGALDEVICE device = (gckGALDEVICE) ctxt;
-
-       gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                               "Starting ISR Thread with irq:%d\n",
-                               device->irqLine);
-
-       SIGEV_INTR_INIT(&irqEvent);
-
-       /* Obtain I/O privileges */
-       ThreadCtl( _NTO_TCTL_IO, 0 );
-
-       device->irqId = InterruptAttach(device->irqLine,
-                                                                       isrRoutine,
-                                                                       (void*)device,
-                                                                       gcmSIZEOF(struct _gckGALDEVICE),
-                                                                       0);
-
-       gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                               gcvZONE_DRIVER,
-                               "irqId:%d\n",
-                               device->irqId);
-
-       if (device->irqId < 0) {
-               gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                               gcvZONE_DRIVER,
-               "[galcore] gckGALDEVICE_Setup_ISR: "
-                               "Could not register irq line->%d\n",
-                               device->irqLine);
-
-               device->isrInitialized = gcvFALSE;
-
-               return (void *)1;
-       }
-
-       printf("[Interrupt] Attached irqLine %d with id %d.\n",
-               device->irqLine, device->irqId);
-
-       device->isrInitialized = gcvTRUE;
-
-       while (1)
-       {
-               if (InterruptWait(0, NULL) == -1)
-               {
-                       printf("[Interrupt] IST exiting\n");
-                       /* Either something is wrong or the thread got canceled */
-                       InterruptUnmask(device->irqLine, device->irqId);
-                       pthread_exit(NULL);
-               }
-
-               gckKERNEL_Notify(device->kernel, gcvNOTIFY_INTERRUPT, gcvFALSE);
-    }
-
-    return (void *)0;
-}
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Setup_ISR
-**
-**     Start the ISR routine.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             gcvSTATUS_OK
-**                     Setup successfully.
-**             gcvSTATUS_GENERIC_IO
-**                     Setup failed.
-*/
-gceSTATUS
-gckGALDEVICE_Setup_ISR(
-       IN gckGALDEVICE Device
-       )
-{
-       return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Release_ISR
-**
-**     Release the irq line.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckGALDEVICE_Release_ISR(
-       IN gckGALDEVICE Device
-       )
-{
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-
-       return gcvSTATUS_OK;
-}
-
-
-int
-gsl_free_interrupts()
-{
-
-       return 0;
-}
-/*******************************************************************************
-**
-**     gckGALDEVICE_Start_Thread
-**
-**     Start the daemon thread.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             gcvSTATUS_OK
-**                     Start successfully.
-**             gcvSTATUS_GENERIC_IO
-**                     Start failed.
-*/
-gceSTATUS
-gckGALDEVICE_Start_Thread(
-       IN gckGALDEVICE Device
-       )
-{
-       pthread_attr_t attr;
-       struct sched_param sched;
-       gctINT ret;
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-
-       gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                                 gcvZONE_DRIVER,
-                                 "[galcore] gckGALDEVICE_Start_Thread: Creating threadRoutine\n");
-
-       pthread_attr_init(&attr);
-       pthread_attr_getschedparam(&attr, &sched);
-       sched.sched_priority += 10;
-       pthread_attr_setschedparam(&attr, &sched);
-       pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
-
-       /* Start the interrupt service thread */
-       if ((ret = pthread_create(&Device->threadCtxt, &attr, threadRoutine, Device)) != 0)
-       {
-               gcmkTRACE_ZONE(gcvLEVEL_ERROR,
-                                         gcvZONE_DRIVER,
-                                         "[galcore] gckGALDEVICE_Start_Thread: Failed with code %d\n",
-                                         ret);
-
-               return gcvSTATUS_OUT_OF_RESOURCES;
-       }
-
-       pthread_setname_np(Device->threadCtxt, "galcore-IST");
-
-       Device->threadInitialized = gcvTRUE;
-       gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                                       gcvZONE_DRIVER,
-                                       "[galcore] gckGALDEVICE_Start_Thread: "
-                                       "Start the daemon thread.\n");
-
-       return gcvSTATUS_OK;
-}
-
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Stop_Thread
-**
-**     Stop the gal device, including the following actions: stop the daemon
-**     thread, release the irq.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckGALDEVICE_Stop_Thread(
-       gckGALDEVICE Device
-       )
-{
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-
-       /* stop the thread */
-       if (Device->threadInitialized)
-       {
-               InterruptDetach(Device->irqId);
-               Device->irqId = 0;
-               ConnectDetach(Device->coid);
-               Device->coid = 0;
-               ChannelDestroy(Device->chid);
-               Device->chid = 0;
-
-               pthread_cancel(Device->threadCtxt);
-               pthread_join(Device->threadCtxt, NULL);
-               Device->threadCtxt = 0;
-
-               Device->threadInitialized = gcvFALSE;
-               Device->isrInitialized = gcvFALSE;
-       }
-
-       return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Start
-**
-**     Start the gal device, including the following actions: setup the isr routine
-**  and start the daemon thread.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             gcvSTATUS_OK
-**                     Start successfully.
-*/
-gceSTATUS
-gckGALDEVICE_Start(
-       IN gckGALDEVICE Device
-       )
-{
-       gceSTATUS ret;
-       /* Start the daemon thread. */
-       gcmkVERIFY_OK((ret = gckGALDEVICE_Start_Thread(Device)));
-
-       return ret;
-}
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Stop
-**
-**     Stop the gal device, including the following actions: stop the daemon
-**     thread, release the irq.
-**
-**     INPUT:
-**
-**             gckGALDEVICE Device
-**                     Pointer to an gckGALDEVICE object.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckGALDEVICE_Stop(
-    gckGALDEVICE Device
-    )
-{
-    gcmkVERIFY_ARGUMENT(Device != NULL);
-
-    if (Device->threadInitialized)
-    {
-       gckGALDEVICE_Stop_Thread(Device);
-    }
-
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckGALDEVICE_Construct
-**
-**  Constructor.
-**
-**  INPUT:
-**
-**  OUTPUT:
-**
-**     gckGALDEVICE * Device
-**         Pointer to a variable receiving the gckGALDEVICE object pointer on
-**         success.
-*/
-gceSTATUS
-gckGALDEVICE_Construct(
-    IN gctINT IrqLine,
-    IN gctUINT32 RegisterMemBase,
-    IN gctSIZE_T RegisterMemSize,
-    IN gctUINT32 ContiguousBase,
-    IN gctSIZE_T ContiguousSize,
-    IN gctSIZE_T BankSize,
-    IN gctINT FastClear,
-       IN gctINT Compression,
-       IN gctUINT32 BaseAddress,
-    OUT gckGALDEVICE *Device
-    )
-{
-    gctUINT32 internalBaseAddress, internalAlignment;
-    gctUINT32 externalBaseAddress, externalAlignment;
-    gctUINT32 horizontalTileSize, verticalTileSize;
-    gctUINT32 physAddr;
-    gctUINT32 physical;
-    gckGALDEVICE device;
-    gceSTATUS status;
-
-    gcmkTRACE(gcvLEVEL_VERBOSE, "[galcore] Enter gckGALDEVICE_Construct\n");
-
-    /* Allocate device structure. */
-    device = calloc(1, sizeof(struct _gckGALDEVICE));
-    if (!device)
-    {
-       gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
-                     "[galcore] gckGALDEVICE_Construct: Can't allocate memory.\n");
-
-       return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    physical = RegisterMemBase;
-
-    /* Set up register memory region */
-    if (physical != 0)
-    {
-       /* Request a region. */
-               device->registerBase = (gctPOINTER)mmap_device_io(RegisterMemSize, RegisterMemBase);
-
-        if ((uintptr_t)device->registerBase == MAP_DEVICE_FAILED)
-               {
-           gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                         "[galcore] gckGALDEVICE_Construct: Unable to map location->0x%lX for size->%ld\n",
-                                         RegisterMemBase,
-                                         RegisterMemSize);
-
-           return gcvSTATUS_OUT_OF_RESOURCES;
-        }
-
-       physical += RegisterMemSize;
-
-               gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                                       gcvZONE_DRIVER,
-                               "[galcore] gckGALDEVICE_Construct: "
-                                       "RegisterBase after mapping Address->0x%x is 0x%x\n",
-                               (gctUINT32)RegisterMemBase,
-                                       (gctUINT32)device->registerBase);
-    }
-
-       /* construct the gckOS object */
-       device->baseAddress = BaseAddress;
-       gcmkONERROR(
-                       gckOS_Construct(device, &device->os));
-
-    /* construct the gckKERNEL object. */
-       gcmkONERROR(
-                       gckKERNEL_Construct(device->os, device, &device->kernel));
-
-       gcmkONERROR(
-                       gckHARDWARE_SetFastClear(device->kernel->hardware,
-                                                                         FastClear,
-                                                                                 Compression));
-
-    /* query the ceiling of the system memory */
-       gcmkONERROR(
-                       gckHARDWARE_QuerySystemMemory(device->kernel->hardware,
-                                       &device->systemMemorySize,
-                    &device->systemMemoryBaseAddress));
-
-       gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                                       gcvZONE_DRIVER,
-                                       "[galcore] gckGALDEVICE_Construct: "
-                               "Will be trying to allocate contiguous memory of 0x%x bytes\n",
-                               (gctUINT32)device->systemMemoryBaseAddress);
-
-#if COMMAND_PROCESSOR_VERSION == 1
-    /* start the command queue */
-    gcmkVERIFY_OK(gckCOMMAND_Start(device->kernel->command));
-#endif
-
-    /* initialize the thread daemon */
-       memset(&device->isrLock, 0, sizeof(device->isrLock));
-
-       device->threadInitialized = gcvFALSE;
-       device->killThread = gcvFALSE;
-
-       /* initialize the isr */
-       device->isrInitialized = gcvFALSE;
-       device->dataReady = gcvFALSE;
-       device->irqLine = IrqLine;
-
-       /* query the amount of video memory */
-    gcmkVERIFY_OK(gckHARDWARE_QueryMemory(device->kernel->hardware,
-                    &device->internalSize,
-                    &internalBaseAddress,
-                    &internalAlignment,
-                    &device->externalSize,
-                    &externalBaseAddress,
-                    &externalAlignment,
-                    &horizontalTileSize,
-                    &verticalTileSize));
-
-       /* set up the internal memory region */
-    if (device->internalSize > 0)
-    {
-        gceSTATUS status = gckVIDMEM_Construct(device->os,
-                    internalBaseAddress,
-                    device->internalSize,
-                    internalAlignment,
-                    0,
-                    &device->internalVidMem);
-
-        if (gcmIS_ERROR(status))
-        {
-            /* error, remove internal heap */
-            device->internalSize = 0;
-        }
-        else
-        {
-            /* map internal memory */
-            device->internalPhysical  = (gctPHYS_ADDR)physical;
-                       device->internalLogical = (gctPOINTER)mmap_device_io(device->internalSize, physical);
-
-            gcmkASSERT(device->internalLogical != NULL);
-
-                       physical += device->internalSize;
-        }
-    }
-
-    if (device->externalSize > 0)
-    {
-        /* create the external memory heap */
-        gceSTATUS status = gckVIDMEM_Construct(device->os,
-                                       externalBaseAddress,
-                                       device->externalSize,
-                                       externalAlignment,
-                                       0,
-                                       &device->externalVidMem);
-
-        if (gcmIS_ERROR(status))
-        {
-            /* error, remove internal heap */
-            device->externalSize = 0;
-        }
-        else
-        {
-            /* map internal memory */
-            device->externalPhysical = (gctPHYS_ADDR)physical;
-                       device->externalLogical = (gctPOINTER)mmap_device_io(device->externalSize, physical);
-
-                       gcmkASSERT(device->externalLogical != NULL);
-
-                       physical += device->externalSize;
-        }
-    }
-
-       /* set up the contiguous memory */
-    device->contiguousSize = ContiguousSize;
-
-       if (ContiguousBase == 0)
-       {
-               status = gcvSTATUS_OUT_OF_MEMORY;
-
-               while (device->contiguousSize > 0)
-               {
-                       gcmkTRACE_ZONE(
-                               gcvLEVEL_INFO, gcvZONE_DRIVER,
-                               "[galcore] gckGALDEVICE_Construct: Will be trying to allocate contiguous memory of %ld bytes\n",
-                               device->contiguousSize
-                               );
-
-                       /* allocate contiguous memory */
-                       status = gckGALDEVICE_AllocateMemory(
-                               device,
-                               device->contiguousSize,
-                               &device->contiguousBase,
-                               &device->contiguousPhysical,
-                               &physAddr
-                               );
-
-                       if (gcmIS_SUCCESS(status))
-                       {
-                       gcmkTRACE_ZONE(
-                                       gcvLEVEL_INFO, gcvZONE_DRIVER,
-                                       "[galcore] gckGALDEVICE_Construct: Contiguous allocated size->0x%08X Virt->0x%08lX physAddr->0x%08X\n",
-                                       device->contiguousSize,
-                                       device->contiguousBase,
-                                       physAddr
-                                       );
-
-                               status = gckVIDMEM_Construct(
-                                       device->os,
-                                       physAddr | device->systemMemoryBaseAddress,
-                                       device->contiguousSize,
-                                       64,
-                                       BankSize,
-                                       &device->contiguousVidMem
-                                       );
-
-                               if (gcmIS_SUCCESS(status))
-                               {
-                                       device->contiguousMapped = gcvFALSE;
-
-                                       /* success, abort loop */
-                                       gcmkTRACE_ZONE(
-                                               gcvLEVEL_INFO, gcvZONE_DRIVER,
-                                               "Using %u bytes of contiguous memory.\n",
-                                               device->contiguousSize
-                                               );
-
-                                       break;
-                               }
-
-                               gcmkVERIFY_OK(gckGALDEVICE_FreeMemory(
-                                       device,
-                                       device->contiguousBase,
-                                       device->contiguousPhysical
-                                       ));
-
-                               device->contiguousBase = NULL;
-                       }
-
-                       device->contiguousSize -= (4 << 20);
-               }
-       }
-       else
-       {
-               /* Create the contiguous memory heap. */
-               status = gckVIDMEM_Construct(
-                       device->os,
-                       (ContiguousBase - device->baseAddress) | device->systemMemoryBaseAddress,
-                       ContiguousSize,
-                       64,
-                       BankSize,
-                       &device->contiguousVidMem
-                       );
-
-               if (gcmIS_ERROR(status))
-               {
-                       /* Error, roll back. */
-                       device->contiguousVidMem = gcvNULL;
-                       device->contiguousSize   = 0;
-               }
-               else
-               {
-                       /* Map the contiguous memory. */
-                       device->contiguousPhysical = (gctPHYS_ADDR) ContiguousBase;
-                       device->contiguousSize     = ContiguousSize;
-                       device->contiguousBase     = (gctPOINTER) mmap_device_io(ContiguousSize, ContiguousBase);
-                       device->contiguousMapped   = gcvTRUE;
-
-                       if (device->contiguousBase == gcvNULL)
-                       {
-                       /* Error, roll back. */
-                               gcmkVERIFY_OK(gckVIDMEM_Destroy(device->contiguousVidMem));
-                               device->contiguousVidMem = gcvNULL;
-                               device->contiguousSize   = 0;
-
-                               status = gcvSTATUS_OUT_OF_RESOURCES;
-                       }
-               }
-       }
-
-    *Device = device;
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                 "[galcore] gckGALDEVICE_Construct: Initialized device->0x%x contiguous->%lu @ 0x%x (0x%08X)\n",
-                                 device,
-                                 device->contiguousSize,
-                                 device->contiguousBase,
-                                 device->contiguousPhysical);
-
-    return gcvSTATUS_OK;
-OnError:
-       /* Roll back. */
-
-       /* Destroy the gckKERNEL object. */
-       if ( Device != gcvNULL)
-       {
-               gcmkVERIFY_OK(gckGALDEVICE_Destroy(*Device));
-       }
-
-       /* Return the status. */
-       return status;
-}
-
-/*******************************************************************************
-**
-**     gckGALDEVICE_Destroy
-**
-**     Class destructor.
-**
-**     INPUT:
-**
-**             Nothing.
-**
-**     OUTPUT:
-**
-**             Nothing.
-**
-**     RETURNS:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckGALDEVICE_Destroy(
-       gckGALDEVICE Device)
-{
-       gcmkVERIFY_ARGUMENT(Device != NULL);
-
-    gcmkTRACE(gcvLEVEL_VERBOSE, "[ENTER] gckGALDEVICE_Destroy\n");
-
-    /* Destroy the gckKERNEL object. */
-    gcmkVERIFY_OK(gckKERNEL_Destroy(Device->kernel));
-
-    if (Device->internalVidMem != gcvNULL)
-    {
-        /* destroy the internal heap */
-        gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->internalVidMem));
-
-               /* unmap the internal memory */
-               munmap_device_io((uintptr_t)Device->internalLogical, Device->internalSize);
-    }
-
-    if (Device->externalVidMem != gcvNULL)
-    {
-        /* destroy the internal heap */
-        gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->externalVidMem));
-
-        /* unmap the external memory */
-               munmap_device_io((uintptr_t)Device->externalLogical, Device->externalSize);
-    }
-
-    if (Device->contiguousVidMem != gcvNULL)
-    {
-        /* Destroy the contiguous heap */
-        gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->contiguousVidMem));
-
-               if (Device->contiguousMapped)
-               {
-                       gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                                 "[galcore] gckGALDEVICE_Destroy: "
-                         "Unmapping contiguous memory->0x%08lX\n",
-                         Device->contiguousBase);
-
-                       munmap_device_io((uintptr_t)Device->contiguousBase, Device->contiguousSize);
-               }
-               else
-               {
-           gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                         "[galcore] gckGALDEVICE_Destroy: "
-                         "Freeing contiguous memory->0x%08lX\n",
-                         Device->contiguousBase);
-
-           gcmkVERIFY_OK(gckGALDEVICE_FreeMemory(Device,
-                                                Device->contiguousBase,
-                                                Device->contiguousPhysical));
-       }
-    }
-
-    if (Device->registerBase)
-    {
-               munmap_device_io((uintptr_t)Device->registerBase, Device->registerSize);
-    }
-
-    /* Destroy the gckOS object. */
-    gcmkVERIFY_OK(gckOS_Destroy(Device->os));
-
-    free(Device);
-
-    gcmkTRACE(gcvLEVEL_VERBOSE, "[galcore] Leave gckGALDEVICE_Destroy\n");
-
-    return gcvSTATUS_OK;
-}
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.h b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_device.h
deleted file mode 100644 (file)
index bb5835f..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#ifndef __gc_hal_kernel_device_h_
-#define __gc_hal_kernel_device_h_
-
-/******************************************************************************\
-******************************* gckGALDEVICE Structure *******************************
-\******************************************************************************/
-
-#define GALCORE_INTERRUPT_PULSE 0x5D
-
-typedef struct _gckGALDEVICE
-{
-       /* Objects. */
-       gckOS                           os;
-       gckKERNEL                       kernel;
-
-       /* Attributes. */
-       gctSIZE_T                       internalSize;
-       gctPHYS_ADDR            internalPhysical;
-       gctPOINTER                      internalLogical;
-       gckVIDMEM                       internalVidMem;
-       gctSIZE_T                       externalSize;
-       gctPHYS_ADDR            externalPhysical;
-       gctPOINTER                      externalLogical;
-       gckVIDMEM                       externalVidMem;
-       gckVIDMEM                       contiguousVidMem;
-       gctPOINTER                      contiguousBase;
-       gctPHYS_ADDR            contiguousPhysical;
-       gctSIZE_T                       contiguousSize;
-       gctBOOL                         contiguousMapped;
-       gctPOINTER                      contiguousMappedUser;
-       gctSIZE_T                       systemMemorySize;
-       gctUINT32                       systemMemoryBaseAddress;
-       gctPOINTER                      registerBase;
-       gctSIZE_T                       registerSize;
-       gctUINT32                       baseAddress;
-
-       /* IRQ management. */
-       gctINT                          irqLine;
-       gctINT                          irqId;
-       gctBOOL                         isrInitialized;
-       gctBOOL                         dataReady;
-       intrspin_t                      isrLock;
-       struct sigevent         event;
-       int                                     chid;
-       int                                     coid;
-
-       /* Thread management. */
-       pthread_t                       threadCtxt;
-       gctBOOL                         threadInitialized;
-       gctBOOL                         killThread;
-}
-* gckGALDEVICE;
-
-typedef struct _gcsHAL_PRIVATE_DATA
-{
-    gckGALDEVICE               device;
-    gctPOINTER                 mappedMemory;
-       gctPOINTER                      contiguousLogical;
-}
-gcsHAL_PRIVATE_DATA, * gcsHAL_PRIVATE_DATA_PTR;
-
-gceSTATUS gckGALDEVICE_Setup_ISR(
-       IN gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Release_ISR(
-       IN gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Start_Thread(
-       IN gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Stop_Thread(
-       gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Start(
-       IN gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Stop(
-       gckGALDEVICE Device
-       );
-
-gceSTATUS gckGALDEVICE_Construct(
-       IN gctINT IrqLine,
-       IN gctUINT32 RegisterMemBase,
-       IN gctSIZE_T RegisterMemSize,
-       IN gctUINT32 ContiguousBase,
-       IN gctSIZE_T ContiguousSize,
-       IN gctSIZE_T BankSize,
-       IN gctINT FastClear,
-       IN gctINT Compression,
-       IN gctUINT32 BaseAddress,
-       OUT gckGALDEVICE *Device
-       );
-
-gceSTATUS gckGALDEVICE_Destroy(
-       IN gckGALDEVICE Device
-       );
-
-#endif /* __gc_hal_kernel_device_h_ */
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_driver.c b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_driver.c
deleted file mode 100644 (file)
index f3bb021..0000000
+++ /dev/null
@@ -1,1367 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#include "gc_hal_kernel_qnx.h"
-#include "gc_hal_driver.h"
-#include "gc_hal_user_context.h"
-
-# include <winmgr/gpu.h>
-
-static gckGALDEVICE galDevice;
-
-/* GN TODO take these from the graphics.conf file. */
-#ifdef MMP2
-int irqLine = 8;
-long registerMemBase = 0xd420d000;
-#else
-int irqLine = 48;
-long registerMemBase = 0xf1840000;
-#endif
-
-/* Configurable Memory sizes. */
-unsigned long contiguousSize =  ( 64 << 20);                   /* Video memory pool. */
-unsigned int internalPoolSize = ( 16 << 20);                   /* Kernel local memory pool. */
-unsigned int sharedPoolSize =   (  8 << 20);                   /* Shared per-client memory pool initial size. */
-unsigned long registerMemSize = (256 << 10);                   /* GPU register memory size. */
-
-/* ContiguousBase should be 0,
- * for video memory to be allocated from the memory pool. */
-unsigned long contiguousBase = 0;
-long bankSize = 0;
-int fastClear = -1;
-int compression = -1;
-unsigned long baseAddress = 0;
-
-/* Global video memory pool. */
-typedef struct _gcsMEM_POOL
-{
-       gctINT32 freePage;
-       gctSIZE_T pageCount;
-       gctUINT32 pageSize;
-       gctUINT32 poolSize;
-       pthread_mutex_t mutex;
-       gctUINT32 addr;
-       gctUINT32 paddr;
-       gckPAGE_USAGE pageUsage;
-       gctCHAR fdName[64];
-       gctINT fd;
-} gcsMEM_POOL;
-
-gcsMEM_POOL memPool;
-
-/* Pointer to list of shared memory pools. */
-gckSHM_POOL shmPoolList;
-pthread_mutex_t shmPoolListMutex;
-
-/* Resource Manager Globals. */
-struct _gcsRESMGR_GLOBALS
-{
-       dispatch_t *dpp;
-       dispatch_context_t *ctp;
-       int id;
-       thread_pool_attr_t pool_attr;
-       thread_pool_t *tpp;
-       pthread_t root;
-} resmgr_globals;
-
-win_gpu_2_cm_iface_t *g_qnx_gpu_2_cm_iface = 0;
-static resmgr_connect_funcs_t connect_funcs;
-static resmgr_io_funcs_t io_funcs;
-static iofunc_attr_t attr;
-
-gceSTATUS gckVIDMEM_FreeHandleMemory(IN gckVIDMEM Memory, IN gctHANDLE Handle);
-
-gceSTATUS
-drv_mempool_init()
-{
-       off64_t paddr;
-       void* addr;
-       size_t pcontig;
-
-       /* Default 4KB page size. */
-       memPool.pageSize = __PAGESIZE;
-
-       /* Compute number of pages. */
-       memPool.pageCount = (contiguousSize + internalPoolSize) / memPool.pageSize;
-       gcmkASSERT(memPool.pageCount <= 65536);
-
-       /* Align memPoolSize to page size. */
-       memPool.poolSize = memPool.pageCount * memPool.pageSize;
-
-    /* Allocate a single chunk of physical memory.
-        * Zero memory with MAP_ANON so we don't leak any sensitive information by chance. */
-       snprintf(memPool.fdName, sizeof(memPool.fdName), "galcore:vidmem:%d", getpid());
-    memPool.fd = shm_open(memPool.fdName, O_RDWR|O_CREAT, 0777);
-    if (memPool.fd == -1) {
-        fprintf(stderr, "galcore:%s[%d]: shm_open failed\n", __FUNCTION__, __LINE__);
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    shm_unlink(memPool.fdName);
-
-    if (shm_ctl_special(memPool.fd, SHMCTL_ANON|SHMCTL_PHYS, 0, memPool.poolSize, 0x9) == -1) {
-        fprintf(stderr, "galcore:%s[%d]: shm_ctl_special failed\n", __FUNCTION__, __LINE__);
-        close(memPool.fd);
-        memPool.fd = -1;
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    addr = mmap64(0, memPool.poolSize, PROT_READ|PROT_WRITE, MAP_SHARED, memPool.fd, 0);
-    if (addr == MAP_FAILED) {
-        fprintf(stderr, "galcore:%s[%d]: mmap64 failed\n", __FUNCTION__, __LINE__);
-        close(memPool.fd);
-        memPool.fd = -1;
-        return gcvSTATUS_GENERIC_IO;
-    }
-       memPool.addr = (gctUINT32)addr;
-
-       if (mem_offset64(addr, NOFD, memPool.poolSize, &paddr, &pcontig) == -1)
-       {
-           fprintf(stderr, "galcore:%s[%d]: mem_offset64 failed\n", __FUNCTION__, __LINE__);
-               munmap(addr, memPool.poolSize);
-               close(memPool.fd);
-               memPool.fd = -1;
-               memPool.addr = NULL;
-        return gcvSTATUS_GENERIC_IO;
-       }
-
-       /* TODO. Truncating 64bit value. */
-       memPool.paddr = (gctUINT32)paddr;
-
-    printf( "Mempool Map addr range[%x-%x]\n", memPool.addr, memPool.addr +  memPool.poolSize);
-       printf( "Mempool Map paddr range[%x-%x]\n", memPool.paddr, memPool.paddr +  memPool.poolSize );
-
-       /* Allocate the page usage array and Initialize all pages to free. */
-       memPool.pageUsage = (gckPAGE_USAGE)calloc(
-                       memPool.pageCount,
-                       sizeof(struct _gckPAGE_USAGE));
-
-       if (memPool.pageUsage == gcvNULL)
-       {
-        fprintf( stderr, "malloc failed: %s\n", strerror( errno ) );
-               munmap(addr, memPool.poolSize);
-               close(memPool.fd);
-               memPool.fd = -1;
-               memPool.addr = NULL;
-               memPool.paddr = 0;
-               return gcvSTATUS_GENERIC_IO;
-       }
-
-       /* The first page is free.*/
-       memPool.freePage = 0;
-
-       /* Initialize the semaphore. */
-       if (pthread_mutex_init(&memPool.mutex, NULL) != EOK)
-       {
-               free(memPool.pageUsage);
-               munmap(addr, memPool.poolSize);
-               close(memPool.fd);
-               memPool.fd = -1;
-               memPool.addr = NULL;
-               memPool.paddr = 0;
-               return gcvSTATUS_GENERIC_IO;
-       }
-
-       return gcvSTATUS_OK;
-}
-
-void
-drv_mempool_destroy()
-{
-       pthread_mutex_destroy(&memPool.mutex);
-       free(memPool.pageUsage);
-       memPool.pageUsage = NULL;
-       munmap((void*)memPool.addr, memPool.poolSize);
-       close(memPool.fd);
-       memPool.fd = -1;
-       memPool.addr = NULL;
-       memPool.paddr = 0;
-}
-
-gctINT
-drv_mempool_get_fileDescriptor()
-{
-    return memPool.fd;
-}
-
-gctUINT32
-drv_mempool_get_basePAddress()
-{
-       return memPool.paddr;
-}
-
-gctUINT32
-drv_mempool_get_baseAddress()
-{
-       return memPool.addr;
-}
-
-gctUINT32
-drv_mempool_get_page_size()
-{
-       return memPool.pageSize;
-}
-
-gceSTATUS
-drv_mempool_mem_offset(
-       IN gctPOINTER Logical,
-       OUT gctUINT32 * Address)
-{
-       gctUINT32 logical = (gctUINT32)Logical;
-
-       if ( Address == gcvNULL )
-               return gcvSTATUS_INVALID_ARGUMENT;
-
-       if ( logical < memPool.addr
-               ||      logical > (memPool.addr + memPool.poolSize))
-               return gcvSTATUS_INVALID_ARGUMENT;
-
-       *Address = (logical - memPool.addr) + memPool.paddr;
-
-       return gcvSTATUS_OK;
-}
-
-/* Allocate pages from mapped shared memory.
-   Return Physical and Logical addresses.
-*/
-void
-drv_mempool_alloc_contiguous(
-       IN gctUINT32 Bytes,
-       OUT gctPHYS_ADDR * Physical,
-       OUT gctPOINTER * Logical
-       )
-{
-       gctSIZE_T i, j;
-       gctSIZE_T pageCount;
-
-       pthread_mutex_lock(&memPool.mutex);
-
-       /* Compute the number of required pages. */
-       pageCount = gcmALIGN(Bytes, drv_mempool_get_page_size()) / drv_mempool_get_page_size();
-
-       if ( (pageCount <= 0) || (memPool.freePage < 0) )
-       {
-               *Physical = gcvNULL;
-               *Logical = gcvNULL;
-               pthread_mutex_unlock(&memPool.mutex);
-               /* No free pages left. */
-               return;
-       }
-
-       /* Try finding enough contiguous free pages. */
-       for (i = memPool.freePage; i < memPool.pageCount;)
-       {
-               /* All pages behind this free page should be free. */
-               gctSIZE_T j;
-               for (j = 1; j < pageCount; ++j)
-               {
-                       if (memPool.pageUsage[i + j].pageCount != 0)
-                       {
-                               /* Bail out if page is allocated. */
-                               break;
-                       }
-               }
-
-               if (j == pageCount)
-               {
-                       /* We found a spot that has enough free pages. */
-                       break;
-               }
-
-               /* Move to the page after the allocated page. */
-               i += j + 1;
-
-               /* Find the next free page. */
-               while ((i < memPool.pageCount) && (memPool.pageUsage[i].pageCount != 0))
-               {
-                       ++i;
-               }
-       }
-
-       if (i >= memPool.pageCount)
-       {
-               *Physical = gcvNULL;
-               *Logical = gcvNULL;
-               pthread_mutex_unlock(&memPool.mutex);
-               /* Not enough contiguous pages. */
-               return;
-       }
-
-       /* Check if we allocate from the first free page. */
-       if (i == memPool.freePage)
-       {
-               /* Move first free page to beyond the contiguous request. */
-               memPool.freePage = i + pageCount;
-
-               /* Find first free page. */
-               while ( (memPool.freePage < memPool.pageCount) &&
-                               (memPool.pageUsage[memPool.freePage].pageCount != 0) )
-               {
-                       ++memPool.freePage;
-               }
-
-               if (memPool.freePage >= memPool.pageCount)
-               {
-                       /* No more free pages. */
-                       memPool.freePage = -1;
-               }
-       }
-
-       /* Walk all pages. */
-       for (j = 0; j < pageCount; ++j)
-       {
-               /* Store page count in each pageUsage to mark page is allocated. */
-               memPool.pageUsage[i+j].pageCount = pageCount;
-       }
-
-       gcmkTRACE(gcvLEVEL_INFO, "Allocated %u contiguous pages from 0x%X\n",
-               pageCount, i);
-
-       /* Success. */
-       *Physical = (gctPHYS_ADDR)(i * memPool.pageSize + (gctUINT32)memPool.paddr);
-       *Logical = (gctPOINTER)(i * memPool.pageSize + (gctUINT32)memPool.addr);
-
-       pthread_mutex_unlock(&memPool.mutex);
-}
-
-int drv_mempool_free(gctPOINTER Logical)
-{
-       gctUINT16 pageCount;
-       gctSIZE_T i;
-       gctINT32 pageIndex;
-
-       gcmkTRACE(gcvLEVEL_INFO, "Freeing pages @ %x\n", Logical);
-
-       pthread_mutex_lock(&memPool.mutex);
-
-       pageIndex = ((gctUINT32)Logical - (gctUINT32)memPool.addr) / memPool.pageSize;
-
-       /* Verify the memory is valid and unlocked. */
-       if ( (pageIndex < 0) || (pageIndex >= memPool.pageCount) )
-       {
-               pthread_mutex_unlock(&memPool.mutex);
-               gcmkTRACE(gcvLEVEL_ERROR, "Invalid page index @ %d\n", pageIndex);
-               return -1;
-       }
-
-       pageCount = memPool.pageUsage[pageIndex].pageCount;
-
-       /* Mark all used pages as free. */
-       for (i = 0; i < pageCount; ++i)
-       {
-               gcmkASSERT(memPool.pageUsage[i + pageIndex].pageCount == pageCount);
-
-               memPool.pageUsage[i + pageIndex].pageCount = 0;
-       }
-
-       /* Update first free page. */
-       if ( (memPool.freePage < 0) || (pageIndex < memPool.freePage) )
-       {
-               memPool.freePage = pageIndex;
-       }
-
-       pthread_mutex_unlock(&memPool.mutex);
-
-       gcmkTRACE(gcvLEVEL_INFO, "Free'd %u contiguos pages from 0x%X @ 0x%x\n",
-               pageCount, pageIndex);
-
-       return 1;
-}
-
-/*
- * Initialize shm pool list and mutex.
- */
-gceSTATUS
-drv_shm_init()
-{
-       shmPoolList = gcvNULL;
-       pthread_mutex_init(&shmPoolListMutex, 0);
-       return gcvSTATUS_OK;
-/*     resmgr_globals.shmpool = gcvNULL;
-       return pthread_mutex_init(&resmgr_globals.shmMutex, 0);*/
-}
-
-gceSTATUS
-drv_shm_destroy()
-{
-       gckSHM_POOL shmPool;
-       gctUINT32 count = 0;
-
-       pthread_mutex_destroy(&shmPoolListMutex);
-
-       shmPool = shmPoolList;
-       while (shmPool != gcvNULL)
-       {
-               /* Remove this pool from the list. */
-               drv_shmpool_destroy(shmPool);
-
-               shmPool = shmPool->nextPool;
-               count++;
-       }
-
-       return gcvSTATUS_OK;
-/*     resmgr_globals.shmpool = gcvNULL;
-       return pthread_mutex_destroy(&resmgr_globals.shmMutex);*/
-}
-
-/*
- * Get the shm pool associated with this Handle and PID and lock it.
- * Create one, if not present.
- */
-gckSHM_POOL
-drv_shm_acquire_pool(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle
-               )
-{
-       gckSHM_POOL shmPool, tail = gcvNULL;
-
-       pthread_mutex_lock(&shmPoolListMutex);
-
-       shmPool = shmPoolList;
-       while (shmPool != gcvNULL)
-       {
-               if (shmPool->Handle == Handle && shmPool->pid == Pid)
-               {
-                       pthread_mutex_unlock(&shmPoolListMutex);
-                       return shmPool;
-               }
-
-               tail = shmPool;
-               shmPool = shmPool->nextPool;
-       }
-
-       /* TODO: Start with smaller shmMemory pool size and increase on demand. */
-       /* Default 4KB page size. */
-       shmPool = drv_shmpool_create(Pid, Handle, sharedPoolSize, __PAGESIZE);
-
-       /* Add this pool to tail. */
-       if ( shmPool != gcvNULL )
-       {
-               if (tail != gcvNULL )
-               {
-                       tail->nextPool = shmPool;
-               }
-               else
-               {
-                       /* Set this pool as head. */
-                       shmPoolList = shmPool;
-               }
-
-               shmPool->nextPool = gcvNULL;
-       }
-       else
-       {
-               /* Failed to create new shmPool. */
-       }
-
-       pthread_mutex_unlock(&shmPoolListMutex);
-       return shmPool;
-}
-
-/*
- * Get the shm pool associated with this Logical pointer.
- */
-gckSHM_POOL
-drv_shm_acquire_pool2(
-               IN gctPOINTER Logical
-               )
-{
-       gckSHM_POOL shmPool, tail = gcvNULL;
-
-       pthread_mutex_lock(&shmPoolListMutex);
-
-       shmPool = shmPoolList;
-       while (shmPool != gcvNULL)
-       {
-               /* Check if this address is in range of this shmPool. */
-               if (shmPool->Logical <= (gctUINT32)Logical &&
-                       (shmPool->Logical + shmPool->pageCount * shmPool->pageSize) > (gctUINT32)Logical)
-               {
-                       pthread_mutex_unlock(&shmPoolListMutex);
-                       return shmPool;
-               }
-
-               tail = shmPool;
-               shmPool = shmPool->nextPool;
-       }
-
-       /* Failed to find associated shmPool. */
-       pthread_mutex_unlock(&shmPoolListMutex);
-       return shmPool;
-}
-
-/*
- * Remove the shm pool associated with this ocb.
- */
-gceSTATUS
-drv_shm_remove_pool(
-               IN gctHANDLE Handle
-               )
-{
-       gckSHM_POOL shmPool, prev = gcvNULL;
-
-       pthread_mutex_lock(&shmPoolListMutex);
-
-       shmPool = shmPoolList;
-
-       while (shmPool != gcvNULL)
-       {
-               /* Remove this pool from the list. */
-               if (shmPool->Handle == Handle)
-               {
-                       if (prev == gcvNULL)
-                       {
-                               shmPoolList = shmPool->nextPool;
-                       }
-                       else
-                       {
-                               prev->nextPool = shmPool->nextPool;
-                       }
-
-                       drv_shmpool_destroy(shmPool);
-
-                       pthread_mutex_unlock(&shmPoolListMutex);
-                       return gcvSTATUS_OK;
-               }
-
-               prev = shmPool;
-               shmPool = shmPool->nextPool;
-       }
-
-       pthread_mutex_unlock(&shmPoolListMutex);
-
-       return gcvSTATUS_INVALID_ARGUMENT;
-}
-
-gceSTATUS
-drv_shmpool_mem_offset(
-       IN gctPOINTER Logical,
-       OUT gctUINT32 * Address)
-{
-       gctUINT32 logical = (gctUINT32)Logical;
-       gckSHM_POOL shmPool;
-
-       if ( Address == gcvNULL )
-               return gcvSTATUS_INVALID_ARGUMENT;
-
-       pthread_mutex_lock(&shmPoolListMutex);
-
-       shmPool = shmPoolList;
-       while (shmPool != gcvNULL)
-       {
-               if ( (logical >= shmPool->Logical)
-                       &&      (logical < (shmPool->Logical + shmPool->pageCount * shmPool->pageSize)))
-               {
-                       *Address = (logical - shmPool->Logical ) + shmPool->Physical;
-                       pthread_mutex_unlock(&shmPoolListMutex);
-                       return gcvSTATUS_OK;
-               }
-
-               shmPool = shmPool->nextPool;
-       }
-
-       pthread_mutex_unlock(&shmPoolListMutex);
-
-       return gcvSTATUS_INVALID_ARGUMENT;
-}
-
-/* Initialize a shm pool with this ocb. */
-gckSHM_POOL drv_shmpool_create(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle,
-               IN gctUINT32 PoolSize,
-               IN gctUINT32 PageSize)
-{
-       int rc, poolSize;
-       void* addr;
-       char shm_file_name[20] = "shm_galcore";
-       gctUINT32 i, pid;
-       gckSHM_POOL shm = (gckSHM_POOL) calloc(1, sizeof(struct _gckSHM_POOL));
-
-       /* Compute number of pages. */
-       shm->pageSize = PageSize;
-       shm->pageCount = PoolSize / shm->pageSize;
-       gcmkASSERT(shm->pageCount <= 65536);
-
-       /* Align poolSize to pageSize. */
-       poolSize = shm->pageCount * shm->pageSize;
-
-       shm->pid = Pid;
-       shm->Handle = Handle;
-
-       /* Initialize the semaphore. */
-       if (pthread_mutex_init(&shm->mutex, NULL) != EOK)
-       {
-        fprintf( stderr, "pthread_mutex_init failed: %s\n", strerror( errno ) );
-               free(shm);
-               return gcvNULL;
-       }
-
-       /* Create a pseudo unique name, so as to not open
-        * the same file twice from different threads at the same time. */
-       pid = Pid;
-       i = strlen(shm_file_name);
-       while(pid)
-       {
-               shm_file_name[i++] = (char)(pid % 10 + '0');
-               pid /= 10;
-       }
-       shm_file_name[i] = '\0';
-
-       shm->fd = shm_open(shm_file_name, O_RDWR | O_CREAT, 0777);
-       if (shm->fd == -1) {
-               free(shm);
-               return gcvNULL;
-       }
-
-       shm_unlink(shm_file_name);
-
-       /* Special flags for this shm, to make it write buffered. */
-       rc = shm_ctl_special(shm->fd,
-                                                SHMCTL_ANON | SHMCTL_PHYS /*| SHMCTL_LAZYWRITE*/,
-                                                0,
-                                                poolSize,
-                                                0x9);
-       if (rc == -1) {
-               close(shm->fd);
-               free(shm);
-               return gcvNULL;
-       }
-
-       /* Map this memory inside user and galcore. */
-       addr = mmap64_join(Pid,
-                                          0,
-                                          poolSize,
-                                          PROT_READ | PROT_WRITE,
-                                          MAP_SHARED,
-                                          shm->fd,
-                                          0);
-       if (addr == MAP_FAILED)
-       {
-               free(shm);
-               return gcvNULL;
-       }
-
-       /* TODO: Dont close fd if need to truncate shm later. */
-       rc = close(shm->fd);
-       if (rc == -1) {
-               free(shm);
-               return gcvNULL;
-       }
-
-       shm->Logical = (gctUINT32) addr;
-
-       /* fd should be NOFD here, to get physical address. */
-       rc = mem_offset( addr, NOFD, 1, (off_t *)&shm->Physical, NULL);
-       if (rc == -1) {
-               free(shm);
-               return gcvNULL;
-       }
-
-    /* TODO: MLOCK may or may not be needed!. */
-    mlock((void*)shm->Logical, poolSize);
-
-       /* Allocate the page usage array and Initialize all pages to free. */
-    shm->pageUsage = (gckPAGE_USAGE)calloc(shm->pageCount, sizeof(struct _gckPAGE_USAGE));
-       if (shm->pageUsage == gcvNULL)
-       {
-               munmap((void*)shm->Logical, poolSize);
-               munmap_peer(Pid, (void*)shm->Logical, poolSize);
-               free(shm);
-               return gcvNULL;
-       }
-
-       /* The first page is free. */
-       shm->freePage = 0;
-
-       return shm;
-}
-
-void
-drv_shmpool_destroy(
-               IN gckSHM_POOL ShmPool)
-{
-       if (ShmPool)
-       {
-               int poolSize = ShmPool->pageCount * ShmPool->pageSize;
-               if (ShmPool->pageUsage)
-                       free(ShmPool->pageUsage);
-               if (ShmPool->Logical)
-               {
-                       munmap((void*)ShmPool->Logical, poolSize);
-                       munmap_peer(ShmPool->pid, (void*)ShmPool->Logical, poolSize);
-               }
-       }
-}
-
-gctUINT32
-drv_shmpool_get_BaseAddress(
-               IN gckSHM_POOL ShmPool
-               )
-{
-       gcmkASSERT(ShmPool != 0);
-
-       if (!ShmPool)
-               return 0;
-
-       return ShmPool->Logical;
-}
-
-gctUINT32
-drv_shmpool_get_page_size(
-               IN gckSHM_POOL ShmPool
-               )
-{
-       gcmkASSERT(ShmPool != 0);
-
-       if (!ShmPool)
-               return 0;
-
-       return ShmPool->pageSize;
-}
-
-/* Allocate pages from mapped shared memory.
-   Return Logical user address.
-*/
-gctPOINTER
-drv_shmpool_alloc_contiguous(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle,
-               IN gctUINT32 Bytes
-               )
-{
-       gctSIZE_T i, j;
-       int pageSize;
-       gctSIZE_T pageCount;
-       gckSHM_POOL shmPool = drv_shm_acquire_pool(Pid, Handle);
-
-       if (shmPool == gcvNULL)
-       {
-               return gcvNULL;
-       }
-       /* Compute the number of required pages. */
-       pageSize = drv_shmpool_get_page_size(shmPool);
-       if ( pageSize == 0 )
-       {
-               /* Invalid pageSize. */
-               return gcvNULL;
-       }
-
-       pageCount = gcmALIGN(Bytes, pageSize) / pageSize;
-
-       if ( (pageCount <= 0) || (shmPool->freePage < 0) )
-       {
-               /* No free pages left. */
-               return gcvNULL;
-       }
-
-       if ( (pageCount <= 0) || (shmPool->freePage < 0) )
-       {
-               /* No free pages left. */
-               return gcvNULL;
-       }
-
-       /* Try finding enough contiguous free pages. */
-       for (i = shmPool->freePage; i < shmPool->pageCount;)
-       {
-               /* All pages behind this free page should be free. */
-               gctSIZE_T j;
-               for (j = 1; j < pageCount; ++j)
-               {
-                       if (shmPool->pageUsage[i + j].pageCount != 0)
-                       {
-                               /* Bail out if page is allocated. */
-                               break;
-                       }
-               }
-
-               if (j == pageCount)
-               {
-                       /* We found a spot that has enough free pages. */
-                       break;
-               }
-
-               /* Move to the page after the allocated page. */
-               i += j + 1;
-
-               /* Find the next free page. */
-               while ((i < shmPool->pageCount) && (shmPool->pageUsage[i].pageCount != 0))
-               {
-                       ++i;
-               }
-       }
-
-       if (i >= shmPool->pageCount)
-       {
-               /* Not enough contiguous pages. */
-               return gcvNULL;
-       }
-
-       /* Check if we allocate from the first free page. */
-       if (i == shmPool->freePage)
-       {
-               /* Move first free page to beyond the contiguous request. */
-               shmPool->freePage = i + pageCount;
-
-               /* Find first free page. */
-               while ( (shmPool->freePage < shmPool->pageCount) &&
-                               (shmPool->pageUsage[shmPool->freePage].pageCount != 0) )
-               {
-                       ++shmPool->freePage;
-               }
-
-               if (shmPool->freePage >= shmPool->pageCount)
-               {
-                       /* No more free pages. */
-                       shmPool->freePage = -1;
-               }
-       }
-
-       /* Walk all pages. */
-       for (j = 0; j < pageCount; ++j)
-       {
-               /* Store page count in each pageUsage to mark page is allocated. */
-               shmPool->pageUsage[i+j].pageCount = pageCount;
-       }
-
-       gcmkTRACE(gcvLEVEL_INFO, "Allocated %u contiguos pages from 0x%X\n",
-               pageCount, i);
-
-       /* Success. */
-       return (gctPOINTER)(i * shmPool->pageSize + shmPool->Logical);
-}
-
-gctUINT32
-drv_shmpool_free(
-               IN gctPOINTER Logical
-               )
-{
-       gctUINT16 pageCount;
-       gctSIZE_T i;
-       gctINT32 pageIndex;
-       gckSHM_POOL shmPool = drv_shm_acquire_pool2(Logical);
-
-       if (shmPool == gcvNULL)
-       {
-               gcmkTRACE(gcvLEVEL_ERROR, "Invalid Logical addr: %x.\n", Logical);
-               return 0;
-       }
-
-       pageIndex = ((gctUINT32)Logical - shmPool->Logical)/shmPool->pageSize;
-
-       gcmkTRACE(gcvLEVEL_INFO, "Freeing pages @ %d\n", pageIndex);
-
-       /* Verify the memory is valid and unlocked. */
-       if ( (pageIndex < 0) || (pageIndex >= shmPool->pageCount) )
-       {
-               gcmkTRACE(gcvLEVEL_ERROR, "Invalid page index @ %d\n", pageIndex);
-
-               return 0;
-       }
-
-       pageCount = shmPool->pageUsage[pageIndex].pageCount;
-
-       /* Mark all used pages as free. */
-       for (i = 0; i < pageCount; ++i)
-       {
-               gcmkASSERT(shmPool->pageUsage[i + pageIndex].pageCount == pageCount);
-
-               shmPool->pageUsage[i + pageIndex].pageCount = 0;
-       }
-
-       /* Update first free page. */
-       if ( (shmPool->freePage < 0) || (pageIndex < shmPool->freePage) )
-       {
-               shmPool->freePage = pageIndex;
-       }
-
-       gcmkTRACE(gcvLEVEL_INFO, "Free'd %u contiguos pages from 0x%X @ 0x%x\n",
-               pageCount, pageIndex);
-
-       return 1;
-}
-
-int drv_msg(resmgr_context_t *ctp,
-                       io_msg_t *msg,
-                       RESMGR_OCB_T *ocb)
-{
-       gcsDRIVER_ARGS *drvArgs = (gcsDRIVER_ARGS *)msg;
-    int rc;
-    gceSTATUS status;
-    gcsQUEUE_PTR queue;
-
-#define UNLOCK_RESMGR
-#ifdef UNLOCK_RESMGR
-       iofunc_attr_unlock(&attr);
-#endif
-
-    if ((drvArgs->iomsg.i.type != _IO_MSG)
-       || (drvArgs->iomsg.i.mgrid != _IOMGR_VIVANTE)
-       || (drvArgs->iomsg.i.subtype != IOCTL_GCHAL_INTERFACE
-           && drvArgs->iomsg.i.subtype != IOCTL_GCHAL_KERNEL_INTERFACE
-               && drvArgs->iomsg.i.subtype != IOCTL_GCHAL_TERMINATE))
-    {
-        /* Unknown command. Fail the I/O. */
-#ifdef UNLOCK_RESMGR
-       iofunc_attr_lock(&attr);
-#endif
-               rc = ENOSYS;
-               if (ctp->info.scoid != -1)
-                       return _RESMGR_STATUS(ctp, rc);
-               return _RESMGR_NOREPLY;
-    }
-
-       if (drvArgs->iomsg.i.subtype == IOCTL_GCHAL_TERMINATE)
-       {
-               /* terminate the resource manager */
-               pthread_kill(resmgr_globals.root, SIGTERM);
-#ifdef UNLOCK_RESMGR
-               iofunc_attr_lock(&attr);
-#endif
-               return _RESMGR_NOREPLY;
-       }
-
-       /* Save channel handle and pid for later functions. */
-       drvArgs->iface.handle = (gctHANDLE)ocb;
-       drvArgs->iface.pid = (gctUINT32)ctp->info.pid;
-
-       /* Store receive ID with signal event so that we can later respond via pulse. */
-       switch (drvArgs->iface.command)
-       {
-       case gcvHAL_SIGNAL:
-               printf("Setup rcvid as:%d\n", ctp->rcvid);
-           drvArgs->iface.u.Signal.rcvid = ctp->rcvid;
-        break;
-
-    case gcvHAL_EVENT_COMMIT:
-        for (queue = drvArgs->iface.u.Event.queue; queue != gcvNULL; queue = queue->next)
-        {
-            if (queue->iface.command == gcvHAL_SIGNAL)
-            {
-                queue->iface.u.Signal.rcvid = ctp->rcvid;
-            }
-        }
-        break;
-
-    default:
-        break;
-       }
-
-       status = gckKERNEL_Dispatch(galDevice->kernel,
-                                                               (drvArgs->iomsg.i.subtype == IOCTL_GCHAL_INTERFACE),
-                                                               &drvArgs->iface);
-
-       if (gcmIS_ERROR(status))
-       {
-               gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DRIVER,
-                                 "[galcore] gckKERNEL_Dispatch returned %d.\n",
-                         status);
-       }
-       else if (gcmIS_ERROR(drvArgs->iface.status))
-       {
-               gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DRIVER,
-                                 "[galcore] IOCTL %d returned %d.\n",
-                         drvArgs->iface.command,
-                         drvArgs->iface.status);
-       }
-
-       /* Reply data back to the user. */
-       MsgReply(ctp->rcvid, EOK, (gctPOINTER) &drvArgs->iface, sizeof(gcsHAL_INTERFACE));
-
-#ifdef UNLOCK_RESMGR
-       iofunc_attr_lock(&attr);
-#endif
-
-       gcmkTRACE(gcvLEVEL_INFO, "Replied message with command %d, status %d\n",
-               drvArgs->iface.command,
-               drvArgs->iface.status);
-
-    return (_RESMGR_NOREPLY);
-}
-
-static int drv_init(void)
-{
-       /* TODO: Enable clock by driver support? */
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER,
-                 "Entering drv_init\n");
-
-    /* Create the GAL device. */
-    gcmkVERIFY_OK(gckGALDEVICE_Construct(irqLine,
-                   registerMemBase,
-                                       registerMemSize,
-                                       contiguousBase,
-                                       contiguousSize,
-                                       bankSize,
-                                       fastClear,
-                                       compression,
-                                       baseAddress,
-                                       &galDevice));
-
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER,
-                 "galcore device constructed.\n");
-
-    /* Start the GAL device. */
-    if (gcmIS_ERROR(gckGALDEVICE_Start(galDevice)))
-    {
-       gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
-                     "[galcore] Can't start the gal device.\n");
-
-       /* Roll back. */
-       gckGALDEVICE_Stop(galDevice);
-       gckGALDEVICE_Destroy(galDevice);
-
-       return -1;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
-                 "[galcore] irqLine->%ld, contiguousSize->%lu, memBase->0x%lX\n",
-                 irqLine,
-                 contiguousSize,
-                 registerMemBase);
-
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER,
-                 "[galcore] driver registered successfully.\n");
-
-    return 0;
-}
-
-static void drv_exit(void)
-{
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER,
-                 "[galcore] Entering drv_exit\n");
-
-    gckGALDEVICE_Stop(galDevice);
-    gckGALDEVICE_Destroy(galDevice);
-
-}
-
-/* Invoked by OS, when a connection is closed or dies. */
-int
-drv_close_ocb(resmgr_context_t *ctp, void *reserved, RESMGR_OCB_T *ocb)
-{
-       gckVIDMEM videoMemory;
-       gceSTATUS status;
-
-       /* Free virtual memory owned by this client. */
-       gckMMU_FreeHandleMemory(galDevice->kernel->mmu, (gctHANDLE)ocb);
-
-       /* Free system memory owned by the client. */
-       status = gckKERNEL_GetVideoMemoryPool(galDevice->kernel, gcvPOOL_SYSTEM, &videoMemory);
-
-       if (status == gcvSTATUS_OK)
-       {
-               gckVIDMEM_FreeHandleMemory(videoMemory,
-                                                                  (gctHANDLE)ocb);
-       }
-
-       /* Free shared memory and its mapping. */
-       drv_shm_remove_pool(ocb);
-
-       return iofunc_close_ocb_default(ctp, reserved, ocb);
-}
-
-int gpu_init()
-{
-       /* Declare variables we'll be using. */
-       resmgr_attr_t resmgr_attr;
-       sigset_t  sigset;
-       int rc;
-
-       if (drv_mempool_init() != gcvSTATUS_OK)
-       {
-               fprintf(stderr, "drv_mempool_init failed.");
-               goto fail_001;
-       }
-
-       if (drv_shm_init() != gcvSTATUS_OK)
-       {
-               fprintf(stderr, "drv_mempool_init failed.");
-               goto fail_002;
-       }
-
-       if (drv_init() != 0)
-       {
-               fprintf(stderr, "drv_init failed.");
-               goto fail_003;
-       }
-
-       /* initialize dispatch interface */
-       if((resmgr_globals.dpp = dispatch_create()) == NULL)
-       {
-               fprintf(stderr, "Unable to allocate dispatch handle.\n");
-               goto fail_004;
-       }
-
-       /* initialize resource manager attributes */
-       memset(&resmgr_attr, 0, sizeof resmgr_attr);
-       resmgr_attr.nparts_max = 1;
-       resmgr_attr.msg_max_size = 2048;
-
-       /* initialize functions for handling messages */
-       iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &connect_funcs,
-                       _RESMGR_IO_NFUNCS, &io_funcs);
-
-       /* Register io handling functions. */
-       io_funcs.msg = drv_msg;
-       io_funcs.close_ocb = drv_close_ocb;
-
-
-       /* initialize attribute structure used by the device */
-       iofunc_attr_init(&attr, S_IFNAM | 0666, 0, 0);
-
-       /* attach our device name */
-       resmgr_globals.id = resmgr_attach(
-                       resmgr_globals.dpp,/* dispatch handle */
-                       &resmgr_attr,                   /* resource manager attrs */
-                       GAL_DEV,                                /* device name */
-                       _FTYPE_ANY,                             /* open type */
-                       _RESMGR_FLAG_SELF,              /* flags */
-                       &connect_funcs,                 /* connect routines */
-                       &io_funcs,                              /* I/O routines */
-                       &attr);                                 /* handle */
-       if (resmgr_globals.id == -1) {
-               fprintf(stderr, "Unable to attach name.\n");
-        goto fail_005;
-       }
-
-    /* Prevent signals from affecting resmgr threads. */
-    sigfillset(&sigset);
-    sigdelset(&sigset, SIGTERM);
-    pthread_sigmask(SIG_BLOCK, &sigset, NULL);
-
-    /* initialize thread pool attributes */
-    memset(&resmgr_globals.pool_attr, 0, sizeof(resmgr_globals.pool_attr));
-    resmgr_globals.pool_attr.handle = resmgr_globals.dpp;
-    resmgr_globals.pool_attr.context_alloc = resmgr_context_alloc;
-    resmgr_globals.pool_attr.block_func = resmgr_block;
-    resmgr_globals.pool_attr.unblock_func = resmgr_unblock;
-    resmgr_globals.pool_attr.handler_func = resmgr_handler;
-    resmgr_globals.pool_attr.context_free = resmgr_context_free;
-    resmgr_globals.pool_attr.lo_water = 2;
-    resmgr_globals.pool_attr.hi_water = 4;
-    resmgr_globals.pool_attr.increment = 1;
-    resmgr_globals.pool_attr.maximum = 50;
-#if (defined(_NTO_VERSION) && (_NTO_VERSION >= 650))
-       resmgr_globals.pool_attr.tid_name = "galcore-message-handler";
-#endif
-
-    /* allocate a thread pool handle */
-    resmgr_globals.tpp = thread_pool_create(&resmgr_globals.pool_attr, POOL_FLAG_EXIT_SELF);
-    if (resmgr_globals.tpp == NULL)
-       {
-        goto fail_006;
-    }
-
-    rc = pthread_create(NULL, resmgr_globals.pool_attr.attr, (void * (*)(void *))thread_pool_start, resmgr_globals.tpp);
-    if (rc != 0)
-       {
-        goto fail_007;
-    }
-
-       /* TODO: gpu_suspend, gpu_resume */
-
-       return EXIT_SUCCESS;
-
-fail_007:
-    thread_pool_destroy(resmgr_globals.tpp);
-fail_006:
-    resmgr_detach(resmgr_globals.dpp, resmgr_globals.id, 0);
-fail_005:
-    dispatch_destroy(resmgr_globals.dpp);
-fail_004:
-    drv_exit();
-fail_003:
-       drv_shm_destroy();
-fail_002:
-       drv_mempool_destroy();
-fail_001:
-    return EXIT_FAILURE;
-}
-
-int gpu_fini()
-{
-    thread_pool_destroy(resmgr_globals.tpp);
-    resmgr_detach(resmgr_globals.dpp, resmgr_globals.id, 0);
-    dispatch_destroy(resmgr_globals.dpp);
-    drv_exit();
-    drv_shm_destroy();
-       drv_mempool_destroy();
-       return EXIT_SUCCESS;
-}
-
-#ifndef QNX_USE_OLD_FRAMEWORK
-
-int GPU_Startup(win_gpu_2_cm_iface_t *iface)
-{
-    g_qnx_gpu_2_cm_iface = iface;
-       return gpu_init();
-}
-
-int GPU_Shutdown()
-{
-    g_qnx_gpu_2_cm_iface = NULL;
-       return gpu_fini();
-}
-
-void win_gpu_module_getfuncs(win_cm_2_gpu_iface_t *iface)
-{
-       iface->init = GPU_Startup;
-       iface->fini = GPU_Shutdown;
-}
-
-#else /* QNX_USE_OLD_FRAMEWORK */
-
-int drv_resmgr_loop()
-{
-    sigset_t  sigset;
-    siginfo_t info;
-
-       resmgr_globals.root = pthread_self();
-
-    /* Background ourselves */
-    procmgr_daemon(EXIT_SUCCESS, PROCMGR_DAEMON_NODEVNULL |
-                                                                PROCMGR_DAEMON_NOCHDIR |
-                                                                PROCMGR_DAEMON_NOCLOSE);
-
-    /*
-     * This thread ignores all signals except SIGTERM. On receipt of
-     * a SIGTERM, we shut everything down and exit.
-     */
-    sigemptyset(&sigset);
-    sigaddset(&sigset, SIGTERM);
-
-    while (1)
-       {
-        if (SignalWaitinfo(&sigset, &info) == -1)
-            continue;
-        if (info.si_signo == SIGTERM)
-               {
-            break;
-               }
-    }
-
-    return EXIT_SUCCESS;
-}
-
-int    drv_start_cmd()
-{
-    int rc;
-
-    printf("Starting up...\n");
-       fflush(stdout);
-
-    pthread_setname_np(pthread_self(), "vivante-monitor");
-
-       if ((rc = gpu_init()) != EXIT_SUCCESS)
-       {
-               fprintf(stderr, "Initialization failed!, Exiting.");
-        exit(EXIT_FAILURE);
-       }
-
-       printf("Running galcore...\n");
-       fflush(stdout);
-    rc = drv_resmgr_loop();
-    printf("Shutting down galcore...\n");
-       fflush(stdout);
-
-       gpu_fini();
-
-       return EXIT_SUCCESS;
-}
-
-int drv_stop_cmd()
-{
-    gcsDRIVER_ARGS args;
-    int fd, rc;
-
-       /* Open the gpu device. */
-    fd = open(DRV_NAME, O_RDONLY);
-    if (fd == -1)
-       {
-        fprintf(stderr, "Could not connect to " DRV_NAME);
-        return EXIT_FAILURE;
-    }
-
-       /* Send the term message. */
-    args.iomsg.i.type    = _IO_MSG;
-    args.iomsg.i.subtype = IOCTL_GCHAL_TERMINATE;
-    args.iomsg.i.mgrid   = _IOMGR_VIVANTE;
-    args.iomsg.i.combine_len = sizeof(io_msg_t);
-
-    do {
-        rc = MsgSend_r(fd, &args, args.iomsg.i.combine_len, NULL, 0);
-    } while ((rc * -1) == EINTR);
-
-       return EXIT_SUCCESS;
-}
-
-int main(int argc, char **argv)
-{
-       enum { start, stop } cmd = start;
-    int i;
-       int rc = EXIT_FAILURE;
-
-    /* Process command lines -start, -stop, -c (file), -d [file]. */
-    for (i = 1; i < argc; i++)
-       {
-        if (stricmp(argv[i], "-start") == 0)
-               {
-            cmd = start;
-        }
-               else if (strcmp(argv[i], "-stop") == 0)
-               {
-            cmd = stop;
-        }
-               else if (strncmp(argv[i], "-poolsize=", strlen("-poolsize=")) == 0)
-               {
-                       /* The syntax of the poolsize option is -poolsize=(number).
-                        * All we need is to convert the number that starts after the '='.*/
-                       contiguousSize = atoi(argv[i] + strlen("-poolsize="));
-                       if (contiguousSize <= 0)
-                       {
-                               fprintf(stderr, "%s: poolsize needs to be a positive number\n", strerror(errno));
-                               return rc;
-                       }
-               }
-               else
-               {
-            fprintf(stderr, "%s: bad command line\n", argv[0]);
-            return rc;
-        }
-    }
-
-    switch (cmd)
-       {
-        case start:
-                       /* Elevate thread priority to do IO. */
-                       ThreadCtl(_NTO_TCTL_IO, 0);
-                       rc = drv_start_cmd();
-            break;
-
-        case stop:
-            rc = drv_stop_cmd();
-            break;
-    }
-
-    return rc;
-}
-
-#endif /* QNX_USE_OLD_FRAMEWORK */
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.c b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.c
deleted file mode 100644 (file)
index bf7e5c9..0000000
+++ /dev/null
@@ -1,3008 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#include "gc_hal_kernel_qnx.h"
-
-
-
-# include <winmgr/gpu.h>
-
-#define USE_VMALLOC 0
-
-#define _GC_OBJ_ZONE gcvZONE_OS
-
-#define MEMORY_LOCK(os) \
-    gcmkVERIFY_OK(gckOS_AcquireMutex( \
-                                (os), \
-                                (os)->memoryLock, \
-                                gcvINFINITE))
-
-#define MEMORY_UNLOCK(os) \
-    gcmkVERIFY_OK(gckOS_ReleaseMutex((os), (os)->memoryLock))
-
-#define MEMORY_MAP_LOCK(os) \
-    gcmkVERIFY_OK(gckOS_AcquireMutex( \
-                                (os), \
-                                (os)->memoryMapLock, \
-                                gcvINFINITE))
-
-#define MEMORY_MAP_UNLOCK(os) \
-    gcmkVERIFY_OK(gckOS_ReleaseMutex((os), (os)->memoryMapLock))
-
-/******************************************************************************\
-********************************** Structures **********************************
-\******************************************************************************/
-
-struct _gckOS
-{
-    /* Object. */
-    gcsOBJECT                   object;
-
-    /* Heap. */
-    gckHEAP                     heap;
-
-    /* Pointer to device */
-    gckGALDEVICE                device;
-
-    /* Memory management */
-    gctPOINTER                  memoryLock;
-    gctPOINTER                  memoryMapLock;
-    gctPOINTER                  mempoolBaseAddress;
-    gctPOINTER                  mempoolBasePAddress;
-    gctUINT32                   mempoolPageSize;
-
-    gctUINT32                   baseAddress;
-
-    /* Atomic operation lock. */
-    gctPOINTER                  atomicOperationLock;
-};
-
-
-typedef struct _gcskSIGNAL
-{
-    pthread_mutex_t *mutex;
-
-    /* Manual reset flag. */
-    gctBOOL manualReset;
-}
-gcskSIGNAL;
-
-typedef struct _gcskSIGNAL *    gcskSIGNAL_PTR;
-
-
-/*******************************************************************************
-**
-**  gckOS_Construct
-**
-**  Construct a new gckOS object.
-**
-**  INPUT:
-**
-**      gctPOINTER Context
-**          Pointer to the gckGALDEVICE class.
-**
-**  OUTPUT:
-**
-**      gckOS * Os
-**          Pointer to a variable that will hold the pointer to the gckOS object.
-*/
-gceSTATUS gckOS_Construct(
-    IN gctPOINTER Context,
-    OUT gckOS * Os
-    )
-{
-    gckOS os;
-    gceSTATUS status;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_ARGUMENT(Os != gcvNULL);
-
-    /* Allocate the gckOS object. */
-    os = (gckOS) malloc(gcmSIZEOF(struct _gckOS));
-
-    if (os == gcvNULL)
-    {
-        /* Out of memory. */
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    /* Zero the memory. */
-    memset(os, 0, gcmSIZEOF(struct _gckOS));
-
-    /* Initialize the gckOS object. */
-    os->object.type = gcvOBJ_OS;
-
-    /* Set device device. */
-    os->device = Context;
-
-    /* IMPORTANT! No heap yet. */
-    os->heap = gcvNULL;
-
-    /* Initialize the memory lock. */
-    gcmkONERROR(
-        gckOS_CreateMutex(os, &os->memoryLock));
-
-    gcmkONERROR(
-        gckOS_CreateMutex(os, &os->memoryMapLock));
-
-    /* Create the gckHEAP object. */
-    gcmkONERROR(
-        gckHEAP_Construct(os, gcdHEAP_SIZE, &os->heap));
-
-    /* Find the base address of the physical memory. */
-    os->baseAddress = os->device->baseAddress;
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS,
-                  "Physical base address set to 0x%08X.\n",
-                  os->baseAddress);
-
-    os->mempoolBaseAddress = (gctPOINTER) drv_mempool_get_baseAddress();
-    os->mempoolBasePAddress = (gctPOINTER) drv_mempool_get_basePAddress();
-    os->mempoolPageSize = drv_mempool_get_page_size();
-
-
-    /* Initialize the atomic operations lock. */
-    gcmkONERROR(
-        gckOS_CreateMutex(os, &os->atomicOperationLock));
-
-    /* Return pointer to the gckOS object. */
-    *Os = os;
-
-    /* Success. */
-    return gcvSTATUS_OK;
-
-OnError:
-    if (os->heap != gcvNULL)
-    {
-        gcmkVERIFY_OK(
-            gckHEAP_Destroy(os->heap));
-    }
-
-    if (os->memoryMapLock != gcvNULL)
-    {
-        gcmkVERIFY_OK(
-            gckOS_DeleteMutex(os, os->memoryMapLock));
-    }
-
-    if (os->memoryLock != gcvNULL)
-    {
-        gcmkVERIFY_OK(
-            gckOS_DeleteMutex(os, os->memoryLock));
-    }
-
-    if (os->atomicOperationLock != gcvNULL)
-    {
-        gcmkVERIFY_OK(
-            gckOS_DeleteMutex(os, os->atomicOperationLock));
-    }
-
-    free(os);
-
-    /* Return the error. */
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_Destroy
-**
-**  Destroy an gckOS object.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object that needs to be destroyed.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_Destroy(
-    IN gckOS Os
-    )
-{
-    gckHEAP heap;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    if (Os->heap != NULL)
-    {
-        /* Mark gckHEAP as gone. */
-        heap     = Os->heap;
-        Os->heap = NULL;
-
-        /* Destroy the gckHEAP object. */
-        gcmkVERIFY_OK(
-            gckHEAP_Destroy(heap));
-    }
-
-    /* Destroy the memory lock. */
-    gcmkVERIFY_OK(
-        gckOS_DeleteMutex(Os, Os->memoryMapLock));
-
-    gcmkVERIFY_OK(
-        gckOS_DeleteMutex(Os, Os->memoryLock));
-
-    /* Destroy the atomic operation lock. */
-    gcmkVERIFY_OK(
-        gckOS_DeleteMutex(Os, Os->atomicOperationLock));
-
-    /* Mark the gckOS object as unknown. */
-    Os->object.type = gcvOBJ_UNKNOWN;
-
-    /* Free the gckOS object. */
-    free(Os);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_Allocate
-**
-**  Allocate memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Memory
-**          Pointer to a variable that will hold the allocated memory location.
-*/
-gceSTATUS
-gckOS_Allocate(
-    IN gckOS Os,
-    IN gctSIZE_T Bytes,
-    OUT gctPOINTER * Memory
-    )
-{
-    gceSTATUS status;
-
-    /*gcmkHEADER_ARG("Os=0x%x Bytes=%lu", Os, Bytes);*/
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Memory != NULL);
-
-    /* Do we have a heap? */
-    if (Os->heap != NULL)
-    {
-        /* Allocate from the heap. */
-        gcmkONERROR(gckHEAP_Allocate(Os->heap, Bytes, Memory));
-    }
-    else
-    {
-        gcmkONERROR(gckOS_AllocateMemory(Os, Bytes, Memory));
-    }
-
-    /* Success. */
-    /*gcmkFOOTER_ARG("*memory=0x%x", *Memory);*/
-    return gcvSTATUS_OK;
-
-OnError:
-    /* Return the status. */
-    gcmkFOOTER();
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_Free
-**
-**  Free allocated memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Memory
-**          Pointer to memory allocation to free.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_Free(
-    IN gckOS Os,
-    IN gctPOINTER Memory
-    )
-{
-    gceSTATUS status;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Memory != NULL);
-
-    /* Do we have a heap? */
-    if (Os->heap != NULL)
-    {
-        /* Free from the heap. */
-        gcmkONERROR(gckHEAP_Free(Os->heap, Memory));
-    }
-    else
-    {
-        gcmkONERROR(gckOS_FreeMemory(Os, Memory));
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-
-OnError:
-    /* Return the status. */
-    gcmkFOOTER();
-    return status;
-}
-/*******************************************************************************
-**
-**  gckOS_AllocateMemory
-**
-**  Allocate memory wrapper.
-**
-**  INPUT:
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Memory
-**          Pointer to a variable that will hold the allocated memory location.
-*/
-gceSTATUS
-gckOS_AllocateMemory(
-    IN gckOS Os,
-    IN gctSIZE_T Bytes,
-    OUT gctPOINTER * Memory
-    )
-{
-    gctPOINTER memory;
-    gceSTATUS status;
-
-    gcmkHEADER_ARG("Os=0x%x Bytes=%lu", Os, Bytes);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Memory != NULL);
-
-    memory = (gctPOINTER) calloc(1, Bytes);
-
-    if (memory == NULL)
-    {
-        /* Out of memory. */
-        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
-    }
-
-    /* Return pointer to the memory allocation. */
-    *Memory = memory;
-
-    /* Success. */
-    gcmkFOOTER_ARG("*Memory=0x%x", *Memory);
-    return gcvSTATUS_OK;
-
-OnError:
-    /* Return the status. */
-    gcmkFOOTER();
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_FreeMemory
-**
-**  Free allocated memory wrapper.
-**
-**  INPUT:
-**
-**      gctPOINTER Memory
-**          Pointer to memory allocation to free.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_FreeMemory(
-    IN gckOS Os,
-    IN gctPOINTER Memory
-    )
-{
-    gcmkHEADER_ARG("Memory=0x%x", Memory);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_ARGUMENT(Memory != NULL);
-
-    /* Free the memory from the OS pool. */
-    free(Memory);
-
-    /* Success. */
-    gcmkFOOTER_NO();
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapMemory
-**
-**  Map physical memory into the current process.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Start of physical address memory.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to map.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Memory
-**          Pointer to a variable that will hold the logical address of the
-**          mapped memory.
-*/
-gceSTATUS gckOS_MapMemory(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctSIZE_T Bytes,
-    OUT gctPOINTER * Logical
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != 0);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Logical != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "Enter gckOS_MapMemory\n");
-
-    MEMORY_LOCK(Os);
-
-    /* Map physical address. */
-    *Logical = mmap64(0,
-        Bytes,
-        PROT_READ | PROT_WRITE,
-        MAP_PHYS | MAP_SHARED,
-        NOFD,
-        (off_t)Physical);
-
-    MEMORY_UNLOCK(Os);
-
-    if (*Logical == MAP_FAILED)
-    {
-        gcmkTRACE_ZONE(gcvLEVEL_ERROR,
-            gcvZONE_OS,
-            "gckOS_MapMemory: mmap error: %s\n",
-            strerror(errno));
-
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_OS,
-                "gckOS_MapMemory: User Mapped address for 0x%x is 0x%x\n",
-                (gctUINT32)Physical,
-                (gctUINT32)*Logical);
-
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UnmapMemory
-**
-**  Unmap physical memory out of the current process.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Start of physical address memory.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to unmap.
-**
-**      gctPOINTER Memory
-**          Pointer to a previously mapped memory region.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_UnmapMemory(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctSIZE_T Bytes,
-    IN gctPOINTER Logical
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != 0);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Logical != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_UnmapMemory\n");
-
-    if (Logical)
-    {
-        gctUINT32 res;
-        gcmkTRACE_ZONE(gcvLEVEL_VERBOSE,
-            gcvZONE_OS,
-            "[gckOS_UnmapMemory] Logical: 0x%x\n",
-            Logical
-            );
-
-        MEMORY_LOCK(Os);
-
-        res = munmap(Logical, Bytes);
-
-        MEMORY_UNLOCK(Os);
-
-        if (res == -1)
-        {
-            gcmkTRACE_ZONE(gcvLEVEL_ERROR,
-                gcvZONE_OS,
-                "gckOS_UnmapMemory: munmap error: %s\n",
-                strerror(errno));
-
-            return gcvSTATUS_INVALID_ARGUMENT;
-        }
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_AllocateNonPagedMemory
-**
-**  Allocate a number of pages from non-paged memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctBOOL InUserSpace
-**          gcvTRUE if the pages need to be mapped into user space.
-**
-**      gctSIZE_T * Bytes
-**          Pointer to a variable that holds the number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctSIZE_T * Bytes
-**          Pointer to a variable that hold the number of bytes allocated.
-**
-**      gctPHYS_ADDR * Physical
-**          Pointer to a variable that will hold the physical address of the
-**          allocation.
-**
-**      gctPOINTER * Logical
-**          Pointer to a variable that will hold the logical address of the
-**          allocation.
-*/
-gceSTATUS gckOS_AllocateNonPagedMemory(
-    IN gckOS Os,
-    IN gctBOOL InUserSpace,
-    IN OUT gctSIZE_T * Bytes,
-    OUT gctPHYS_ADDR * Physical,
-    OUT gctPOINTER * Logical
-    )
-{
-
-    if (InUserSpace)
-    {
-        /* TODO: Make a separate OS call for allocating from shared memory pool. */
-        *Logical = drv_shmpool_alloc_contiguous((gctUINT32)Physical, (gctHANDLE)Logical, *Bytes);
-
-        if (*Logical == gcvNULL)
-        {
-            gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocateNonPagedMemory: Out of memory.");
-
-            *Bytes = 0;
-            return gcvSTATUS_OUT_OF_RESOURCES;
-        }
-
-        /* Used to distinguish from memory allocated in kernel space. */
-        *((gctUINT32*)Physical) = 0;
-    }
-    else
-    {
-        drv_mempool_alloc_contiguous(*Bytes, Physical, Logical);
-
-        if (*Physical == gcvNULL || *Logical == gcvNULL)
-        {
-            gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocateNonPagedMemory: Out of memory.");
-
-            *Bytes = 0;
-            return gcvSTATUS_OUT_OF_RESOURCES;
-        }
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocateNonPagedMemory: "
-                "Bytes->0x%x, Logical->0x%x Physical->0x%x\n",
-                (gctUINT32)*Bytes,
-                *Logical,
-                *Physical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_FreeNonPagedMemory
-**
-**  Free previously allocated and mapped pages from non-paged memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes allocated.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocated memory.
-**
-**      gctPOINTER Logical
-**          Logical address of the allocated memory.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_FreeNonPagedMemory(
-    IN gckOS Os,
-    IN gctSIZE_T Bytes,
-    IN gctPHYS_ADDR Physical,
-    IN gctPOINTER Logical
-    )
-{
-    int rc;
-
-    if (Physical)
-    {
-        rc = drv_mempool_free(Logical);
-    }
-    else
-    {
-        rc = drv_shmpool_free(Logical);
-    }
-
-    if (rc == -1)
-    {
-        gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                    gcvZONE_OS,
-                    "gckOS_FreeNonPagedMemory: "
-                    "Unmap Failed Logical->0x%x, Bytes->%d, Physical->0x%x\n",
-                    (gctUINT32)Logical,
-                    Bytes,
-                    (gctUINT32)Physical);
-        return gcvSTATUS_INVALID_ARGUMENT;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_FreeNonPagedMemory: "
-                "Logical->0x%x Physical->0x%x\n",
-                (gctUINT32)Logical,
-                (gctUINT32)Physical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_ReadRegister
-**
-**  Read data from a register.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctUINT32 Address
-**          Address of register.
-**
-**  OUTPUT:
-**
-**      gctUINT32 * Data
-**          Pointer to a variable that receives the data read from the register.
-*/
-gceSTATUS gckOS_ReadRegister(
-    IN gckOS Os,
-    IN gctUINT32 Address,
-    OUT gctUINT32 * Data
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Data != NULL);
-
-    *Data = (gctUINT32)in32((uintptr_t) ((gctUINT8 *)Os->device->registerBase + Address));
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_WriteRegister
-**
-**  Write data to a register.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctUINT32 Address
-**          Address of register.
-**
-**      gctUINT32 Data
-**          Data for register.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_WriteRegister(
-    IN gckOS Os,
-    IN gctUINT32 Address,
-    IN gctUINT32 Data
-    )
-{
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_WriteRegister: "
-                "Writing to physical address [%x] = %x\n",
-                (gctUINT8 *)Os->device->registerBase,
-                Data);
-
-    out32((uintptr_t) ((gctUINT8 *)Os->device->registerBase + Address), (uint32_t)Data);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_GetPageSize
-**
-**  Get the system's page size.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**  OUTPUT:
-**
-**      gctSIZE_T * PageSize
-**          Pointer to a variable that will receive the system's page size.
-*/
-gceSTATUS gckOS_GetPageSize(
-    IN gckOS Os,
-    OUT gctSIZE_T * PageSize
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(PageSize != NULL);
-
-    /* Return the page size. */
-    *PageSize = (gctSIZE_T) __PAGESIZE;
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_GetPhysicalAddressProcess
-**
-**  Get the physical system address of a corresponding virtual address for a
-**  given process.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Logical
-**          Logical address.
-**
-**      gctUINT ProcessID
-**          Procedd ID.
-**
-**  OUTPUT:
-**
-**      gctUINT32 * Address
-**          Poinetr to a variable that receives the 32-bit physical adress.
-*/
-gceSTATUS
-gckOS_GetPhysicalAddressProcess(
-    IN gckOS Os,
-    IN gctPOINTER Logical,
-    IN gctUINT ProcessID,
-    OUT gctUINT32 * Address
-    )
-{
-    return gckOS_GetPhysicalAddress(Os, Logical, Address);
-}
-
-/*******************************************************************************
-**
-**  gckOS_GetPhysicalAddress
-**
-**  Get the physical system address of a corresponding virtual address.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Logical
-**          Logical address.
-**
-**  OUTPUT:
-**
-**      gctUINT32 * Address
-**          Pointer to a variable that receives the 32-bit physical adress.
-*/
-gceSTATUS gckOS_GetPhysicalAddress(
-    IN gckOS Os,
-    IN gctPOINTER Logical,
-    OUT gctUINT32 * Address
-    )
-{
-
-    gctUINT32 res;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Address != gcvNULL);
-
-    if ( drv_mempool_mem_offset(Logical, Address) != gcvSTATUS_OK)
-    {
-        if ( drv_shmpool_mem_offset(Logical, Address) != gcvSTATUS_OK)
-        {
-            printf("Warning, using mem_offset for Logical:%x!\n", (gctUINT32) Logical);
-
-            MEMORY_LOCK(Os);
-
-            /* TODO: mem_offset in QNX works only for memory that is allocated
-               contiguosly using gckOS_AllocateContiguous(). */
-            res = mem_offset( Logical, NOFD, 1, (off_t *)Address, NULL);
-
-            if (res == -1)
-            {
-                MEMORY_UNLOCK(Os);
-
-                gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                            gcvZONE_OS,
-                            "gckOS_GetPhysicalAddress: "
-                            "Unable to get physical address for 0x%x\n",
-                            (gctUINT32)Logical);
-
-                return gcvSTATUS_INVALID_ARGUMENT;
-            }
-
-            MEMORY_UNLOCK(Os);
-        }
-    }
-
-    /* Subtract base address to get a GPU physical address. */
-    gcmASSERT(*Address >= Os->baseAddress);
-    *Address -= Os->baseAddress;
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                    gcvZONE_OS,
-                    "gckOS_GetPhysicalAddress: Logical->0x%x Physical->0x%x\n",
-                    (gctUINT32)Logical,
-                    (gctUINT32)*Address);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapPhysical
-**
-**  Map a physical address into kernel space.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctUINT32 Physical
-**          Physical address of the memory to map.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to map.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Logical
-**          Pointer to a variable that receives the base address of the mapped
-**          memory.
-*/
-gceSTATUS gckOS_MapPhysical(
-    IN gckOS Os,
-    IN gctUINT32 Physical,
-    IN gctSIZE_T Bytes,
-    OUT gctPOINTER * Logical
-    )
-{
-    gctUINT32 physical;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
-
-    MEMORY_LOCK(Os);
-
-    /* Compute true physical address (before subtraction of the baseAddress). */
-    physical = Physical + Os->baseAddress;
-
-    /* Map physical address. */
-    *Logical = mmap64(0,
-        Bytes,
-        PROT_READ | PROT_WRITE,
-        MAP_PHYS | MAP_SHARED | MAP_NOINIT,
-        NOFD,
-        (off_t)physical);
-
-    MEMORY_UNLOCK(Os);
-
-    if (*Logical == MAP_FAILED)
-    {
-        gcmkTRACE_ZONE(gcvLEVEL_ERROR,
-            gcvZONE_OS,
-            "gckOS_MapMemory: mmap error: %s\n",
-            strerror(errno));
-
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS,
-                  "gckOS_MapPhysical: "
-                  "Physical->0x%X Bytes->0x%X Logical->0x%X\n",
-                  (gctUINT32) Physical,
-                  (gctUINT32) Bytes,
-                  (gctUINT32) *Logical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UnmapPhysical
-**
-**  Unmap a previously mapped memory region from kernel memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Logical
-**          Pointer to the base address of the memory to unmap.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to unmap.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_UnmapPhysical(
-    IN gckOS Os,
-    IN gctPOINTER Logical,
-    IN gctSIZE_T Bytes
-    )
-{
-    gctUINT32 res;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Logical != NULL);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-
-    MEMORY_LOCK(Os);
-
-    res = munmap(Logical, Bytes);
-
-    MEMORY_UNLOCK(Os);
-
-    if (res == -1)
-    {
-        gcmkTRACE_ZONE(gcvLEVEL_ERROR,
-            gcvZONE_OS,
-            "gckOS_UnmapMemory: munmap error: %s\n",
-            strerror(errno));
-
-        return gcvSTATUS_INVALID_ARGUMENT;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                    gcvZONE_OS,
-                    "gckOS_UnmapPhysical: "
-                    "Logical->0x%x Bytes->0x%x\n",
-                    (gctUINT32)Logical,
-                    (gctUINT32)Bytes);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_CreateMutex
-**
-**  Create a new mutex.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Mutex
-**          Pointer to a variable that will hold a pointer to the mutex.
-*/
-gceSTATUS gckOS_CreateMutex(
-    IN gckOS Os,
-    OUT gctPOINTER * Mutex
-    )
-{
-    gctUINT32 res;
-
-    /* Validate the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Mutex != NULL);
-
-    /* Allocate a FAST_MUTEX structure. */
-    *Mutex = (gctPOINTER) malloc(sizeof(pthread_mutex_t));
-
-    if (*Mutex == gcvNULL)
-    {
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    /* Initialize the semaphore.. Come up in unlocked state. */
-    res = pthread_mutex_init((pthread_mutex_t *)(*Mutex), NULL);
-    if (res != EOK)
-    {
-        return gcvSTATUS_OUT_OF_RESOURCES;
-    }
-
-    /* Return status. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_DeleteMutex
-**
-**  Delete a mutex.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Mutex
-**          Pointer to the mute to be deleted.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_DeleteMutex(
-    IN gckOS Os,
-    IN gctPOINTER Mutex
-    )
-{
-    gctUINT32 res;
-
-    /* Validate the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Mutex != NULL);
-
-    res = pthread_mutex_destroy((pthread_mutex_t *)(Mutex));
-
-    if (res != EOK)
-    {
-        return gcvSTATUS_INVALID_ARGUMENT;
-    }
-
-    /* Delete the fast mutex. */
-    free(Mutex);
-
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_AcquireMutex
-**
-**  Acquire a mutex.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Mutex
-**          Pointer to the mutex to be acquired.
-**
-**      gctUINT32 Timeout
-**          Timeout value specified in milliseconds.
-**          Specify the value of gcvINFINITE to keep the thread suspended
-**          until the mutex has been acquired.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_AcquireMutex(
-    IN gckOS Os,
-    IN gctPOINTER Mutex,
-    IN gctUINT32 Timeout
-    )
-{
-    /* Validate the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Mutex != gcvNULL);
-
-    if (Timeout == gcvINFINITE)
-    {
-        pthread_mutex_lock((pthread_mutex_t *) Mutex);
-
-        /* Success. */
-        return gcvSTATUS_OK;
-    }
-
-    while (Timeout-- > 0)
-    {
-        /* Try to acquire the fast mutex. */
-        if (!pthread_mutex_trylock((pthread_mutex_t *) Mutex))
-        {
-            /* Success. */
-            return gcvSTATUS_OK;
-        }
-
-        /* Wait for 1 millisecond. */
-        gcmkVERIFY_OK(gckOS_Delay(Os, 1));
-    }
-
-    /* Timeout. */
-    return gcvSTATUS_TIMEOUT;
-}
-
-/*******************************************************************************
-**
-**  gckOS_ReleaseMutex
-**
-**  Release an acquired mutex.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Mutex
-**          Pointer to the mutex to be released.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_ReleaseMutex(
-    IN gckOS Os,
-    IN gctPOINTER Mutex
-    )
-{
-    /* Validate the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Mutex != NULL);
-
-    /* Release the fast mutex. */
-    pthread_mutex_unlock((pthread_mutex_t *) Mutex);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_AtomicExchange
-**
-**  Atomically exchange a pair of 32-bit values.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      IN OUT gctINT32_PTR Target
-**          Pointer to the 32-bit value to exchange.
-**
-**      IN gctINT32 NewValue
-**          Specifies a new value for the 32-bit value pointed to by Target.
-**
-**      OUT gctINT32_PTR OldValue
-**          The old value of the 32-bit value pointed to by Target.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_AtomicExchange(
-    IN gckOS Os,
-    IN OUT gctUINT32_PTR Target,
-    IN gctUINT32 NewValue,
-    OUT gctUINT32_PTR OldValue
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    /* Acquire atomic operation lock. */
-    gcmkVERIFY_OK(gckOS_AcquireMutex(Os,
-                                    Os->atomicOperationLock,
-                                    gcvINFINITE));
-
-    /* Exchange the pair of 32-bit values. */
-    *OldValue = *Target;
-    *Target = NewValue;
-
-    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->atomicOperationLock));
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-
-/*******************************************************************************
-**
-**  gckOS_AtomicExchangePtr
-**
-**  Atomically exchange a pair of pointers.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      IN OUT gctPOINTER * Target
-**          Pointer to the 32-bit value to exchange.
-**
-**      IN gctPOINTER NewValue
-**          Specifies a new value for the pointer pointed to by Target.
-**
-**      OUT gctPOINTER * OldValue
-**          The old value of the pointer pointed to by Target.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_AtomicExchangePtr(
-    IN gckOS Os,
-    IN OUT gctPOINTER * Target,
-    IN gctPOINTER NewValue,
-    OUT gctPOINTER * OldValue
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    /* Acquire atomic operation lock. */
-    gcmkVERIFY_OK(gckOS_AcquireMutex(Os,
-                                    Os->atomicOperationLock,
-                                    gcvINFINITE));
-
-    /* Exchange the pair of pointers. */
-    *OldValue = *Target;
-    *Target = NewValue;
-
-    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->atomicOperationLock));
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-
-/*******************************************************************************
-**
-**  gckOS_Delay
-**
-**  Delay execution of the current thread for a number of milliseconds.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctUINT32 Delay
-**          Delay to sleep, specified in milliseconds.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_Delay(
-    IN gckOS Os,
-    IN gctUINT32 Delay
-    )
-{
-    /* Schedule delay. */
-    delay(Delay);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MemoryBarrier
-**
-**  Make sure the CPU has executed everything up to this point and the data got
-**  written to the specified pointer.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Address
-**          Address of memory that needs to be barriered.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_MemoryBarrier(
-    IN gckOS Os,
-    IN gctPOINTER Address
-    )
-{
-    /* Verify thearguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    __cpu_membarrier();
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_AllocatePagedMemory
-**
-**  Allocate memory from the paged pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctPHYS_ADDR * Physical
-**          Pointer to a variable that receives the physical address of the
-**          memory allocation.
-*/
-gceSTATUS
-gckOS_AllocatePagedMemory(
-    IN gckOS Os,
-    IN gctSIZE_T Bytes,
-    OUT gctPHYS_ADDR * Physical
-    )
-{
-    return gckOS_AllocatePagedMemoryEx(Os, gcvFALSE, Bytes, Physical);
-}
-
-/*******************************************************************************
-**
-**  gckOS_AllocatePagedMemoryEx
-**
-**  Allocate memory from the paged pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctBOOL Contiguous
-**          Need contiguous memory or not.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctPHYS_ADDR * Physical
-**          Pointer to a variable that receives the physical address of the
-**          memory allocation.
-*/
-gceSTATUS gckOS_AllocatePagedMemoryEx(
-    IN gckOS Os,
-    IN gctBOOL Contiguous,
-    IN gctSIZE_T Bytes,
-    OUT gctPHYS_ADDR * Physical
-    )
-{
-    int rc, fd, shm_ctl_flags = SHMCTL_ANON | SHMCTL_LAZYWRITE;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-    gcmkVERIFY_ARGUMENT(Physical != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_AllocatePagedMemory\n");
-
-    if (Contiguous)
-    {
-        shm_ctl_flags |= SHMCTL_PHYS;
-    }
-
-    /* Lock down, to avoid opening same shm file twice. */
-    MEMORY_LOCK(Os);
-
-    fd = shm_open("shm_gal", O_RDWR | O_CREAT, 0777);
-    if (fd == -1) {
-        printf("shm_open failed. error %s\n", strerror( errno ) );
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    /* Free to use the same name for next create shm object after shm_unlink. */
-    shm_unlink("shm_gal");
-
-    MEMORY_UNLOCK(Os);
-
-    /* Special flags for this shm, to make it write buffered. */
-    /* Virtual memory doesn't need to be physically contiguous. */
-    /* Allocations would be page aligned. */
-    rc = shm_ctl_special(fd,
-                         SHMCTL_ANON /*| SHMCTL_PHYS*/ | SHMCTL_LAZYWRITE,
-                         0,
-                         Bytes,
-                         0x9);
-    if (rc == -1) {
-        printf("shm_ctl_special failed. error %s\n", strerror( errno ) );
-        close(fd);
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    /* Use the fd as the handle for the physical memory just allocated. */
-    *Physical = (gctPHYS_ADDR) fd;
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocatePagedMemory: "
-                "Bytes->0x%x, Physical->0x%x\n",
-                (gctUINT32)Bytes,
-                (gctUINT32)*Physical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_FreePagedMemory
-**
-**  Free memory allocated from the paged pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocation.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes of the allocation.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_FreePagedMemory(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctSIZE_T Bytes
-    )
-{
-    int rc;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_FreePagedMemory\n");
-
-    rc = close((gctINT)Physical);
-    if ( rc == -1 )
-    {
-        printf("gckOS_FreePagedMemory failed. error: %s\n", strerror( errno ) );
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_LockPages
-**
-**  Lock memory allocated from the paged pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocation.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes of the allocation.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Logical
-**          Pointer to a variable that receives the address of the mapped
-**          memory.
-**
-**      gctSIZE_T * PageCount
-**          Pointer to a variable that receives the number of pages required for
-**          the page table.
-*/
-gceSTATUS gckOS_LockPages(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctSIZE_T Bytes,
-    IN gctUINT32 Pid,
-    OUT gctPOINTER * Logical,
-    OUT gctSIZE_T * PageCount
-    )
-{
-    void* addr;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != NULL);
-    gcmkVERIFY_ARGUMENT(Logical != NULL);
-    gcmkVERIFY_ARGUMENT(PageCount != NULL);
-    gcmkVERIFY_ARGUMENT(Bytes > 0);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_LockPages\n");
-
-    /* Map this memory inside user and galcore. */
-    addr = mmap64_join(Pid,
-                       0,
-                       Bytes,
-                       PROT_READ | PROT_WRITE,
-                       MAP_SHARED,
-                       (int)Physical,
-                       0);
-
-    if (addr == MAP_FAILED)
-    {
-        printf("gckOS_LockPages: couldn't map memory of size %d, Pid: %x [errno %s]",
-                (gctUINT32)Bytes, Pid, strerror( errno ) );
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    /* TODO: MLOCK may or may not be needed!. */
-    mlock((void*)addr, Bytes);
-
-    *Logical = (gctPOINTER)addr;
-    *PageCount = (gcmALIGN(Bytes, __PAGESIZE)) / __PAGESIZE;
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_LockPages: "
-                "gctPHYS_ADDR->0x%x Bytes->0x%x Logical->0x%x pid->%d\n",
-                (gctUINT32)Physical,
-                (gctUINT32)Bytes,
-                (gctUINT32)*Logical,
-                Pid);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapPages
-**
-**  Map paged memory into a page table.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocation.
-**
-**      gctSIZE_T PageCount
-**          Number of pages required for the physical address.
-**
-**      gctPOINTER PageTable
-**          Pointer to the page table to fill in.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_MapPages(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctPOINTER Logical,
-    IN gctSIZE_T PageCount,
-    IN gctPOINTER PageTable
-    )
-{
-    gctUINT32* table;
-    gctPOINTER addr;
-    size_t contigLen = 0;
-    off_t offset;
-    gctUINT32 bytes;
-    int rc;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != NULL);
-    gcmkVERIFY_ARGUMENT(PageCount > 0);
-    gcmkVERIFY_ARGUMENT(PageTable != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_MapPages\n");
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_MapPages: "
-                "Physical->0x%x PageCount->0x%x Logical->0x%x\n",
-                (gctUINT32)Physical,
-                (gctUINT32)PageCount,
-                (gctUINT32)Logical);
-
-    addr = Logical;
-    table = (gctUINT32 *)PageTable;
-    bytes = PageCount * __PAGESIZE;
-
-    /* Try to get the user pages so DMA can happen. */
-    while (PageCount > 0)
-    {
-        /* fd should be NOFD here, to get physical address. */
-        rc = mem_offset( addr, NOFD, bytes, &offset, &contigLen);
-        if (rc == -1) {
-            printf("gckOS_MapPages: mem_offset failed: %s\n", strerror( errno ) );
-            return gcvSTATUS_GENERIC_IO;
-        }
-
-        gcmASSERT(contigLen > 0);
-
-        while(contigLen > 0)
-        {
-            *table++ = (gctUINT32) offset;
-            offset += 4096;
-            addr += 4096;
-            contigLen -= 4096;
-            bytes -= 4096;
-            PageCount--;
-        }
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UnlockPages
-**
-**  Unlock memory allocated from the paged pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocation.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes of the allocation.
-**
-**      gctPOINTER Logical
-**          Address of the mapped memory.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_UnlockPages(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctUINT32 Pid,
-    IN gctSIZE_T Bytes,
-    IN gctPOINTER Logical
-    )
-{
-    int rc = 0;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Physical != NULL);
-    gcmkVERIFY_ARGUMENT(Logical != NULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "in gckOS_UnlockPages\n");
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_MapPages: "
-                "Physical->0x%x Bytes->0x%x Logical->0x%x Pid->0x%x\n",
-                (gctUINT32)Physical,
-                (gctUINT32)Bytes,
-                (gctUINT32)Logical,
-                (gctUINT32)Pid);
-
-    rc = munmap((void*)Logical, Bytes);
-    if (rc == -1) {
-        printf("munmap failed: %s\n", strerror( errno ) );
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    rc = munmap_peer(Pid, (void*)Logical, Bytes);
-    if (rc == -1) {
-        printf("munmap_peer failed: %s\n", strerror( errno ) );
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-
-/*******************************************************************************
-**
-**  gckOS_AllocateContiguous
-**
-**  Allocate memory from the contiguous pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctBOOL InUserSpace
-**          gcvTRUE if the pages need to be mapped into user space.
-**
-**      gctSIZE_T * Bytes
-**          Pointer to the number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctSIZE_T * Bytes
-**          Pointer to a variable that receives the number of bytes allocated.
-**
-**      gctPHYS_ADDR * Physical
-**          Pointer to a variable that receives the physical address of the
-**          memory allocation.
-**
-**      gctPOINTER * Logical
-**          Pointer to a variable that receives the logical address of the
-**          memory allocation.
-*/
-gceSTATUS gckOS_AllocateContiguous(
-    IN gckOS Os,
-    IN gctBOOL InUserSpace,
-    IN OUT gctSIZE_T * Bytes,
-    OUT gctPHYS_ADDR * Physical,
-    OUT gctPOINTER * Logical
-    )
-{
-    /* Same as non-paged memory for now. */
-    return gckOS_AllocateNonPagedMemory(Os,
-                InUserSpace,
-                Bytes,
-                Physical,
-                Logical
-                );
-}
-
-/*******************************************************************************
-**
-**  gckOS_FreeContiguous
-**
-**  Free memory allocated from the contiguous pool.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPHYS_ADDR Physical
-**          Physical address of the allocation.
-**
-**      gctPOINTER Logical
-**          Logicval address of the allocation.
-**
-**      gctSIZE_T Bytes
-**          Number of bytes of the allocation.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS gckOS_FreeContiguous(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Physical,
-    IN gctPOINTER Logical,
-    IN gctSIZE_T Bytes
-    )
-{
-    /* Same of non-paged memory for now. */
-    return gckOS_FreeNonPagedMemory(Os, Bytes, Physical, Logical);
-}
-
-/******************************************************************************
-**
-**  gckOS_GetKernelLogical
-**
-**  Return the kernel logical pointer that corresponds to the specified
-**  hardware address.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctUINT32 Address
-**          Hardware physical address.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * KernelPointer
-**          Pointer to a variable receiving the pointer in kernel address space.
-*/
-gceSTATUS
-gckOS_GetKernelLogical(
-    IN gckOS Os,
-    IN gctUINT32 Address,
-    OUT gctPOINTER * KernelPointer
-    )
-{
-    gceSTATUS status;
-
-    do
-    {
-        gckGALDEVICE device;
-        gckKERNEL kernel;
-        gcePOOL pool;
-        gctUINT32 offset;
-        gctPOINTER logical;
-
-        /* Extract the pointer to the gckGALDEVICE class. */
-        device = (gckGALDEVICE) Os->device;
-
-        /* Kernel shortcut. */
-        kernel = device->kernel;
-
-        /* Split the memory address into a pool type and offset. */
-        gcmkERR_BREAK(gckHARDWARE_SplitMemory(
-            kernel->hardware, Address, &pool, &offset
-            ));
-
-        /* Dispatch on pool. */
-        switch (pool)
-        {
-        case gcvPOOL_LOCAL_INTERNAL:
-            /* Internal memory. */
-            logical = device->internalLogical;
-            break;
-
-        case gcvPOOL_LOCAL_EXTERNAL:
-            /* External memory. */
-            logical = device->externalLogical;
-            break;
-
-        case gcvPOOL_SYSTEM:
-            /* System memory. */
-            logical = device->contiguousBase;
-            break;
-
-        default:
-            /* Invalid memory pool. */
-            return gcvSTATUS_INVALID_ARGUMENT;
-        }
-
-        /* Build logical address of specified address. */
-        * KernelPointer = ((gctUINT8_PTR) logical) + offset;
-
-        /* Success. */
-        return gcvSTATUS_OK;
-    }
-    while (gcvFALSE);
-
-    /* Return status. */
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapUserPointer
-**
-**  Map a pointer from the user process into the kernel address space.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Pointer
-**          Pointer in user process space that needs to be mapped.
-**
-**      gctSIZE_T Size
-**          Number of bytes that need to be mapped.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * KernelPointer
-**          Pointer to a variable receiving the mapped pointer in kernel address
-**          space.
-*/
-gceSTATUS
-gckOS_MapUserPointer(
-    IN gckOS Os,
-    IN gctPOINTER Pointer,
-    IN gctSIZE_T Size,
-    OUT gctPOINTER * KernelPointer
-    )
-{
-    /* A pointer is assumed to be allocated from its shared memory object.
-       Which is mapped by both user and kernel at the same vitual address. */
-    /* TODO: Check if Pointer is a valid pointer? */
-    *KernelPointer = Pointer;
-
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UnmapUserPointer
-**
-**  Unmap a user process pointer from the kernel address space.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Pointer
-**          Pointer in user process space that needs to be unmapped.
-**
-**      gctSIZE_T Size
-**          Number of bytes that need to be unmapped.
-**
-**      gctPOINTER KernelPointer
-**          Pointer in kernel address space that needs to be unmapped.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_UnmapUserPointer(
-    IN gckOS Os,
-    IN gctPOINTER Pointer,
-    IN gctSIZE_T Size,
-    IN gctPOINTER KernelPointer
-    )
-{
-    /* Nothing to unmap. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapUserPhysical
-**
-**  Map a physical address from the user process into the kernel address space.
-**  The physical address should be obtained by user from gckOS_AllocateNonPagedMemory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      IN gctPHYS_ADDR Phys,
-**          Physical address of memory that needs to be mapped.
-**
-**  OUTPUT:
-**
-**      gctPHYS_ADDR * KernelPointer
-**          Pointer to a variable receiving the mapped pointer in kernel address
-**          space.
-*/
-gceSTATUS
-gckOS_MapUserPhysical(
-    IN gckOS Os,
-    IN gctPHYS_ADDR Phys,
-    OUT gctPHYS_ADDR * KernelPointer
-    )
-{
-    /* A gctPHYS_ADDR is assumed to be allocated from physical memory pool. */
-    /* Dont call this function for pointers already in kernel space. */
-    printf("ERROR: %s Not supported.\n", __FUNCTION__);
-    *KernelPointer = (gctPHYS_ADDR)0xDEADBEEF;
-
-    return gcvSTATUS_NOT_SUPPORTED;
-}
-
-
-/*******************************************************************************
-**
-**  gckOS_WriteMemory
-**
-**  Write data to a memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctPOINTER Address
-**          Address of the memory to write to.
-**
-**      gctUINT32 Data
-**          Data for register.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_WriteMemory(
-    IN gckOS Os,
-    IN gctPOINTER Address,
-    IN gctUINT32 Data
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_ARGUMENT(Address != NULL);
-
-    /* Write memory. */
-    *(gctUINT32 *)Address = Data;
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_CreateSignal
-**
-**  Create a new signal.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctBOOL ManualReset
-**          If set to gcvTRUE, gckOS_Signal with gcvFALSE must be called in
-**          order to set the signal to nonsignaled state.
-**          If set to gcvFALSE, the signal will automatically be set to
-**          nonsignaled state by gckOS_WaitSignal function.
-**          Nonsignaled state in QNX is mutex acquired (not free).
-**
-**  OUTPUT:
-**
-**      gctSIGNAL * Signal
-**          Pointer to a variable receiving the created gctSIGNAL.
-*/
-gceSTATUS
-gckOS_CreateSignal(
-    IN gckOS Os,
-    IN gctBOOL ManualReset,
-    OUT gctSIGNAL * Signal
-    )
-{
-    gcskSIGNAL_PTR signal;
-    gceSTATUS status;
-
-    gcmkHEADER_ARG("Os=0x%x ManualReset=0x%x", Os, ManualReset);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Signal != NULL);
-
-    /* Create an event structure. */
-    signal = (gcskSIGNAL_PTR) malloc(sizeof(gcskSIGNAL));
-
-    if (signal == gcvNULL)
-    {
-        gcmFOOTER_NO();
-        return gcvSTATUS_OUT_OF_MEMORY;
-    }
-
-    signal->manualReset = ManualReset;
-
-    status = gckOS_CreateMutex(Os, (gctPOINTER *)(&signal->mutex));
-
-    if (gcmIS_ERROR(status))
-    {
-        /* Error. */
-        free(signal);
-        gcmFOOTER();
-        return status;
-    }
-
-    *Signal = (gctSIGNAL) signal;
-
-    /* Success. */
-    gcmkFOOTER_ARG("Os=0x%x Signal=0x%x", Os, Signal);
-    return gcvSTATUS_OK;
-
-}
-
-/*******************************************************************************
-**
-**  gckOS_DestroySignal
-**
-**  Destroy a signal.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIGNAL Signal
-**          Pointer to the gctSIGNAL.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_DestroySignal(
-    IN gckOS Os,
-    IN gctSIGNAL Signal
-    )
-{
-
-    gceSTATUS status = gcvSTATUS_OK;
-    gcskSIGNAL_PTR signal;
-
-    gcmkHEADER_ARG("Os=0x%x Signal=0x%x", Os, Signal);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Signal != NULL);
-
-    signal = (gcskSIGNAL_PTR) Signal;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Signal != NULL);
-
-    if (signal != gcvNULL )
-    {
-        status = gckOS_DeleteMutex(Os, (gctPOINTER)(signal->mutex));
-
-        free(signal);
-    }
-
-    /* Success. */
-    gcmkFOOTER_NO();
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_Signal
-**
-**  Set a state of the specified signal.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIGNAL Signal
-**          Pointer to the gctSIGNAL.
-**
-**      gctBOOL State
-**          If gcvTRUE, the signal will be set to signaled state.
-**          If gcvFALSE, the signal will be set to nonsignaled state.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_Signal(
-    IN gckOS Os,
-    IN gctSIGNAL Signal,
-    IN gctBOOL State
-    )
-{
-    gcskSIGNAL_PTR signal;
-    gceSTATUS status = gcvSTATUS_OK;
-
-    gcmkHEADER_ARG("Os=0x%x Signal=0x%x State=%d", Os, Signal, State);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
-
-    signal = (gcskSIGNAL_PTR) Signal;
-
-    /* Set the new state of the event. */
-    if (signal->manualReset && State)
-    {
-        /* Set the event to a signaled state. */
-        gckOS_ReleaseMutex(Os,(gctPOINTER *)(&signal->mutex));
-    }
-    else
-    {
-        gckOS_AcquireMutex(Os, (gctPOINTER *)(&signal->mutex), gcvINFINITE);
-    }
-
-    /* Success. */
-    gcmkFOOTER_NO();
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UserSignal
-**
-**  Set the specified signal which is owned by a process to signaled state.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIGNAL Signal
-**          Pointer to the gctSIGNAL.
-**
-**      gctHANDLE Process
-**          Handle of process owning the signal.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_UserSignal(
-    IN gckOS Os,
-    IN gctSIGNAL Signal,
-    IN gctINT Rcvid,
-    IN gctINT Coid
-    )
-{
-    gctINT rc;
-    struct sigevent event;
-
-    SIGEV_PULSE_INIT( &event, Coid, SIGEV_PULSE_PRIO_INHERIT, _PULSE_CODE_MINAVAIL, Signal);
-
-    rc = MsgDeliverEvent_r(Rcvid, &event);
-    if (rc != EOK)
-    {
-        gcmkTRACE(gcvLEVEL_INFO,
-                 "%s(%d): Sent signal to (receive ID = %d, connect ID = %d).",
-                 __FUNCTION__, __LINE__, Rcvid, Coid);
-
-        gcmkTRACE(gcvLEVEL_ERROR,
-                 "%s(%d): MsgDeliverEvent failed (%d).",
-                 __FUNCTION__, __LINE__, rc);
-
-;
-
-        return gcvSTATUS_GENERIC_IO;
-    }
-
-    /* Return status. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_WaitSignal
-**
-**  Wait for a signal to become signaled.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIGNAL Signal
-**          Pointer to the gctSIGNAL.
-**
-**      gctUINT32 Wait
-**          Number of milliseconds to wait.
-**          Pass the value of gcvINFINITE for an infinite wait.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_WaitSignal(
-    IN gckOS Os,
-    IN gctSIGNAL Signal,
-    IN gctUINT32 Wait
-    )
-{
-    gceSTATUS status = gcvSTATUS_OK;
-
-    gcskSIGNAL_PTR signal;
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
-
-    signal = (gcskSIGNAL_PTR) Signal;
-
-    status = gckOS_AcquireMutex(Os, (gctPOINTER *)(&signal->mutex), Wait);
-
-    /* If manualReset is true, use gckOS_Signal to acquire mutex again. */
-    if (signal->manualReset)
-    {
-        status = gckOS_ReleaseMutex(Os, (gctPOINTER *)(&signal->mutex));
-    }
-
-    /* Return status. */
-    return status;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapSignal
-**
-**  Map a signal in to the current process space.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctSIGNAL Signal
-**          Pointer to tha gctSIGNAL to map.
-**
-**      gctHANDLE Process
-**          Handle of process owning the signal.
-**
-**  OUTPUT:
-**
-**      gctSIGNAL * MappedSignal
-**          Pointer to a variable receiving the mapped gctSIGNAL.
-*/
-gceSTATUS
-gckOS_MapSignal(
-    IN gckOS Os,
-    IN gctSIGNAL Signal,
-    IN gctHANDLE Process,
-    OUT gctSIGNAL * MappedSignal
-    )
-{
-    printf("ERROR: %s Not supported.\n", __FUNCTION__);
-    return gcvSTATUS_NOT_SUPPORTED;
-}
-
-/*******************************************************************************
-**
-**  gckOS_MapUserMemory
-**
-**  Lock down a user buffer and return an DMA'able address to be used by the
-**  hardware to access it.
-**
-**  INPUT:
-**
-**      gctPOINTER Memory
-**          Pointer to memory to lock down.
-**
-**      gctSIZE_T Size
-**          Size in bytes of the memory to lock down.
-**
-**  OUTPUT:
-**
-**      gctPOINTER * Info
-**          Pointer to variable receiving the information record required by
-**          gckOS_UnmapUserMemory.
-**
-**      gctUINT32_PTR Address
-**          Pointer to a variable that will receive the address DMA'able by the
-**          hardware.
-*/
-gceSTATUS
-gckOS_MapUserMemory(
-    IN gckOS Os,
-    IN gctPOINTER Memory,
-    IN gctSIZE_T Size,
-    OUT gctPOINTER * Info,
-    OUT gctUINT32_PTR Address
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Memory != gcvNULL);
-    gcmkVERIFY_ARGUMENT(Size > 0);
-    gcmkVERIFY_ARGUMENT(Info != gcvNULL);
-    gcmkVERIFY_ARGUMENT(Address != gcvNULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE,
-        gcvZONE_OS,
-        "[gckOS_MapUserMemory] enter.\n"
-        );
-
-    printf("ERROR: %s Not supported.\n", __FUNCTION__);
-
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE,
-        gcvZONE_OS,
-        "[gckOS_MapUserMemory] leave.\n"
-        );
-
-    /* Return the status. */
-    return gcvSTATUS_NOT_SUPPORTED;
-}
-
-/*******************************************************************************
-**
-**  gckOS_UnmapUserMemory
-**
-**  Unlock a user buffer and that was previously locked down by
-**  gckOS_MapUserMemory.
-**
-**  INPUT:
-**
-**      gctPOINTER Memory
-**          Pointer to memory to unlock.
-**
-**      gctSIZE_T Size
-**          Size in bytes of the memory to unlock.
-**
-**      gctPOINTER Info
-**          Information record returned by gckOS_MapUserMemory.
-**
-**      gctUINT32_PTR Address
-**          The address returned by gckOS_MapUserMemory.
-**
-**  OUTPUT:
-**
-**      Nothing.
-*/
-gceSTATUS
-gckOS_UnmapUserMemory(
-    IN gckOS Os,
-    IN gctPOINTER Memory,
-    IN gctSIZE_T Size,
-    IN gctPOINTER Info,
-    IN gctUINT32 Address
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(Memory != gcvNULL);
-    gcmkVERIFY_ARGUMENT(Size > 0);
-    gcmkVERIFY_ARGUMENT(Info != gcvNULL);
-
-    gcmkTRACE_ZONE(gcvLEVEL_VERBOSE,
-        gcvZONE_OS,
-        "[gckOS_UnmapUserMemory] enter.\n"
-        );
-
-    printf("ERROR: %s Not supported.\n", __FUNCTION__);
-
-    /* Return the status. */
-    return gcvSTATUS_NOT_SUPPORTED;
-}
-
-/*******************************************************************************
-**
-**  gckOS_GetBaseAddress
-**
-**  Get the base address for the physical memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to the gckOS object.
-**
-**  OUTPUT:
-**
-**      gctUINT32_PTR BaseAddress
-**          Pointer to a variable that will receive the base address.
-*/
-gceSTATUS
-gckOS_GetBaseAddress(
-    IN gckOS Os,
-    OUT gctUINT32_PTR BaseAddress
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-    gcmkVERIFY_ARGUMENT(BaseAddress != gcvNULL);
-
-    /* Return base address. */
-    *BaseAddress = Os->baseAddress;
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckOS_SuspendInterrupt(
-    IN gckOS Os
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    InterruptLock(&Os->device->isrLock);
-
-    return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckOS_ResumeInterrupt(
-    IN gckOS Os
-    )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
-    InterruptUnlock(&Os->device->isrLock);
-
-    return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckOS_NotifyIdle(
-    IN gckOS Os,
-    IN gctBOOL Idle
-    )
-{
-    /* TODO */
-    return gcvSTATUS_OK;
-}
-
-/* Perform a memory copy. */
-gceSTATUS
-gckOS_MemCopy(
-        IN gctPOINTER Destination,
-        IN gctCONST_POINTER Source,
-        IN gctSIZE_T Bytes
-        )
-{
-        gcmkVERIFY_ARGUMENT(Destination != NULL);
-        gcmkVERIFY_ARGUMENT(Source != NULL);
-        gcmkVERIFY_ARGUMENT(Bytes > 0);
-
-        memcpy(Destination, Source, Bytes);
-
-        return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**  gckOS_AllocateNonPagedMemory
-**
-**  Allocate a number of pages from non-paged memory.
-**
-**  INPUT:
-**
-**      gckOS Os
-**          Pointer to an gckOS object.
-**
-**      gctBOOL InUserSpace
-**          gcvTRUE if the pages need to be mapped into user space.
-**
-**      gctSIZE_T * Bytes
-**          Pointer to a variable that holds the number of bytes to allocate.
-**
-**  OUTPUT:
-**
-**      gctSIZE_T * Bytes
-**          Pointer to a variable that hold the number of bytes allocated.
-**
-**      gctPHYS_ADDR * Physical
-**          Pointer to a variable that will hold the physical address of the
-**          allocation.
-**
-**      gctPOINTER * Logical
-**          Pointer to a variable that will hold the logical address of the
-**          allocation.
-*/
-gceSTATUS
-gckOS_AllocateNonPagedMemoryShmPool(
-    IN gckOS Os,
-    IN gctBOOL InUserSpace,
-    IN gctUINT32 Pid,
-    IN gctHANDLE Handle,
-    IN OUT gctSIZE_T * Bytes,
-    OUT gctPHYS_ADDR * Physical,
-    OUT gctPOINTER * Logical
-    )
-{
-
-    if (InUserSpace)
-    {
-        *Logical = drv_shmpool_alloc_contiguous(Pid, Handle, *Bytes);
-
-        if (*Logical == gcvNULL)
-        {
-            gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocateNonPagedMemory: Out of memory.");
-
-            *Bytes = 0;
-            return gcvSTATUS_OUT_OF_RESOURCES;
-        }
-
-        /* Used to distinguish from memory allocated in kernel space. */
-        *((gctUINT32*)Physical) = 0;
-    }
-    else
-    {
-        return gcvSTATUS_INVALID_ARGUMENT;
-    }
-
-    gcmkTRACE_ZONE(gcvLEVEL_INFO,
-                gcvZONE_OS,
-                "gckOS_AllocateNonPagedMemoryShmPool: "
-                "Bytes->0x%x, Logical->0x%x Physical->0x%x\n",
-                (gctUINT32)*Bytes,
-                *Logical,
-                *Physical);
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-int
-memmgr_peer_sendnc(pid_t pid, int coid, void *smsg, size_t sbytes, void *rmsg, size_t rbytes )
-{
-    mem_peer_t  peer;
-    iov_t       siov[2];
-    int         rc;
-
-    peer.i.type = _MEM_PEER;
-    peer.i.peer_msg_len = sizeof(peer);
-    peer.i.pid = pid;
-
-    SETIOV(siov + 0, &peer, sizeof peer);
-    SETIOV(siov + 1, smsg, sbytes);
-
-    do {
-        rc = MsgSendvsnc(coid, siov, 2, rmsg, rbytes);
-    } while (rc == -1 && errno == EINTR);
-
-    return rc;
-}
-
-void *
-_mmap2_peer(pid_t pid, void *addr, size_t len, int prot, int flags, int fd, off64_t off,
-        unsigned align, unsigned pre_load, void **base, size_t *size) {
-    mem_map_t msg;
-
-    msg.i.type = _MEM_MAP;
-    msg.i.zero = 0;
-    msg.i.addr = (uintptr_t)addr;
-    msg.i.len = len;
-    msg.i.prot = prot;
-    msg.i.flags = flags;
-    msg.i.fd = fd;
-    msg.i.offset = off;
-    msg.i.align = align;
-    msg.i.preload = pre_load;
-    msg.i.reserved1 = 0;
-    if (memmgr_peer_sendnc(pid, MEMMGR_COID, &msg.i, sizeof msg.i, &msg.o, sizeof msg.o) == -1) {
-        return MAP_FAILED;
-    }
-    if (base) {
-        *base = (void *)(uintptr_t)msg.o.real_addr;
-    }
-    if (size) {
-        *size = msg.o.real_size;
-    }
-    return (void *)(uintptr_t)msg.o.addr;
-}
-
-void *
-mmap64_peer(pid_t pid, void *addr, size_t len, int prot, int flags, int fd, off64_t off) {
-    return _mmap2_peer(pid, addr, len, prot, flags, fd, off, 0, 0, 0, 0);
-}
-
-int
-munmap_flags_peer(pid_t pid, void *addr, size_t len, unsigned flags) {
-    mem_ctrl_t msg;
-
-    msg.i.type = _MEM_CTRL;
-    msg.i.subtype = _MEM_CTRL_UNMAP;
-    msg.i.addr = (uintptr_t)addr;
-    msg.i.len = len;
-    msg.i.flags = flags;
-    return memmgr_peer_sendnc(pid, MEMMGR_COID, &msg.i, sizeof msg.i, 0, 0);
-}
-
-int
-munmap_peer(pid_t pid, void *addr, size_t len) {
-    return munmap_flags_peer(pid, addr, len, 0);
-}
-
-int
-mem_offset64_peer(pid_t pid, const uintptr_t addr, size_t len,
-                off64_t *offset, size_t *contig_len) {
-    int rc;
-
-    struct _peer_mem_off {
-        struct _mem_peer peer;
-        struct _mem_offset msg;
-    };
-    typedef union {
-        struct _peer_mem_off i;
-        struct _mem_offset_reply o;
-    } memoffset_peer_t;
-    memoffset_peer_t msg;
-
-    msg.i.peer.type = _MEM_PEER;
-    msg.i.peer.peer_msg_len = sizeof(msg.i.peer);
-    msg.i.peer.pid = pid;
-    msg.i.peer.reserved1 = 0;
-
-    msg.i.msg.type = _MEM_OFFSET;
-    msg.i.msg.subtype = _MEM_OFFSET_PHYS;
-    msg.i.msg.addr = addr;
-    msg.i.msg.reserved = -1;
-    msg.i.msg.len = len;
-
-    do {
-        rc = MsgSendnc(MEMMGR_COID, &msg.i, sizeof msg.i, &msg.o, sizeof msg.o);
-    } while (rc == -1 && errno == EINTR);
-
-    if (rc == -1) {
-        return -1;
-    }
-
-    *offset = msg.o.offset;
-    *contig_len = msg.o.size;
-
-    return 0;
-}
-
-#if defined(__X86__)
-#define CPU_VADDR_SERVER_HINT 0x30000000u
-#elif defined(__ARM__)
-#define CPU_VADDR_SERVER_HINT 0x20000000u
-#else
-#error NO CPU SOUP FOR YOU!
-#endif
-
-/*
- * map the object into both client and server at the same virtual address
- */
-void *
-mmap64_join(pid_t pid, void *addr, size_t len, int prot, int flags, int fd, off64_t off) {
-    void *svaddr, *cvaddr = MAP_FAILED;
-    uintptr_t hint = (uintptr_t)addr;
-    uintptr_t start_hint = hint;
-
-    if ( hint == (uintptr_t)0 )
-    {
-        hint = (uintptr_t)CPU_VADDR_SERVER_HINT;
-    }
-
-    do {
-        svaddr = mmap64( (void *)hint, len, prot, flags, fd, off );
-        if ( svaddr == MAP_FAILED ) {
-            break;
-        }
-        if ( svaddr == cvaddr ) {
-            return svaddr;
-        }
-
-        cvaddr = mmap64_peer( pid, svaddr, len, prot, MAP_FIXED | flags, fd, off );
-        if ( cvaddr == MAP_FAILED ) {
-            break;
-        }
-        if ( svaddr == cvaddr ) {
-            return svaddr;
-        }
-
-        if ( munmap( svaddr, len ) == -1 ) {
-            svaddr = MAP_FAILED;
-            break;
-        }
-
-        svaddr = mmap64( cvaddr, len, prot, flags, fd, off );
-        if ( svaddr == MAP_FAILED ) {
-            break;
-        }
-        if ( svaddr == cvaddr ) {
-            return svaddr;
-        }
-
-        if ( munmap( svaddr, len ) == -1 ) {
-            svaddr = MAP_FAILED;
-            break;
-        }
-        if ( munmap_peer( pid, cvaddr, len ) == -1 ) {
-            cvaddr = MAP_FAILED;
-            break;
-        }
-        hint += __PAGESIZE;
-
-    } while(hint != start_hint); /* do we really want to wrap all the way */
-
-    if ( svaddr != MAP_FAILED ) {
-        munmap( svaddr, len );
-    }
-    if ( cvaddr != MAP_FAILED ) {
-        munmap_peer( pid, cvaddr, len );
-    }
-
-    return MAP_FAILED;
-}
-
-/*******************************************************************************
-**  gckOS_CacheFlush
-**
-**  Flush the cache for the specified addresses.  The GPU is going to need the
-**  data.  If the system is allocating memory as non-cachable, this function can
-**  be ignored.
-**
-**  ARGUMENTS:
-**
-**      gckOS Os
-**          Pointer to gckOS object.
-**
-**      gctHANDLE Process
-**          Process handle Logical belongs to or gcvNULL if Logical belongs to
-**          the kernel.
-**
-**      gctPOINTER Logical
-**          Logical address to flush.
-**
-**      gctSIZE_T Bytes
-**          Size of the address range in bytes to flush.
-*/
-gceSTATUS
-gckOS_CacheFlush(
-    IN gckOS Os,
-    IN gctHANDLE Process,
-    IN gctPOINTER Logical,
-    IN gctSIZE_T Bytes
-    )
-{
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**  gckOS_CacheInvalidate
-**
-**  Flush the cache for the specified addresses and invalidate the lines as
-**  well.  The GPU is going to need and modify the data.  If the system is
-**  allocating memory as non-cachable, this function can be ignored.
-**
-**  ARGUMENTS:
-**
-**      gckOS Os
-**          Pointer to gckOS object.
-**
-**      gctHANDLE Process
-**          Process handle Logical belongs to or gcvNULL if Logical belongs to
-**          the kernel.
-**
-**      gctPOINTER Logical
-**          Logical address to flush.
-**
-**      gctSIZE_T Bytes
-**          Size of the address range in bytes to flush.
-*/
-gceSTATUS
-gckOS_CacheInvalidate(
-    IN gckOS Os,
-    IN gctHANDLE Process,
-    IN gctPOINTER Logical,
-    IN gctSIZE_T Bytes
-    )
-{
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-** Broadcast interface.
-*/
-
-gceSTATUS
-gckOS_Broadcast(
-    IN gckOS Os,
-    IN gckHARDWARE Hardware,
-    IN gceBROADCAST Reason
-    )
-{
-    return gcvSTATUS_OK;
-}
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.h b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_os.h
deleted file mode 100644 (file)
index 3f112ec..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-
-/*
- * Os.h
- *
- *  Created on: Feb 2, 2010
- *      Author: Tarang Vaish
- */
-
-#ifndef __gc_hal_kernel_os_h_
-#define __gc_hal_kernel_os_h_
-
-typedef struct
-{
-       io_msg_t iomsg;
-       gcsHAL_INTERFACE iface;
-} gcsDRIVER_ARGS;
-
-struct _gckPAGE_USAGE
-{
-       gctUINT16 pageCount;
-};
-
-struct _gckSHM_POOL
-{
-       gctHANDLE Handle;
-       gctINT32 fd;
-       gctUINT32 pid;
-       gctUINT32 freePage;
-       gctUINT32 pageCount;
-       gctUINT32 pageSize;
-       pthread_mutex_t mutex;
-       gctUINT32 Logical;
-       gctUINT32 Physical;
-       struct _gckPAGE_USAGE* pageUsage;
-       struct _gckSHM_POOL* nextPool;
-};
-
-typedef struct _gckSHM_POOL* gckSHM_POOL;
-typedef struct _gckPAGE_USAGE* gckPAGE_USAGE;
-
-gceSTATUS
-drv_mempool_init();
-
-void
-drv_mempool_destroy();
-
-void
-drv_mempool_alloc_contiguous(
-       IN gctUINT32 Bytes,
-       OUT gctPHYS_ADDR * Physical,
-       OUT gctPOINTER * Logical
-       );
-
-int
-drv_mempool_free(
-               IN gctPOINTER Logical
-               );
-
-gctUINT32
-drv_mempool_get_baseAddress();
-
-gctUINT32
-drv_mempool_get_basePAddress();
-
-gctUINT32
-drv_mempool_get_page_size();
-
-gctINT
-drv_mempool_get_fileDescriptor();
-
-gceSTATUS
-drv_mempool_mem_offset(
-       IN gctPOINTER Logical,
-       OUT gctUINT32 * Address);
-
-/* Shared memory pool functions. */
-gckSHM_POOL drv_shmpool_create(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle,
-               IN gctUINT32 PoolSize,
-               IN gctUINT32 PageSize);
-void
-drv_shmpool_destroy(
-               IN gckSHM_POOL ShmPool);
-
-gckSHM_POOL
-drv_shm_acquire_pool(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle
-               );
-
-gckSHM_POOL
-drv_shm_acquire_pool2(
-               IN gctPOINTER Logical
-               );
-
-gceSTATUS
-drv_shm_remove_pool(
-               IN gctHANDLE Handle
-               );
-
-gctUINT32
-drv_shmpool_get_BaseAddress(
-               IN gckSHM_POOL ShmPool
-               );
-
-gctUINT32
-drv_shmpool_get_page_size(
-               IN gckSHM_POOL ShmPool
-               );
-
-gceSTATUS
-drv_shmpool_mem_offset(
-       IN gctPOINTER Logical,
-       OUT gctUINT32 * Address);
-
-gctPOINTER
-drv_shmpool_alloc_contiguous(
-               IN gctUINT32 Pid,
-               IN gctHANDLE Handle,
-               IN gctUINT32 Bytes
-               );
-
-gctUINT32
-drv_shmpool_free(
-               IN gctPOINTER Logical
-               );
-
-void *
-mmap64_join(pid_t pid, void *addr, size_t len, int prot, int flags, int fd, off64_t off);
-
-int
-mem_offset64_peer(pid_t pid, const uintptr_t addr, size_t len,
-                               off64_t *offset, size_t *contig_len);
-
-int
-munmap_peer(pid_t pid, void *addr, size_t len);
-
-void *
-mmap64_peer(pid_t pid, void *addr, size_t len, int prot, int flags, int fd, off64_t off);
-
-#endif /* __gc_hal_kernel_os_h_ */
-
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.c b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.c
deleted file mode 100644 (file)
index 8375004..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#include "gc_hal_kernel_qnx.h"
-
-#define _GC_OBJ_ZONE   gcvZONE_KERNEL
-
-/******************************************************************************\
-******************************* gckKERNEL API Code ******************************
-\******************************************************************************/
-
-/*******************************************************************************
-**
-**     gckKERNEL_QueryVideoMemory
-**
-**     Query the amount of video memory.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**     OUTPUT:
-**
-**             gcsHAL_INTERFACE * Interface
-**                     Pointer to an gcsHAL_INTERFACE structure that will be filled in with
-**                     the memory information.
-*/
-gceSTATUS
-gckKERNEL_QueryVideoMemory(
-       IN gckKERNEL Kernel,
-       OUT gcsHAL_INTERFACE * Interface
-       )
-{
-       gckGALDEVICE device;
-
-       gcmkHEADER_ARG("Kernel=0x%x", Kernel);
-
-       /* Verify the arguments. */
-       gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-       gcmkVERIFY_ARGUMENT(Interface != NULL);
-
-       /* Extract the pointer to the gckGALDEVICE class. */
-       device = (gckGALDEVICE) Kernel->context;
-
-       /* Get internal memory size and physical address. */
-       Interface->u.QueryVideoMemory.internalSize = device->internalSize;
-       Interface->u.QueryVideoMemory.internalPhysical = device->internalPhysical;
-
-       /* Get external memory size and physical address. */
-       Interface->u.QueryVideoMemory.externalSize = device->externalSize;
-       Interface->u.QueryVideoMemory.externalPhysical = device->externalPhysical;
-
-       /* Get contiguous memory size and physical address. */
-       Interface->u.QueryVideoMemory.contiguousSize = device->contiguousSize;
-       Interface->u.QueryVideoMemory.contiguousPhysical = device->contiguousPhysical;
-
-       /* Success. */
-       gcmkFOOTER_NO();
-       return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_GetVideoMemoryPool
-**
-**     Get the gckVIDMEM object belonging to the specified pool.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**             gcePOOL Pool
-**                     Pool to query gckVIDMEM object for.
-**
-**     OUTPUT:
-**
-**             gckVIDMEM * VideoMemory
-**                     Pointer to a variable that will hold the pointer to the gckVIDMEM
-**                     object belonging to the requested pool.
-*/
-gceSTATUS
-gckKERNEL_GetVideoMemoryPool(
-       IN gckKERNEL Kernel,
-       IN gcePOOL Pool,
-       OUT gckVIDMEM * VideoMemory
-       )
-{
-       gckGALDEVICE device;
-       gckVIDMEM videoMemory;
-
-       gcmkHEADER_ARG("Kernel=0x%x Pool=0x%x", Kernel, Pool);
-
-       /* Verify the arguments. */
-       gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-       gcmkVERIFY_ARGUMENT(VideoMemory != NULL);
-
-    /* Extract the pointer to the gckGALDEVICE class. */
-    device = (gckGALDEVICE) Kernel->context;
-
-       /* Dispatch on pool. */
-       switch (Pool)
-       {
-       case gcvPOOL_LOCAL_INTERNAL:
-               /* Internal memory. */
-               videoMemory = device->internalVidMem;
-               break;
-
-       case gcvPOOL_LOCAL_EXTERNAL:
-               /* External memory. */
-               videoMemory = device->externalVidMem;
-               break;
-
-       case gcvPOOL_SYSTEM:
-               /* System memory. */
-               videoMemory = device->contiguousVidMem;
-               break;
-
-       default:
-               /* Unknown pool. */
-               videoMemory = NULL;
-       }
-
-       /* Return pointer to the gckVIDMEM object. */
-       *VideoMemory = videoMemory;
-
-       /* Return status. */
-       gcmkFOOTER_ARG("*VideoMemory=0x%x", *VideoMemory);
-       return (videoMemory == NULL) ? gcvSTATUS_OUT_OF_MEMORY : gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_MapMemory
-**
-**     Map video memory into the current process space.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**             gctPHYS_ADDR Physical
-**                     Physical address of video memory to map.
-**
-**             gctSIZE_T Bytes
-**                     Number of bytes to map.
-**
-**     OUTPUT:
-**
-**             gctPOINTER * Logical
-**                     Pointer to a variable that will hold the base address of the mapped
-**                     memory region.
-*/
-gceSTATUS
-gckKERNEL_MapMemory(
-       IN gckKERNEL Kernel,
-       IN gctPHYS_ADDR Physical,
-       IN gctSIZE_T Bytes,
-       OUT gctPOINTER * Logical
-       )
-{
-       return gckOS_MapMemory(Kernel->os, Physical, Bytes, Logical);
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_UnmapMemory
-**
-**     Unmap video memory from the current process space.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**             gctPHYS_ADDR Physical
-**                     Physical address of video memory to map.
-**
-**             gctSIZE_T Bytes
-**                     Number of bytes to map.
-**
-**             gctPOINTER Logical
-**                     Base address of the mapped memory region.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckKERNEL_UnmapMemory(
-       IN gckKERNEL Kernel,
-       IN gctPHYS_ADDR Physical,
-       IN gctSIZE_T Bytes,
-       IN gctPOINTER Logical
-       )
-{
-       return gckOS_UnmapMemory(Kernel->os, Physical, Bytes, Logical);
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_MapVideoMemory
-**
-**     Map video memory for the current process.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**      gctBOOL InUserSpace
-**          gcvTRUE to map the memory into the user space.
-**
-**             gctUINT32 Address
-**                     Hardware specific memory address.
-**
-**             gctUINT32 Pid
-**                     Process ID of the current process.
-**
-**             gctUINT32 Bytes
-**                     Number of bytes to map.
-**
-**     OUTPUT:
-**
-**             gctPOINTER * Logical
-**                     Pointer to a variable that will hold the logical address of the
-**                     specified memory address.
-*/
-gceSTATUS
-gckKERNEL_MapVideoMemory(
-       IN gckKERNEL Kernel,
-       IN gctBOOL InUserSpace,
-       IN gctUINT32 Address,
-       IN gctUINT32 Pid,
-       IN gctUINT32 Bytes,
-       OUT gctPOINTER * Logical
-       )
-{
-    off64_t offset = (off64_t)Address - (off64_t)drv_mempool_get_basePAddress();
-
-    gcmkHEADER_ARG("Kernel=0x%x InUserSpace=%d Address=%08x",
-                          Kernel, InUserSpace, Address);
-
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-
-    *Logical = (gctPOINTER)mmap64_peer(Pid, gcvNULL, Bytes,
-               PROT_READ | PROT_WRITE, MAP_SHARED | MAP_NOINIT,
-               drv_mempool_get_fileDescriptor(), offset);
-    if (*Logical == MAP_FAILED) {
-        *Logical = NULL;
-        return gcvSTATUS_INVALID_ADDRESS;
-    }
-
-    /* Success. */
-       return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_UnmapVideoMemory
-**
-**     Unmap video memory for the current process.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**             gctUINT32 Address
-**                     Hardware specific memory address.
-**
-**             gctUINT32 Pid
-**                     Process ID of the current process.
-**
-**             gctUINT32 Bytes
-**                     Number of bytes to map.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckKERNEL_UnmapVideoMemory(
-       IN gckKERNEL Kernel,
-       IN gctPOINTER Logical,
-       IN gctUINT32 Pid,
-       IN gctUINT32 Bytes
-       )
-{
-    /* Verify the arguments. */
-    gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-
-    if (munmap_peer(Pid, Logical, Bytes) == -1)
-    {
-       return gcvSTATUS_INVALID_ADDRESS;
-    }
-
-    /* Success. */
-    return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-**     gckKERNEL_Notify
-**
-**     This function is called by clients to notify the gckKERNEL object of an event.
-**
-**     INPUT:
-**
-**             gckKERNEL Kernel
-**                     Pointer to an gckKERNEL object.
-**
-**             gceNOTIFY Notification
-**                     Notification event.
-**
-**     OUTPUT:
-**
-**             Nothing.
-*/
-gceSTATUS
-gckKERNEL_Notify(
-       IN gckKERNEL Kernel,
-       IN gceNOTIFY Notification,
-       IN gctBOOL Data
-       )
-{
-       gceSTATUS status;
-
-       gcmkHEADER_ARG("Kernel=0x%x Notification=%d Data=%d",
-                                  Kernel, Notification, Data);
-
-       /* Verify the arguments. */
-       gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-
-       /* Dispatch on notifcation. */
-       switch (Notification)
-       {
-       case gcvNOTIFY_INTERRUPT:
-               /* Process the interrupt. */
-#if COMMAND_PROCESSOR_VERSION > 1
-               status = gckINTERRUPT_Notify(Kernel->interrupt, Data);
-#else
-               status = gckHARDWARE_Interrupt(Kernel->hardware, Data);
-#endif
-               break;
-
-       default:
-               status = gcvSTATUS_OK;
-               break;
-       }
-
-       /* Success. */
-       gcmkFOOTER();
-       return status;
-}
-
-gceSTATUS
-gckKERNEL_QuerySettings(
-       IN gckKERNEL Kernel,
-       OUT gcsKERNEL_SETTINGS * Settings
-       )
-{
-       gckGALDEVICE device;
-
-       gcmkHEADER_ARG("Kernel=0x%x", Kernel);
-
-       /* Verify the arguments. */
-       gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-       gcmkVERIFY_ARGUMENT(Settings != gcvNULL);
-
-       /* Extract the pointer to the gckGALDEVICE class. */
-    device = (gckGALDEVICE) Kernel->context;
-
-       /* Fill in signal. */
-       Settings->signal = -1;
-
-       /* Success. */
-       gcmkFOOTER_ARG("Settings->signal=%d", Settings->signal);
-       return gcvSTATUS_OK;
-}
-
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.h b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/gc_hal_kernel_qnx.h
deleted file mode 100644 (file)
index ef541d4..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-*
-*    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-*
-*    The material in this file is confidential and contains trade secrets
-*    of Vivante Corporation. This is proprietary information owned by
-*    Vivante Corporation. No part of this work may be disclosed,
-*    reproduced, copied, transmitted, or used in any way for any purpose,
-*    without the express written permission of Vivante Corporation.
-*
-*****************************************************************************
-*
-*    Auto-generated file on 12/8/2010. Do not edit!!!
-*
-*****************************************************************************/
-
-
-
-
-#ifndef __gc_hal_kernel_qnx_h_
-#define __gc_hal_kernel_qnx_h_
-
-#define _QNX_SOURCE
-
-#include <errno.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <sys/iofunc.h>
-#include <sys/dispatch.h>
-#include <sys/procmgr.h>
-#include <sys/memmsg.h>
-#include <fcntl.h>
-#include <sys/syspage.h>
-#include <hw/inout.h>
-#include <atomic.h>
-
-#define NTSTRSAFE_NO_CCH_FUNCTIONS
-#include "gc_hal.h"
-#include "gc_hal_driver.h"
-#include "gc_hal_kernel.h"
-#include "gc_hal_kernel_device.h"
-#include "gc_hal_kernel_os.h"
-#include "../inc/gc_hal_common_qnx.h"
-
-#define _WIDE(string)                          L##string
-#define WIDE(string)                           _WIDE(string)
-
-#define countof(a)                                     (sizeof(a) / sizeof(a[0]))
-
-#ifndef GAL_DEV
-#define GAL_DEV        "/dev/galcore"
-#endif
-
-#endif /* __gc_hal_kernel_qnx_h_ */
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/kernel/makefile.linux b/drivers/staging/rk29/vivante/hal/os/qnx/kernel/makefile.linux
deleted file mode 100644 (file)
index 64ac375..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-##############################################################################
-#  
-#    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-#  
-#    The material in this file is confidential and contains trade secrets
-#    of Vivante Corporation. This is proprietary information owned by
-#    Vivante Corporation. No part of this work may be disclosed, 
-#    reproduced, copied, transmitted, or used in any way for any purpose, 
-#    without the express written permission of Vivante Corporation.
-#  
-##############################################################################
-#  
-#    Auto-generated file on 12/17/2010. Do not edit!!!
-#  
-##############################################################################
-
-
-#
-# Qnx build file for kernel HAL layer.
-#
-
-################################################################################
-# Include common definitions.
-
-include $(AQROOT)/makefile.linux.def
-
-################################################################################
-# Define a shortcut for the main target.
-
-#ifeq ($(STATIC_LINK),1)
-    STATIC = 1
-#else
-    DYNAMIC = 1
-#endif
-PROGRAM := 1
-
-#ifeq ($(STATIC), 1)
-    TARGET_NAME = galcore.a
-#else
-    TARGET_NAME = galcore
-#endif
-
-################################################################################
-# Installation directory
-INSTALL_DIR := $(SDK_DIR)/drivers
-
-################################################################################
-# Supply additional include directories.
-
-INCLUDE += -I$(AQROOT)/hal/inc
-INCLUDE += -I$(AQROOT)/hal/user
-INCLUDE += -I$(AQROOT)/hal/kernel
-INCLUDE += -I$(AQARCH)/hal/kernel
-INCLUDE += -I$(AQARCH)/hal/kernel
-CFLAGS += $(INCLUDE)
-CFLAGS += -fPIC
-
-################################################################################
-# Supply necessary libraries.
-
-# Specify Vivante library paths.
-LIBS += -L $(AQARCH)/hal/kernel/$(OBJ_DIR)
-LIBS += -L $(AQROOT)/hal/kernel/$(OBJ_DIR)
-LIBS += -l halarchkernel -l halkernel 
-
-################################################################################
-# Describe object files.
-
-OBJECTS = \
-          $(OBJ_DIR)/gc_hal_kernel_driver.o \
-          $(OBJ_DIR)/gc_hal_kernel_os.o \
-          $(OBJ_DIR)/gc_hal_kernel_qnx.o \
-          $(OBJ_DIR)/gc_hal_kernel_device.o \
-          $(OBJ_DIR)/gc_hal_kernel_debug.o \
-
-include $(AQROOT)/common.target
-
-
diff --git a/drivers/staging/rk29/vivante/hal/os/qnx/makefile.linux b/drivers/staging/rk29/vivante/hal/os/qnx/makefile.linux
deleted file mode 100644 (file)
index 75a7a4e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-#  
-#    Copyright (c) 2005 - 2010 by Vivante Corp.  All rights reserved.
-#  
-#    The material in this file is confidential and contains trade secrets
-#    of Vivante Corporation. This is proprietary information owned by
-#    Vivante Corporation. No part of this work may be disclosed, 
-#    reproduced, copied, transmitted, or used in any way for any purpose, 
-#    without the express written permission of Vivante Corporation.
-#  
-##############################################################################
-#  
-#    Auto-generated file on 12/17/2010. Do not edit!!!
-#  
-##############################################################################
-
-
-#
-# QNX build file for the kernel level HAL libraries.
-#
-
-################################################################################
-# Define make command.
-MAKE = make --makefile=makefile.linux
-
-
-################################################################################
-# Define build directories.
-
-HAL_KERNEL_DRV_ARCH    := $(AQARCH)/hal/kernel
-HAL_KERNEL_DRV_OS      := $(AQROOT)/hal/os/qnx/kernel
-HAL_KERNEL_DRV_MAIN    := $(AQROOT)/hal/kernel
-
-$(HAL_KERNEL_DRV_OS): $(HAL_KERNEL_DRV_ARCH) $(HAL_KERNEL_DRV_MAIN)
-
-MODULES        := $(HAL_KERNEL_DRV_ARCH) $(HAL_KERNEL_DRV_OS) $(HAL_KERNEL_DRV_MAIN)
-MAIN_MODULE    = $(HAL_KERNEL_DRV_OS)
-
-include $(AQROOT)/common.node
-
index d2c805e2c47f8e507d66d35bdbdb5e997860adc1..430603554a14955120aaa24365362ec98f3d8700 100644 (file)
@@ -1,21 +1,21 @@
 /****************************************************************************
-*
-*    Copyright (C) 2005 - 2010 by Vivante Corp.
-*
+*  
+*    Copyright (C) 2005 - 2011 by Vivante Corp.
+*  
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the license, or
 *    (at your option) any later version.
-*
+*  
 *    This program is distributed in the hope that it will be useful,
 *    but 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
+*  
 *****************************************************************************/
 
 
@@ -167,4 +167,3 @@ struct _gcoQUEUE
 #endif
 
 #endif /* __gc_hal_user_context_h_ */
-