From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by yocto-www.yoctoproject.org (Postfix) with ESMTP id EB370E00596 for ; Wed, 25 Apr 2012 18:30:28 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 25 Apr 2012 18:30:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.67,351,1309762800"; d="scan'208";a="136862548" Received: from rsaxena-desktop.sc.intel.com (HELO localhost) ([143.183.188.84]) by orsmga002.jf.intel.com with ESMTP; 25 Apr 2012 18:30:17 -0700 From: rahul.saxena@intel.com To: yocto@yoctoproject.org, bruce.ashfield@windriver.org, tom.zanussi@intel.com, kishore.k.bodke@intel.com Date: Wed, 25 Apr 2012 11:17:55 -0700 Message-Id: <0db94ea0705ad766cf9397aedef8a5f343b5629d.1335393641.git.rahul.saxena@intel.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: References: X-Mailman-Approved-At: Wed, 25 Apr 2012 21:46:25 -0700 Subject: [PATCH 1/3] Revert "yocto/pvr: integrate pvr support" X-BeenThere: yocto@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Discussion of all things Yocto List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Apr 2012 01:30:37 -0000 From: Rahul Saxena This reverts commit 3604d007243d3db5fea8704f78a3608862e592f9. A updated version of the linux-3.0.0-cdv.patch was recently released by MeeGo. This revert will allow application of new patch. Signed-off-by: Rahul Saxena --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/cdv/Kconfig | 50 - drivers/staging/cdv/Makefile | 198 - drivers/staging/cdv/bc_video/bufferclass_video.c | 327 -- drivers/staging/cdv/bc_video/bufferclass_video.h | 171 - .../staging/cdv/bc_video/bufferclass_video_linux.c | 838 ---- .../staging/cdv/bc_video/bufferclass_video_linux.h | 67 - drivers/staging/cdv/drv/psb_bl.c | 135 - drivers/staging/cdv/drv/psb_dpst.c | 283 -- drivers/staging/cdv/drv/psb_dpst.h | 98 - drivers/staging/cdv/drv/psb_drm.h | 562 --- drivers/staging/cdv/drv/psb_drv.c | 1881 -------- drivers/staging/cdv/drv/psb_drv.h | 1203 ----- drivers/staging/cdv/drv/psb_fb.c | 812 ---- drivers/staging/cdv/drv/psb_fb.h | 59 - drivers/staging/cdv/drv/psb_gtt.c | 1045 ----- drivers/staging/cdv/drv/psb_gtt.h | 112 - drivers/staging/cdv/drv/psb_hotplug.c | 439 -- drivers/staging/cdv/drv/psb_hotplug.h | 90 - drivers/staging/cdv/drv/psb_intel_bios.c | 289 -- drivers/staging/cdv/drv/psb_intel_bios.h | 470 -- drivers/staging/cdv/drv/psb_intel_crt.c | 353 -- drivers/staging/cdv/drv/psb_intel_display.c | 1675 ------- drivers/staging/cdv/drv/psb_intel_display.h | 25 - drivers/staging/cdv/drv/psb_intel_dpll_cdv.c | 262 -- drivers/staging/cdv/drv/psb_intel_drv.h | 252 - drivers/staging/cdv/drv/psb_intel_hdmi.c | 684 --- drivers/staging/cdv/drv/psb_intel_hdmi.h | 935 ---- drivers/staging/cdv/drv/psb_intel_hdmi_edid.h | 1057 ----- drivers/staging/cdv/drv/psb_intel_hdmi_reg.h | 130 - drivers/staging/cdv/drv/psb_intel_i2c.c | 171 - drivers/staging/cdv/drv/psb_intel_lvds.c | 701 --- drivers/staging/cdv/drv/psb_intel_modes.c | 77 - drivers/staging/cdv/drv/psb_intel_opregion.c | 340 -- drivers/staging/cdv/drv/psb_intel_reg.h | 1461 ------ drivers/staging/cdv/drv/psb_irq.c | 681 --- drivers/staging/cdv/drv/psb_irq.h | 49 - drivers/staging/cdv/drv/psb_powermgmt.c | 875 ---- drivers/staging/cdv/drv/psb_powermgmt.h | 98 - drivers/staging/cdv/drv/psb_pvr_glue.c | 74 - drivers/staging/cdv/drv/psb_pvr_glue.h | 26 - drivers/staging/cdv/drv/psb_reg.h | 596 --- drivers/staging/cdv/drv/psb_reset.c | 144 - drivers/staging/cdv/drv/psb_schedule.c | 51 - drivers/staging/cdv/drv/psb_schedule.h | 79 - drivers/staging/cdv/drv/psb_sgx.c | 943 ---- drivers/staging/cdv/drv/psb_sgx.h | 32 - drivers/staging/cdv/drv/psb_socket.c | 374 -- drivers/staging/cdv/drv/psb_umevents.c | 491 -- drivers/staging/cdv/drv/psb_umevents.h | 161 - drivers/staging/cdv/imgv/msvdx_power.c | 166 - drivers/staging/cdv/imgv/msvdx_power.h | 48 - drivers/staging/cdv/imgv/psb_buffer.c | 442 -- drivers/staging/cdv/imgv/psb_fence.c | 167 - drivers/staging/cdv/imgv/psb_mmu.c | 1041 ----- drivers/staging/cdv/imgv/psb_msvdx.c | 1451 ------ drivers/staging/cdv/imgv/psb_msvdx.h | 1388 ------ drivers/staging/cdv/imgv/psb_msvdxinit.c | 1164 ----- drivers/staging/cdv/imgv/psb_ttm_fence.c | 603 --- drivers/staging/cdv/imgv/psb_ttm_fence_api.h | 272 -- drivers/staging/cdv/imgv/psb_ttm_fence_driver.h | 302 -- drivers/staging/cdv/imgv/psb_ttm_fence_user.c | 237 - drivers/staging/cdv/imgv/psb_ttm_fence_user.h | 140 - drivers/staging/cdv/imgv/psb_ttm_glue.c | 376 -- drivers/staging/cdv/imgv/psb_ttm_placement_user.c | 631 --- drivers/staging/cdv/imgv/psb_ttm_placement_user.h | 252 - drivers/staging/cdv/imgv/psb_ttm_userobj_api.h | 85 - drivers/staging/cdv/pvr/COPYING | 351 -- drivers/staging/cdv/pvr/INSTALL | 76 - drivers/staging/cdv/pvr/README | 48 - drivers/staging/cdv/pvr/eurasiacon/.gitignore | 6 - drivers/staging/cdv/pvr/include4/dbgdrvif.h | 328 -- drivers/staging/cdv/pvr/include4/img_defs.h | 121 - drivers/staging/cdv/pvr/include4/img_types.h | 151 - drivers/staging/cdv/pvr/include4/pdumpdefs.h | 108 - drivers/staging/cdv/pvr/include4/pvr_debug.h | 148 - drivers/staging/cdv/pvr/include4/pvrmodule.h | 31 - drivers/staging/cdv/pvr/include4/pvrversion.h | 61 - drivers/staging/cdv/pvr/include4/services.h | 1235 ----- drivers/staging/cdv/pvr/include4/servicesext.h | 846 ---- drivers/staging/cdv/pvr/include4/sgx_options.h | 237 - drivers/staging/cdv/pvr/include4/sgxapi_km.h | 423 -- drivers/staging/cdv/pvr/include4/sgxscript.h | 81 - .../3rdparty/linux_framebuffer_mrst/.gitignore | 6 - .../linux_framebuffer_mrst/makefile.linux.common | 37 - .../3rdparty/linux_framebuffer_mrst/mrstlfb.h | 303 -- .../linux_framebuffer_mrst/mrstlfb_displayclass.c | 1652 ------- .../linux_framebuffer_mrst/mrstlfb_linux.c | 192 - .../include/env/linux-intel/pvr_drm_shared.h | 50 - .../services4/include/env/linux/pvr_drm_shared.h | 50 - .../cdv/pvr/services4/include/kernelbuffer.h | 72 - .../cdv/pvr/services4/include/kerneldisplay.h | 165 - drivers/staging/cdv/pvr/services4/include/pdump.h | 37 - .../staging/cdv/pvr/services4/include/pvr_bridge.h | 1784 -------- .../cdv/pvr/services4/include/pvr_bridge_km.h | 305 -- .../staging/cdv/pvr/services4/include/pvrmmap.h | 44 - .../cdv/pvr/services4/include/pvrsrv_errors.h | 266 -- .../cdv/pvr/services4/include/servicesint.h | 391 -- .../staging/cdv/pvr/services4/include/sgx_bridge.h | 644 --- .../cdv/pvr/services4/include/sgx_mkif_km.h | 347 -- .../staging/cdv/pvr/services4/include/sgxinfo.h | 470 -- .../cdv/pvr/services4/srvkm/bridged/.gitignore | 5 - .../services4/srvkm/bridged/bridged_pvr_bridge.c | 4782 -------------------- .../services4/srvkm/bridged/bridged_pvr_bridge.h | 252 - .../pvr/services4/srvkm/bridged/bridged_support.c | 89 - .../pvr/services4/srvkm/bridged/bridged_support.h | 47 - .../srvkm/bridged/sgx/bridged_sgx_bridge.c | 3744 --------------- .../srvkm/bridged/sgx/bridged_sgx_bridge.h | 42 - .../cdv/pvr/services4/srvkm/common/.gitignore | 5 - .../pvr/services4/srvkm/common/buffer_manager.c | 2531 ----------- .../cdv/pvr/services4/srvkm/common/deviceclass.c | 2013 -------- .../cdv/pvr/services4/srvkm/common/deviceid.h | 36 - .../cdv/pvr/services4/srvkm/common/devicemem.c | 1797 -------- .../cdv/pvr/services4/srvkm/common/handle.c | 1873 -------- .../staging/cdv/pvr/services4/srvkm/common/hash.c | 506 --- .../staging/cdv/pvr/services4/srvkm/common/lists.c | 99 - .../staging/cdv/pvr/services4/srvkm/common/mem.c | 153 - .../cdv/pvr/services4/srvkm/common/mem_debug.c | 250 - .../cdv/pvr/services4/srvkm/common/metrics.c | 160 - .../cdv/pvr/services4/srvkm/common/osfunc_common.c | 31 - .../cdv/pvr/services4/srvkm/common/pdump_common.c | 2371 ---------- .../cdv/pvr/services4/srvkm/common/perproc.c | 305 -- .../staging/cdv/pvr/services4/srvkm/common/power.c | 719 --- .../cdv/pvr/services4/srvkm/common/pvrsrv.c | 1338 ------ .../staging/cdv/pvr/services4/srvkm/common/queue.c | 1079 ----- .../staging/cdv/pvr/services4/srvkm/common/ra.c | 1725 ------- .../cdv/pvr/services4/srvkm/common/resman.c | 751 --- .../cdv/pvr/services4/srvkm/devices/sgx/.gitignore | 5 - .../cdv/pvr/services4/srvkm/devices/sgx/mmu.c | 3696 --------------- .../cdv/pvr/services4/srvkm/devices/sgx/mmu.h | 154 - .../cdv/pvr/services4/srvkm/devices/sgx/pb.c | 466 -- .../services4/srvkm/devices/sgx/sgx_bridge_km.h | 160 - .../srvkm/devices/sgx/sgx_ukernel_status_codes.h | 1024 ----- .../pvr/services4/srvkm/devices/sgx/sgxconfig.h | 361 -- .../pvr/services4/srvkm/devices/sgx/sgxinfokm.h | 574 --- .../cdv/pvr/services4/srvkm/devices/sgx/sgxinit.c | 2824 ------------ .../cdv/pvr/services4/srvkm/devices/sgx/sgxkick.c | 784 ---- .../cdv/pvr/services4/srvkm/devices/sgx/sgxpower.c | 481 -- .../cdv/pvr/services4/srvkm/devices/sgx/sgxreset.c | 667 --- .../pvr/services4/srvkm/devices/sgx/sgxtransfer.c | 750 --- .../cdv/pvr/services4/srvkm/devices/sgx/sgxutils.c | 1168 ----- .../cdv/pvr/services4/srvkm/devices/sgx/sgxutils.h | 114 - .../cdv/pvr/services4/srvkm/env/linux/.gitignore | 5 - .../cdv/pvr/services4/srvkm/env/linux/env_data.h | 66 - .../pvr/services4/srvkm/env/linux/env_perproc.h | 56 - .../cdv/pvr/services4/srvkm/env/linux/event.c | 293 -- .../cdv/pvr/services4/srvkm/env/linux/event.h | 32 - .../cdv/pvr/services4/srvkm/env/linux/linkage.h | 52 - .../cdv/pvr/services4/srvkm/env/linux/lock.h | 32 - .../staging/cdv/pvr/services4/srvkm/env/linux/mm.c | 2027 --------- .../staging/cdv/pvr/services4/srvkm/env/linux/mm.h | 336 -- .../cdv/pvr/services4/srvkm/env/linux/mmap.c | 1151 ----- .../cdv/pvr/services4/srvkm/env/linux/mmap.h | 122 - .../cdv/pvr/services4/srvkm/env/linux/module.c | 771 ---- .../cdv/pvr/services4/srvkm/env/linux/mutex.h | 85 - .../cdv/pvr/services4/srvkm/env/linux/mutils.c | 136 - .../cdv/pvr/services4/srvkm/env/linux/mutils.h | 103 - .../cdv/pvr/services4/srvkm/env/linux/osfunc.c | 3115 ------------- .../cdv/pvr/services4/srvkm/env/linux/osperproc.c | 113 - .../cdv/pvr/services4/srvkm/env/linux/pdump.c | 628 --- .../pvr/services4/srvkm/env/linux/private_data.h | 69 - .../cdv/pvr/services4/srvkm/env/linux/proc.c | 835 ---- .../cdv/pvr/services4/srvkm/env/linux/proc.h | 108 - .../pvr/services4/srvkm/env/linux/pvr_bridge_k.c | 432 -- .../cdv/pvr/services4/srvkm/env/linux/pvr_debug.c | 424 -- .../cdv/pvr/services4/srvkm/env/linux/pvr_drm.c | 479 -- .../cdv/pvr/services4/srvkm/env/linux/pvr_drm.h | 107 - .../cdv/pvr/services4/srvkm/hwdefs/mnemedefs.h | 94 - .../cdv/pvr/services4/srvkm/hwdefs/sgx535defs.h | 650 --- .../cdv/pvr/services4/srvkm/hwdefs/sgx540defs.h | 547 --- .../pvr/services4/srvkm/hwdefs/sgx543_v1.164defs.h | 1284 ------ .../cdv/pvr/services4/srvkm/hwdefs/sgx544defs.h | 1367 ------ .../cdv/pvr/services4/srvkm/hwdefs/sgx545defs.h | 1180 ----- .../cdv/pvr/services4/srvkm/hwdefs/sgxdefs.h | 90 - .../cdv/pvr/services4/srvkm/hwdefs/sgxerrata.h | 693 --- .../pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h | 240 - .../cdv/pvr/services4/srvkm/hwdefs/sgxmmu.h | 72 - .../cdv/pvr/services4/srvkm/hwdefs/sgxmpdefs.h | 332 -- .../pvr/services4/srvkm/include/buffer_manager.h | 219 - .../cdv/pvr/services4/srvkm/include/device.h | 323 -- .../cdv/pvr/services4/srvkm/include/handle.h | 404 -- .../staging/cdv/pvr/services4/srvkm/include/hash.h | 80 - .../cdv/pvr/services4/srvkm/include/lists.h | 244 - .../cdv/pvr/services4/srvkm/include/metrics.h | 130 - .../cdv/pvr/services4/srvkm/include/osfunc.h | 606 --- .../cdv/pvr/services4/srvkm/include/osperproc.h | 76 - .../cdv/pvr/services4/srvkm/include/pdump_int.h | 67 - .../cdv/pvr/services4/srvkm/include/pdump_km.h | 412 -- .../cdv/pvr/services4/srvkm/include/pdump_osfunc.h | 142 - .../cdv/pvr/services4/srvkm/include/perproc.h | 126 - .../cdv/pvr/services4/srvkm/include/power.h | 120 - .../cdv/pvr/services4/srvkm/include/queue.h | 110 - .../staging/cdv/pvr/services4/srvkm/include/ra.h | 159 - .../cdv/pvr/services4/srvkm/include/resman.h | 118 - .../pvr/services4/srvkm/include/services_headers.h | 49 - .../cdv/pvr/services4/srvkm/include/srvkm.h | 78 - .../cdv/pvr/services4/srvkm/include/ttrace.h | 184 - .../pvr/services4/srvkm/include/ttrace_common.h | 81 - .../pvr/services4/srvkm/include/ttrace_tokens.h | 84 - .../cdv/pvr/services4/system/include/syscommon.h | 262 -- .../cdv/pvr/services4/system/unified/extsyscache.h | 44 - .../cdv/pvr/services4/system/unified/oemfuncs.h | 72 - .../services4/system/unified/sys_pvr_drm_export.c | 202 - .../services4/system/unified/sys_pvr_drm_export.h | 97 - .../services4/system/unified/sys_pvr_drm_import.h | 46 - .../cdv/pvr/services4/system/unified/sysconfig.c | 1022 ----- .../cdv/pvr/services4/system/unified/sysconfig.h | 161 - .../cdv/pvr/services4/system/unified/sysinfo.h | 43 - .../cdv/pvr/services4/system/unified/sysirq.h | 49 - .../cdv/pvr/services4/system/unified/syslocal.h | 75 - .../cdv/pvr/services4/system/unified/sysutils.c | 30 - .../cdv/pvr/tools/intern/debug/client/linuxsrv.h | 48 - .../tools/intern/debug/dbgdriv/common/dbgdriv.c | 2357 ---------- .../tools/intern/debug/dbgdriv/common/dbgdriv.h | 122 - .../intern/debug/dbgdriv/common/dbgdriv_ioctl.h | 35 - .../pvr/tools/intern/debug/dbgdriv/common/handle.c | 121 - .../tools/intern/debug/dbgdriv/common/hostfunc.h | 58 - .../pvr/tools/intern/debug/dbgdriv/common/hotkey.c | 135 - .../pvr/tools/intern/debug/dbgdriv/common/hotkey.h | 60 - .../pvr/tools/intern/debug/dbgdriv/common/ioctl.c | 586 --- .../tools/intern/debug/dbgdriv/linux/hostfunc.c | 324 -- .../intern/debug/dbgdriv/linux/kbuild/Makefile | 35 - .../pvr/tools/intern/debug/dbgdriv/linux/main.c | 315 -- .../debug/dbgdriv/linux/makefile.linux.common | 39 - 225 files changed, 0 insertions(+), 109967 deletions(-) delete mode 100644 drivers/staging/cdv/Kconfig delete mode 100644 drivers/staging/cdv/Makefile delete mode 100644 drivers/staging/cdv/bc_video/bufferclass_video.c delete mode 100644 drivers/staging/cdv/bc_video/bufferclass_video.h delete mode 100644 drivers/staging/cdv/bc_video/bufferclass_video_linux.c delete mode 100644 drivers/staging/cdv/bc_video/bufferclass_video_linux.h delete mode 100644 drivers/staging/cdv/drv/psb_bl.c delete mode 100644 drivers/staging/cdv/drv/psb_dpst.c delete mode 100644 drivers/staging/cdv/drv/psb_dpst.h delete mode 100644 drivers/staging/cdv/drv/psb_drm.h delete mode 100644 drivers/staging/cdv/drv/psb_drv.c delete mode 100644 drivers/staging/cdv/drv/psb_drv.h delete mode 100644 drivers/staging/cdv/drv/psb_fb.c delete mode 100644 drivers/staging/cdv/drv/psb_fb.h delete mode 100644 drivers/staging/cdv/drv/psb_gtt.c delete mode 100644 drivers/staging/cdv/drv/psb_gtt.h delete mode 100644 drivers/staging/cdv/drv/psb_hotplug.c delete mode 100644 drivers/staging/cdv/drv/psb_hotplug.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_bios.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_bios.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_crt.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_display.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_display.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_dpll_cdv.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_drv.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_hdmi.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_hdmi.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_hdmi_edid.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_hdmi_reg.h delete mode 100644 drivers/staging/cdv/drv/psb_intel_i2c.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_lvds.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_modes.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_opregion.c delete mode 100644 drivers/staging/cdv/drv/psb_intel_reg.h delete mode 100644 drivers/staging/cdv/drv/psb_irq.c delete mode 100644 drivers/staging/cdv/drv/psb_irq.h delete mode 100644 drivers/staging/cdv/drv/psb_powermgmt.c delete mode 100644 drivers/staging/cdv/drv/psb_powermgmt.h delete mode 100644 drivers/staging/cdv/drv/psb_pvr_glue.c delete mode 100644 drivers/staging/cdv/drv/psb_pvr_glue.h delete mode 100644 drivers/staging/cdv/drv/psb_reg.h delete mode 100644 drivers/staging/cdv/drv/psb_reset.c delete mode 100644 drivers/staging/cdv/drv/psb_schedule.c delete mode 100644 drivers/staging/cdv/drv/psb_schedule.h delete mode 100644 drivers/staging/cdv/drv/psb_sgx.c delete mode 100644 drivers/staging/cdv/drv/psb_sgx.h delete mode 100644 drivers/staging/cdv/drv/psb_socket.c delete mode 100644 drivers/staging/cdv/drv/psb_umevents.c delete mode 100644 drivers/staging/cdv/drv/psb_umevents.h delete mode 100644 drivers/staging/cdv/imgv/msvdx_power.c delete mode 100644 drivers/staging/cdv/imgv/msvdx_power.h delete mode 100644 drivers/staging/cdv/imgv/psb_buffer.c delete mode 100644 drivers/staging/cdv/imgv/psb_fence.c delete mode 100644 drivers/staging/cdv/imgv/psb_mmu.c delete mode 100644 drivers/staging/cdv/imgv/psb_msvdx.c delete mode 100644 drivers/staging/cdv/imgv/psb_msvdx.h delete mode 100644 drivers/staging/cdv/imgv/psb_msvdxinit.c delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_fence.c delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_fence_api.h delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_fence_driver.h delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_fence_user.c delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_fence_user.h delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_glue.c delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_placement_user.c delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_placement_user.h delete mode 100644 drivers/staging/cdv/imgv/psb_ttm_userobj_api.h delete mode 100644 drivers/staging/cdv/pvr/COPYING delete mode 100644 drivers/staging/cdv/pvr/INSTALL delete mode 100644 drivers/staging/cdv/pvr/README delete mode 100644 drivers/staging/cdv/pvr/eurasiacon/.gitignore delete mode 100644 drivers/staging/cdv/pvr/include4/dbgdrvif.h delete mode 100644 drivers/staging/cdv/pvr/include4/img_defs.h delete mode 100644 drivers/staging/cdv/pvr/include4/img_types.h delete mode 100644 drivers/staging/cdv/pvr/include4/pdumpdefs.h delete mode 100644 drivers/staging/cdv/pvr/include4/pvr_debug.h delete mode 100644 drivers/staging/cdv/pvr/include4/pvrmodule.h delete mode 100644 drivers/staging/cdv/pvr/include4/pvrversion.h delete mode 100644 drivers/staging/cdv/pvr/include4/services.h delete mode 100644 drivers/staging/cdv/pvr/include4/servicesext.h delete mode 100644 drivers/staging/cdv/pvr/include4/sgx_options.h delete mode 100644 drivers/staging/cdv/pvr/include4/sgxapi_km.h delete mode 100644 drivers/staging/cdv/pvr/include4/sgxscript.h delete mode 100644 drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/.gitignore delete mode 100644 drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/makefile.linux.common delete mode 100644 drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb.h delete mode 100644 drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_displayclass.c delete mode 100644 drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c delete mode 100644 drivers/staging/cdv/pvr/services4/include/env/linux-intel/pvr_drm_shared.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/env/linux/pvr_drm_shared.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/kernelbuffer.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/kerneldisplay.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/pdump.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/pvr_bridge.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/pvr_bridge_km.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/pvrmmap.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/pvrsrv_errors.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/servicesint.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/sgx_bridge.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/sgx_mkif_km.h delete mode 100644 drivers/staging/cdv/pvr/services4/include/sgxinfo.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/.gitignore delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/.gitignore delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/buffer_manager.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/deviceclass.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/deviceid.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/devicemem.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/handle.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/hash.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/lists.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/mem.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/mem_debug.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/metrics.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/osfunc_common.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/pdump_common.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/perproc.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/power.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/pvrsrv.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/queue.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/ra.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/common/resman.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/.gitignore delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/pb.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_bridge_km.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_ukernel_status_codes.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxconfig.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinfokm.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinit.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxkick.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxpower.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxreset.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxtransfer.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/.gitignore delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_data.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_perproc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/linkage.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/lock.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/module.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutex.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/osfunc.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/osperproc.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/pdump.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/private_data.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_bridge_k.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_debug.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.c delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/mnemedefs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx535defs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx540defs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx543_v1.164defs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx544defs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx545defs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxdefs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxerrata.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxmmu.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxmpdefs.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/buffer_manager.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/device.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/handle.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/hash.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/lists.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/metrics.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/osfunc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/osperproc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/pdump_int.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/pdump_km.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/pdump_osfunc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/perproc.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/power.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/queue.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/ra.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/resman.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/services_headers.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/srvkm.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/ttrace.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_common.h delete mode 100644 drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_tokens.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/include/syscommon.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/extsyscache.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/oemfuncs.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.c delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_import.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sysconfig.c delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sysconfig.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sysinfo.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sysirq.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/syslocal.h delete mode 100644 drivers/staging/cdv/pvr/services4/system/unified/sysutils.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/client/linuxsrv.h delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.h delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/handle.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hostfunc.h delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.h delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/ioctl.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/hostfunc.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/kbuild/Makefile delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/main.c delete mode 100644 drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/makefile.linux.common diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 3aa8e02..196284d 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -154,8 +154,6 @@ source "drivers/staging/ste_rmi4/Kconfig" source "drivers/staging/gma500/Kconfig" -source "drivers/staging/cdv/Kconfig" - source "drivers/staging/altera-stapl/Kconfig" source "drivers/staging/mei/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index cec917b..fa41b9c 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -69,6 +69,5 @@ obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/ obj-$(CONFIG_TOUCHSCREEN_CLEARPAD_TM1217) += cptm1217/ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) += ste_rmi4/ obj-$(CONFIG_DRM_PSB) += gma500/ -obj-$(CONFIG_DRM_INTEL_CDV) += cdv/ obj-$(CONFIG_INTEL_MEI) += mei/ obj-$(CONFIG_MFD_NVEC) += nvec/ diff --git a/drivers/staging/cdv/Kconfig b/drivers/staging/cdv/Kconfig deleted file mode 100644 index 75cf7e8..0000000 --- a/drivers/staging/cdv/Kconfig +++ /dev/null @@ -1,50 +0,0 @@ -# -# Drm device configuration -# -# This driver provides support for the -# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. -# - -config DRM_INTEL_CDV - tristate "Intel CDV (load along with IMG driver)" - depends on DRM && PCI - select FB_CFB_COPYAREA - select FB_CFB_FILLRECT - select FB_CFB_IMAGEBLIT - select DRM_KMS_HELPER - select DRM_TTM - help - Choose this option if you have a Cedarview platform. - If M is selected the module will be called cedarview_gfx. - -choice - prompt "Build IMG kernel service as " - depends on DRM_INTEL_CDV - default DRM_CDV_RELEASE - -config DRM_CDV_RELEASE - bool "Release" - depends on DRM_INTEL_CDV - help - Build IMG kernel services as release version. - -config DRM_CDV_DEBUG - bool "Debug" - depends on DRM_INTEL_CDV - help - Build IMG kernel services as debug version. -endchoice - -if DRM_CDV_DEBUG - -config DRM_PVR_PDUMP - bool "Enable PDump Debug" - help - Build the PVR driver with PDUMP feature. At most cases it should be N. - -config DRM_PVR_TRACE - bool "Enable PVR Service Trace" - help - Enable PVR service call trace. If unsure, it should be N. - -endif diff --git a/drivers/staging/cdv/Makefile b/drivers/staging/cdv/Makefile deleted file mode 100644 index 25a9ee1..0000000 --- a/drivers/staging/cdv/Makefile +++ /dev/null @@ -1,198 +0,0 @@ -# Makefile for the drm device driver. This driver provides support for the -# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. - -INCDIR=drivers/staging/cdv - -include_dirs := \ - -I$(INCDIR)/pvr/include4 \ - -I$(INCDIR)/pvr/services4/include \ - -I$(INCDIR)/pvr/services4/include/env/linux \ - -I$(INCDIR)/pvr/services4/srvkm/env/linux \ - -I$(INCDIR)/pvr/services4/srvkm/include \ - -I$(INCDIR)/pvr/services4/srvkm/bridged \ - -I$(INCDIR)/pvr/services4/system/include \ - -I$(INCDIR)/pvr/services4/srvkm/hwdefs \ - -I$(INCDIR)/pvr/services4/srvkm/bridged/sgx \ - -I$(INCDIR)/pvr/services4/srvkm/devices/sgx \ - -I$(INCDIR)/ \ - -I$(INCDIR)/drv \ - -I$(INCDIR)/bc_video \ - -I$(INCDIR)/imgv \ - -Iinclude/linux \ - -Iinclude/drm - - -ccflags-y += $(include_dirs) - -ccflags-$(CONFIG_DRM_PVR_PDUMP) += -I$(INCDIR)/pvr/tools/intern/debug/client \ - -I$(INCDIR)/pvr/tools/intern/debug/dbgdriv/common -ccflags-y += -I$(INCDIR)/pvr/services4/system/unified -DSGX545 -DSUPPORT_SGX545 -DSGX_CORE_REV=10131 - - -ccflags-y += \ - -Wall \ - -Werror \ - -DLINUX \ - -DPVR_BUILD_DIR="\"pc_i686_moorestown_linux\"" \ - -DSUPPORT_DRI_DRM \ - -DSUPPORT_DRI_DRM_EXT \ - -DSERVICES4 \ - -D_XOPEN_SOURCE=600 \ - -DPVR2D_VALIDATE_INPUT_PARAMS \ - -DDISPLAY_CONTROLLER=mrstlfb \ - -UDEBUG_LOG_PATH_TRUNCATE \ - -DSUPPORT_SRVINIT \ - -DSUPPORT_SGX \ - -DSUPPORT_LINUX_X86_WRITECOMBINE \ - -DTRANSFER_QUEUE \ - -DSYS_USING_INTERRUPTS \ - -DSUPPORT_HW_RECOVERY \ - -DPVR_SECURE_HANDLES \ - -DUSE_PTHREADS \ - -DSUPPORT_SGX_EVENT_OBJECT \ - -DSUPPORT_SGX_HWPERF \ - -DSUPPORT_LINUX_X86_PAT \ - -DPVR_PROC_USE_SEQ_FILE \ - -DSUPPORT_CACHE_LINE_FLUSH \ - -DSUPPORT_CPU_CACHED_BUFFERS \ - -DDISABLE_PM \ - -DSUPPORT_SGX_NEW_STATUS_VALS \ - -DSUPPORT_PERCONTEXT_PB \ - -DDRM_PVR_USE_INTEL_FB - -SUPPORT_EGL_EXTENSIONS ?=1 -ifeq ($(SUPPORT_EGL_EXTENSIONS),1) - PVRSRV_RESOURCE_PROFILING = y - PERPROC_LIST = y - RES_MAN_EXTEND = y - PVRSRV_OS_MEM_INFO = y -else - PVRSRV_RESOURCE_PROFILING = - PERPROC_LIST = - RES_MAN_EXTEND = - PVRSRV_OS_MEM_INFO = -endif -ccflags-$(PVRSRV_RESOURCE_PROFILING) += -DPVRSRV_RESOURCE_PROFILING -ccflags-$(PERPROC_LIST) += -DPERPROC_LIST -ccflags-$(RES_MAN_EXTEND) += -DRES_MAN_EXTEND -ccflags-$(PVRSRV_OS_MEM_INFO) += -DPVRSRV_OS_MEM_INFO - -ccflags-$(CONFIG_DRM_CDV_RELEASE) += -DBUILD="\"release\"" -DPVR_BUILD_TYPE="\"release\"" -DRELEASE -ccflags-$(CONFIG_DRM_CDV_DEBUG) += -DBUILD="\"debug\"" -DPVR_BUILD_TYPE="\"debug\"" -DDEBUG -DDEBUG_LINUX_MEM_AREAS -DDEBUG_LINUX_MEMORY_ALLOCATIONS -DDEBUG_LINUX_MMAP_AREAS -DDEBUG_BRIDGE_KM -DPVRSRV_NEED_PVR_TRACE -DDEBUG_MESA_OGL_TRACE -DPVRSRV_USSE_EDM_STATUS_DEBUG -DPVRSRV_DUMP_MK_TRACE -ccflags-$(CONFIG_PCI_MSI) += -DCONFIG_PCI_MSI - -ccflags-$(CONFIG_DRM_PVR_PDUMP) += -DPDUMP -ccflags-$(CONFIG_DRM_PVR_TRACE) += -DDEBUG_TRACE_BRIDGE_KM - -ENVDIR = pvr/services4/srvkm/env/linux -COMMONDIR = pvr/services4/srvkm/common -BRIDGEDDIR = pvr/services4/srvkm/bridged -SGXDIR = pvr/services4/srvkm/devices/sgx -FBDEVDIR = pvr/services4/3rdparty/linux_framebuffer_mrst -DRMDRVDIR = drv -SYSCONFIGDIR = pvr/services4/system/unified -IMGVDIR = imgv -BUFFER_CLASS_DIR = bc_video - -PDUMP_MAIN_DIR = pvr/tools/intern/debug/dbgdriv/linux -PDUMP_COMMON_DIR = pvr/tools/intern/debug/dbgdriv/common - -cedarview_gfx-y += $(ENVDIR)/osfunc.o \ - $(ENVDIR)/mutils.o \ - $(ENVDIR)/mmap.o \ - $(ENVDIR)/module.o \ - $(ENVDIR)/pdump.o \ - $(ENVDIR)/proc.o \ - $(ENVDIR)/pvr_bridge_k.o \ - $(ENVDIR)/pvr_debug.o \ - $(ENVDIR)/mm.o \ - $(ENVDIR)/event.o \ - $(ENVDIR)/osperproc.o \ - $(ENVDIR)/pvr_drm.o - -cedarview_gfx-y += $(COMMONDIR)/buffer_manager.o \ - $(COMMONDIR)/devicemem.o \ - $(COMMONDIR)/deviceclass.o \ - $(COMMONDIR)/handle.o \ - $(COMMONDIR)/hash.o \ - $(COMMONDIR)/metrics.o \ - $(COMMONDIR)/pvrsrv.o \ - $(COMMONDIR)/queue.o \ - $(COMMONDIR)/ra.o \ - $(COMMONDIR)/resman.o \ - $(COMMONDIR)/power.o \ - $(COMMONDIR)/mem.o \ - $(COMMONDIR)/pdump_common.o \ - $(COMMONDIR)/perproc.o \ - $(COMMONDIR)/lists.o \ - $(COMMONDIR)/mem_debug.o \ - $(COMMONDIR)/osfunc_common.o - -cedarview_gfx-y += $(BRIDGEDDIR)/bridged_support.o \ - $(BRIDGEDDIR)/bridged_pvr_bridge.o \ - $(BRIDGEDDIR)/sgx/bridged_sgx_bridge.o - -cedarview_gfx-y += $(SYSCONFIGDIR)/sysconfig.o \ - $(SYSCONFIGDIR)/sysutils.o \ - $(SYSCONFIGDIR)/sys_pvr_drm_export.o - -cedarview_gfx-y += $(SGXDIR)/sgxinit.o \ - $(SGXDIR)/sgxpower.o \ - $(SGXDIR)/sgxreset.o \ - $(SGXDIR)/sgxutils.o \ - $(SGXDIR)/sgxkick.o \ - $(SGXDIR)/sgxtransfer.o \ - $(SGXDIR)/mmu.o \ - $(SGXDIR)/pb.o - -cedarview_gfx-y += $(FBDEVDIR)/mrstlfb_displayclass.o \ - $(FBDEVDIR)/mrstlfb_linux.o - -cedarview_gfx-y += $(DRMDRVDIR)/psb_bl.o \ - $(DRMDRVDIR)/psb_dpst.o \ - $(DRMDRVDIR)/psb_drv.o \ - $(DRMDRVDIR)/psb_fb.o \ - $(DRMDRVDIR)/psb_gtt.o \ - $(DRMDRVDIR)/psb_hotplug.o \ - $(DRMDRVDIR)/psb_intel_bios.o \ - $(DRMDRVDIR)/psb_intel_opregion.o \ - $(DRMDRVDIR)/psb_intel_display.o \ - $(DRMDRVDIR)/psb_intel_i2c.o \ - $(DRMDRVDIR)/psb_intel_lvds.o \ - $(DRMDRVDIR)/psb_intel_modes.o \ - $(DRMDRVDIR)/psb_intel_hdmi.o \ - $(DRMDRVDIR)/psb_reset.o \ - $(DRMDRVDIR)/psb_schedule.o \ - $(DRMDRVDIR)/psb_sgx.o \ - $(DRMDRVDIR)/psb_socket.o \ - $(DRMDRVDIR)/psb_pvr_glue.o \ - $(DRMDRVDIR)/psb_umevents.o \ - $(DRMDRVDIR)/psb_intel_crt.o \ - $(DRMDRVDIR)/psb_intel_dpll_cdv.o \ - -cedarview_gfx-y += $(IMGVDIR)/psb_buffer.o \ - $(IMGVDIR)/psb_fence.o \ - $(IMGVDIR)/psb_mmu.o \ - $(IMGVDIR)/psb_msvdx.o \ - $(IMGVDIR)/msvdx_power.o \ - $(IMGVDIR)/psb_msvdxinit.o \ - $(IMGVDIR)/psb_ttm_glue.o \ - $(IMGVDIR)/psb_ttm_fence.o \ - $(IMGVDIR)/psb_ttm_fence_user.o \ - $(IMGVDIR)/psb_ttm_placement_user.o - -cedarview_gfx-y += $(DRMDRVDIR)/psb_powermgmt.o $(DRMDRVDIR)/psb_irq.o - -cedarview_gfx-y += $(BUFFER_CLASS_DIR)/bufferclass_video.o \ - $(BUFFER_CLASS_DIR)/bufferclass_video_linux.o - -cedarview_gfx-$(CONFIG_DRM_PVR_PDUMP) += $(PDUMP_MAIN_DIR)/main.o \ - $(PDUMP_MAIN_DIR)/hostfunc.o \ - $(PDUMP_COMMON_DIR)/dbgdriv.o \ - $(PDUMP_COMMON_DIR)/handle.o \ - $(PDUMP_COMMON_DIR)/hotkey.o \ - $(PDUMP_COMMON_DIR)/ioctl.o - - -obj-$(CONFIG_DRM_INTEL_CDV) += cedarview_gfx.o - diff --git a/drivers/staging/cdv/bc_video/bufferclass_video.c b/drivers/staging/cdv/bc_video/bufferclass_video.c deleted file mode 100644 index 3464b46..0000000 --- a/drivers/staging/cdv/bc_video/bufferclass_video.c +++ /dev/null @@ -1,327 +0,0 @@ -/*************************************************************************** - * - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - ******************************************************************************/ - -#if defined(__linux__) -#include -#else -#include -#endif - -#include "bufferclass_video.h" -#include "bufferclass_video_linux.h" - -#define VBUFFERCLASS_DEVICE_NAME "Video Bufferclass Device" -#define CBUFFERCLASS_DEVICE_NAME "Camera Bufferclass Device" - -static void *gpvAnchorVideo[BC_VIDEO_DEVICE_MAX_ID]; - -static void *gpcAnchor; -static PFN_BC_GET_PVRJTABLE pfnGetPVRJTable = IMG_NULL; - -BC_VIDEO_DEVINFO * -GetAnchorPtr (int id) -{ - BC_VIDEO_DEVINFO *AnchorPtr = NULL; - if (id < BC_VIDEO_DEVICE_MAX_ID) - AnchorPtr = gpvAnchorVideo[id]; - else if (id == BC_CAMERA_DEVICEID) - AnchorPtr = gpcAnchor; - return AnchorPtr; -} - -static void -SetAnchorPtr (BC_VIDEO_DEVINFO * psDevInfo, int id) -{ - if (id < BC_VIDEO_DEVICE_MAX_ID) - gpvAnchorVideo[id] = (void *) psDevInfo; - else if (id == BC_CAMERA_DEVICEID) - gpcAnchor = (void *) psDevInfo; -} - -static PVRSRV_ERROR -OpenVBCDevice (IMG_UINT32 uDeviceID, IMG_HANDLE * phDevice) -{ - BC_VIDEO_DEVINFO *psDevInfo; - int id; - *phDevice = NULL; - for(id = 0; id < BC_VIDEO_DEVICE_MAX_ID; id++){ - psDevInfo = GetAnchorPtr(id); - if(psDevInfo != NULL && psDevInfo->ulDeviceID == uDeviceID){ - *phDevice = (IMG_HANDLE) psDevInfo; - break; - } - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR OpenCBCDevice(IMG_UINT32 uDeviceID, IMG_HANDLE *phDevice) -{ - BC_VIDEO_DEVINFO *psDevInfo; - - UNREFERENCED_PARAMETER(uDeviceID); - psDevInfo = GetAnchorPtr(BC_CAMERA_DEVICEID); - - *phDevice = (IMG_HANDLE)psDevInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR -CloseBCDevice (IMG_UINT32 uDeviceID, IMG_HANDLE hDevice) -{ - UNREFERENCED_PARAMETER (uDeviceID); - UNREFERENCED_PARAMETER (hDevice); - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR -GetBCBuffer (IMG_HANDLE hDevice, - IMG_UINT32 ui32BufferNumber, - PVRSRV_SYNC_DATA * psSyncData, IMG_HANDLE * phBuffer) -{ - BC_VIDEO_DEVINFO *psDevInfo; - - if (!hDevice || !phBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (BC_VIDEO_DEVINFO *) hDevice; - - if (ui32BufferNumber < psDevInfo->sBufferInfo.ui32BufferCount) - { - psDevInfo->psSystemBuffer[ui32BufferNumber].psSyncData = psSyncData; - *phBuffer = (IMG_HANDLE) & psDevInfo->psSystemBuffer[ui32BufferNumber]; - } - else - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR -GetBCInfo (IMG_HANDLE hDevice, BUFFER_INFO * psBCInfo) -{ - BC_VIDEO_DEVINFO *psDevInfo; - - if (!hDevice || !psBCInfo) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (BC_VIDEO_DEVINFO *) hDevice; - - *psBCInfo = psDevInfo->sBufferInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR -GetBCBufferAddr (IMG_HANDLE hDevice, - IMG_HANDLE hBuffer, - IMG_SYS_PHYADDR ** ppsSysAddr, - IMG_UINT32 * pui32ByteSize, - IMG_VOID ** ppvCpuVAddr, - IMG_HANDLE * phOSMapInfo, - IMG_BOOL * pbIsContiguous, IMG_UINT32 * pui32TilingStride) -{ - BC_VIDEO_BUFFER *psBuffer; - - UNREFERENCED_PARAMETER (pui32TilingStride); - if (!hDevice || !hBuffer || !ppsSysAddr || !pui32ByteSize) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psBuffer = (BC_VIDEO_BUFFER *) hBuffer; - - *ppvCpuVAddr = psBuffer->sCPUVAddr; - - *phOSMapInfo = IMG_NULL; - *pui32ByteSize = (IMG_UINT32) psBuffer->ulSize; - - *ppsSysAddr = psBuffer->psSysAddr; - *pbIsContiguous = psBuffer->is_conti_addr; - - return (PVRSRV_OK); -} - - -BCE_ERROR -BC_Video_Register (int id) -{ - BC_VIDEO_DEVINFO *psDevInfo; - - psDevInfo = GetAnchorPtr (id); - - if (psDevInfo == NULL) - { - psDevInfo = - (BC_VIDEO_DEVINFO *) BCAllocKernelMem (sizeof (BC_VIDEO_DEVINFO)); - - if (!psDevInfo) - { - return (BCE_ERROR_OUT_OF_MEMORY); - } - - SetAnchorPtr ((void *) psDevInfo, id); - - psDevInfo->ulRefCount = 0; - - if (BCOpenPVRServices (&psDevInfo->hPVRServices) != BCE_OK) - { - return (BCE_ERROR_INIT_FAILURE); - } - if (BCGetLibFuncAddr - (psDevInfo->hPVRServices, "PVRGetBufferClassJTable", - &pfnGetPVRJTable) != BCE_OK) - { - return (BCE_ERROR_INIT_FAILURE); - } - - if (!(*pfnGetPVRJTable) (&psDevInfo->sPVRJTable)) - { - return (BCE_ERROR_INIT_FAILURE); - } - - psDevInfo->ulNumBuffers = 0; - - psDevInfo->sBufferInfo.pixelformat = PVRSRV_PIXEL_FORMAT_UNKNOWN; - psDevInfo->sBufferInfo.ui32Width = 0; - psDevInfo->sBufferInfo.ui32Height = 0; - psDevInfo->sBufferInfo.ui32ByteStride = 0; - psDevInfo->sBufferInfo.ui32BufferDeviceID = id; - psDevInfo->sBufferInfo.ui32Flags = 0; - psDevInfo->sBufferInfo.ui32BufferCount = - (IMG_UINT32) psDevInfo->ulNumBuffers; - - if (id < BC_VIDEO_DEVICE_MAX_ID) - { - strncpy (psDevInfo->sBufferInfo.szDeviceName, - VBUFFERCLASS_DEVICE_NAME, MAX_BUFFER_DEVICE_NAME_SIZE); - psDevInfo->sBCJTable.pfnOpenBCDevice = OpenVBCDevice; - } - else if (id == BC_CAMERA_DEVICEID) - { - strncpy (psDevInfo->sBufferInfo.szDeviceName, - CBUFFERCLASS_DEVICE_NAME, MAX_BUFFER_DEVICE_NAME_SIZE); - psDevInfo->sBCJTable.pfnOpenBCDevice = OpenCBCDevice; - } - - psDevInfo->sBCJTable.ui32TableSize = - sizeof (PVRSRV_BC_SRV2BUFFER_KMJTABLE); - psDevInfo->sBCJTable.pfnCloseBCDevice = CloseBCDevice; - psDevInfo->sBCJTable.pfnGetBCBuffer = GetBCBuffer; - psDevInfo->sBCJTable.pfnGetBCInfo = GetBCInfo; - psDevInfo->sBCJTable.pfnGetBufferAddr = GetBCBufferAddr; - - if (psDevInfo->sPVRJTable. - pfnPVRSRVRegisterBCDevice (&psDevInfo->sBCJTable, - &psDevInfo->ulDeviceID) != PVRSRV_OK) - { - return (BCE_ERROR_DEVICE_REGISTER_FAILED); - } - } - - psDevInfo->ulRefCount++; - - return (BCE_OK); -} - -BCE_ERROR -BC_Video_Unregister (int id) -{ - BC_VIDEO_DEVINFO *psDevInfo; - - psDevInfo = GetAnchorPtr (id); - - if (psDevInfo == NULL) - { - return (BCE_ERROR_GENERIC); - } - - psDevInfo->ulRefCount--; - - if (psDevInfo->ulRefCount == 0) - { - PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable = &psDevInfo->sPVRJTable; - - if (psJTable->pfnPVRSRVRemoveBCDevice (psDevInfo->ulDeviceID) != - PVRSRV_OK) - { - return (BCE_ERROR_GENERIC); - } - - if (BCClosePVRServices (psDevInfo->hPVRServices) != BCE_OK) - { - psDevInfo->hPVRServices = NULL; - return (BCE_ERROR_GENERIC); - } - - if (psDevInfo->psSystemBuffer) - { - BCFreeKernelMem (psDevInfo->psSystemBuffer); - } - - BCFreeKernelMem (psDevInfo); - - SetAnchorPtr (NULL, id); - } - return (BCE_OK); -} - -BCE_ERROR -BC_Video_Init (int id) -{ - BCE_ERROR eError; - - eError = BC_Video_Register (id); - if (eError != BCE_OK) - { - return eError; - } - - return (BCE_OK); -} - -BCE_ERROR -BC_Video_Deinit (int id) -{ - BCE_ERROR eError; - - BC_DestroyBuffers (id); - - eError = BC_Video_Unregister (id); - if (eError != BCE_OK) - { - return eError; - } - - return (BCE_OK); -} diff --git a/drivers/staging/cdv/bc_video/bufferclass_video.h b/drivers/staging/cdv/bc_video/bufferclass_video.h deleted file mode 100644 index 07dd33a..0000000 --- a/drivers/staging/cdv/bc_video/bufferclass_video.h +++ /dev/null @@ -1,171 +0,0 @@ -/********************************************************************** - * - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - ******************************************************************************/ - -#ifndef __BC_VIDEO_H__ -#define __BC_VIDEO_H__ - -#include "img_defs.h" -#include "servicesext.h" -#include "kernelbuffer.h" -#include - -#if defined(__cplusplus) -extern "C" -{ -#endif - - enum BC_memory - { - BC_MEMORY_MMAP = 1, - BC_MEMORY_USERPTR = 2, - }; - - /* - * the following types are tested for fourcc in struct bc_buf_params_t - * NV12 - * UYVY - * RGB565 - not tested yet - * YUYV - */ - typedef struct bc_buf_params - { - int count; /*number of buffers, [in/out] */ - int width; /*buffer width in pixel, multiple of 8 or 32 */ - int height; /*buffer height in pixel */ - int stride; - unsigned int fourcc; /*buffer pixel format */ - enum BC_memory type; - } bc_buf_params_t; - - extern IMG_IMPORT IMG_BOOL - PVRGetBufferClassJTable (PVRSRV_BC_BUFFER2SRV_KMJTABLE * psJTable); - -#define BC_VIDEO_DEVICE_MAX_ID 5 -#define BC_CAMERA_DEVICEID 8 - - typedef void *BCE_HANDLE; - - typedef enum tag_bce_bool - { - BCE_FALSE = 0, - BCE_TRUE = 1, - } BCE_BOOL, *BCE_PBOOL; - - typedef struct BC_VIDEO_BUFFER_TAG - { - unsigned long ulSize; - BCE_HANDLE hMemHandle; - - IMG_SYS_PHYADDR *psSysAddr; - - IMG_CPU_VIRTADDR sCPUVAddr; - PVRSRV_SYNC_DATA *psSyncData; - - struct BC_VIDEO_BUFFER_TAG *psNext; - int sBufferHandle; - IMG_BOOL is_conti_addr; - } BC_VIDEO_BUFFER; - - typedef struct BC_VIDEO_DEVINFO_TAG - { - IMG_UINT32 ulDeviceID; - - BC_VIDEO_BUFFER *psSystemBuffer; - - unsigned long ulNumBuffers; - - PVRSRV_BC_BUFFER2SRV_KMJTABLE sPVRJTable; - - PVRSRV_BC_SRV2BUFFER_KMJTABLE sBCJTable; - - BCE_HANDLE hPVRServices; - - unsigned long ulRefCount; - - BUFFER_INFO sBufferInfo; - enum BC_memory buf_type; - } BC_VIDEO_DEVINFO; - - typedef enum _BCE_ERROR_ - { - BCE_OK = 0, - BCE_ERROR_GENERIC = 1, - BCE_ERROR_OUT_OF_MEMORY = 2, - BCE_ERROR_TOO_FEW_BUFFERS = 3, - BCE_ERROR_INVALID_PARAMS = 4, - BCE_ERROR_INIT_FAILURE = 5, - BCE_ERROR_CANT_REGISTER_CALLBACK = 6, - BCE_ERROR_INVALID_DEVICE = 7, - BCE_ERROR_DEVICE_REGISTER_FAILED = 8, - BCE_ERROR_NO_PRIMARY = 9 - } BCE_ERROR; - -#ifndef UNREFERENCED_PARAMETER -#define UNREFERENCED_PARAMETER(param) (param) = (param) -#endif - -#ifndef NULL -#define NULL 0 -#endif - - BCE_ERROR BC_Video_Register (int id); - BCE_ERROR BC_Video_Unregister (int id); - BCE_ERROR BC_Video_Buffers_Create (int id); - BCE_ERROR BC_Video_Buffers_Destroy (int id); - BCE_ERROR BC_Video_Init (int id); - BCE_ERROR BC_Video_Deinit (int id); - - BCE_ERROR BCOpenPVRServices (BCE_HANDLE * phPVRServices); - BCE_ERROR BCClosePVRServices (BCE_HANDLE hPVRServices); - - void *BCAllocKernelMem (unsigned long ulSize); - void BCFreeKernelMem (void *pvMem); - - BCE_ERROR BCAllocDiscontigMemory (unsigned long ulSize, - BCE_HANDLE unref__ * phMemHandle, - IMG_CPU_VIRTADDR * pLinAddr, - IMG_SYS_PHYADDR ** ppPhysAddr); - - void BCFreeDiscontigMemory (unsigned long ulSize, - BCE_HANDLE unref__ hMemHandle, - IMG_CPU_VIRTADDR LinAddr, - IMG_SYS_PHYADDR * pPhysAddr); - - IMG_SYS_PHYADDR CpuPAddrToSysPAddrBC (IMG_CPU_PHYADDR cpu_paddr); - IMG_CPU_PHYADDR SysPAddrToCpuPAddrBC (IMG_SYS_PHYADDR sys_paddr); - - void *MapPhysAddr (IMG_SYS_PHYADDR sSysAddr, unsigned long ulSize); - void UnMapPhysAddr (void *pvAddr, unsigned long ulSize); - - BCE_ERROR BCGetLibFuncAddr (BCE_HANDLE hExtDrv, char *szFunctionName, - PFN_BC_GET_PVRJTABLE * ppfnFuncTable); - BC_VIDEO_DEVINFO *GetAnchorPtr (int id); - int GetBufferCount (unsigned int *puiBufferCount, int id); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/drivers/staging/cdv/bc_video/bufferclass_video_linux.c b/drivers/staging/cdv/bc_video/bufferclass_video_linux.c deleted file mode 100644 index f70418a..0000000 --- a/drivers/staging/cdv/bc_video/bufferclass_video_linux.c +++ /dev/null @@ -1,838 +0,0 @@ -/**************************************************************************** - * - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#if defined(LMA) -#include -#else -#include -#endif - -#include -#include -#include "psb_drv.h" -#include "ttm/ttm_bo_api.h" -#include "ttm/ttm_placement.h" -#include "ttm/ttm_object.h" - -#include "bufferclass_video.h" -#include "bufferclass_video_linux.h" -#include "pvrmodule.h" -#include "sys_pvr_drm_export.h" - -#define DEVNAME "bc_video" -#define DRVNAME DEVNAME - -#if defined(BCE_USE_SET_MEMORY) -#undef BCE_USE_SET_MEMORY -#endif - -#if defined(__i386__) && defined(SUPPORT_LINUX_X86_PAT) && defined(SUPPORT_LINUX_X86_WRITECOMBINE) -#include -#define BCE_USE_SET_MEMORY -#endif - -#define BC_CDV_COUNT 32 -#define BC_CDV_STRIDE 2048 -#define BC_CDV_HEIGHT 2048 -#define BC_CDV_WIDTH 2048 - -static int width_align; -unsigned int bc_video_id_usage[BC_VIDEO_DEVICE_MAX_ID]; - -MODULE_SUPPORTED_DEVICE (DEVNAME); - -int FillBuffer (unsigned int uiBufferIndex); - -#if defined(LDM_PLATFORM) || defined(LDM_PCI) -static struct class *psPvrClass; -#endif - -static int AssignedMajorNumber; - -#define unref__ __attribute__ ((unused)) - -#if defined(LMA) -#define PVR_BUFFERCLASS_MEMOFFSET (220 * 1024 * 1024) -#define PVR_BUFFERCLASS_MEMSIZE (4 * 1024 * 1024) - -unsigned long g_ulMemBase = 0; -unsigned long g_ulMemCurrent = 0; - -#define VENDOR_ID_PVR 0x1010 -#define DEVICE_ID_PVR 0x1CF1 - -#define PVR_MEM_PCI_BASENUM 2 -#endif - -#define file_to_id(file) (iminor(file->f_path.dentry->d_inode)) - -int -BC_Video_ModInit (void) -{ - int i, j; - /*LDM_PCI is defined, while LDM_PLATFORM and LMA are not defined.*/ -#if defined(LDM_PLATFORM) || defined(LDM_PCI) - struct device *psDev; -#endif - -#if defined(LMA) - struct pci_dev *psPCIDev; - int error; -#endif - - /* video width is 4 byte aligned */ - width_align = 4; - -#if defined(LMA) - psPCIDev = pci_get_device (VENDOR_ID_PVR, DEVICE_ID_PVR, NULL); - if (psPCIDev == NULL) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModInit: pci_get_device failed\n"); - goto ExitError; - } - - if ((error = pci_enable_device (psPCIDev)) != 0) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModInit: pci_enable_device failed (%d)\n", error); - goto ExitError; - } -#endif - -#if defined(DEBUG) - printk (KERN_ERR DRVNAME ": BC_Video_ModInit: major device %d\n", - AssignedMajorNumber); -#endif - -#if defined(LDM_PLATFORM) || defined(LDM_PCI) - psPvrClass = class_create (THIS_MODULE, "bc_video"); - if (IS_ERR (psPvrClass)) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModInit: unable to create class (%ld)", - PTR_ERR (psPvrClass)); - goto ExitUnregister; - } - - psDev = device_create (psPvrClass, NULL, MKDEV (AssignedMajorNumber, 0), - NULL, - DEVNAME); - if (IS_ERR (psDev)) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModInit: unable to create device (%ld)", - PTR_ERR (psDev)); - goto ExitDestroyClass; - } -#endif - -#if defined(LMA) - g_ulMemBase = - pci_resource_start (psPCIDev, - PVR_MEM_PCI_BASENUM) + PVR_BUFFERCLASS_MEMOFFSET; -#endif - - for (i = 0; i < BC_VIDEO_DEVICE_MAX_ID; i++) - { - bc_video_id_usage[i] = 0; - if (BC_Video_Init (i) != BCE_OK) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModInit: can't init video bc device %d.\n", i); - for (j = i; j >= 0; j--) - { - BC_Video_Deinit (j); - } - goto ExitUnregister; - } - } - -#if defined(LMA) - pci_disable_device (psPCIDev); -#endif - - return 0; - -#if defined(LDM_PLATFORM) || defined(LDM_PCI) -ExitDestroyClass: - class_destroy (psPvrClass); -#endif -ExitUnregister: - unregister_chrdev (AssignedMajorNumber, DEVNAME); - //ExitDisable: -#if defined(LMA) - pci_disable_device (psPCIDev); -ExitError: -#endif - return -EBUSY; -} - -int -BC_Video_ModCleanup (void) -{ - int i; -#if defined(LDM_PLATFORM) || defined(LDM_PCI) - device_destroy (psPvrClass, MKDEV (AssignedMajorNumber, 0)); - class_destroy (psPvrClass); -#endif - - for (i = 0; i < BC_VIDEO_DEVICE_MAX_ID; i++) - { - if (BC_Video_Deinit (i) != BCE_OK) - { - printk (KERN_ERR DRVNAME - ": BC_Video_ModCleanup: can't deinit video device %d.\n", - i); - return -1; - } - } - - return 0; -} - - void * -BCAllocKernelMem (unsigned long ulSize) -{ - return kmalloc (ulSize, GFP_KERNEL); -} - -void -BCFreeKernelMem (void *pvMem) -{ - kfree (pvMem); -} - -#define RANGE_TO_PAGES(range) (((range) + (PAGE_SIZE - 1)) >> PAGE_SHIFT) -#define VMALLOC_TO_PAGE_PHYS(vAddr) page_to_phys(vmalloc_to_page(vAddr)) - -BCE_ERROR -BCAllocDiscontigMemory (unsigned long ulSize, - BCE_HANDLE unref__ * phMemHandle, - IMG_CPU_VIRTADDR * pLinAddr, - IMG_SYS_PHYADDR ** ppPhysAddr) -{ - unsigned long ulPages = RANGE_TO_PAGES (ulSize); - IMG_SYS_PHYADDR *pPhysAddr; - unsigned long ulPage; - IMG_CPU_VIRTADDR LinAddr; - - LinAddr = - __vmalloc (ulSize, GFP_KERNEL | __GFP_HIGHMEM, - pgprot_noncached (PAGE_KERNEL)); - if (!LinAddr) - { - return BCE_ERROR_OUT_OF_MEMORY; - } - - pPhysAddr = kmalloc (ulPages * sizeof (IMG_SYS_PHYADDR), GFP_KERNEL); - if (!pPhysAddr) - { - vfree (LinAddr); - return BCE_ERROR_OUT_OF_MEMORY; - } - - *pLinAddr = LinAddr; - - for (ulPage = 0; ulPage < ulPages; ulPage++) - { - pPhysAddr[ulPage].uiAddr = VMALLOC_TO_PAGE_PHYS (LinAddr); - - LinAddr += PAGE_SIZE; - } - - *ppPhysAddr = pPhysAddr; - - return BCE_OK; -} - -void -BCFreeDiscontigMemory (unsigned long ulSize, - BCE_HANDLE unref__ hMemHandle, - IMG_CPU_VIRTADDR LinAddr, IMG_SYS_PHYADDR * pPhysAddr) -{ - kfree (pPhysAddr); - - vfree (LinAddr); -} - - BCE_ERROR -BCAllocContigMemory (unsigned long ulSize, - BCE_HANDLE unref__ * phMemHandle, - IMG_CPU_VIRTADDR * pLinAddr, IMG_CPU_PHYADDR * pPhysAddr) -{ -#if defined(LMA) - void *pvLinAddr; - - - if (g_ulMemCurrent + ulSize >= PVR_BUFFERCLASS_MEMSIZE) - { - return (BCE_ERROR_OUT_OF_MEMORY); - } - - pvLinAddr = ioremap (g_ulMemBase + g_ulMemCurrent, ulSize); - - if (pvLinAddr) - { - pPhysAddr->uiAddr = g_ulMemBase + g_ulMemCurrent; - *pLinAddr = pvLinAddr; - - g_ulMemCurrent += ulSize; - return (BCE_OK); - } - return (BCE_ERROR_OUT_OF_MEMORY); -#else -#if defined(BCE_USE_SET_MEMORY) - void *pvLinAddr; - unsigned long ulAlignedSize = PAGE_ALIGN (ulSize); - int iPages = (int) (ulAlignedSize >> PAGE_SHIFT); - int iError; - - pvLinAddr = kmalloc (ulAlignedSize, GFP_KERNEL); - if (pvLinAddr == NULL) - return BCE_ERROR_OUT_OF_MEMORY; - - BUG_ON (((unsigned long) pvLinAddr) & ~PAGE_MASK); - - iError = set_memory_wc ((unsigned long) pvLinAddr, iPages); - if (iError != 0) - { - printk (KERN_ERR DRVNAME - ": BCAllocContigMemory: set_memory_wc failed (%d)\n", iError); - kfree(pvLinAddr); - return (BCE_ERROR_OUT_OF_MEMORY); - } - - pPhysAddr->uiAddr = virt_to_phys (pvLinAddr); - *pLinAddr = pvLinAddr; - - return (BCE_OK); -#else - dma_addr_t dma; - void *pvLinAddr; - - pvLinAddr = dma_alloc_coherent (NULL, ulSize, &dma, GFP_KERNEL); - if (pvLinAddr == NULL) - { - return (BCE_ERROR_OUT_OF_MEMORY); - } - - pPhysAddr->uiAddr = dma; - *pLinAddr = pvLinAddr; - - return (BCE_OK); -#endif -#endif -} - -void -BCFreeContigMemory (unsigned long ulSize, - BCE_HANDLE unref__ hMemHandle, - IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr) -{ -#if defined(LMA) - g_ulMemCurrent -= ulSize; - iounmap (LinAddr); -#else -#if defined(BCE_USE_SET_MEMORY) - unsigned long ulAlignedSize = PAGE_ALIGN (ulSize); - int iError; - int iPages = (int) (ulAlignedSize >> PAGE_SHIFT); - - iError = set_memory_wb ((unsigned long) LinAddr, iPages); - if (iError != 0) - { - printk (KERN_ERR DRVNAME - ": BCFreeContigMemory: set_memory_wb failed (%d)\n", iError); - } - kfree (LinAddr); -#else - dma_free_coherent (NULL, ulSize, LinAddr, (dma_addr_t) PhysAddr.uiAddr); -#endif -#endif -} - - IMG_SYS_PHYADDR -CpuPAddrToSysPAddrBC (IMG_CPU_PHYADDR cpu_paddr) -{ - IMG_SYS_PHYADDR sys_paddr; - sys_paddr.uiAddr = cpu_paddr.uiAddr; - return sys_paddr; -} - - IMG_CPU_PHYADDR -SysPAddrToCpuPAddrBC (IMG_SYS_PHYADDR sys_paddr) -{ - IMG_CPU_PHYADDR cpu_paddr; - cpu_paddr.uiAddr = sys_paddr.uiAddr; - return cpu_paddr; -} - -BCE_ERROR -BCOpenPVRServices (BCE_HANDLE * phPVRServices) -{ - *phPVRServices = 0; - return (BCE_OK); -} - - -BCE_ERROR -BCClosePVRServices (BCE_HANDLE unref__ hPVRServices) -{ - return (BCE_OK); -} - -BCE_ERROR -BCGetLibFuncAddr (BCE_HANDLE unref__ hExtDrv, char *szFunctionName, - PFN_BC_GET_PVRJTABLE * ppfnFuncTable) -{ - if (strcmp ("PVRGetBufferClassJTable", szFunctionName) != 0) - { - return (BCE_ERROR_INVALID_PARAMS); - } - - *ppfnFuncTable = PVRGetBufferClassJTable; - - return (BCE_OK); -} - -int -BC_CreateBuffers (int id, bc_buf_params_t * p, IMG_BOOL is_conti_addr) -{ - BC_VIDEO_DEVINFO *psDevInfo; - IMG_UINT32 i, stride, size; - PVRSRV_PIXEL_FORMAT pixel_fmt; - - if (p->count <= 0 || p->count > BC_CDV_COUNT) - return -EINVAL; - - if (p->width <= 1 || p->width % width_align || p->height <= 1) - return -EINVAL; - - if ((p->width > BC_CDV_WIDTH) || (p->height > BC_CDV_HEIGHT) || - (p->stride > BC_CDV_STRIDE) || (p->stride < 32)) - return -EINVAL; - - switch (p->fourcc) - { - case BC_PIX_FMT_NV12: - pixel_fmt = PVRSRV_PIXEL_FORMAT_NV12; - break; - case BC_PIX_FMT_UYVY: - pixel_fmt = PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY; - break; - case BC_PIX_FMT_RGB565: - pixel_fmt = PVRSRV_PIXEL_FORMAT_RGB565; - p->stride = p->stride << 1; /* stride for RGB from user space is uncorrect */ - break; - case BC_PIX_FMT_YUYV: - pixel_fmt = PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV; - break; - default: - return -EINVAL; - break; - } - - stride = p->stride; - - if (p->type != BC_MEMORY_MMAP && p->type != BC_MEMORY_USERPTR) - return -EINVAL; - - if ((psDevInfo = GetAnchorPtr (id)) == IMG_NULL) - return -ENODEV; - - if (psDevInfo->ulNumBuffers) - BC_DestroyBuffers (id); - - psDevInfo->buf_type = p->type; - psDevInfo->psSystemBuffer = - BCAllocKernelMem (sizeof (BC_VIDEO_BUFFER) * p->count); - - if (!psDevInfo->psSystemBuffer) - return -ENOMEM; - - memset (psDevInfo->psSystemBuffer, 0, sizeof (BC_VIDEO_BUFFER) * p->count); - size = p->height * stride; - if (pixel_fmt == PVRSRV_PIXEL_FORMAT_NV12) - size += (stride >> 1) * (p->height >> 1) << 1; - - for (i = 0; i < p->count; i++) - { - IMG_SYS_PHYADDR *pPhysAddr; - if (is_conti_addr) - { - pPhysAddr = BCAllocKernelMem (1 * sizeof (IMG_SYS_PHYADDR)); - if (!pPhysAddr) - { - goto out_of_memory; - } - memset (pPhysAddr, 0, 1 * sizeof (IMG_SYS_PHYADDR)); - } - else - { - unsigned long ulPages = RANGE_TO_PAGES (size); - pPhysAddr = BCAllocKernelMem (ulPages * sizeof (IMG_SYS_PHYADDR)); - if (!pPhysAddr) - { - goto out_of_memory; - } - memset (pPhysAddr, 0, ulPages * sizeof (IMG_SYS_PHYADDR)); - } - psDevInfo->psSystemBuffer[i].psSysAddr = pPhysAddr; - /* - * Only after the memory is allocated successfully, try to modify - * the psDevInfo->psSystemBuffer and update the number of - * allocated buffers. - */ - psDevInfo->ulNumBuffers++; - psDevInfo->psSystemBuffer[i].ulSize = size; - psDevInfo->psSystemBuffer[i].psSyncData = IMG_NULL; - - /*for discontig buffers, allocate memory for pPhysAddr */ - psDevInfo->psSystemBuffer[i].is_conti_addr = is_conti_addr; - } - p->count = psDevInfo->ulNumBuffers; - - psDevInfo->sBufferInfo.ui32BufferCount = psDevInfo->ulNumBuffers; - psDevInfo->sBufferInfo.pixelformat = pixel_fmt; - psDevInfo->sBufferInfo.ui32Width = p->width; - psDevInfo->sBufferInfo.ui32Height = p->height; - psDevInfo->sBufferInfo.ui32ByteStride = stride; - psDevInfo->sBufferInfo.ui32BufferDeviceID = id; - psDevInfo->sBufferInfo.ui32Flags = PVRSRV_BC_FLAGS_YUVCSC_FULL_RANGE | - PVRSRV_BC_FLAGS_YUVCSC_BT601; - return 0; - -out_of_memory: - BC_DestroyBuffers (id); - return -ENOMEM; -} - -int -BC_DestroyBuffers (int id) -{ - BC_VIDEO_DEVINFO *psDevInfo; - IMG_UINT32 i; - if ((psDevInfo = GetAnchorPtr (id)) == IMG_NULL) - return -ENODEV; - - if (!psDevInfo->ulNumBuffers) - return 0; - - for (i = 0; i < psDevInfo->ulNumBuffers; i++) { - vfree(psDevInfo->psSystemBuffer[i].sCPUVAddr); - BCFreeKernelMem (psDevInfo->psSystemBuffer[i].psSysAddr); - psDevInfo->psSystemBuffer[i].psSysAddr = NULL; - } - - BCFreeKernelMem (psDevInfo->psSystemBuffer); - - psDevInfo->psSystemBuffer = NULL; - psDevInfo->ulNumBuffers = 0; - psDevInfo->sBufferInfo.pixelformat = PVRSRV_PIXEL_FORMAT_UNKNOWN; - psDevInfo->sBufferInfo.ui32Width = 0; - psDevInfo->sBufferInfo.ui32Height = 0; - psDevInfo->sBufferInfo.ui32ByteStride = 0; - psDevInfo->sBufferInfo.ui32BufferDeviceID = id; - psDevInfo->sBufferInfo.ui32Flags = 0; - psDevInfo->sBufferInfo.ui32BufferCount = psDevInfo->ulNumBuffers; - - return 0; -} - -int -GetBufferCount (unsigned int *puiBufferCount, int id) -{ - BC_VIDEO_DEVINFO *psDevInfo = GetAnchorPtr (id); - - if (psDevInfo == IMG_NULL) - { - return -1; - } - - *puiBufferCount = (unsigned int) psDevInfo->sBufferInfo.ui32BufferCount; - - return 0; -} - -int -BC_Video_Bridge (struct drm_device *dev, IMG_VOID * arg, - struct drm_file *file_priv) -{ - int err = -EFAULT; - - BC_VIDEO_DEVINFO *devinfo; - int i; - BC_Video_ioctl_package *psBridge = (BC_Video_ioctl_package *) arg; - int command = psBridge->ioctl_cmd; - int id = 0; - /* - * It is noted that the command of "request_buffer" should be the - * first request. Otherwise it will fail in the other BC_request. - */ - if (command == BC_Video_ioctl_request_buffers) - { - for (i = 0; i < BC_VIDEO_DEVICE_MAX_ID; i++) - { - if (bc_video_id_usage[i] == 0) - { - id = i; - break; - } - } - if (i == BC_VIDEO_DEVICE_MAX_ID) - { - printk (KERN_ERR DRVNAME - " : Does you really need to run more than 5 video simulateously.\n"); - return -1; - } else - psb_fpriv(file_priv)->bcd_index = id; - } - else { - id = psBridge->device_id; - if ((id >= BC_VIDEO_DEVICE_MAX_ID) || id < 0 || - !bc_video_id_usage[id]) { - printk (KERN_ERR DRVNAME - " : Invalid device ID\n"); - return -EINVAL; - } - } - if ((devinfo = GetAnchorPtr (id)) == IMG_NULL) - return -ENODEV; - - switch (command) - { - case BC_Video_ioctl_get_buffer_count: - { - if (GetBufferCount (&psBridge->outputparam, id) == -1) - { - printk (KERN_ERR DRVNAME - " : GetBufferCount error in BC_Video_Bridge.\n"); - return err; - } - return 0; - break; - } - case BC_Video_ioctl_get_buffer_index: - { - int idx; - BC_VIDEO_BUFFER *buffer; - - for (idx = 0; idx < devinfo->ulNumBuffers; idx++) - { - buffer = &devinfo->psSystemBuffer[idx]; - - if (psBridge->inputparam == buffer->sBufferHandle) - { - psBridge->outputparam = idx; - return 0; - } - } - printk (KERN_ERR DRVNAME ": BCIOGET_BUFFERIDX- buffer not found\n"); - return -EINVAL; - break; - } - case BC_Video_ioctl_request_buffers: - { - bc_buf_params_t p; - int ret; - if (copy_from_user - (&p, (void __user *) (psBridge->inputparam), sizeof (p))) - return -EFAULT; - - ret = BC_CreateBuffers (id, &p, IMG_FALSE); - if (ret) { - printk (KERN_ERR " : Failure in BC_buffer requests.\n"); - return ret; - } - bc_video_id_usage[id] = 1; - psBridge->outputparam = id; - break; - } - case BC_Video_ioctl_set_buffer_phyaddr: - { - bc_buf_ptr_t p; - struct ttm_buffer_object *bo = NULL; - struct ttm_tt *ttm = NULL; - struct ttm_object_file *tfile = psb_fpriv (file_priv)->tfile; - - if (copy_from_user - (&p, (void __user *) (psBridge->inputparam), sizeof (p))) - return -EFAULT; - - if (p.index >= devinfo->ulNumBuffers || !p.handle) - { - printk (KERN_ERR DRVNAME - " : index big than NumBuffers or p.handle is NULL.\n"); - return -EINVAL; - } - - bo = ttm_buffer_object_lookup (tfile, p.handle); - if (unlikely (bo == NULL)) - { - printk (KERN_ERR DRVNAME - " : Could not find buffer object for setstatus.\n"); - return -EINVAL; - } - ttm = bo->ttm; - - devinfo->psSystemBuffer[p.index].sCPUVAddr = NULL; - devinfo->psSystemBuffer[p.index].sBufferHandle = p.handle; - for (i = 0; i < ttm->num_pages; i++) - { - if (ttm->pages[i] == NULL) - { - printk (KERN_ERR " : Debug: the page is NULL.\n"); - ttm_bo_unref(&bo); - return -EINVAL; - } - devinfo->psSystemBuffer[p.index].psSysAddr[i].uiAddr = - page_to_pfn (ttm->pages[i]) << PAGE_SHIFT; - } - if (bo) - ttm_bo_unref (&bo); - return 0; - break; - } - case BC_Video_ioctl_release_buffer_device: - { - bc_video_id_usage[id] = 0; - - BC_DestroyBuffers (id); - return 0; - break; - } - case BC_Video_ioctl_alloc_buffer: - { - bc_buf_ptr_t p; - IMG_VOID *pvBuf; - IMG_UINT32 ui32Size; - IMG_UINT32 ulCounter; - BUFFER_INFO *bufferInfo; - - if (copy_from_user - (&p, (void __user *) (psBridge->inputparam), sizeof (p))) - return -EFAULT; - - if (p.index >= devinfo->ulNumBuffers) - { - printk (KERN_ERR DRVNAME " : index big than NumBuffers.\n"); - return -EINVAL; - } - - bufferInfo = &(devinfo->sBufferInfo); - if (bufferInfo->pixelformat != PVRSRV_PIXEL_FORMAT_NV12) - { - printk (KERN_ERR DRVNAME - " : BC_Video_ioctl_alloc_buffer only support NV12 format.\n"); - return -EINVAL; - } - if (devinfo->psSystemBuffer[p.index].sCPUVAddr) { - printk(KERN_ERR DRVNAME - " : Try to allow memory twice for one slot.\n"); - return -EFAULT; - } - ui32Size = bufferInfo->ui32Height * bufferInfo->ui32ByteStride; - ui32Size += - (bufferInfo->ui32ByteStride >> 1) * - (bufferInfo->ui32Height >> 1) << 1; - - pvBuf = - __vmalloc (ui32Size, GFP_KERNEL | __GFP_HIGHMEM, - __pgprot ((pgprot_val (PAGE_KERNEL) & ~_PAGE_CACHE_MASK) - | _PAGE_CACHE_WC)); - if (pvBuf == NULL) - { - printk (KERN_ERR DRVNAME - " : Failed to allocate %d bytes buffer.\n", ui32Size); - return -EINVAL; - } - devinfo->psSystemBuffer[p.index].sCPUVAddr = pvBuf; - devinfo->psSystemBuffer[p.index].sBufferHandle = 0; - - i = 0; - - for (ulCounter = 0; ulCounter < ui32Size; ulCounter += PAGE_SIZE) - { - devinfo->psSystemBuffer[p.index].psSysAddr[i++].uiAddr = - vmalloc_to_pfn (pvBuf + ulCounter) << PAGE_SHIFT; - } - - if (p.handle) - { - printk (KERN_ERR DRVNAME - " : fill data %d bytes from user space 0x%x.\n", ui32Size, - (int) p.handle); - if (copy_from_user (pvBuf, (void __user *) p.handle, ui32Size)) { - devinfo->psSystemBuffer[p.index].sCPUVAddr = NULL; - vfree(pvBuf); - return -EFAULT; - } - } - psBridge->outputparam = (int) pvBuf; - - return 0; - break; - } - case BC_Video_ioctl_free_buffer: - { - bc_buf_ptr_t p; - - if (copy_from_user - (&p, (void __user *) (psBridge->inputparam), sizeof (p))) - { - return -EFAULT; - } - if (p.index >= devinfo->ulNumBuffers) - { - printk (KERN_ERR " : index big than NumBuffers.\n"); - return -EINVAL; - } - - if (devinfo->psSystemBuffer[p.index].sCPUVAddr) { - vfree(devinfo->psSystemBuffer[p.index].sCPUVAddr); - devinfo->psSystemBuffer[p.index].sCPUVAddr = NULL; - } else { - printk(KERN_ERR DRVNAME - " : Try to free the invalid memory.\n"); - return -EFAULT; - } - return 0; - break; - } - default: - return err; - } - - return 0; -} - diff --git a/drivers/staging/cdv/bc_video/bufferclass_video_linux.h b/drivers/staging/cdv/bc_video/bufferclass_video_linux.h deleted file mode 100644 index 529257a..0000000 --- a/drivers/staging/cdv/bc_video/bufferclass_video_linux.h +++ /dev/null @@ -1,67 +0,0 @@ -/***************************************************************************** - * - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - ******************************************************************************/ - -#ifndef __BC_VIDEO_LINUX_H__ -#define __BC_VIDEO_LINUX_H__ - -#include - -#define BC_FOURCC(a,b,c,d) \ - ((unsigned long) ((a) | (b)<<8 | (c)<<16 | (d)<<24)) - -#define BC_PIX_FMT_NV12 BC_FOURCC('N', 'V', '1', '2') /*YUV 4:2:0 */ -#define BC_PIX_FMT_UYVY BC_FOURCC('U', 'Y', 'V', 'Y') /*YUV 4:2:2 */ -#define BC_PIX_FMT_YUYV BC_FOURCC('Y', 'U', 'Y', 'V') /*YUV 4:2:2 */ -#define BC_PIX_FMT_RGB565 BC_FOURCC('R', 'G', 'B', 'P') /*RGB 5:6:5 */ - -typedef struct BC_Video_ioctl_package_TAG -{ - int ioctl_cmd; - int device_id; - int inputparam; - int outputparam; -} BC_Video_ioctl_package; - -typedef struct bc_buf_ptr -{ - unsigned int index; - int size; - unsigned long pa; - unsigned long handle; -} bc_buf_ptr_t; - -#define BC_Video_ioctl_fill_buffer 0 -#define BC_Video_ioctl_get_buffer_count 1 -#define BC_Video_ioctl_get_buffer_phyaddr 2 /*get physical address by index */ -#define BC_Video_ioctl_get_buffer_index 3 /*get index by physical address */ -#define BC_Video_ioctl_request_buffers 4 -#define BC_Video_ioctl_set_buffer_phyaddr 5 -#define BC_Video_ioctl_release_buffer_device 6 - -#define BC_Video_ioctl_alloc_buffer 7 -#define BC_Video_ioctl_free_buffer 8 - -int BC_DestroyBuffers (int id); -#endif diff --git a/drivers/staging/cdv/drv/psb_bl.c b/drivers/staging/cdv/drv/psb_bl.c deleted file mode 100644 index 2ffbcd3..0000000 --- a/drivers/staging/cdv/drv/psb_bl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * psb backlight using HAL - * - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: Eric Knopp - * - */ - -#include -#include -#include "psb_drv.h" -#include "psb_intel_reg.h" -#include "psb_intel_drv.h" -#include "psb_intel_bios.h" -#include "psb_powermgmt.h" - -#define MRST_BLC_MAX_PWM_REG_FREQ 0xFFFF -#define BLC_PWM_PRECISION_FACTOR 100 /* 10000000 */ -#define BLC_PWM_FREQ_CALC_CONSTANT 32 -#define MHz 1000000 -#define BRIGHTNESS_MIN_LEVEL 1 -#define BRIGHTNESS_MAX_LEVEL 100 -#define BRIGHTNESS_MASK 0xFF -#define BLC_POLARITY_NORMAL 0 -#define BLC_POLARITY_INVERSE 1 -#define BLC_ADJUSTMENT_MAX 100 - -#define PSB_BLC_PWM_PRECISION_FACTOR 10 -#define PSB_BLC_MAX_PWM_REG_FREQ 0xFFFE -#define PSB_BLC_MIN_PWM_REG_FREQ 0x2 - -#define PSB_BACKLIGHT_PWM_POLARITY_BIT_CLEAR (0xFFFE) -#define PSB_BACKLIGHT_PWM_CTL_SHIFT (16) - -static struct backlight_device *psb_backlight_device; -u8 blc_pol; -u8 blc_type; - - -int psb_set_brightness(struct backlight_device *bd) -{ - struct drm_device *dev = (struct drm_device *)bl_get_data(psb_backlight_device); - int level = bd->props.brightness; - - DRM_DEBUG_DRIVER("backlight level set to %d\n", level); - - if (level > bd->props.max_brightness) - level = bd->props.max_brightness; - - psb_intel_lvds_set_backlight(dev, level); - - return 0; -} - -int psb_get_brightness(struct backlight_device *bd) -{ - struct drm_device *dev = (struct drm_device *)bl_get_data(psb_backlight_device); - - /* return locally cached var instead of HW read (due to DPST etc.) */ - return psb_intel_lvds_get_backlight(dev); -} - -struct backlight_ops psb_ops = { - .get_brightness = psb_get_brightness, - .update_status = psb_set_brightness, -}; - -static int device_backlight_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = (struct drm_psb_private *) dev->dev_private; - - if (IS_CDV(dev)) { - dev_priv->blc_adj1 = BLC_ADJUSTMENT_MAX; - dev_priv->blc_adj2 = BLC_ADJUSTMENT_MAX; - return 0; - } - - return 0; -} - -int psb_backlight_init(struct drm_device *dev) -{ -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE - int ret = 0; - struct backlight_properties props; - - memset(&props, 0, sizeof(struct backlight_properties)); - props.max_brightness = psb_intel_lvds_get_max_backlight(dev); - props.type = BACKLIGHT_RAW; - - psb_backlight_device = backlight_device_register("psb-bl", NULL, (void *)dev, &psb_ops, &props); - if (IS_ERR(psb_backlight_device)) - return PTR_ERR(psb_backlight_device); - - if ((ret = device_backlight_init(dev)) != 0) - return ret; - - psb_backlight_device->props.brightness = psb_intel_lvds_get_backlight(dev); - psb_backlight_device->props.max_brightness = props.max_brightness; - backlight_update_status(psb_backlight_device); -#endif - return 0; -} - -void psb_backlight_exit(void) -{ -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE - psb_backlight_device->props.brightness = 0; - backlight_update_status(psb_backlight_device); - backlight_device_unregister(psb_backlight_device); -#endif - return; -} - -struct backlight_device * psb_get_backlight_device(void) -{ -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE - return psb_backlight_device; -#endif - return NULL; -} diff --git a/drivers/staging/cdv/drv/psb_dpst.c b/drivers/staging/cdv/drv/psb_dpst.c deleted file mode 100644 index eb940af..0000000 --- a/drivers/staging/cdv/drv/psb_dpst.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ - -#include "psb_umevents.h" -#include "psb_dpst.h" -/** - * inform the kernel of the work to be performed and related function. - * - */ -DECLARE_WORK(dpst_dev_change_work, &psb_dpst_dev_change_wq); -/** - * psb_dpst_notify_change_um - notify user mode of hotplug changes - * - * @name: name of event to notify user mode of change to - * @state: dpst state struct to get workqueue from - * - */ -int psb_dpst_notify_change_um(enum dpst_event_enum event, - struct dpst_state *state) -{ - if (state == NULL) - return IRQ_HANDLED; - - state->dpst_change_wq_data.dev_name_arry_rw_status - [state->dpst_change_wq_data.dev_name_write] = - DRM_DPST_READY_TO_READ; - state->dpst_change_wq_data.dpst_events - [state->dpst_change_wq_data.dev_name_write] = - event; - if (state->dpst_change_wq_data.dev_name_read_write_wrap_ack == 1) - state->dpst_change_wq_data.dev_name_read_write_wrap_ack = 0; - state->dpst_change_wq_data.dev_name_write++; - if (state->dpst_change_wq_data.dev_name_write == - state->dpst_change_wq_data.dev_name_read) { - state->dpst_change_wq_data.dev_name_write--; - return IRQ_NONE; - } - if (state->dpst_change_wq_data.dev_name_write > - DRM_DPST_RING_DEPTH_MAX) { - state->dpst_change_wq_data.dev_name_write = 0; - state->dpst_change_wq_data.dev_name_write_wrap = 1; - } - state->dpst_change_wq_data.hotplug_dev_list = state->list; - queue_work(state->dpst_wq, &(state->dpst_change_wq_data.work)); - return IRQ_HANDLED; -} -/*EXPORT_SYMBOL(psb_dpst_notify_change_um); */ -/** - * - * psb_dpst_create_and_notify_um - create and notify user mode of new dev - * - * @name: name to give for new event / device - * @state: dpst state instaces to associate event with - * - */ -struct umevent_obj *psb_dpst_create_and_notify_um(const char *name, - struct dpst_state *state) -{ - return psb_create_umevent_obj(name, state->list); - -} -/*EXPORT_SYMBOL(psb_dpst_create_and_notify_um); */ -/** - * psb_dpst_device_pool_create_and_init - make new hotplug device pool - * - * @parent_kobj - parent kobject to associate dpst kset with - * @state - dpst state instance to associate list with - * - */ -struct umevent_list *psb_dpst_device_pool_create_and_init( - struct kobject *parent_kobj, - struct dpst_state *state) -{ - struct umevent_list *new_hotplug_dev_list = NULL; - new_hotplug_dev_list = psb_umevent_create_list(); - if (new_hotplug_dev_list) - psb_umevent_init(parent_kobj, new_hotplug_dev_list, - "psb_dpst"); - - state->dpst_wq = create_singlethread_workqueue("dpst-wq"); - - if (!state->dpst_wq) - return NULL; - - INIT_WORK(&state->dpst_change_wq_data.work, psb_dpst_dev_change_wq); - - state->dpst_change_wq_data.dev_name_read = 0; - state->dpst_change_wq_data.dev_name_write = 0; - state->dpst_change_wq_data.dev_name_write_wrap = 0; - state->dpst_change_wq_data.dev_name_read_write_wrap_ack = 0; - - memset(&(state->dpst_change_wq_data.dev_name_arry_rw_status[0]), - 0, sizeof(int)*DRM_DPST_RING_DEPTH); - - return new_hotplug_dev_list; -} -/*EXPORT_SYMBOL(psb_dpst_device_pool_create_and_init); */ -/** - * psb_dpst_init - init dpst subsystem - * @parent_kobj - parent kobject to associate dpst state with - * - */ -struct dpst_state *psb_dpst_init(struct kobject *parent_kobj) -{ - struct dpst_state *state; - struct umevent_obj *working_umevent; - - state = kzalloc(sizeof(struct dpst_state), GFP_KERNEL); - if (state == NULL) { - DRM_ERROR("Failure in memory allocation\n"); - return NULL; - } - state->list = NULL; - state->list = psb_dpst_device_pool_create_and_init( - parent_kobj, - state); - if (state->list == NULL) { - DRM_ERROR("Failure in memory allocation\n"); - kfree(state); - return NULL; - } - working_umevent = - psb_dpst_create_and_notify_um("init", - state); - if (working_umevent == NULL) { - DRM_ERROR("Out of Memory\n"); - goto failed_umevent; - } - state->dpst_change_wq_data.dev_umevent_arry - [DPST_EVENT_INIT_COMPLETE] = &(working_umevent->head); - - working_umevent = - psb_dpst_create_and_notify_um("hist_int", - state); - if (working_umevent == NULL) { - DRM_ERROR("Out of Memory\n"); - goto failed_umevent; - } - state->dpst_change_wq_data.dev_umevent_arry - [DPST_EVENT_HIST_INTERRUPT] = &(working_umevent->head); - - working_umevent = - psb_dpst_create_and_notify_um("term", - state); - if (working_umevent == NULL) { - DRM_ERROR("Out of Memory\n"); - goto failed_umevent; - } - state->dpst_change_wq_data.dev_umevent_arry - [DPST_EVENT_TERMINATE] = &(working_umevent->head); - - working_umevent = - psb_dpst_create_and_notify_um("phase_done", - state); - - if (working_umevent == NULL) { - DRM_ERROR("Out of Memory\n"); - goto failed_umevent; - } - state->dpst_change_wq_data.dev_umevent_arry - [DPST_EVENT_PHASE_COMPLETE] = &(working_umevent->head); - - return state; - -failed_umevent: - psb_dpst_device_pool_destroy(state); - return NULL; -} -/*EXPORT_SYMBOL(psb_dpst_init); */ -/** - * psb_dpst_device_pool_destroy - destroy all dpst related resources - * - * @state: dpst state instance to destroy - * - */ -void psb_dpst_device_pool_destroy(struct dpst_state *state) -{ - int i; - struct umevent_list *list; - - list = state->list; - flush_workqueue(state->dpst_wq); - destroy_workqueue(state->dpst_wq); - for (i = 0; i < DRM_DPST_MAX_NUM_EVENTS; i++) { - state->dpst_change_wq_data.dev_umevent_arry[i] = NULL; - } - psb_umevent_cleanup(list); - kfree(state); -} -/*EXPORT_SYMBOL(psb_dpst_device_pool_destroy); */ -/** - * psb_dpst_dev_change_wq - change workqueue implementation - * - * @work: work struct to use for kernel scheduling - * - */ -void psb_dpst_dev_change_wq(struct work_struct *work) -{ - struct dpst_disp_workqueue_data *wq_data; - int curr_event_index; - wq_data = to_dpst_disp_workqueue_data(work); - if (wq_data->dev_name_write_wrap == 1) { - wq_data->dev_name_read_write_wrap_ack = 1; - wq_data->dev_name_write_wrap = 0; - while (wq_data->dev_name_read != DRM_DPST_RING_DEPTH_MAX) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_DPST_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_DPST_READ_COMPLETE; - curr_event_index = wq_data->dpst_events - [wq_data->dev_name_read]; - psb_umevent_notify_change_gfxsock - (list_entry( - (wq_data->dev_umevent_arry - [curr_event_index]), - struct umevent_obj, head), - DRM_DPST_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - wq_data->dev_name_read = 0; - while (wq_data->dev_name_read < wq_data->dev_name_write-1) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_DPST_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_DPST_READ_COMPLETE; - curr_event_index = wq_data->dpst_events - [wq_data->dev_name_read]; - psb_umevent_notify_change_gfxsock - (list_entry( - (wq_data->dev_umevent_arry - [curr_event_index]), - struct umevent_obj, head), - DRM_DPST_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - } else { - while (wq_data->dev_name_read < wq_data->dev_name_write) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_DPST_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_DPST_READ_COMPLETE; - curr_event_index = wq_data->dpst_events - [wq_data->dev_name_read]; - psb_umevent_notify_change_gfxsock - (list_entry( - (wq_data->dev_umevent_arry - [curr_event_index]), - struct umevent_obj, head), - DRM_DPST_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - } - if (wq_data->dev_name_read > DRM_DPST_RING_DEPTH_MAX) - wq_data->dev_name_read = 0; -} -/*EXPORT_SYMBOL(psb_dpst_dev_change_wq); */ diff --git a/drivers/staging/cdv/drv/psb_dpst.h b/drivers/staging/cdv/drv/psb_dpst.h deleted file mode 100644 index 97f82cd..0000000 --- a/drivers/staging/cdv/drv/psb_dpst.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ - -#ifndef _PSB_DPST_H_ -#define _PSB_DPST_H_ -/** - * required includes - * - */ -#include "psb_umevents.h" -/** - * dpst event enumeration - * - */ -enum dpst_event_enum { - DPST_EVENT_INIT_COMPLETE, - DPST_EVENT_HIST_INTERRUPT, - DPST_EVENT_TERMINATE, - DPST_EVENT_PHASE_COMPLETE, - DPST_MAX_EVENT -}; -/** - * dpst specific defines - * - */ -#define DRM_DPST_RING_DEPTH 256 -#define DRM_DPST_RING_DEPTH_MAX (DRM_DPST_RING_DEPTH-1) -#define DRM_DPST_READY_TO_READ 1 -#define DRM_DPST_READ_COMPLETE 2 -#define DRM_DPST_MAX_NUM_EVENTS (DPST_MAX_EVENT) -/** - * dpst workqueue data struct. - */ -struct dpst_disp_workqueue_data { - struct work_struct work; - const char *dev_name; - int dev_name_write; - int dev_name_read; - int dev_name_write_wrap; - int dev_name_read_write_wrap_ack; - enum dpst_event_enum dpst_events[DRM_DPST_RING_DEPTH]; - int dev_name_arry_rw_status[DRM_DPST_RING_DEPTH]; - struct umevent_list *hotplug_dev_list; - struct list_head *dev_umevent_arry[DRM_DPST_MAX_NUM_EVENTS]; -}; -/** - * dpst state structure - * - */ -struct dpst_state { - struct workqueue_struct *dpst_wq; - struct dpst_disp_workqueue_data dpst_change_wq_data; - struct umevent_list *list; -}; -/** - * main interface function prototytpes for dpst support. - * - */ -extern struct dpst_state *psb_dpst_init(struct kobject *parent_kobj); -extern int psb_dpst_notify_change_um(enum dpst_event_enum event, - struct dpst_state *state); -extern struct umevent_obj *psb_dpst_create_and_notify_um(const char *name, - struct dpst_state *state); -extern struct umevent_list *psb_dpst_device_pool_create_and_init( - struct kobject *parent_kobj, - struct dpst_state *state); -extern void psb_dpst_device_pool_destroy(struct dpst_state *state); -/** - * to go back and forth between work struct and workqueue data - * - */ -#define to_dpst_disp_workqueue_data(x) \ - container_of(x, struct dpst_disp_workqueue_data, work) - -/** - * function prototypes for workqueue implementation - * - */ -extern void psb_dpst_dev_change_wq(struct work_struct *work); -#endif diff --git a/drivers/staging/cdv/drv/psb_drm.h b/drivers/staging/cdv/drv/psb_drm.h deleted file mode 100644 index 970ecc6..0000000 --- a/drivers/staging/cdv/drv/psb_drm.h +++ /dev/null @@ -1,562 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * Copyright (c) 2008, Tungsten Graphics Inc. Cedar Park, TX., USA. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#ifndef _PSB_DRM_H_ -#define _PSB_DRM_H_ - -#if defined(__linux__) && !defined(__KERNEL__) -#include -#include -#include "drm_mode.h" -#endif - -#include "psb_ttm_fence_user.h" -#include "psb_ttm_placement_user.h" - -/* - * Menlow/MRST graphics driver package version - * a.b.c.xxxx - * a - Product Family: 5 - Linux - * b - Major Release Version: 0 - non-Gallium (Unbuntu); - * 1 - Gallium (Moblin2) - * c - Hotfix Release - * xxxx - Graphics internal build # - */ -#define PSB_PACKAGE_VERSION "5.3.0.32L.0039" - -#define DRM_PSB_SAREA_MAJOR 0 -#define DRM_PSB_SAREA_MINOR 2 -#define PSB_FIXED_SHIFT 16 - -#define PSB_NUM_PIPE 3 - -/* - * Public memory types. - */ - -#define DRM_PSB_MEM_MMU TTM_PL_PRIV1 -#define DRM_PSB_FLAG_MEM_MMU TTM_PL_FLAG_PRIV1 - -#define TTM_PL_CI TTM_PL_PRIV0 -#define TTM_PL_FLAG_CI TTM_PL_FLAG_PRIV0 - -#define TTM_PL_RAR TTM_PL_PRIV2 -#define TTM_PL_FLAG_RAR TTM_PL_FLAG_PRIV2 - -typedef int32_t psb_fixed; -typedef uint32_t psb_ufixed; - -static inline int32_t psb_int_to_fixed(int a) -{ - return a * (1 << PSB_FIXED_SHIFT); -} - -static inline uint32_t psb_unsigned_to_ufixed(unsigned int a) -{ - return a << PSB_FIXED_SHIFT; -} - -/*Status of the command sent to the gfx device.*/ -typedef enum { - DRM_CMD_SUCCESS, - DRM_CMD_FAILED, - DRM_CMD_HANG -} drm_cmd_status_t; - -struct drm_psb_scanout { - uint32_t buffer_id; /* DRM buffer object ID */ - uint32_t rotation; /* Rotation as in RR_rotation definitions */ - uint32_t stride; /* Buffer stride in bytes */ - uint32_t depth; /* Buffer depth in bits (NOT) bpp */ - uint32_t width; /* Buffer width in pixels */ - uint32_t height; /* Buffer height in lines */ - int32_t transform[3][3]; /* Buffer composite transform */ - /* (scaling, rot, reflect) */ -}; - -#define DRM_PSB_SAREA_OWNERS 16 -#define DRM_PSB_SAREA_OWNER_2D 0 -#define DRM_PSB_SAREA_OWNER_3D 1 - -#define DRM_PSB_SAREA_SCANOUTS 3 - -struct drm_psb_sarea { - /* Track changes of this data structure */ - - uint32_t major; - uint32_t minor; - - /* Last context to touch part of hw */ - uint32_t ctx_owners[DRM_PSB_SAREA_OWNERS]; - - /* Definition of front- and rotated buffers */ - uint32_t num_scanouts; - struct drm_psb_scanout scanouts[DRM_PSB_SAREA_SCANOUTS]; - - int planeA_x; - int planeA_y; - int planeA_w; - int planeA_h; - int planeB_x; - int planeB_y; - int planeB_w; - int planeB_h; - /* Number of active scanouts */ - uint32_t num_active_scanouts; -}; - -#define PSB_RELOC_MAGIC 0x67676767 -#define PSB_RELOC_SHIFT_MASK 0x0000FFFF -#define PSB_RELOC_SHIFT_SHIFT 0 -#define PSB_RELOC_ALSHIFT_MASK 0xFFFF0000 -#define PSB_RELOC_ALSHIFT_SHIFT 16 - -#define PSB_RELOC_OP_OFFSET 0 /* Offset of the indicated - * buffer - */ - -struct drm_psb_reloc { - uint32_t reloc_op; - uint32_t where; /* offset in destination buffer */ - uint32_t buffer; /* Buffer reloc applies to */ - uint32_t mask; /* Destination format: */ - uint32_t shift; /* Destination format: */ - uint32_t pre_add; /* Destination format: */ - uint32_t background; /* Destination add */ - uint32_t dst_buffer; /* Destination buffer. Index into buffer_list */ - uint32_t arg0; /* Reloc-op dependant */ - uint32_t arg1; -}; - - -#define PSB_GPU_ACCESS_READ (1ULL << 32) -#define PSB_GPU_ACCESS_WRITE (1ULL << 33) -#define PSB_GPU_ACCESS_MASK (PSB_GPU_ACCESS_READ | PSB_GPU_ACCESS_WRITE) - -#define PSB_BO_FLAG_COMMAND (1ULL << 52) - -#define PSB_ENGINE_2D 0 -#define PSB_ENGINE_VIDEO 1 - -/* - * For this fence class we have a couple of - * fence types. - */ - -#define _PSB_FENCE_EXE_SHIFT 0 -#define _PSB_FENCE_FEEDBACK_SHIFT 4 - -#define _PSB_FENCE_TYPE_EXE (1 << _PSB_FENCE_EXE_SHIFT) -#define _PSB_FENCE_TYPE_FEEDBACK (1 << _PSB_FENCE_FEEDBACK_SHIFT) - -#define PSB_NUM_ENGINES 6 - - -#define PSB_FEEDBACK_OP_VISTEST (1 << 0) - -struct drm_psb_extension_rep { - int32_t exists; - uint32_t driver_ioctl_offset; - uint32_t sarea_offset; - uint32_t major; - uint32_t minor; - uint32_t pl; -}; - -#define DRM_PSB_EXT_NAME_LEN 128 - -union drm_psb_extension_arg { - char extension[DRM_PSB_EXT_NAME_LEN]; - struct drm_psb_extension_rep rep; -}; - -struct psb_validate_req { - uint64_t set_flags; - uint64_t clear_flags; - uint64_t next; - uint64_t presumed_gpu_offset; - uint32_t buffer_handle; - uint32_t presumed_flags; - uint32_t group; - uint32_t pad64; -}; - -struct psb_validate_rep { - uint64_t gpu_offset; - uint32_t placement; - uint32_t fence_type_mask; -}; - -#define PSB_USE_PRESUMED (1 << 0) - -struct psb_validate_arg { - int handled; - int ret; - union { - struct psb_validate_req req; - struct psb_validate_rep rep; - } d; -}; - - -#define DRM_PSB_FENCE_NO_USER (1 << 0) - -struct psb_ttm_fence_rep { - uint32_t handle; - uint32_t fence_class; - uint32_t fence_type; - uint32_t signaled_types; - uint32_t error; -}; - -typedef struct drm_psb_cmdbuf_arg { - uint64_t buffer_list; /* List of buffers to validate */ - uint64_t clip_rects; /* See i915 counterpart */ - uint64_t scene_arg; - uint64_t fence_arg; - - uint32_t ta_flags; - - uint32_t ta_handle; /* TA reg-value pairs */ - uint32_t ta_offset; - uint32_t ta_size; - - uint32_t oom_handle; - uint32_t oom_offset; - uint32_t oom_size; - - uint32_t cmdbuf_handle; /* 2D Command buffer object or, */ - uint32_t cmdbuf_offset; /* rasterizer reg-value pairs */ - uint32_t cmdbuf_size; - - uint32_t reloc_handle; /* Reloc buffer object */ - uint32_t reloc_offset; - uint32_t num_relocs; - - int32_t damage; /* Damage front buffer with cliprects */ - /* Not implemented yet */ - uint32_t fence_flags; - uint32_t engine; - - /* - * Feedback; - */ - - uint32_t feedback_ops; - uint32_t feedback_handle; - uint32_t feedback_offset; - uint32_t feedback_breakpoints; - uint32_t feedback_size; -} drm_psb_cmdbuf_arg_t; - -typedef struct drm_psb_pageflip_arg { - uint32_t flip_offset; - uint32_t stride; -} drm_psb_pageflip_arg_t; - -typedef enum { - LNC_VIDEO_DEVICE_INFO, - LNC_VIDEO_GETPARAM_RAR_INFO, - LNC_VIDEO_GETPARAM_CI_INFO, - LNC_VIDEO_GETPARAM_RAR_HANDLER_OFFSET, - LNC_VIDEO_FRAME_SKIP, - IMG_VIDEO_DECODE_STATUS, - IMG_VIDEO_NEW_CONTEXT, - IMG_VIDEO_RM_CONTEXT, - IMG_VIDEO_MB_ERROR -} lnc_getparam_key_t; - -struct drm_lnc_video_getparam_arg { - lnc_getparam_key_t key; - uint64_t arg; /* argument pointer */ - uint64_t value; /* feed back pointer */ -}; - - -/* - * Feedback components: - */ - -/* - * Vistest component. The number of these in the feedback buffer - * equals the number of vistest breakpoints + 1. - * This is currently the only feedback component. - */ - -struct drm_psb_vistest { - uint32_t vt[8]; -}; - -struct drm_psb_sizes_arg { - uint32_t ta_mem_size; - uint32_t mmu_size; - uint32_t pds_size; - uint32_t rastgeom_size; - uint32_t tt_size; - uint32_t vram_size; -}; - -struct drm_psb_hist_status_arg { - uint32_t buf[32]; -}; - -struct drm_psb_dpst_lut_arg { - uint8_t lut[256]; - int output_id; -}; - -struct mrst_timing_info { - uint16_t pixel_clock; - uint8_t hactive_lo; - uint8_t hblank_lo; - uint8_t hblank_hi:4; - uint8_t hactive_hi:4; - uint8_t vactive_lo; - uint8_t vblank_lo; - uint8_t vblank_hi:4; - uint8_t vactive_hi:4; - uint8_t hsync_offset_lo; - uint8_t hsync_pulse_width_lo; - uint8_t vsync_pulse_width_lo:4; - uint8_t vsync_offset_lo:4; - uint8_t vsync_pulse_width_hi:2; - uint8_t vsync_offset_hi:2; - uint8_t hsync_pulse_width_hi:2; - uint8_t hsync_offset_hi:2; - uint8_t width_mm_lo; - uint8_t height_mm_lo; - uint8_t height_mm_hi:4; - uint8_t width_mm_hi:4; - uint8_t hborder; - uint8_t vborder; - uint8_t unknown0:1; - uint8_t hsync_positive:1; - uint8_t vsync_positive:1; - uint8_t separate_sync:2; - uint8_t stereo:1; - uint8_t unknown6:1; - uint8_t interlaced:1; -} __attribute__((packed)); - -struct gct_ioctl_arg{ - uint8_t bpi; /* boot panel index, number of panel used during boot */ - uint8_t pt; /* panel type, 4 bit field, 0=lvds, 1=mipi */ - struct mrst_timing_info DTD; /* timing info for the selected panel */ - uint32_t Panel_Port_Control; - uint32_t PP_On_Sequencing;/*1 dword,Register 0x61208,*/ - uint32_t PP_Off_Sequencing;/*1 dword,Register 0x6120C,*/ - uint32_t PP_Cycle_Delay; - uint16_t Panel_Backlight_Inverter_Descriptor; - uint16_t Panel_MIPI_Display_Descriptor; -} __attribute__ ((packed)); - -#define PSB_DC_CRTC_SAVE 0x01 -#define PSB_DC_CRTC_RESTORE 0x02 -#define PSB_DC_OUTPUT_SAVE 0x04 -#define PSB_DC_OUTPUT_RESTORE 0x08 -#define PSB_DC_CRTC_MASK 0x03 -#define PSB_DC_OUTPUT_MASK 0x0C - -struct drm_psb_dc_state_arg { - uint32_t flags; - uint32_t obj_id; -}; - -struct drm_psb_mode_operation_arg { - uint32_t obj_id; - uint16_t operation; - struct drm_mode_modeinfo mode; - void *data; -}; - -struct drm_psb_stolen_memory_arg { - uint32_t base; - uint32_t size; -}; - -/*Display Register Bits*/ -#define REGRWBITS_PFIT_CONTROLS (1 << 0) -#define REGRWBITS_PFIT_AUTOSCALE_RATIOS (1 << 1) -#define REGRWBITS_PFIT_PROGRAMMED_SCALE_RATIOS (1 << 2) -#define REGRWBITS_PIPEASRC (1 << 3) -#define REGRWBITS_PIPEBSRC (1 << 4) -#define REGRWBITS_VTOTAL_A (1 << 5) -#define REGRWBITS_VTOTAL_B (1 << 6) -#define REGRWBITS_DSPACNTR (1 << 8) -#define REGRWBITS_DSPBCNTR (1 << 9) -#define REGRWBITS_DSPCCNTR (1 << 10) - -/*Overlay Register Bits*/ -#define OV_REGRWBITS_OVADD (1 << 0) -#define OV_REGRWBITS_OGAM_ALL (1 << 1) - -#define OVC_REGRWBITS_OVADD (1 << 2) -#define OVC_REGRWBITS_OGAM_ALL (1 << 3) - -struct drm_psb_register_rw_arg { - uint32_t b_force_hw_on; - - uint32_t display_read_mask; - uint32_t display_write_mask; - - struct { - uint32_t pfit_controls; - uint32_t pfit_autoscale_ratios; - uint32_t pfit_programmed_scale_ratios; - uint32_t pipeasrc; - uint32_t pipebsrc; - uint32_t vtotal_a; - uint32_t vtotal_b; - } display; - - uint32_t overlay_read_mask; - uint32_t overlay_write_mask; - - struct { - uint32_t OVADD; - uint32_t OGAMC0; - uint32_t OGAMC1; - uint32_t OGAMC2; - uint32_t OGAMC3; - uint32_t OGAMC4; - uint32_t OGAMC5; - uint32_t IEP_ENABLED; - uint32_t IEP_BLE_MINMAX; - uint32_t IEP_BSSCC_CONTROL; - uint32_t b_wait_vblank; - } overlay; - - uint32_t sprite_enable_mask; - uint32_t sprite_disable_mask; - - struct { - uint32_t dspa_control; - uint32_t dspa_key_value; - uint32_t dspa_key_mask; - uint32_t dspc_control; - uint32_t dspc_stride; - uint32_t dspc_position; - uint32_t dspc_linear_offset; - uint32_t dspc_size; - uint32_t dspc_surface; - } sprite; - - uint32_t subpicture_enable_mask; - uint32_t subpicture_disable_mask; -}; - -struct psb_gtt_mapping_arg { - void *hKernelMemInfo; - uint32_t offset_pages; -}; - -struct drm_psb_getpageaddrs_arg { - uint32_t handle; - unsigned long *page_addrs; - unsigned long gtt_offset; -}; - - -#define MAX_SLICES_PER_PICTURE 72 -typedef struct drm_psb_msvdx_decode_status { - uint32_t fw_status; - uint32_t num_error_slice; - int32_t start_error_mb_list[MAX_SLICES_PER_PICTURE]; - int32_t end_error_mb_list[MAX_SLICES_PER_PICTURE]; - int32_t slice_missing_or_error[MAX_SLICES_PER_PICTURE]; -} drm_psb_msvdx_decode_status_t; - -/* Controlling the kernel modesetting buffers */ - -#define DRM_PSB_KMS_OFF 0x00 -#define DRM_PSB_KMS_ON 0x01 -#define DRM_PSB_VT_LEAVE 0x02 -#define DRM_PSB_VT_ENTER 0x03 -#define DRM_PSB_EXTENSION 0x06 -#define DRM_PSB_SIZES 0x07 -#define DRM_PSB_FUSE_REG 0x08 -#define DRM_PSB_VBT 0x09 -#define DRM_PSB_DC_STATE 0x0A -#define DRM_PSB_ADB 0x0B -#define DRM_PSB_MODE_OPERATION 0x0C -#define DRM_PSB_STOLEN_MEMORY 0x0D -#define DRM_PSB_REGISTER_RW 0x0E -#define DRM_PSB_GTT_MAP 0x0F -#define DRM_PSB_GTT_UNMAP 0x10 -#define DRM_PSB_GETPAGEADDRS 0x11 -/** - * NOTE: Add new commands here, but increment - * the values below and increment their - * corresponding defines where they're - * defined elsewhere. - */ -#define DRM_PVR_RESERVED1 0x12 -#define DRM_PVR_RESERVED2 0x13 -#define DRM_PVR_RESERVED3 0x14 -#define DRM_PVR_RESERVED4 0x15 -#define DRM_PVR_RESERVED5 0x16 - -#define DRM_PSB_HIST_ENABLE 0x17 -#define DRM_PSB_HIST_STATUS 0x18 -#define DRM_PSB_UPDATE_GUARD 0x19 -#define DRM_PSB_INIT_COMM 0x1A -#define DRM_PSB_DPST 0x1B -#define DRM_PSB_GAMMA 0x1C -#define DRM_PSB_DPST_BL 0x1D - -#define DRM_PVR_RESERVED6 0x1E - -#define DRM_PSB_GET_PIPE_FROM_CRTC_ID 0x1F -#define DRM_PSB_DPU_QUERY 0x20 -#define DRM_PSB_DPU_DSR_ON 0x21 -#define DRM_PSB_DPU_DSR_OFF 0x22 - -#define DRM_PSB_DSR_ENABLE 0xfffffffe -#define DRM_PSB_DSR_DISABLE 0xffffffff - -struct psb_drm_dpu_rect { - int x, y; - int width, height; -}; - -struct drm_psb_drv_dsr_off_arg { - int screen; - struct psb_drm_dpu_rect damage_rect; -}; - - -struct drm_psb_dev_info_arg { - uint32_t num_use_attribute_registers; -}; -#define DRM_PSB_DEVINFO 0x01 - -#define PSB_MODE_OPERATION_MODE_VALID 0x01 -#define PSB_MODE_OPERATION_SET_DC_BASE 0x02 - -struct drm_psb_get_pipe_from_crtc_id_arg { - /** ID of CRTC being requested **/ - uint32_t crtc_id; - - /** pipe of requested CRTC **/ - uint32_t pipe; -}; - -#endif diff --git a/drivers/staging/cdv/drv/psb_drv.c b/drivers/staging/cdv/drv/psb_drv.c deleted file mode 100644 index 9f434da..0000000 --- a/drivers/staging/cdv/drv/psb_drv.c +++ /dev/null @@ -1,1881 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * Copyright (c) 2008, Tungsten Graphics, Inc. Cedar Park, TX., USA. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#include -#include -#include "psb_drm.h" -#include "psb_drv.h" -#include "psb_fb.h" -#include "psb_reg.h" -#include "psb_intel_reg.h" -#include "psb_intel_bios.h" -#include "psb_msvdx.h" -#include -#include "pvr_drm_shared.h" -#include "psb_powermgmt.h" -#include "img_types.h" -#include -#include -#include -#include -#include - -#include "psb_intel_hdmi.h" - -/*IMG headers*/ -#include "pvr_drm_shared.h" -#include "img_types.h" -#include "pvr_bridge.h" -#include "linkage.h" - -#include "bufferclass_video_linux.h" - -int drm_psb_debug = 0; -static int drm_psb_trap_pagefaults; -int drm_psb_no_fb; -int drm_msvdx_pmpolicy = PSB_PMPOLICY_POWERDOWN; -int drm_msvdx_delay = 250; -int drm_psb_ospm = 1; -extern bool gbdispstatus; - -static int psb_probe(struct pci_dev *pdev, const struct pci_device_id *ent); - -MODULE_PARM_DESC(debug, "Enable debug output"); -MODULE_PARM_DESC(no_fb, "Disable FBdev"); -MODULE_PARM_DESC(trap_pagefaults, "Error and reset on MMU pagefaults"); -MODULE_PARM_DESC(ospm, "switch for ospm support"); -MODULE_PARM_DESC(msvdx_pmpolicy, "msvdx power management policy btw frames"); - -module_param_named(debug, drm_psb_debug, int, 0600); -module_param_named(no_fb, drm_psb_no_fb, int, 0600); -module_param_named(trap_pagefaults, drm_psb_trap_pagefaults, int, 0600); -module_param_named(msvdx_pmpolicy, drm_msvdx_pmpolicy, int, 0600); -module_param_named(msvdx_command_delay, drm_msvdx_delay, int, 0600); -module_param_named(ospm, drm_psb_ospm, int, 0600); -#ifndef MODULE -/* Make ospm configurable via cmdline firstly, and others can be enabled if needed. */ -static int __init config_ospm(char *arg) -{ - /* ospm turn on/off control can be passed in as a cmdline parameter */ - /* to enable this feature add ospm=1 to cmdline */ - /* to disable this feature add ospm=0 to cmdline */ - if (!arg) - return -EINVAL; - - if (!strcasecmp(arg, "0")) - drm_psb_ospm = 0; - else if (!strcasecmp (arg, "1")) - drm_psb_ospm = 1; - - return 0; -} -early_param ("ospm", config_ospm); -#endif - -static struct pci_device_id pciidlist[] = { -#ifdef SGX545 - {0x8086, 0x0be0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, - {0x8086, 0x0be7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, -#endif - {0, 0, 0} -}; - -MODULE_DEVICE_TABLE(pci, pciidlist); -/* - * Standard IOCTLs. - */ - -#define DRM_IOCTL_PSB_KMS_OFF \ - DRM_IO(DRM_PSB_KMS_OFF + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_KMS_ON \ - DRM_IO(DRM_PSB_KMS_ON + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_VT_LEAVE \ - DRM_IO(DRM_PSB_VT_LEAVE + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_VT_ENTER \ - DRM_IO(DRM_PSB_VT_ENTER + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_EXTENSION \ - DRM_IOWR(DRM_PSB_EXTENSION + DRM_COMMAND_BASE, \ - union drm_psb_extension_arg) -#define DRM_IOCTL_PSB_SIZES \ - DRM_IOR(DRM_PSB_SIZES + DRM_COMMAND_BASE, \ - struct drm_psb_sizes_arg) -#define DRM_IOCTL_PSB_FUSE_REG \ - DRM_IOWR(DRM_PSB_FUSE_REG + DRM_COMMAND_BASE, uint32_t) -#define DRM_IOCTL_PSB_VBT \ - DRM_IOWR(DRM_PSB_VBT + DRM_COMMAND_BASE, \ - struct gct_ioctl_arg) -#define DRM_IOCTL_PSB_DC_STATE \ - DRM_IOW(DRM_PSB_DC_STATE + DRM_COMMAND_BASE, \ - struct drm_psb_dc_state_arg) -#define DRM_IOCTL_PSB_ADB \ - DRM_IOWR(DRM_PSB_ADB + DRM_COMMAND_BASE, uint32_t) -#define DRM_IOCTL_PSB_MODE_OPERATION \ - DRM_IOWR(DRM_PSB_MODE_OPERATION + DRM_COMMAND_BASE, \ - struct drm_psb_mode_operation_arg) -#define DRM_IOCTL_PSB_STOLEN_MEMORY \ - DRM_IOWR(DRM_PSB_STOLEN_MEMORY + DRM_COMMAND_BASE, \ - struct drm_psb_stolen_memory_arg) -#define DRM_IOCTL_PSB_REGISTER_RW \ - DRM_IOWR(DRM_PSB_REGISTER_RW + DRM_COMMAND_BASE, \ - struct drm_psb_register_rw_arg) -#define DRM_IOCTL_PSB_GTT_MAP \ - DRM_IOWR(DRM_PSB_GTT_MAP + DRM_COMMAND_BASE, \ - struct psb_gtt_mapping_arg) -#define DRM_IOCTL_PSB_GTT_UNMAP \ - DRM_IOW(DRM_PSB_GTT_UNMAP + DRM_COMMAND_BASE, \ - struct psb_gtt_mapping_arg) -#define DRM_IOCTL_PSB_GETPAGEADDRS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_GETPAGEADDRS,\ - struct drm_psb_getpageaddrs_arg) -#define DRM_IOCTL_PSB_HIST_ENABLE \ - DRM_IOWR(DRM_PSB_HIST_ENABLE + DRM_COMMAND_BASE, \ - uint32_t) -#define DRM_IOCTL_PSB_HIST_STATUS \ - DRM_IOWR(DRM_PSB_HIST_STATUS + DRM_COMMAND_BASE, \ - struct drm_psb_hist_status_arg) -#define DRM_IOCTL_PSB_UPDATE_GUARD \ - DRM_IOWR(DRM_PSB_UPDATE_GUARD + DRM_COMMAND_BASE, \ - uint32_t) -#define DRM_IOCTL_PSB_INIT_COMM \ - DRM_IOWR(DRM_PSB_INIT_COMM + DRM_COMMAND_BASE, \ - uint32_t) -#define DRM_IOCTL_PSB_DPST \ - DRM_IOWR(DRM_PSB_DPST + DRM_COMMAND_BASE, \ - uint32_t) -#define DRM_IOCTL_PSB_GAMMA \ - DRM_IOWR(DRM_PSB_GAMMA + DRM_COMMAND_BASE, \ - struct drm_psb_dpst_lut_arg) -#define DRM_IOCTL_PSB_DPST_BL \ - DRM_IOWR(DRM_PSB_DPST_BL + DRM_COMMAND_BASE, \ - uint32_t) -#define DRM_IOCTL_PSB_GET_PIPE_FROM_CRTC_ID \ - DRM_IOWR(DRM_PSB_GET_PIPE_FROM_CRTC_ID + DRM_COMMAND_BASE, \ - struct drm_psb_get_pipe_from_crtc_id_arg) - -/*pvr ioctls*/ -#define PVR_DRM_SRVKM_IOCTL \ - DRM_IOW(DRM_COMMAND_BASE + PVR_DRM_SRVKM_CMD, \ - PVRSRV_BRIDGE_PACKAGE) -#define PVR_DRM_DISP_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_DISP_CMD) -#define PVR_DRM_BC_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_BC_CMD) -#define PVR_DRM_IS_MASTER_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_IS_MASTER_CMD) -#define PVR_DRM_UNPRIV_IOCTL \ - DRM_IOWR(DRM_COMMAND_BASE + PVR_DRM_UNPRIV_CMD, \ - IMG_UINT32) -#if defined(PDUMP) - #define PVR_DRM_DBGDRV_IOCTL \ - DRM_IOW(DRM_COMMAND_BASE + PVR_DRM_DBGDRV_CMD, IOCTL_PACKAGE) -#endif - -/*DPU/DSR stuff*/ -#define DRM_IOCRL_PSB_DPU_QUERY DRM_IOR(DRM_PSB_DPU_QUERY + DRM_COMMAND_BASE, IMG_UINT32) -#define DRM_IOCRL_PSB_DPU_DSR_ON DRM_IOW(DRM_PSB_DPU_DSR_ON + DRM_COMMAND_BASE, IMG_UINT32) -//#define DRM_IOCRL_PSB_DPU_DSR_OFF DRM_IOW(DRM_PSB_DPU_DSR_OFF + DRM_COMMAND_BASE, IMG_UINT32) -#define DRM_IOCRL_PSB_DPU_DSR_OFF DRM_IOW(DRM_PSB_DPU_DSR_OFF + DRM_COMMAND_BASE, struct drm_psb_drv_dsr_off_arg) - -/* - * TTM execbuf extension. - */ -#if defined(PDUMP) -#define DRM_PSB_CMDBUF (PVR_DRM_DBGDRV_CMD + 1) -#else -#define DRM_PSB_CMDBUF (DRM_PSB_DPU_DSR_OFF + 1) -/* #define DRM_PSB_CMDBUF (DRM_PSB_DPST_BL + 1) */ -#endif - -#define DRM_PSB_SCENE_UNREF (DRM_PSB_CMDBUF + 1) -#define DRM_IOCTL_PSB_CMDBUF \ - DRM_IOW(DRM_PSB_CMDBUF + DRM_COMMAND_BASE, \ - struct drm_psb_cmdbuf_arg) -#define DRM_IOCTL_PSB_SCENE_UNREF \ - DRM_IOW(DRM_PSB_SCENE_UNREF + DRM_COMMAND_BASE, \ - struct drm_psb_scene) -#define DRM_IOCTL_PSB_KMS_OFF DRM_IO(DRM_PSB_KMS_OFF + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_KMS_ON DRM_IO(DRM_PSB_KMS_ON + DRM_COMMAND_BASE) -#define DRM_IOCTL_PSB_EXTENSION \ - DRM_IOWR(DRM_PSB_EXTENSION + DRM_COMMAND_BASE, \ - union drm_psb_extension_arg) -/* - * TTM placement user extension. - */ - -#define DRM_PSB_PLACEMENT_OFFSET (DRM_PSB_SCENE_UNREF + 1) - -#define DRM_PSB_TTM_PL_CREATE (TTM_PL_CREATE + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_REFERENCE (TTM_PL_REFERENCE + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_UNREF (TTM_PL_UNREF + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_SYNCCPU (TTM_PL_SYNCCPU + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_WAITIDLE (TTM_PL_WAITIDLE + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_SETSTATUS (TTM_PL_SETSTATUS + DRM_PSB_PLACEMENT_OFFSET) -#define DRM_PSB_TTM_PL_CREATE_UB (TTM_PL_CREATE_UB + DRM_PSB_PLACEMENT_OFFSET) - -/* - * TTM fence extension. - */ - -#define DRM_PSB_FENCE_OFFSET (DRM_PSB_TTM_PL_CREATE_UB + 1) -#define DRM_PSB_TTM_FENCE_SIGNALED (TTM_FENCE_SIGNALED + DRM_PSB_FENCE_OFFSET) -#define DRM_PSB_TTM_FENCE_FINISH (TTM_FENCE_FINISH + DRM_PSB_FENCE_OFFSET) -#define DRM_PSB_TTM_FENCE_UNREF (TTM_FENCE_UNREF + DRM_PSB_FENCE_OFFSET) - -#define DRM_PSB_FLIP (DRM_PSB_TTM_FENCE_UNREF + 1) /*20*/ -/* PSB video extension */ -#define DRM_LNC_VIDEO_GETPARAM (DRM_PSB_FLIP + 1) - -/*BC_VIDEO ioctl*/ -#define DRM_BUFFER_CLASS_VIDEO (DRM_LNC_VIDEO_GETPARAM + 1) /*0x32*/ - -#define DRM_IOCTL_PSB_TTM_PL_CREATE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_CREATE,\ - union ttm_pl_create_arg) -#define DRM_IOCTL_PSB_TTM_PL_REFERENCE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_REFERENCE,\ - union ttm_pl_reference_arg) -#define DRM_IOCTL_PSB_TTM_PL_UNREF \ - DRM_IOW(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_UNREF,\ - struct ttm_pl_reference_req) -#define DRM_IOCTL_PSB_TTM_PL_SYNCCPU \ - DRM_IOW(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_SYNCCPU,\ - struct ttm_pl_synccpu_arg) -#define DRM_IOCTL_PSB_TTM_PL_WAITIDLE \ - DRM_IOW(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_WAITIDLE,\ - struct ttm_pl_waitidle_arg) -#define DRM_IOCTL_PSB_TTM_PL_SETSTATUS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_SETSTATUS,\ - union ttm_pl_setstatus_arg) -#define DRM_IOCTL_PSB_TTM_PL_CREATE_UB \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_PL_CREATE_UB,\ - union ttm_pl_create_ub_arg) -#define DRM_IOCTL_PSB_TTM_FENCE_SIGNALED \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_FENCE_SIGNALED, \ - union ttm_fence_signaled_arg) -#define DRM_IOCTL_PSB_TTM_FENCE_FINISH \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_TTM_FENCE_FINISH, \ - union ttm_fence_finish_arg) -#define DRM_IOCTL_PSB_TTM_FENCE_UNREF \ - DRM_IOW(DRM_COMMAND_BASE + DRM_PSB_TTM_FENCE_UNREF, \ - struct ttm_fence_unref_arg) -#define DRM_IOCTL_PSB_FLIP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_PSB_FLIP, \ - struct drm_psb_pageflip_arg) -#define DRM_IOCTL_LNC_VIDEO_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_LNC_VIDEO_GETPARAM, \ - struct drm_lnc_video_getparam_arg) - -/*bc_video ioctl*/ -#define DRM_IOCTL_BUFFER_CLASS_VIDEO \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_BUFFER_CLASS_VIDEO, \ - BC_Video_ioctl_package) - -static int psb_vt_leave_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_vt_enter_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_sizes_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_fuse_reg_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_vbt_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_dc_state_ioctl(struct drm_device *dev, void * data, - struct drm_file *file_priv); -static int psb_adb_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_mode_operation_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_stolen_memory_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_register_rw_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_hist_enable_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_hist_status_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_update_guard_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_init_comm_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_dpst_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_gamma_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -static int psb_dpst_bl_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); - -static int psb_ioctl_not_support(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return -EOPNOTSUPP; -} - -#define PSB_IOCTL_DEF(ioctl, func, flags) \ - [DRM_IOCTL_NR(ioctl) - DRM_COMMAND_BASE] = {ioctl, flags, func} - -static struct drm_ioctl_desc psb_ioctls[] = { - PSB_IOCTL_DEF(DRM_IOCTL_PSB_KMS_OFF, psbfb_kms_off_ioctl, - DRM_ROOT_ONLY), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_KMS_ON, - psbfb_kms_on_ioctl, - DRM_ROOT_ONLY), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_VT_LEAVE, psb_vt_leave_ioctl, - DRM_ROOT_ONLY), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_VT_ENTER, - psb_vt_enter_ioctl, - DRM_ROOT_ONLY), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_EXTENSION, psb_extension_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_SIZES, psb_sizes_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_FUSE_REG, psb_fuse_reg_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_VBT, psb_vbt_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_DC_STATE, psb_dc_state_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_ADB, psb_adb_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_MODE_OPERATION, psb_mode_operation_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_STOLEN_MEMORY, psb_stolen_memory_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_REGISTER_RW, psb_register_rw_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_GTT_MAP, - psb_gtt_map_meminfo_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_GTT_UNMAP, - psb_gtt_unmap_meminfo_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_GETPAGEADDRS, - psb_getpageaddrs_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(PVR_DRM_SRVKM_IOCTL, PVRSRV_BridgeDispatchKM, 0), - PSB_IOCTL_DEF(PVR_DRM_DISP_IOCTL, PVRDRM_Dummy_ioctl, 0), - PSB_IOCTL_DEF(PVR_DRM_BC_IOCTL, PVRDRM_Dummy_ioctl, 0), - PSB_IOCTL_DEF(PVR_DRM_IS_MASTER_IOCTL, PVRDRMIsMaster, DRM_MASTER), - PSB_IOCTL_DEF(PVR_DRM_UNPRIV_IOCTL, PVRDRMUnprivCmd, 0), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_HIST_ENABLE, - psb_hist_enable_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_HIST_STATUS, - psb_hist_status_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_UPDATE_GUARD, psb_update_guard_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_INIT_COMM, psb_init_comm_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_DPST, psb_dpst_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_GAMMA, psb_gamma_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_DPST_BL, psb_dpst_bl_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_GET_PIPE_FROM_CRTC_ID, psb_intel_get_pipe_from_crtc_id, 0), -#if defined(PDUMP) - PSB_IOCTL_DEF(PVR_DRM_DBGDRV_IOCTL, SYSPVRDBGDrivIoctl, 0), -#endif - PSB_IOCTL_DEF(DRM_IOCTL_PSB_CMDBUF, psb_cmdbuf_ioctl, DRM_AUTH), - /*to be removed later*/ - /*PSB_IOCTL_DEF(DRM_IOCTL_PSB_SCENE_UNREF, drm_psb_scene_unref_ioctl, - DRM_AUTH),*/ - - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_CREATE, psb_pl_create_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_REFERENCE, psb_pl_reference_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_UNREF, psb_pl_unref_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_SYNCCPU, psb_pl_synccpu_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_WAITIDLE, psb_pl_waitidle_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_SETSTATUS, psb_pl_setstatus_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_PL_CREATE_UB, psb_pl_ub_create_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_FENCE_SIGNALED, - psb_fence_signaled_ioctl, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_FENCE_FINISH, psb_fence_finish_ioctl, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_PSB_TTM_FENCE_UNREF, psb_fence_unref_ioctl, - DRM_AUTH), - /*to be removed later */ - /*PSB_IOCTL_DEF(DRM_IOCTL_PSB_FLIP, psb_page_flip, DRM_AUTH),*/ - PSB_IOCTL_DEF(DRM_IOCTL_LNC_VIDEO_GETPARAM, - lnc_video_getparam, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCTL_BUFFER_CLASS_VIDEO, BC_Video_Bridge, DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCRL_PSB_DPU_QUERY, psb_ioctl_not_support, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCRL_PSB_DPU_DSR_ON, psb_ioctl_not_support, - DRM_AUTH), - PSB_IOCTL_DEF(DRM_IOCRL_PSB_DPU_DSR_OFF, psb_ioctl_not_support, - DRM_AUTH) -}; - - -static void psb_lastclose(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - - return; - - if (!dev->dev_private) - return; - - mutex_lock(&dev_priv->cmdbuf_mutex); - if (dev_priv->context.buffers) { - vfree(dev_priv->context.buffers); - dev_priv->context.buffers = NULL; - } - mutex_unlock(&dev_priv->cmdbuf_mutex); -} - -static void psb_do_takedown(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - struct ttm_bo_device *bdev = &dev_priv->bdev; - - - if (dev_priv->have_mem_mmu) { - ttm_bo_clean_mm(bdev, DRM_PSB_MEM_MMU); - dev_priv->have_mem_mmu = 0; - } - - if (dev_priv->have_tt) { - ttm_bo_clean_mm(bdev, TTM_PL_TT); - dev_priv->have_tt = 0; - } - - if (dev_priv->have_camera) { - ttm_bo_clean_mm(bdev, TTM_PL_CI); - dev_priv->have_camera = 0; - } - if (dev_priv->have_rar) { - ttm_bo_clean_mm(bdev, TTM_PL_RAR); - dev_priv->have_rar = 0; - } - - psb_msvdx_uninit(dev); -} - -static void psb_get_core_freq(struct drm_device *dev) -{ - uint32_t clock; - struct drm_psb_private *dev_priv = (struct drm_psb_private *) dev->dev_private; - - clock = PSB_RVDC32(INTEL_CDV_DISP_CLK_FREQ); - - switch ((clock >> 4) & 0x0F) { - case 0: - dev_priv->core_freq = 160; - break; - case 1: - dev_priv->core_freq = 200; - break; - case 2: - dev_priv->core_freq = 267; - break; - case 3: - dev_priv->core_freq = 320; - break; - case 4: - dev_priv->core_freq = 356; - break; - case 5: - dev_priv->core_freq = 400; - break; - default: - dev_priv->core_freq = 0; - } -} - -#define FB_REG06 0xD0810600 -#define FB_TOPAZ_DISABLE BIT0 -#define FB_MIPI_DISABLE BIT11 -#define FB_REG09 0xD0810900 -#define FB_SKU_MASK (BIT12|BIT13|BIT14) -#define FB_SKU_SHIFT 12 -#define FB_SKU_100 0 -#define FB_SKU_100L 1 -#define FB_SKU_83 2 -#if 1 /* FIXME remove it after PO */ -#define FB_GFX_CLK_DIVIDE_MASK (BIT20|BIT21|BIT22) -#define FB_GFX_CLK_DIVIDE_SHIFT 20 -#define FB_VED_CLK_DIVIDE_MASK (BIT23|BIT24) -#define FB_VED_CLK_DIVIDE_SHIFT 23 -#define FB_VEC_CLK_DIVIDE_MASK (BIT25|BIT26) -#define FB_VEC_CLK_DIVIDE_SHIFT 25 -#endif /* FIXME remove it after PO */ - -static int psb_do_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - struct ttm_bo_device *bdev = &dev_priv->bdev; - struct psb_gtt *pg = dev_priv->pg; - - uint32_t stolen_gtt; - uint32_t tt_start; - uint32_t tt_pages; - - int ret = -ENOMEM; - - - /* - * Initialize sequence numbers for the different command - * submission mechanisms. - */ - - dev_priv->sequence[PSB_ENGINE_2D] = 0; - dev_priv->sequence[PSB_ENGINE_VIDEO] = 0; - - if (pg->mmu_gatt_start & 0x0FFFFFFF) { - DRM_ERROR("Gatt must be 256M aligned. This is a bug.\n"); - ret = -EINVAL; - goto out_err; - } - - stolen_gtt = (pg->stolen_size >> PAGE_SHIFT) * 4; - stolen_gtt = (stolen_gtt + PAGE_SIZE - 1) >> PAGE_SHIFT; - stolen_gtt = (stolen_gtt < pg->gtt_pages) ? stolen_gtt : pg->gtt_pages; - - dev_priv->gatt_free_offset = pg->mmu_gatt_start + - (stolen_gtt << PAGE_SHIFT) * 1024; - - if (1 || drm_debug) { - uint32_t core_id = PSB_RSGX32(PSB_CR_CORE_ID); - uint32_t core_rev = PSB_RSGX32(PSB_CR_CORE_REVISION); - - DRM_DEBUG("SGX core id = 0x%08x\n", core_id); - DRM_DEBUG("SGX core rev major = 0x%02x, minor = 0x%02x\n", - (core_rev & _PSB_CC_REVISION_MAJOR_MASK) >> - _PSB_CC_REVISION_MAJOR_SHIFT, - (core_rev & _PSB_CC_REVISION_MINOR_MASK) >> - _PSB_CC_REVISION_MINOR_SHIFT); - DRM_DEBUG("SGX core rev maintenance = 0x%02x, designer = 0x%02x\n", - (core_rev & _PSB_CC_REVISION_MAINTENANCE_MASK) >> - _PSB_CC_REVISION_MAINTENANCE_SHIFT, - (core_rev & _PSB_CC_REVISION_DESIGNER_MASK) >> - _PSB_CC_REVISION_DESIGNER_SHIFT); - } - - spin_lock_init(&dev_priv->irqmask_lock); - - tt_pages = (pg->gatt_pages < PSB_TT_PRIV0_PLIMIT) ? - pg->gatt_pages : PSB_TT_PRIV0_PLIMIT; - tt_start = dev_priv->gatt_free_offset - pg->mmu_gatt_start; - tt_pages -= tt_start >> PAGE_SHIFT; - dev_priv->sizes.ta_mem_size = 0; - - - /* TT region managed by TTM. */ - if (!ttm_bo_init_mm(bdev, TTM_PL_TT, - pg->gatt_pages - - (pg->ci_start >> PAGE_SHIFT) - - ((dev_priv->ci_region_size + dev_priv->rar_region_size) - >> PAGE_SHIFT))) { - - dev_priv->have_tt = 1; - dev_priv->sizes.tt_size = - (tt_pages << PAGE_SHIFT) / (1024 * 1024) / 2; - } - - if (!ttm_bo_init_mm(bdev, - DRM_PSB_MEM_MMU, - PSB_MEM_TT_START >> PAGE_SHIFT)) { - dev_priv->have_mem_mmu = 1; - dev_priv->sizes.mmu_size = - PSB_MEM_TT_START / (1024*1024); - } - - - PSB_DEBUG_INIT("Init MSVDX\n"); - if (psb_msvdx_init(dev)) { - ret = -EIO; - DRM_ERROR("Failure in MSVDX Initialization\n"); - goto out_err; - } - - return 0; -out_err: - psb_do_takedown(dev); - return ret; -} - -static int psb_driver_unload(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - - /*Fristly, unload pvr driver*/ - PVRSRVDrmUnload(dev); - - psb_intel_opregion_fini(dev); - - if (drm_psb_no_fb == 0) - psb_modeset_cleanup(dev); - - if (dev_priv) { - - /* psb_watchdog_takedown(dev_priv); */ - psb_do_takedown(dev); - - if (dev_priv->pf_pd) { - psb_mmu_free_pagedir(dev_priv->pf_pd); - dev_priv->pf_pd = NULL; - } - if (dev_priv->mmu) { - struct psb_gtt *pg = dev_priv->pg; - - down_read(&pg->sem); - psb_mmu_remove_pfn_sequence( - psb_mmu_get_default_pd - (dev_priv->mmu), - pg->mmu_gatt_start, - pg->vram_stolen_size >> PAGE_SHIFT); - if (pg->ci_stolen_size != 0) - psb_mmu_remove_pfn_sequence( - psb_mmu_get_default_pd - (dev_priv->mmu), - pg->ci_start, - pg->ci_stolen_size >> PAGE_SHIFT); - if (pg->rar_stolen_size != 0) - psb_mmu_remove_pfn_sequence( - psb_mmu_get_default_pd - (dev_priv->mmu), - pg->rar_start, - pg->rar_stolen_size >> PAGE_SHIFT); - up_read(&pg->sem); - psb_mmu_driver_takedown(dev_priv->mmu); - dev_priv->mmu = NULL; - } - psb_gtt_takedown(dev_priv->pg, 1); - if (dev_priv->scratch_page) { - __free_page(dev_priv->scratch_page); - dev_priv->scratch_page = NULL; - } - if (dev_priv->has_bo_device) { - ttm_bo_device_release(&dev_priv->bdev); - dev_priv->has_bo_device = 0; - } - if (dev_priv->has_fence_device) { - ttm_fence_device_release(&dev_priv->fdev); - dev_priv->has_fence_device = 0; - } - if (dev_priv->vdc_reg) { - iounmap(dev_priv->vdc_reg); - dev_priv->vdc_reg = NULL; - } - if (dev_priv->sgx_reg) { - iounmap(dev_priv->sgx_reg); - dev_priv->sgx_reg = NULL; - } - - if (dev_priv->msvdx_reg) { - iounmap(dev_priv->msvdx_reg); - dev_priv->msvdx_reg = NULL; - } - - if (dev_priv->tdev) - ttm_object_device_release(&dev_priv->tdev); - - if (dev_priv->has_global) - psb_ttm_global_release(dev_priv); - - kfree(dev_priv); - dev->dev_private = NULL; - - psb_intel_destory_bios(dev); - } - - ospm_power_uninit(); - - return 0; -} - - -static int psb_driver_load(struct drm_device *dev, unsigned long chipset) -{ - struct drm_psb_private *dev_priv; - struct ttm_bo_device *bdev; - unsigned long resource_start; - struct psb_gtt *pg; - unsigned long irqflags; - int ret = -ENOMEM; - uint32_t tt_pages; - - DRM_DEBUG("psb - %s\n", PSB_PACKAGE_VERSION); - -#if defined(MODULE) && defined(CONFIG_NET) - psb_kobject_uevent_init(); -#endif - - ret = SYSPVRInit(); - if (ret) - return ret; - - if (IS_CDV(dev)) - DRM_DEBUG("Run drivers on Cedartrail platform!\n"); - - dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); - if (dev_priv == NULL) - return -ENOMEM; - INIT_LIST_HEAD(&dev_priv->video_ctx); - dev_priv->num_pipe = 2; - - /*init DPST umcomm to NULL*/ - dev_priv->psb_dpst_state = NULL; - dev_priv->psb_hotplug_state = NULL; - - dev_priv->dev = dev; - bdev = &dev_priv->bdev; - - ret = psb_ttm_global_init(dev_priv); - if (unlikely(ret != 0)) - goto out_err; - dev_priv->has_global = 1; - - dev_priv->tdev = ttm_object_device_init(dev_priv->mem_global_ref.object, - PSB_OBJECT_HASH_ORDER); - if (unlikely(dev_priv->tdev == NULL)) - goto out_err; - - mutex_init(&dev_priv->temp_mem); - mutex_init(&dev_priv->cmdbuf_mutex); - mutex_init(&dev_priv->reset_mutex); - INIT_LIST_HEAD(&dev_priv->context.validate_list); - INIT_LIST_HEAD(&dev_priv->context.kern_validate_list); - - spin_lock_init(&dev_priv->reloc_lock); - - DRM_INIT_WAITQUEUE(&dev_priv->rel_mapped_queue); - - dev->dev_private = (void *) dev_priv; - dev_priv->chipset = chipset; - - PSB_DEBUG_GENERAL("Init watchdog and scheduler\n"); - /* psb_watchdog_init(dev_priv); */ - psb_scheduler_init(dev, &dev_priv->scheduler); - - - PSB_DEBUG_INIT("Mapping MMIO\n"); - resource_start = pci_resource_start(dev->pdev, PSB_MMIO_RESOURCE); - - if (IS_MSVDX(dev)) /* Work around for medfield by Li */ - dev_priv->msvdx_reg = ioremap(resource_start + MRST_MSVDX_OFFSET, - PSB_MSVDX_SIZE); - else - dev_priv->msvdx_reg = ioremap(resource_start + PSB_MSVDX_OFFSET, - PSB_MSVDX_SIZE); - - if (!dev_priv->msvdx_reg) - goto out_err; - - dev_priv->vdc_reg = ioremap(resource_start + PSB_VDC_OFFSET, - PSB_VDC_SIZE); - if (!dev_priv->vdc_reg) - goto out_err; - - if (IS_MID(dev)) - dev_priv->sgx_reg = ioremap(resource_start + MRST_SGX_OFFSET, - PSB_SGX_SIZE); - else - dev_priv->sgx_reg = ioremap(resource_start + PSB_SGX_OFFSET, - PSB_SGX_SIZE); - - if (!dev_priv->sgx_reg) - goto out_err; - - psb_get_core_freq(dev); - - psb_intel_opregion_setup(dev); - psb_intel_init_bios(dev); - - PSB_DEBUG_INIT("Init TTM fence and BO driver\n"); - - /* Init OSPM support */ - ospm_power_init(dev); - - ret = psb_ttm_fence_device_init(&dev_priv->fdev); - if (unlikely(ret != 0)) - goto out_err; - - /* For VXD385 DE2.x firmware support 16bit fence value */ - if(IS_CDV(dev) && IS_FW_UPDATED) { - DRM_DEBUG("Setting up the video fences\n"); - dev_priv->fdev.fence_class[PSB_ENGINE_VIDEO].wrap_diff = (1 << 14); - dev_priv->fdev.fence_class[PSB_ENGINE_VIDEO].flush_diff = ( 1 << 13); - dev_priv->fdev.fence_class[PSB_ENGINE_VIDEO].sequence_mask = 0x0000ffff; - } - - dev_priv->has_fence_device = 1; - ret = ttm_bo_device_init(bdev, - dev_priv->bo_global_ref.ref.object, - &psb_ttm_bo_driver, - DRM_PSB_FILE_PAGE_OFFSET, false); - if (unlikely(ret != 0)) - goto out_err; - dev_priv->has_bo_device = 1; - ttm_lock_init(&dev_priv->ttm_lock); - - ret = -ENOMEM; - - dev_priv->scratch_page = alloc_page(GFP_DMA32 | __GFP_ZERO); - if (!dev_priv->scratch_page) - goto out_err; - - set_pages_uc(dev_priv->scratch_page, 1); - - dev_priv->pg = psb_gtt_alloc(dev); - if (!dev_priv->pg) - goto out_err; - - ret = psb_gtt_init(dev_priv->pg, 0); - if (ret) - goto out_err; - - ret = psb_gtt_mm_init(dev_priv->pg); - if (ret) - goto out_err; - - dev_priv->mmu = psb_mmu_driver_init((void *)0, - drm_psb_trap_pagefaults, 0, - dev_priv); - if (!dev_priv->mmu) - goto out_err; - - pg = dev_priv->pg; - - tt_pages = (pg->gatt_pages < PSB_TT_PRIV0_PLIMIT) ? (pg->gatt_pages) : - PSB_TT_PRIV0_PLIMIT; - - /* CI/RAR use the lower half of TT. */ - pg->ci_start = (tt_pages / 2) << PAGE_SHIFT; - pg->rar_start = pg->ci_start + pg->ci_stolen_size; - - - /* - * Make MSVDX/TOPAZ MMU aware of the CI stolen memory area. - */ - if (dev_priv->pg->ci_stolen_size != 0) { - down_read(&pg->sem); - ret = psb_mmu_insert_pfn_sequence(psb_mmu_get_default_pd - (dev_priv->mmu), - dev_priv->ci_region_start >> PAGE_SHIFT, - pg->mmu_gatt_start + pg->ci_start, - pg->ci_stolen_size >> PAGE_SHIFT, 0); - up_read(&pg->sem); - if (ret) - goto out_err; - } - - /* - * Make MSVDX/TOPAZ MMU aware of the rar stolen memory area. - */ - if (dev_priv->pg->rar_stolen_size != 0) { - down_read(&pg->sem); - ret = psb_mmu_insert_pfn_sequence( - psb_mmu_get_default_pd(dev_priv->mmu), - dev_priv->rar_region_start >> PAGE_SHIFT, - pg->mmu_gatt_start + pg->rar_start, - pg->rar_stolen_size >> PAGE_SHIFT, 0); - up_read(&pg->sem); - if (ret) - goto out_err; - } - - dev_priv->pf_pd = psb_mmu_alloc_pd(dev_priv->mmu, 1, 0); - if (!dev_priv->pf_pd) - goto out_err; - - psb_mmu_set_pd_context(psb_mmu_get_default_pd(dev_priv->mmu), 0); - psb_mmu_set_pd_context(dev_priv->pf_pd, 1); - - spin_lock_init(&dev_priv->sequence_lock); - - PSB_DEBUG_INIT("Begin to init MSVDX/Topaz\n"); - - ret = psb_do_init(dev); - if (ret) - return ret; - - /*initialize the MSI*/ - if (IS_MID(dev)) { - if (pci_enable_msi(dev->pdev)) { - DRM_ERROR("Enable MSI failed!\n"); - } else { - PSB_DEBUG_INIT("Enabled MSI IRQ (%d)\n", - dev->pdev->irq); - /* pci_write_config_word(pdev, 0x04, 0x07); */ - } - } - - ret = drm_vblank_init(dev, dev_priv->num_pipe); - if (ret) - goto out_err; - - /* - * Install interrupt handlers prior to powering off SGX or else we will - * crash. - */ - dev_priv->vdc_irq_mask = 0; - dev_priv->pipestat[0] = 0; - dev_priv->pipestat[1] = 0; - dev_priv->pipestat[2] = 0; - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - PSB_WVDC32(0x00000000, PSB_INT_ENABLE_R); - PSB_WVDC32(0xFFFFFFFF, PSB_INT_MASK_R); - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); - if (drm_core_check_feature(dev, DRIVER_MODESET)) - drm_irq_install(dev); - - dev->vblank_disable_allowed = 1; - - dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ - - dev->driver->get_vblank_counter = psb_get_vblank_counter; - - if (drm_psb_no_fb == 0) { - psb_modeset_init(dev); - psb_fbdev_init(dev); - drm_kms_helper_poll_init(dev); - } - - psb_intel_opregion_init(dev); - acpi_video_register(); - - /* initialize HDMI Hotplug interrupt forwarding - * notifications for user mode - */ - - /*Intel drm driver load is done, continue doing pvr load*/ - DRM_DEBUG("Pvr driver load\n"); - - ret = PVRSRVDrmLoad(dev, chipset); - if (ret) - return ret; - - /*init for bc_video*/ - return BC_Video_ModInit(); - -out_err: - psb_driver_unload(dev); - return ret; -} - -int psb_driver_device_is_agp(struct drm_device *dev) -{ - return 0; -} - -int psb_extension_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - union drm_psb_extension_arg *arg = data; - struct drm_psb_extension_rep *rep = &arg->rep; - - if (strcmp(arg->extension, "psb_ttm_placement_alphadrop") == 0) { - rep->exists = 1; - rep->driver_ioctl_offset = DRM_PSB_PLACEMENT_OFFSET; - rep->sarea_offset = 0; - rep->major = 1; - rep->minor = 0; - rep->pl = 0; - return 0; - } - if (strcmp(arg->extension, "psb_ttm_fence_alphadrop") == 0) { - rep->exists = 1; - rep->driver_ioctl_offset = DRM_PSB_FENCE_OFFSET; - rep->sarea_offset = 0; - rep->major = 1; - rep->minor = 0; - rep->pl = 0; - return 0; - } - if (strcmp(arg->extension, "psb_ttm_execbuf_alphadrop") == 0) { - rep->exists = 1; - rep->driver_ioctl_offset = DRM_PSB_CMDBUF; - rep->sarea_offset = 0; - rep->major = 1; - rep->minor = 0; - rep->pl = 0; - return 0; - } - - /*return the page flipping ioctl offset*/ - if (strcmp(arg->extension, "psb_page_flipping_alphadrop") == 0) { - rep->exists = 1; - rep->driver_ioctl_offset = DRM_PSB_FLIP; - rep->sarea_offset = 0; - rep->major = 1; - rep->minor = 0; - rep->pl = 0; - return 0; - } - - /* return the video rar offset */ - if (strcmp(arg->extension, "lnc_video_getparam") == 0) { - rep->exists = 1; - rep->driver_ioctl_offset = DRM_LNC_VIDEO_GETPARAM; - rep->sarea_offset = 0; - rep->major = 1; - rep->minor = 0; - rep->pl = 0; - return 0; - } - - rep->exists = 0; - return 0; -} - -static int psb_vt_leave_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct ttm_bo_device *bdev = &dev_priv->bdev; - int ret; - - ret = ttm_vt_lock(&dev_priv->ttm_lock, 1, - psb_fpriv(file_priv)->tfile); - if (unlikely(ret != 0)) - return ret; - - ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_TT); - if (unlikely(ret != 0)) - goto out_unlock; - - ret = ttm_bo_clean_mm(bdev, TTM_PL_TT); - if (unlikely(ret != 0)) - DRM_INFO("Warning: GATT was not clean after VT switch.\n"); - - ttm_bo_swapout_all(&dev_priv->bdev); - - return 0; -out_unlock: - (void) ttm_vt_unlock(&dev_priv->ttm_lock); - return ret; -} - -static int psb_vt_enter_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - return ttm_vt_unlock(&dev_priv->ttm_lock); -} - -static int psb_sizes_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct drm_psb_sizes_arg *arg = - (struct drm_psb_sizes_arg *) data; - - *arg = dev_priv->sizes; - return 0; -} - -static int psb_fuse_reg_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - uint32_t *arg = data; - - *arg = dev_priv->fuse_reg_value; - return 0; -} -static int psb_vbt_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct gct_ioctl_arg *pGCT = data; - - memcpy(pGCT, &dev_priv->gct_data, sizeof(*pGCT)); - - return 0; -} - -static int psb_dc_state_ioctl(struct drm_device *dev, void * data, - struct drm_file *file_priv) -{ - uint32_t flags; - uint32_t obj_id; - struct drm_mode_object *obj; - struct drm_connector *connector; - struct drm_crtc *crtc; - struct drm_psb_dc_state_arg *arg = - (struct drm_psb_dc_state_arg *)data; - - if (IS_MID(dev)) - return 0; - - flags = arg->flags; - obj_id = arg->obj_id; - - if (flags & PSB_DC_CRTC_MASK) { - obj = drm_mode_object_find(dev, obj_id, - DRM_MODE_OBJECT_CRTC); - if (!obj) { - DRM_DEBUG("Invalid CRTC object.\n"); - return -EINVAL; - } - - crtc = obj_to_crtc(obj); - - mutex_lock(&dev->mode_config.mutex); - if (drm_helper_crtc_in_use(crtc)) { - if (flags & PSB_DC_CRTC_SAVE) - crtc->funcs->save(crtc); - else - crtc->funcs->restore(crtc); - } - mutex_unlock(&dev->mode_config.mutex); - - return 0; - } else if (flags & PSB_DC_OUTPUT_MASK) { - obj = drm_mode_object_find(dev, obj_id, - DRM_MODE_OBJECT_CONNECTOR); - if (!obj) { - DRM_DEBUG("Invalid connector id.\n"); - return -EINVAL; - } - - connector = obj_to_connector(obj); - if (flags & PSB_DC_OUTPUT_SAVE) - connector->funcs->save(connector); - else - connector->funcs->restore(connector); - - return 0; - } - - DRM_DEBUG("Bad flags 0x%x\n", flags); - return -EINVAL; -} - -static int psb_dpst_bl_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - uint32_t *arg = data; - struct backlight_device bd; - dev_priv->blc_adj2 = *arg; - -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE - bd.props.brightness = psb_get_brightness(&bd); - psb_set_brightness(&bd); -#endif - return 0; -} - -static int psb_adb_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - uint32_t *arg = data; - struct backlight_device bd; - dev_priv->blc_adj1 = *arg; - -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE - bd.props.brightness = psb_get_brightness(&bd); - psb_set_brightness(&bd); -#endif - return 0; -} - -static int psb_hist_enable_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - u32 irqCtrl = 0; - struct drm_psb_private *dev_priv = psb_priv(dev); - struct dpst_guardband guardband_reg; - struct dpst_ie_histogram_control ie_hist_cont_reg; - uint32_t *enable = data; - - if (*enable == 1) { - ie_hist_cont_reg.data = PSB_RVDC32(HISTOGRAM_LOGIC_CONTROL); - ie_hist_cont_reg.ie_pipe_assignment = 0; - ie_hist_cont_reg.histogram_mode_select = DPST_YUV_LUMA_MODE; - ie_hist_cont_reg.ie_histogram_enable = 1; - PSB_WVDC32(ie_hist_cont_reg.data, HISTOGRAM_LOGIC_CONTROL); - - guardband_reg.data = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - guardband_reg.interrupt_enable = 1; - guardband_reg.interrupt_status = 1; - PSB_WVDC32(guardband_reg.data, HISTOGRAM_INT_CONTROL); - - irqCtrl = PSB_RVDC32(PIPEASTAT); - PSB_WVDC32(irqCtrl | PIPE_DPST_EVENT_ENABLE, PIPEASTAT); - /* Wait for two vblanks */ - } else { - guardband_reg.data = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - guardband_reg.interrupt_enable = 0; - guardband_reg.interrupt_status = 1; - PSB_WVDC32(guardband_reg.data, HISTOGRAM_INT_CONTROL); - - ie_hist_cont_reg.data = PSB_RVDC32(HISTOGRAM_LOGIC_CONTROL); - ie_hist_cont_reg.ie_histogram_enable = 0; - PSB_WVDC32(ie_hist_cont_reg.data, HISTOGRAM_LOGIC_CONTROL); - - irqCtrl = PSB_RVDC32(PIPEASTAT); - irqCtrl &= ~PIPE_DPST_EVENT_ENABLE; - PSB_WVDC32(irqCtrl, PIPEASTAT); - } - - return 0; -} - -static int psb_hist_status_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct drm_psb_hist_status_arg *hist_status = data; - uint32_t *arg = hist_status->buf; - u32 iedbr_reg_data = 0; - struct dpst_ie_histogram_control ie_hist_cont_reg; - u32 i; - int dpst3_bin_threshold_count = 0; - uint32_t blm_hist_ctl = HISTOGRAM_LOGIC_CONTROL; - uint32_t iebdr_reg = HISTOGRAM_BIN_DATA; - uint32_t segvalue_max_22_bit = 0x3fffff; - uint32_t iedbr_busy_bit = 0x80000000; - int dpst3_bin_count = 32; - - ie_hist_cont_reg.data = PSB_RVDC32(blm_hist_ctl); - ie_hist_cont_reg.bin_reg_func_select = dpst3_bin_threshold_count; - ie_hist_cont_reg.bin_reg_index = 0; - - PSB_WVDC32(ie_hist_cont_reg.data, blm_hist_ctl); - - for (i = 0; i < dpst3_bin_count; i++) { - iedbr_reg_data = PSB_RVDC32(iebdr_reg); - - if (!(iedbr_reg_data & iedbr_busy_bit)) { - arg[i] = iedbr_reg_data & segvalue_max_22_bit; - } else { - i = 0; - ie_hist_cont_reg.data = PSB_RVDC32(blm_hist_ctl); - ie_hist_cont_reg.bin_reg_index = 0; - PSB_WVDC32(ie_hist_cont_reg.data, blm_hist_ctl); - } - } - - return 0; -} - -static int psb_init_comm_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct pci_dev *pdev = NULL; - struct device *ddev = NULL; - struct kobject *kobj = NULL; - uint32_t *arg = data; - - if (*arg == 1) { - /*find handle to drm kboject*/ - pdev = dev->pdev; - ddev = &pdev->dev; - kobj = &ddev->kobj; - - if (dev_priv->psb_dpst_state == NULL) { - /*init dpst kmum comms*/ - dev_priv->psb_dpst_state = psb_dpst_init(kobj); - } else { - DRM_INFO("DPST already initialized\n"); - } - if (dev_priv->psb_dpst_state == NULL) { - DRM_ERROR("DPST is not initialized correctly\n"); - return -EINVAL; - } - psb_irq_enable_dpst(dev); - psb_dpst_notify_change_um(DPST_EVENT_INIT_COMPLETE, - dev_priv->psb_dpst_state); - } else { - if (dev_priv->psb_dpst_state == NULL) { - DRM_ERROR("DPST doesn't exit\n"); - return -EINVAL; - } - /*hotplug and dpst destroy examples*/ - psb_irq_disable_dpst(dev); - psb_dpst_notify_change_um(DPST_EVENT_TERMINATE, - dev_priv->psb_dpst_state); - psb_dpst_device_pool_destroy(dev_priv->psb_dpst_state); - dev_priv->psb_dpst_state = NULL; - } - return 0; -} - -/* return the current mode to the dpst module */ -static int psb_dpst_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - uint32_t *arg = data; - uint32_t x; - uint32_t y; - uint32_t reg; - - reg = PSB_RVDC32(PIPEASRC); - - /* horizontal is the left 16 bits */ - x = reg >> 16; - /* vertical is the right 16 bits */ - y = reg & 0x0000ffff; - - /* the values are the image size minus one */ - x+=1; - y+=1; - - *arg = (x << 16) | y; - - return 0; -} - -static int psb_gamma_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_dpst_lut_arg *lut_arg = data; - struct drm_mode_object *obj; - struct drm_crtc *crtc; - struct drm_connector *connector; - struct psb_intel_crtc *psb_intel_crtc; - int i = 0; - int32_t obj_id; - - obj_id = lut_arg->output_id; - obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_CONNECTOR); - if (!obj) { - DRM_DEBUG("Invalid Connector object.\n"); - return -EINVAL; - } - - connector = obj_to_connector(obj); - crtc = connector->encoder->crtc; - psb_intel_crtc = to_psb_intel_crtc(crtc); - - for (i = 0; i < 256; i++) - psb_intel_crtc->lut_adj[i] = lut_arg->lut[i]; - - psb_intel_crtc_load_lut(crtc); - - return 0; -} - -static int psb_update_guard_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct dpst_guardband* input = (struct dpst_guardband*) data; - struct dpst_guardband reg_data; - - reg_data.data = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - reg_data.guardband = input->guardband; - reg_data.guardband_interrupt_delay = input->guardband_interrupt_delay; - /* printk(KERN_ALERT "guardband = %u\ninterrupt delay = %u\n", - reg_data.guardband, reg_data.guardband_interrupt_delay); */ - PSB_WVDC32(reg_data.data, HISTOGRAM_INT_CONTROL); - - return 0; -} - -static int psb_mode_operation_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - uint32_t obj_id; - uint16_t op; - struct drm_mode_modeinfo *umode; - struct drm_display_mode *mode = NULL; - struct drm_psb_mode_operation_arg *arg; - struct drm_mode_object *obj; - struct drm_connector *connector; - struct drm_framebuffer * drm_fb; - struct psb_framebuffer * psb_fb; - struct drm_connector_helper_funcs *connector_funcs; - int ret = 0; - int resp = MODE_OK; - - arg = (struct drm_psb_mode_operation_arg *)data; - obj_id = arg->obj_id; - op = arg->operation; - - switch(op) { - case PSB_MODE_OPERATION_SET_DC_BASE: - obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_FB); - if(!obj) { - DRM_ERROR("Invalid FB id %d\n", obj_id); - return -EINVAL; - } - - drm_fb = obj_to_fb(obj); - psb_fb = to_psb_fb(drm_fb); - - REG_WRITE(DSPASURF, psb_fb->offset); - REG_READ(DSPASURF); - REG_WRITE(DSPBSURF, psb_fb->offset); - REG_READ(DSPBSURF); - - return 0; - case PSB_MODE_OPERATION_MODE_VALID: - umode = &arg->mode; - - mutex_lock(&dev->mode_config.mutex); - - obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_CONNECTOR); - if (!obj) { - ret = -EINVAL; - goto mode_op_out; - } - - connector = obj_to_connector(obj); - - mode = drm_mode_create(dev); - if (!mode) { - ret = -ENOMEM; - goto mode_op_out; - } - - /* drm_crtc_convert_umode(mode, umode); */ - { - mode->clock = umode->clock; - mode->hdisplay = umode->hdisplay; - mode->hsync_start = umode->hsync_start; - mode->hsync_end = umode->hsync_end; - mode->htotal = umode->htotal; - mode->hskew = umode->hskew; - mode->vdisplay = umode->vdisplay; - mode->vsync_start = umode->vsync_start; - mode->vsync_end = umode->vsync_end; - mode->vtotal = umode->vtotal; - mode->vscan = umode->vscan; - mode->vrefresh = umode->vrefresh; - mode->flags = umode->flags; - mode->type = umode->type; - strncpy(mode->name, umode->name, DRM_DISPLAY_MODE_LEN); - mode->name[DRM_DISPLAY_MODE_LEN-1] = 0; - } - - connector_funcs = (struct drm_connector_helper_funcs *) - connector->helper_private; - - if (connector_funcs->mode_valid) { - resp = connector_funcs->mode_valid(connector, mode); - arg->data = (void *)resp; - } - - /*do some clean up work*/ - if(mode) { - drm_mode_destroy(dev, mode); - } -mode_op_out: - mutex_unlock(&dev->mode_config.mutex); - return ret; - - default: - DRM_DEBUG("Unsupported psb mode operation"); - return -EOPNOTSUPP; - } - - return 0; -} - -static int psb_stolen_memory_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct drm_psb_stolen_memory_arg *arg = data; - - arg->base = dev_priv->pg->stolen_base; - arg->size = dev_priv->pg->vram_stolen_size; - - return 0; -} - -static int psb_register_rw_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct drm_psb_register_rw_arg *arg = data; - unsigned int iep_ble_status; - unsigned long iep_timeout; - - if (arg->display_write_mask != 0) { - if (arg->display_write_mask & REGRWBITS_PFIT_CONTROLS) - PSB_WVDC32(arg->display.pfit_controls, - PFIT_CONTROL); - if (arg->display_write_mask & REGRWBITS_PFIT_AUTOSCALE_RATIOS) - PSB_WVDC32(arg->display.pfit_autoscale_ratios, - PFIT_AUTO_RATIOS); - if (arg->display_write_mask & REGRWBITS_PFIT_PROGRAMMED_SCALE_RATIOS) - PSB_WVDC32(arg->display.pfit_programmed_scale_ratios, - PFIT_PGM_RATIOS); - if (arg->display_write_mask & REGRWBITS_PIPEASRC) - PSB_WVDC32(arg->display.pipeasrc, PIPEASRC); - if (arg->display_write_mask & REGRWBITS_PIPEBSRC) - PSB_WVDC32(arg->display.pipebsrc, PIPEBSRC); - if (arg->display_write_mask & REGRWBITS_VTOTAL_A) - PSB_WVDC32(arg->display.vtotal_a, VTOTAL_A); - if (arg->display_write_mask & REGRWBITS_VTOTAL_B) - PSB_WVDC32(arg->display.vtotal_b, VTOTAL_B); - } - - if (arg->display_read_mask != 0) { - if (arg->display_read_mask & REGRWBITS_PFIT_CONTROLS) - arg->display.pfit_controls = PSB_RVDC32(PFIT_CONTROL); - if (arg->display_read_mask & REGRWBITS_PFIT_AUTOSCALE_RATIOS) - arg->display.pfit_autoscale_ratios = PSB_RVDC32(PFIT_AUTO_RATIOS); - if (arg->display_read_mask & REGRWBITS_PFIT_PROGRAMMED_SCALE_RATIOS) - arg->display.pfit_programmed_scale_ratios = PSB_RVDC32(PFIT_PGM_RATIOS); - if (arg->display_read_mask & REGRWBITS_PIPEASRC) - arg->display.pipeasrc = PSB_RVDC32(PIPEASRC); - if (arg->display_read_mask & REGRWBITS_PIPEBSRC) - arg->display.pipebsrc = PSB_RVDC32(PIPEBSRC); - if (arg->display_read_mask & REGRWBITS_VTOTAL_A) - arg->display.vtotal_a = PSB_RVDC32(VTOTAL_A); - if (arg->display_read_mask & REGRWBITS_VTOTAL_B) - arg->display.vtotal_b = PSB_RVDC32(VTOTAL_B); - } - - if (arg->overlay_write_mask != 0) { - if (arg->overlay_write_mask & OV_REGRWBITS_OGAM_ALL) { - PSB_WVDC32(arg->overlay.OGAMC5, OV_OGAMC5); - PSB_WVDC32(arg->overlay.OGAMC4, OV_OGAMC4); - PSB_WVDC32(arg->overlay.OGAMC3, OV_OGAMC3); - PSB_WVDC32(arg->overlay.OGAMC2, OV_OGAMC2); - PSB_WVDC32(arg->overlay.OGAMC1, OV_OGAMC1); - PSB_WVDC32(arg->overlay.OGAMC0, OV_OGAMC0); - } - if (arg->overlay_write_mask & OVC_REGRWBITS_OGAM_ALL) { - PSB_WVDC32(arg->overlay.OGAMC5, OVC_OGAMC5); - PSB_WVDC32(arg->overlay.OGAMC4, OVC_OGAMC4); - PSB_WVDC32(arg->overlay.OGAMC3, OVC_OGAMC3); - PSB_WVDC32(arg->overlay.OGAMC2, OVC_OGAMC2); - PSB_WVDC32(arg->overlay.OGAMC1, OVC_OGAMC1); - PSB_WVDC32(arg->overlay.OGAMC0, OVC_OGAMC0); - } - - if (arg->overlay_write_mask & OV_REGRWBITS_OVADD) - { - PSB_WVDC32(arg->overlay.OVADD, OV_OVADD); - - if (arg->overlay.b_wait_vblank) { - /*Wait for 20ms.*/ - unsigned long vblank_timeout = jiffies + HZ/50; - uint32_t temp; - while (time_before_eq(jiffies, vblank_timeout)) { - temp = PSB_RVDC32(OV_DOVASTA); - if ((temp & (0x1 << 31)) != 0) { - break; - } - cpu_relax(); - } - } - - if (IS_CDV(dev)) { - - if (arg->overlay.IEP_ENABLED) { - /* VBLANK period */ - iep_timeout = jiffies + HZ / 10; - do{ - iep_ble_status = PSB_RVDC32(0x31800); - if (time_after_eq(jiffies, iep_timeout)) { - DRM_ERROR("IEP Lite timeout\n"); - break; - } - cpu_relax(); - }while((iep_ble_status>>1) != 1); - - arg->overlay.IEP_BLE_MINMAX = PSB_RVDC32(0x31804); - arg->overlay.IEP_BSSCC_CONTROL = PSB_RVDC32(0x32000); - } - } - } - if (arg->overlay_write_mask & OVC_REGRWBITS_OVADD) { - PSB_WVDC32(arg->overlay.OVADD, OVC_OVADD); - if (arg->overlay.b_wait_vblank) { - /*Wait for 20ms.*/ - unsigned long vblank_timeout = jiffies + HZ/50; - uint32_t temp; - while (time_before_eq(jiffies, vblank_timeout)) { - temp = PSB_RVDC32(OVC_DOVCSTA); - if ((temp & (0x1 << 31)) != 0) { - break; - } - cpu_relax(); - } - } - } - } - - if (arg->overlay_read_mask != 0) { - if (arg->overlay_read_mask & OV_REGRWBITS_OGAM_ALL) { - arg->overlay.OGAMC5 = PSB_RVDC32(OV_OGAMC5); - arg->overlay.OGAMC4 = PSB_RVDC32(OV_OGAMC4); - arg->overlay.OGAMC3 = PSB_RVDC32(OV_OGAMC3); - arg->overlay.OGAMC2 = PSB_RVDC32(OV_OGAMC2); - arg->overlay.OGAMC1 = PSB_RVDC32(OV_OGAMC1); - arg->overlay.OGAMC0 = PSB_RVDC32(OV_OGAMC0); - } - if (arg->overlay_read_mask & OVC_REGRWBITS_OGAM_ALL) { - arg->overlay.OGAMC5 = PSB_RVDC32(OVC_OGAMC5); - arg->overlay.OGAMC4 = PSB_RVDC32(OVC_OGAMC4); - arg->overlay.OGAMC3 = PSB_RVDC32(OVC_OGAMC3); - arg->overlay.OGAMC2 = PSB_RVDC32(OVC_OGAMC2); - arg->overlay.OGAMC1 = PSB_RVDC32(OVC_OGAMC1); - arg->overlay.OGAMC0 = PSB_RVDC32(OVC_OGAMC0); - } - if (arg->overlay_read_mask & OV_REGRWBITS_OVADD) - arg->overlay.OVADD = PSB_RVDC32(OV_OVADD); - if (arg->overlay_read_mask & OVC_REGRWBITS_OVADD) - arg->overlay.OVADD = PSB_RVDC32(OVC_OVADD); - } - - if (arg->sprite_enable_mask != 0) { - PSB_WVDC32(0x1F3E, DSPARB); - PSB_WVDC32(arg->sprite.dspa_control | PSB_RVDC32(DSPACNTR), DSPACNTR); - PSB_WVDC32(arg->sprite.dspa_key_value, DSPAKEYVAL); - PSB_WVDC32(arg->sprite.dspa_key_mask, DSPAKEYMASK); - PSB_WVDC32(PSB_RVDC32(DSPASURF), DSPASURF); - PSB_RVDC32(DSPASURF); - PSB_WVDC32(arg->sprite.dspc_control, DSPCCNTR); - PSB_WVDC32(arg->sprite.dspc_stride, DSPCSTRIDE); - PSB_WVDC32(arg->sprite.dspc_position, DSPCPOS); - PSB_WVDC32(arg->sprite.dspc_linear_offset, DSPCLINOFF); - PSB_WVDC32(arg->sprite.dspc_size, DSPCSIZE); - PSB_WVDC32(arg->sprite.dspc_surface, DSPCSURF); - PSB_RVDC32(DSPCSURF); - } - - if (arg->sprite_disable_mask != 0) { - PSB_WVDC32(0x3F3E, DSPARB); - PSB_WVDC32(0x0, DSPCCNTR); - PSB_WVDC32(arg->sprite.dspc_surface, DSPCSURF); - PSB_RVDC32(DSPCSURF); - } - - if (arg->subpicture_enable_mask != 0) { - uint32_t temp; - if ( arg->subpicture_enable_mask & REGRWBITS_DSPACNTR){ - temp = PSB_RVDC32(DSPACNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp &= ~DISPPLANE_BOTTOM; - temp |= DISPPLANE_32BPP; - PSB_WVDC32(temp, DSPACNTR); - - temp = PSB_RVDC32(DSPABASE); - PSB_WVDC32(temp, DSPABASE); - PSB_RVDC32(DSPABASE); - temp = PSB_RVDC32(DSPASURF); - PSB_WVDC32(temp, DSPASURF); - PSB_RVDC32(DSPASURF); - } - if ( arg->subpicture_enable_mask & REGRWBITS_DSPBCNTR){ - temp = PSB_RVDC32(DSPBCNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp &= ~DISPPLANE_BOTTOM; - temp |= DISPPLANE_32BPP; - PSB_WVDC32(temp, DSPBCNTR); - - temp = PSB_RVDC32(DSPBBASE); - PSB_WVDC32(temp, DSPBBASE); - PSB_RVDC32(DSPBBASE); - temp = PSB_RVDC32(DSPBSURF); - PSB_WVDC32(temp, DSPBSURF); - PSB_RVDC32(DSPBSURF); - } - if ( arg->subpicture_enable_mask & REGRWBITS_DSPCCNTR){ - temp = PSB_RVDC32(DSPCCNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp &= ~DISPPLANE_BOTTOM; - temp |= DISPPLANE_32BPP; - PSB_WVDC32(temp, DSPCCNTR); - - temp = PSB_RVDC32(DSPCBASE); - PSB_WVDC32(temp, DSPCBASE); - PSB_RVDC32(DSPCBASE); - temp = PSB_RVDC32(DSPCSURF); - PSB_WVDC32(temp, DSPCSURF); - PSB_RVDC32(DSPCSURF); - } - } - - if (arg->subpicture_disable_mask != 0) { - uint32_t temp; - if ( arg->subpicture_disable_mask & REGRWBITS_DSPACNTR){ - temp = PSB_RVDC32(DSPACNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp |= DISPPLANE_32BPP_NO_ALPHA; - PSB_WVDC32(temp, DSPACNTR); - - temp = PSB_RVDC32(DSPABASE); - PSB_WVDC32(temp, DSPABASE); - PSB_RVDC32(DSPABASE); - temp = PSB_RVDC32(DSPASURF); - PSB_WVDC32(temp, DSPASURF); - PSB_RVDC32(DSPASURF); - } - if ( arg->subpicture_disable_mask & REGRWBITS_DSPBCNTR){ - temp = PSB_RVDC32(DSPBCNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp |= DISPPLANE_32BPP_NO_ALPHA; - PSB_WVDC32(temp, DSPBCNTR); - - temp = PSB_RVDC32(DSPBBASE); - PSB_WVDC32(temp, DSPBBASE); - PSB_RVDC32(DSPBBASE); - temp = PSB_RVDC32(DSPBSURF); - PSB_WVDC32(temp, DSPBSURF); - PSB_RVDC32(DSPBSURF); - } - if ( arg->subpicture_disable_mask & REGRWBITS_DSPCCNTR){ - temp = PSB_RVDC32(DSPCCNTR); - temp &= ~DISPPLANE_PIXFORMAT_MASK; - temp |= DISPPLANE_32BPP_NO_ALPHA; - PSB_WVDC32(temp, DSPCCNTR); - - temp = PSB_RVDC32(DSPCBASE); - PSB_WVDC32(temp, DSPCBASE); - PSB_RVDC32(DSPCBASE); - temp = PSB_RVDC32(DSPCSURF); - PSB_WVDC32(temp, DSPCSURF); - PSB_RVDC32(DSPCSURF); - } - } - - return 0; -} - -/* always available as we are SIGIO'd */ -static unsigned int psb_poll(struct file *filp, - struct poll_table_struct *wait) -{ - return POLLIN | POLLRDNORM; -} - -static int psb_driver_open(struct drm_device *dev, struct drm_file *priv) -{ - DRM_DEBUG("\n"); - return PVRSRVOpen(dev, priv); -} - -/* When a client dies: - * - Check for and clean up flipped page state - */ -void psb_driver_preclose(struct drm_device *dev, struct drm_file *priv) -{ -} - -static void psb_remove(struct pci_dev *pdev) -{ - struct drm_device *dev = pci_get_drvdata(pdev); - drm_put_dev(dev); -} - -static const struct dev_pm_ops psb_pm_ops = { - .runtime_suspend = psb_runtime_suspend, - .runtime_resume = psb_runtime_resume, - .runtime_idle = psb_runtime_idle, -}; - -static struct drm_driver driver = { - .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | \ - DRIVER_IRQ_VBL | DRIVER_MODESET, - .load = psb_driver_load, - .unload = psb_driver_unload, - - .ioctls = psb_ioctls, - .num_ioctls = DRM_ARRAY_SIZE(psb_ioctls), - .device_is_agp = psb_driver_device_is_agp, - .irq_preinstall = psb_irq_preinstall, - .irq_postinstall = psb_irq_postinstall, - .irq_uninstall = psb_irq_uninstall, - .irq_handler = psb_irq_handler, - .enable_vblank = psb_enable_vblank, - .disable_vblank = psb_disable_vblank, - .get_vblank_counter = psb_get_vblank_counter, - .firstopen = NULL, - .lastclose = psb_lastclose, - .open = psb_driver_open, - .postclose = PVRSRVDrmPostClose, - .suspend = PVRSRVDriverSuspend, - .resume = PVRSRVDriverResume, - .preclose = psb_driver_preclose, - .fops = { - .owner = THIS_MODULE, - .open = psb_open, - .release = psb_release, - .unlocked_ioctl = drm_ioctl, - .mmap = psb_mmap, - .poll = psb_poll, - .fasync = drm_fasync, - .read = drm_read, - }, - .name = DRIVER_NAME, - .desc = DRIVER_DESC, - .date = PSB_DRM_DRIVER_DATE, - .major = PSB_DRM_DRIVER_MAJOR, - .minor = PSB_DRM_DRIVER_MINOR, - .patchlevel = PSB_DRM_DRIVER_PATCHLEVEL -}; - -static struct pci_driver psb_pci_driver = { - .name = DRIVER_NAME, - .id_table = pciidlist, - .resume = ospm_power_resume, - .suspend = ospm_power_suspend, - .probe = psb_probe, - .remove = psb_remove, -#if 0 -#ifdef CONFIG_PM - .driver.pm = &psb_pm_ops, -#endif -#endif -}; - -static int psb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) -{ - return drm_get_pci_dev(pdev, ent, &driver); -} - -static int __init psb_init(void) -{ - return drm_pci_init(&driver, &psb_pci_driver); -} - -static void __exit psb_exit(void) -{ - int ret; - - /*cleanup for bc_video*/ - ret = BC_Video_ModCleanup(); - if (ret != 0) - { - return; - } - - drm_pci_exit(&driver, &psb_pci_driver); -} - -late_initcall(psb_init); -module_exit(psb_exit); - -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/cdv/drv/psb_drv.h b/drivers/staging/cdv/drv/psb_drv.h deleted file mode 100644 index beec54c..0000000 --- a/drivers/staging/cdv/drv/psb_drv.h +++ /dev/null @@ -1,1203 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#ifndef _PSB_DRV_H_ -#define _PSB_DRV_H_ - -#include - -#include -#include "sys_pvr_drm_export.h" -#include "psb_drm.h" -#include "psb_reg.h" -#include "psb_schedule.h" -#include "psb_intel_drv.h" -#include "psb_hotplug.h" -#include "psb_dpst.h" -#include "psb_gtt.h" -#include "psb_powermgmt.h" -#include "ttm/ttm_object.h" -#include "psb_ttm_fence_driver.h" -#include "psb_ttm_userobj_api.h" -#include "ttm/ttm_bo_driver.h" -#include "ttm/ttm_lock.h" - -/*IMG headers*/ -#include "private_data.h" -#include "pvr_drm.h" - -/*Append new drm mode definition here, align with libdrm definition*/ -#define DRM_MODE_SCALE_NO_SCALE 2 - -extern struct ttm_bo_driver psb_ttm_bo_driver; - -enum { - CHIP_PSB_8108 = 0, - CHIP_PSB_8109 = 1, - CHIP_MRST_4100 = 2, - CHIP_MDFLD_0130 = 3, - CHIP_CDV_0BE0 = 4 -}; - -enum panel_type { - TPO_CMD, - TPO_VID, - TMD_CMD, - TMD_VID, - PYR_CMD, - PYR_VID, - TPO, - TMD, - PYR, - HDMI, - GCT_DETECT -}; - -#define PCI_ID_TOPAZ_DISABLED 0x4101 - -/* - *Hardware bugfixes - */ - -#define OSPM_STAT - -#define DRIVER_NAME "pvrsrvkm" -#define DRIVER_DESC "drm driver for the Intel GMA500" -#define DRIVER_AUTHOR "Intel Corporation" -#define OSPM_PROC_ENTRY "ospm" -#define RTPM_PROC_ENTRY "rtpm" -#define BLC_PROC_ENTRY "mrst_blc" -#define DISPLAY_PROC_ENTRY "display_status" - -#define PSB_DRM_DRIVER_DATE "2009-03-10" -#define PSB_DRM_DRIVER_MAJOR 8 -#define PSB_DRM_DRIVER_MINOR 1 -#define PSB_DRM_DRIVER_PATCHLEVEL 0 - -/* - *TTM driver private offsets. - */ - -#define DRM_PSB_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) - -#define PSB_OBJECT_HASH_ORDER 13 -#define PSB_FILE_OBJECT_HASH_ORDER 12 -#define PSB_BO_HASH_ORDER 12 - -#define PSB_VDC_OFFSET 0x00000000 -#define PSB_VDC_SIZE 0x000080000 -#define MRST_MMIO_SIZE 0x0000C0000 -#define MDFLD_MMIO_SIZE 0x000100000 -#define PSB_SGX_SIZE 0x8000 -#define PSB_SGX_OFFSET 0x00040000 -#define MRST_SGX_OFFSET 0x00080000 -#define PSB_MMIO_RESOURCE 0 -#define PSB_GATT_RESOURCE 2 -#define PSB_GTT_RESOURCE 3 -#define PSB_GMCH_CTRL 0x52 -#define PSB_BSM 0x5C -#define _PSB_GMCH_ENABLED 0x4 -#define PSB_PGETBL_CTL 0x2020 -#define _PSB_PGETBL_ENABLED 0x00000001 -#define PSB_SGX_2D_SLAVE_PORT 0x4000 -#define PSB_TT_PRIV0_LIMIT (256*1024*1024) -#define PSB_TT_PRIV0_PLIMIT (PSB_TT_PRIV0_LIMIT >> PAGE_SHIFT) -#define PSB_NUM_VALIDATE_BUFFERS 2048 - -#define PSB_MEM_MMU_START 0x00000000 -#define PSB_MEM_TT_START 0xE0000000 - -#define PSB_GL3_CACHE_CTL 0x2100 -#define PSB_GL3_CACHE_STAT 0x2108 - -/* - *Flags for external memory type field. - */ - -#define MRST_MSVDX_OFFSET 0x90000 /*MSVDX Base offset */ -#define PSB_MSVDX_OFFSET 0x50000 /*MSVDX Base offset */ -/* MSVDX MMIO region is 0x50000 - 0x57fff ==> 32KB */ -#define PSB_MSVDX_SIZE 0x10000 - -#define PSB_MMU_CACHED_MEMORY 0x0001 /* Bind to MMU only */ -#define PSB_MMU_RO_MEMORY 0x0002 /* MMU RO memory */ -#define PSB_MMU_WO_MEMORY 0x0004 /* MMU WO memory */ - -/* - *PTE's and PDE's - */ - -#define PSB_PDE_MASK 0x003FFFFF -#define PSB_PDE_SHIFT 22 -#define PSB_PTE_SHIFT 12 - -#define PSB_PTE_VALID 0x0001 /* PTE / PDE valid */ -#define PSB_PTE_WO 0x0002 /* Write only */ -#define PSB_PTE_RO 0x0004 /* Read only */ -#define PSB_PTE_CACHED 0x0008 /* CPU cache coherent */ - -/* - *VDC registers and bits - */ -#define PSB_MSVDX_CLOCKGATING 0x2064 -#define PSB_HWSTAM 0x2098 -#define PSB_INSTPM 0x20C0 - -#define PSB_IRQ_ASLE (1<<0) -#define PSB_IRQ_PIPEB_DPBM (1<<2) -#define PSB_IRQ_PIPEA_DPBM (1<<3) -#define PSB_IRQ_PIPEB_EVENT (1<<4) -#define PSB_IRQ_PIPEB_VBLANK (1<<5) -#define PSB_IRQ_PIPEA_EVENT (1<<6) -#define PSB_IRQ_PIPEA_VBLANK (1<<7) -#define PSB_IRQ_SPRITEB_FLIP (1<<8) -#define PSB_IRQ_SPRITEA_FLIP (1<<9) -#define PSB_IRQ_PLANEB_FLIP (1<<10) -#define PSB_IRQ_PLANEA_FLIP (1<<11) -#define PSB_IRQ_MASTER_ERR (1<<15) -#define PSB_IRQ_DISP_HOTSYNC (1<<17) -#define _PSB_IRQ_SGX_FLAG (1<<18) -#define _PSB_IRQ_MSVDX_FLAG (1<<19) - -/* This flag includes all the display IRQ bits excepts the vblank irqs. */ -#define _PSB_DISP_ALL_IRQ_FLAG (PSB_IRQ_ASLE | PSB_IRQ_PIPEB_DPBM | PSB_IRQ_PIPEA_DPBM | PSB_IRQ_PIPEA_EVENT |\ - PSB_IRQ_PIPEB_EVENT | PSB_IRQ_PIPEA_VBLANK | PSB_IRQ_PIPEB_VBLANK) -#define PSB_INT_IDENTITY_R 0x20A4 -#define PSB_INT_MASK_R 0x20A8 -#define PSB_INT_ENABLE_R 0x20A0 - -#define _PSB_MMU_ER_MASK 0x0001FF00 -#define _PSB_MMU_ER_HOST (1 << 16) -#define GPIOA 0x5010 -#define GPIOB 0x5014 -#define GPIOC 0x5018 -#define GPIOD 0x501c -#define GPIOE 0x5020 -#define GPIOF 0x5024 -#define GPIOG 0x5028 -#define GPIOH 0x502c -#define GPIO_CLOCK_DIR_MASK (1 << 0) -#define GPIO_CLOCK_DIR_IN (0 << 1) -#define GPIO_CLOCK_DIR_OUT (1 << 1) -#define GPIO_CLOCK_VAL_MASK (1 << 2) -#define GPIO_CLOCK_VAL_OUT (1 << 3) -#define GPIO_CLOCK_VAL_IN (1 << 4) -#define GPIO_CLOCK_PULLUP_DISABLE (1 << 5) -#define GPIO_DATA_DIR_MASK (1 << 8) -#define GPIO_DATA_DIR_IN (0 << 9) -#define GPIO_DATA_DIR_OUT (1 << 9) -#define GPIO_DATA_VAL_MASK (1 << 10) -#define GPIO_DATA_VAL_OUT (1 << 11) -#define GPIO_DATA_VAL_IN (1 << 12) -#define GPIO_DATA_PULLUP_DISABLE (1 << 13) - -#define VCLK_DIVISOR_VGA0 0x6000 -#define VCLK_DIVISOR_VGA1 0x6004 -#define VCLK_POST_DIV 0x6010 - -#define PSB_COMM_2D (PSB_ENGINE_2D << 4) -#define PSB_COMM_3D (PSB_ENGINE_3D << 4) -#define PSB_COMM_TA (PSB_ENGINE_TA << 4) -#define PSB_COMM_HP (PSB_ENGINE_HP << 4) -#define PSB_COMM_USER_IRQ (1024 >> 2) -#define PSB_COMM_USER_IRQ_LOST (PSB_COMM_USER_IRQ + 1) -#define PSB_COMM_FW (2048 >> 2) - -#define PSB_UIRQ_VISTEST 1 -#define PSB_UIRQ_OOM_REPLY 2 -#define PSB_UIRQ_FIRE_TA_REPLY 3 -#define PSB_UIRQ_FIRE_RASTER_REPLY 4 - -#define PSB_2D_SIZE (256*1024*1024) -#define PSB_MAX_RELOC_PAGES 1024 - -#define PSB_LOW_REG_OFFS 0x0204 -#define PSB_HIGH_REG_OFFS 0x0600 - -#define PSB_NUM_VBLANKS 2 - - -#define PSB_2D_SIZE (256*1024*1024) -#define PSB_MAX_RELOC_PAGES 1024 - -#define PSB_LOW_REG_OFFS 0x0204 -#define PSB_HIGH_REG_OFFS 0x0600 - -#define PSB_NUM_VBLANKS 2 -#define PSB_WATCHDOG_DELAY (DRM_HZ * 2) -#define PSB_LID_DELAY (DRM_HZ / 10) - -#define PSB_PWR_STATE_ON 1 -#define PSB_PWR_STATE_OFF 2 - -#define PSB_PMPOLICY_NOPM 0 -#define PSB_PMPOLICY_CLOCKGATING 1 -#define PSB_PMPOLICY_POWERDOWN 2 - -#define PSB_PMSTATE_POWERUP 0 -#define PSB_PMSTATE_CLOCKGATED 1 -#define PSB_PMSTATE_POWERDOWN 2 -#define PSB_PCIx_MSI_ADDR_LOC 0x94 -#define PSB_PCIx_MSI_DATA_LOC 0x98 - -#define MDFLD_PLANE_MAX_WIDTH 2048 -#define MDFLD_PLANE_MAX_HEIGHT 2048 - -struct opregion_header; -struct opregion_acpi; -struct opregion_swsci; -struct opregion_asle; - -struct psb_intel_opregion { - struct opregion_header *header; - struct opregion_acpi *acpi; - struct opregion_swsci *swsci; - struct opregion_asle *asle; - void *vbt; - u32 __iomem *lid_state; -}; - -/** - *struct psb_context - * - *@buffers: array of pre-allocated validate buffers. - *@used_buffers: number of buffers in @buffers array currently in use. - *@validate_buffer: buffers validated from user-space. - *@kern_validate_buffers : buffers validated from kernel-space. - *@fence_flags : Fence flags to be used for fence creation. - * - *This structure is used during execbuf validation. - */ - -struct psb_context { - struct psb_validate_buffer *buffers; - uint32_t used_buffers; - struct list_head validate_list; - struct list_head kern_validate_list; - uint32_t fence_types; - uint32_t val_seq; -}; - -struct psb_validate_buffer; - -struct psb_msvdx_cmd_queue { - struct list_head head; - void *cmd; - unsigned long cmd_size; - uint32_t sequence; -}; - - -/* Currently defined profiles */ -enum VAProfile { - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11, - VAProfileJPEGBaseline = 12, - VAProfileH264ConstrainedBaseline = 13 -}; - -/* Currently defined entrypoints */ -enum VAEntrypoint { - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6, /* slice level encode */ - VAEntrypointEncPicture = 7 /* pictuer encode, JPEG, etc */ -}; - - -struct psb_video_ctx { - struct list_head head; - struct file *filp; /* DRM device file pointer */ - int ctx_type; /* profile<<8|entrypoint */ - /* todo: more context specific data for multi-context support */ -}; - -typedef int (*pfn_vsync_handler)(struct drm_device* dev, int pipe); - - -#define MODE_SETTING_IN_CRTC 0x1 -#define MODE_SETTING_IN_ENCODER 0x2 -#define MODE_SETTING_ON_GOING 0x3 -#define MODE_SETTING_IN_DSR 0x4 -#define MODE_SETTING_ENCODER_DONE 0x8 - -struct drm_psb_private { - /* - *TTM Glue. - */ - - struct drm_global_reference mem_global_ref; - struct ttm_bo_global_ref bo_global_ref; - int has_global; - - struct drm_device *dev; - struct ttm_object_device *tdev; - struct ttm_fence_device fdev; - struct ttm_bo_device bdev; - struct ttm_lock ttm_lock; - struct vm_operations_struct *ttm_vm_ops; - int has_fence_device; - int has_bo_device; - - unsigned long chipset; - - struct drm_psb_dev_info_arg dev_info; - - struct psb_gtt *pg; - - /*GTT Memory manager*/ - struct psb_gtt_mm *gtt_mm; - - struct page *scratch_page; - uint32_t sequence[PSB_NUM_ENGINES]; - uint32_t last_sequence[PSB_NUM_ENGINES]; - uint32_t last_submitted_seq[PSB_NUM_ENGINES]; - - struct psb_mmu_driver *mmu; - struct psb_mmu_pd *pf_pd; - - uint8_t *sgx_reg; - uint8_t *vdc_reg; - uint32_t gatt_free_offset; - - /* IMG video context */ - struct list_head video_ctx; - /* Current video context */ - struct psb_video_ctx *msvdx_ctx; - /* previous vieo context */ - struct psb_video_ctx *last_msvdx_ctx; - - /* - *MSVDX - */ - uint8_t *msvdx_reg; - atomic_t msvdx_mmu_invaldc; - void *msvdx_private; - - uint32_t video_device_fuse; - - /* - *Fencing / irq. - */ - - uint32_t vdc_irq_mask; - uint32_t pipestat[PSB_NUM_PIPE]; - bool vblanksEnabledForFlips; - - spinlock_t irqmask_lock; - spinlock_t sequence_lock; - - /* - *Modesetting - */ - struct psb_intel_mode_device mode_dev; - - struct drm_crtc *plane_to_crtc_mapping[PSB_NUM_PIPE]; - struct drm_crtc *pipe_to_crtc_mapping[PSB_NUM_PIPE]; - uint32_t num_pipe; - - /* - * CI share buffer - */ - unsigned int ci_region_start; - unsigned int ci_region_size; - - /* - * RAR share buffer; - */ - unsigned int rar_region_start; - unsigned int rar_region_size; - - /* - *Memory managers - */ - - int have_camera; - int have_rar; - int have_tt; - int have_mem_mmu; - struct mutex temp_mem; - - /* - *Relocation buffer mapping. - */ - - spinlock_t reloc_lock; - unsigned int rel_mapped_pages; - wait_queue_head_t rel_mapped_queue; - - /* - *SAREA - */ - struct drm_psb_sarea *sarea_priv; - - /* - *OSPM info - */ - uint32_t ospm_base; - - /* - * Sizes info - */ - - struct drm_psb_sizes_arg sizes; - - uint32_t fuse_reg_value; - - /* info that is stored from the gct */ - struct gct_ioctl_arg gct_data; - enum panel_type panel_id; - - /* pci revision id for B0:D2:F0 */ - uint8_t platform_rev_id; - - /* - *LVDS info - */ - int backlight_duty_cycle; /* restore backlight to this value */ - bool panel_wants_dither; - struct drm_display_mode *panel_fixed_mode; - struct drm_display_mode *lfp_lvds_vbt_mode; - - struct bdb_lvds_backlight *lvds_bl; /*LVDS backlight info from VBT*/ - struct psb_intel_i2c_chan *lvds_i2c_bus; - - /* Feature bits from the VBIOS*/ - unsigned int int_tv_support:1; - unsigned int lvds_dither:1; - unsigned int lvds_vbt:1; - unsigned int int_crt_support:1; - unsigned int lvds_use_ssc:1; - int lvds_ssc_freq; - bool is_lvds_on; - -/* MRST private date start */ -/*FIXME JLIU7 need to revisit */ - unsigned int core_freq; - - /* pipe config register value */ - uint32_t pipeconf; - uint32_t pipeconf1; - uint32_t pipeconf2; - - /* plane control register value */ - uint32_t dspcntr; - uint32_t dspcntr1; - uint32_t dspcntr2; - - /*runtime PM state*/ - int rpm_enabled; - - /* - *Register state - */ - uint32_t saveDSPACNTR; - uint32_t saveDSPBCNTR; - uint32_t savePIPEACONF; - uint32_t savePIPEBCONF; - uint32_t savePIPEASRC; - uint32_t savePIPEBSRC; - uint32_t saveFPA0; - uint32_t saveFPA1; - uint32_t saveDPLL_A; - uint32_t saveDPLL_A_MD; - uint32_t saveHTOTAL_A; - uint32_t saveHBLANK_A; - uint32_t saveHSYNC_A; - uint32_t saveVTOTAL_A; - uint32_t saveVBLANK_A; - uint32_t saveVSYNC_A; - uint32_t saveDSPASTRIDE; - uint32_t saveDSPASIZE; - uint32_t saveDSPAPOS; - uint32_t saveDSPABASE; - uint32_t saveDSPASURF; - uint32_t saveFPB0; - uint32_t saveFPB1; - uint32_t saveDPLL_B; - uint32_t saveDPLL_B_MD; - uint32_t saveHTOTAL_B; - uint32_t saveHBLANK_B; - uint32_t saveHSYNC_B; - uint32_t saveVTOTAL_B; - uint32_t saveVBLANK_B; - uint32_t saveVSYNC_B; - uint32_t saveDSPBSTRIDE; - uint32_t saveDSPBSIZE; - uint32_t saveDSPBPOS; - uint32_t saveDSPBBASE; - uint32_t saveDSPBSURF; - uint32_t saveVCLK_DIVISOR_VGA0; - uint32_t saveVCLK_DIVISOR_VGA1; - uint32_t saveVCLK_POST_DIV; - uint32_t saveVGACNTRL; - uint32_t saveADPA; - uint32_t saveLVDS; - uint32_t saveDVOA; - uint32_t saveDVOB; - uint32_t saveDVOC; - uint32_t savePP_ON; - uint32_t savePP_OFF; - uint32_t savePP_CONTROL; - uint32_t savePP_CYCLE; - uint32_t savePFIT_CONTROL; - uint32_t savePaletteA[256]; - uint32_t savePaletteB[256]; - uint32_t saveBLC_PWM_CTL2; - uint32_t saveBLC_PWM_CTL; - uint32_t saveCLOCKGATING; - uint32_t saveDSPARB; - uint32_t saveDSPATILEOFF; - uint32_t saveDSPBTILEOFF; - uint32_t saveDSPAADDR; - uint32_t saveDSPBADDR; - uint32_t savePFIT_AUTO_RATIOS; - uint32_t savePFIT_PGM_RATIOS; - uint32_t savePP_ON_DELAYS; - uint32_t savePP_OFF_DELAYS; - uint32_t savePP_DIVISOR; - uint32_t saveBSM; - uint32_t saveVBT; - uint32_t saveBCLRPAT_A; - uint32_t saveBCLRPAT_B; - uint32_t saveDSPALINOFF; - uint32_t saveDSPBLINOFF; - uint32_t savePERF_MODE; - uint32_t saveDSPFW1; - uint32_t saveDSPFW2; - uint32_t saveDSPFW3; - uint32_t saveDSPFW4; - uint32_t saveDSPFW5; - uint32_t saveDSPFW6; - uint32_t saveCHICKENBIT; - uint32_t saveDSPACURSOR_CTRL; - uint32_t saveDSPBCURSOR_CTRL; - uint32_t saveDSPACURSOR_BASE; - uint32_t saveDSPBCURSOR_BASE; - uint32_t saveDSPACURSOR_POS; - uint32_t saveDSPBCURSOR_POS; - uint32_t save_palette_a[256]; - uint32_t save_palette_b[256]; - uint32_t saveOV_OVADD; - uint32_t saveOV_OGAMC0; - uint32_t saveOV_OGAMC1; - uint32_t saveOV_OGAMC2; - uint32_t saveOV_OGAMC3; - uint32_t saveOV_OGAMC4; - uint32_t saveOV_OGAMC5; - uint32_t saveOVC_OVADD; - uint32_t saveOVC_OGAMC0; - uint32_t saveOVC_OGAMC1; - uint32_t saveOVC_OGAMC2; - uint32_t saveOVC_OGAMC3; - uint32_t saveOVC_OGAMC4; - uint32_t saveOVC_OGAMC5; - - /* - * extra MDFLD Register state - */ - uint32_t saveHDMIPHYMISCCTL; - uint32_t saveHDMIB_CONTROL; - uint32_t saveDSPCCNTR; - uint32_t savePIPECCONF; - uint32_t savePIPECSRC; - uint32_t saveHTOTAL_C; - uint32_t saveHBLANK_C; - uint32_t saveHSYNC_C; - uint32_t saveVTOTAL_C; - uint32_t saveVBLANK_C; - uint32_t saveVSYNC_C; - uint32_t saveDSPCSTRIDE; - uint32_t saveDSPCSIZE; - uint32_t saveDSPCPOS; - uint32_t saveDSPCSURF; - uint32_t saveDSPCLINOFF; - uint32_t saveDSPCTILEOFF; - uint32_t saveDSPCCURSOR_CTRL; - uint32_t saveDSPCCURSOR_BASE; - uint32_t saveDSPCCURSOR_POS; - uint32_t save_palette_c[256]; - uint32_t saveOV_OVADD_C; - uint32_t saveOV_OGAMC0_C; - uint32_t saveOV_OGAMC1_C; - uint32_t saveOV_OGAMC2_C; - uint32_t saveOV_OGAMC3_C; - uint32_t saveOV_OGAMC4_C; - uint32_t saveOV_OGAMC5_C; - - /* DSI reg save */ - uint32_t saveDEVICE_READY_REG; - uint32_t saveINTR_EN_REG; - uint32_t saveDSI_FUNC_PRG_REG; - uint32_t saveHS_TX_TIMEOUT_REG; - uint32_t saveLP_RX_TIMEOUT_REG; - uint32_t saveTURN_AROUND_TIMEOUT_REG; - uint32_t saveDEVICE_RESET_REG; - uint32_t saveDPI_RESOLUTION_REG; - uint32_t saveHORIZ_SYNC_PAD_COUNT_REG; - uint32_t saveHORIZ_BACK_PORCH_COUNT_REG; - uint32_t saveHORIZ_FRONT_PORCH_COUNT_REG; - uint32_t saveHORIZ_ACTIVE_AREA_COUNT_REG; - uint32_t saveVERT_SYNC_PAD_COUNT_REG; - uint32_t saveVERT_BACK_PORCH_COUNT_REG; - uint32_t saveVERT_FRONT_PORCH_COUNT_REG; - uint32_t saveHIGH_LOW_SWITCH_COUNT_REG; - uint32_t saveINIT_COUNT_REG; - uint32_t saveMAX_RET_PAK_REG; - uint32_t saveVIDEO_FMT_REG; - uint32_t saveEOT_DISABLE_REG; - uint32_t saveLP_BYTECLK_REG; - uint32_t saveHS_LS_DBI_ENABLE_REG; - uint32_t saveTXCLKESC_REG; - uint32_t saveDPHY_PARAM_REG; - uint32_t saveMIPI_CONTROL_REG; - uint32_t saveMIPI; - uint32_t saveMIPI_C; - void (*init_drvIC)(struct drm_device *dev); - void (*dsi_prePowerState)(struct drm_device *dev); - void (*dsi_postPowerState)(struct drm_device *dev); - - /* DPST Register Save */ - uint32_t saveHISTOGRAM_INT_CONTROL_REG; - uint32_t saveHISTOGRAM_LOGIC_CONTROL_REG; - uint32_t savePWM_CONTROL_LOGIC; - - uint32_t saveDSPCLK_GATE_D; - uint32_t saveRAMCLK_GATE_D; - uint32_t saveDSPFW[6]; - u8 saveLBB; - uint32_t saveIER; - uint32_t saveIMR; - - /* MSI reg save */ - - uint32_t msi_addr; - uint32_t msi_data; - - /* - *Scheduling. - */ - - struct mutex reset_mutex; - struct psb_scheduler scheduler; - struct mutex cmdbuf_mutex; - atomic_t val_seq; - - /* - *TODO: change this to be per drm-context. - */ - - struct psb_context context; - - /* - * LID-Switch - */ - struct psb_intel_opregion opregion; - - /* - *Watchdog - */ - - spinlock_t watchdog_lock; - struct timer_list watchdog_timer; - struct work_struct watchdog_wq; - struct work_struct msvdx_watchdog_wq; - int timer_available; - - uint32_t apm_reg; - uint16_t apm_base; -#ifdef OSPM_STAT - unsigned char graphics_state; - unsigned long gfx_on_time; - unsigned long gfx_off_time; - unsigned long gfx_last_mode_change; - unsigned long gfx_on_cnt; - unsigned long gfx_off_cnt; -#endif - - /* - * Used for modifying backlight from - * xrandr -- consider removing and using HAL instead - */ - uint32_t blc_adj1; - uint32_t blc_adj2; - - /* - * DPST and Hotplug state - */ - - struct dpst_state *psb_dpst_state; - struct hotplug_state *psb_hotplug_state; - pfn_vsync_handler psb_vsync_handler; - - struct snd_intel_had_interface *had_interface; - void *had_pvt_data; - - bool dplla_96mhz; - - /*psb fb dev*/ - void * fbdev; - uint32_t cur_pipe; - - /* Frame buffer relocation */ - void * fb_reloc; - struct work_struct hotplug_work; - - void * ovl_buf; - uint32_t ovl_offset; -}; - -struct psb_fpriv { - int bcd_index; - struct ttm_object_file *tfile; -}; - -struct psb_mmu_driver; - -extern int drm_crtc_probe_output_modes(struct drm_device *dev, int, int); -extern int drm_pick_crtcs(struct drm_device *dev); - - -static inline struct psb_fpriv *psb_fpriv(struct drm_file *file_priv) -{ - PVRSRV_FILE_PRIVATE_DATA *pvr_file_priv - = (PVRSRV_FILE_PRIVATE_DATA *)file_priv->driver_priv; - return (struct psb_fpriv *) pvr_file_priv->pPriv; -} - -static inline struct drm_psb_private *psb_priv(struct drm_device *dev) -{ - return (struct drm_psb_private *) dev->dev_private; -} - -/* - *TTM glue. psb_ttm_glue.c - */ - -extern int psb_open(struct inode *inode, struct file *filp); -extern int psb_release(struct inode *inode, struct file *filp); -extern int psb_mmap(struct file *filp, struct vm_area_struct *vma); - -extern int psb_fence_signaled_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_verify_access(struct ttm_buffer_object *bo, - struct file *filp); -extern ssize_t psb_ttm_read(struct file *filp, char __user *buf, - size_t count, loff_t *f_pos); -extern ssize_t psb_ttm_write(struct file *filp, const char __user *buf, - size_t count, loff_t *f_pos); -extern int psb_fence_finish_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_fence_unref_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_waitidle_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_setstatus_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_synccpu_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_unref_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_reference_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_create_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_pl_ub_create_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_extension_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_ttm_global_init(struct drm_psb_private *dev_priv); -extern void psb_ttm_global_release(struct drm_psb_private *dev_priv); -extern int psb_getpageaddrs_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -/* - *MMU stuff. - */ - -extern struct psb_mmu_driver *psb_mmu_driver_init(uint8_t __iomem * registers, - int trap_pagefaults, - int invalid_type, - struct drm_psb_private *dev_priv); -extern void psb_mmu_driver_takedown(struct psb_mmu_driver *driver); -extern struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver - *driver); -extern void psb_mmu_mirror_gtt(struct psb_mmu_pd *pd, uint32_t mmu_offset, - uint32_t gtt_start, uint32_t gtt_pages); -extern struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver, - int trap_pagefaults, - int invalid_type); -extern void psb_mmu_free_pagedir(struct psb_mmu_pd *pd); -extern void psb_mmu_flush(struct psb_mmu_driver *driver, int rc_prot); -extern void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd, - unsigned long address, - uint32_t num_pages); -extern int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd, - uint32_t start_pfn, - unsigned long address, - uint32_t num_pages, int type); -extern int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual, - unsigned long *pfn); - -/* - *Enable / disable MMU for different requestors. - */ - - -extern void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context); -extern int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages, - unsigned long address, uint32_t num_pages, - uint32_t desired_tile_stride, - uint32_t hw_tile_stride, int type); -extern void psb_mmu_remove_pages(struct psb_mmu_pd *pd, - unsigned long address, uint32_t num_pages, - uint32_t desired_tile_stride, - uint32_t hw_tile_stride); -/* - *psb_sgx.c - */ - - - -extern int psb_cmdbuf_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_reg_submit(struct drm_psb_private *dev_priv, - uint32_t *regs, unsigned int cmds); - - -extern void psb_fence_or_sync(struct drm_file *file_priv, - uint32_t engine, - uint32_t fence_types, - uint32_t fence_flags, - struct list_head *list, - struct psb_ttm_fence_rep *fence_arg, - struct ttm_fence_object **fence_p); -extern int psb_validate_kernel_buffer(struct psb_context *context, - struct ttm_buffer_object *bo, - uint32_t fence_class, - uint64_t set_flags, - uint64_t clr_flags); - -/* - *psb_irq.c - */ - -extern irqreturn_t psb_irq_handler(DRM_IRQ_ARGS); -extern int psb_irq_enable_dpst(struct drm_device *dev); -extern int psb_irq_disable_dpst(struct drm_device *dev); -extern void psb_irq_preinstall(struct drm_device *dev); -extern int psb_irq_postinstall(struct drm_device *dev); -extern void psb_irq_uninstall(struct drm_device *dev); -extern void psb_irq_preinstall_islands(struct drm_device *dev, int hw_islands); -extern int psb_irq_postinstall_islands(struct drm_device *dev, int hw_islands); -extern void psb_irq_turn_on_dpst(struct drm_device *dev); -extern void psb_irq_turn_off_dpst(struct drm_device *dev); - -extern void psb_irq_uninstall_islands(struct drm_device *dev, int hw_islands); -extern int psb_vblank_wait2(struct drm_device *dev,unsigned int *sequence); -extern int psb_vblank_wait(struct drm_device *dev, unsigned int *sequence); -extern int psb_enable_vblank(struct drm_device *dev, int crtc); -extern void psb_disable_vblank(struct drm_device *dev, int crtc); -void -psb_enable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask); - -void -psb_disable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask); - -extern u32 psb_get_vblank_counter(struct drm_device *dev, int crtc); - -extern void psb_intel_enable_asle(struct drm_device *dev); - -/* - *psb_fence.c - */ - -extern void psb_fence_handler(struct drm_device *dev, uint32_t class); - -extern int psb_fence_emit_sequence(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t flags, uint32_t *sequence, - unsigned long *timeout_jiffies); -extern void psb_fence_error(struct drm_device *dev, - uint32_t class, - uint32_t sequence, uint32_t type, int error); -extern int psb_ttm_fence_device_init(struct ttm_fence_device *fdev); - -/* MSVDX/Topaz stuff */ -extern int psb_remove_videoctx(struct drm_psb_private *dev_priv, struct file *filp); - -extern int lnc_video_getparam(struct drm_device *dev, void *data, - struct drm_file *file_priv); - -extern int psb_try_power_down_msvdx(struct drm_device *dev); - -/* - * psb_opregion.c - */ -extern int psb_intel_opregion_setup(struct drm_device *dev); -extern void psb_intel_opregion_init(struct drm_device *dev); -extern void psb_intel_opregion_fini(struct drm_device *dev); -extern void psb_intel_opregion_asle_intr(struct drm_device *dev); -extern void psb_intel_opregion_enable_asle(struct drm_device *dev); - -/* - *psb_fb.c - */ -extern int psbfb_probed(struct drm_device *dev); -extern int psbfb_remove(struct drm_device *dev, - struct drm_framebuffer *fb); -extern int psbfb_kms_off_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psbfb_kms_on_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern void *psbfb_vdc_reg(struct drm_device* dev); - -/* - *psb_reset.c - */ - -extern void psb_schedule_watchdog(struct drm_psb_private *dev_priv); -extern void psb_watchdog_init(struct drm_psb_private *dev_priv); -extern void psb_watchdog_takedown(struct drm_psb_private *dev_priv); -extern void psb_print_pagefault(struct drm_psb_private *dev_priv); - -/* modesetting */ -extern void psb_modeset_init(struct drm_device *dev); -extern void psb_modeset_cleanup(struct drm_device *dev); -extern void psb_init_clock_gating(struct drm_device *dev); - -/*fbdev*/ -extern int psb_fbdev_init(struct drm_device * dev); - -/* psb_bl.c */ -int psb_backlight_init(struct drm_device *dev); -void psb_backlight_exit(void); -int psb_set_brightness(struct backlight_device *bd); -int psb_get_brightness(struct backlight_device *bd); -struct backlight_device * psb_get_backlight_device(void); - -extern void psb_intel_lvds_set_backlight(struct drm_device *dev, int level); -/* psb_intel_lvds.c */ -extern u32 psb_intel_lvds_get_max_backlight(struct drm_device *dev); -extern u32 psb_intel_lvds_get_backlight(struct drm_device *dev); - -/* - *Debug print bits setting - */ -#define PSB_D_GENERAL (1 << 0) -#define PSB_D_INIT (1 << 1) -#define PSB_D_IRQ (1 << 2) -#define PSB_D_ENTRY (1 << 3) -/* debug the get H/V BP/FP count */ -#define PSB_D_HV (1 << 4) -#define PSB_D_DBI_BF (1 << 5) -#define PSB_D_PM (1 << 6) -#define PSB_D_RENDER (1 << 7) -#define PSB_D_REG (1 << 8) -#define PSB_D_MSVDX (1 << 9) -#define PSB_D_TOPAZ (1 << 10) - -#ifndef DRM_DEBUG_CODE -/* To enable debug printout, set drm_psb_debug in psb_drv.c - * to any combination of above print flags. - */ -#define DRM_DEBUG_CODE 2 -#endif - -extern int drm_psb_debug; -extern int drm_psb_no_fb; -extern int drm_psb_disable_vsync; -extern int drm_idle_check_interval; - -#define PSB_DEBUG_GENERAL(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_GENERAL, _fmt, ##_arg) -#define PSB_DEBUG_INIT(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_INIT, _fmt, ##_arg) -#define PSB_DEBUG_IRQ(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_IRQ, _fmt, ##_arg) -#define PSB_DEBUG_ENTRY(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_ENTRY, _fmt, ##_arg) -#define PSB_DEBUG_HV(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_HV, _fmt, ##_arg) -#define PSB_DEBUG_DBI_BF(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_DBI_BF, _fmt, ##_arg) -#define PSB_DEBUG_PM(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_PM, _fmt, ##_arg) -#define PSB_DEBUG_RENDER(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_RENDER, _fmt, ##_arg) -#define PSB_DEBUG_REG(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_REG, _fmt, ##_arg) -#define PSB_DEBUG_MSVDX(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_MSVDX, _fmt, ##_arg) -#define PSB_DEBUG_TOPAZ(_fmt, _arg...) \ - PSB_DEBUG(PSB_D_TOPAZ, _fmt, ##_arg) - -#if DRM_DEBUG_CODE -#define PSB_DEBUG(_flag, _fmt, _arg...) \ - do { \ - if (unlikely((_flag) & drm_psb_debug)) \ - printk(KERN_DEBUG \ - "[psb:0x%02x:%s] " _fmt , _flag, \ - __func__ , ##_arg); \ - } while (0) -#else -#define PSB_DEBUG(_fmt, _arg...) do { } while (0) -#endif - -/* - *Utilities - */ -#define DRM_DRIVER_PRIVATE_T struct drm_psb_private - -static inline u32 CDV_MSG_READ32(uint port, uint offset) -{ - int mcr = (0x10<<24) | (port << 16) | (offset << 8); - uint32_t ret_val = 0; - struct pci_dev *pci_root = pci_get_bus_and_slot (0, 0); - pci_write_config_dword (pci_root, 0xD0, mcr); - pci_read_config_dword (pci_root, 0xD4, &ret_val); - pci_dev_put(pci_root); - return ret_val; -} -static inline void CDV_MSG_WRITE32(uint port, uint offset, u32 value) -{ - int mcr = (0x11<<24) | (port << 16) | (offset << 8) | 0xF0; - struct pci_dev *pci_root = pci_get_bus_and_slot (0, 0); - pci_write_config_dword (pci_root, 0xD4, value); - pci_write_config_dword (pci_root, 0xD0, mcr); - pci_dev_put(pci_root); -} - -static inline uint32_t REGISTER_READ(struct drm_device *dev, uint32_t reg) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - int reg_val = ioread32(dev_priv->vdc_reg + (reg)); - PSB_DEBUG_REG("reg = 0x%x. reg_val = 0x%x. \n", reg, reg_val); - return reg_val; -} - -#define REG_READ(reg) REGISTER_READ(dev, (reg)) -static inline void REGISTER_WRITE(struct drm_device *dev, uint32_t reg, - uint32_t val) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - if ((reg < 0x70084 || reg >0x70088) && (reg < 0xa000 || reg >0xa3ff)) - PSB_DEBUG_REG("reg = 0x%x, val = 0x%x. \n", reg, val); - - iowrite32((val), dev_priv->vdc_reg + (reg)); -} - -#define REG_WRITE(reg, val) REGISTER_WRITE(dev, (reg), (val)) - -static inline void REGISTER_WRITE16(struct drm_device *dev, - uint32_t reg, uint32_t val) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - - PSB_DEBUG_REG("reg = 0x%x, val = 0x%x. \n", reg, val); - - iowrite16((val), dev_priv->vdc_reg + (reg)); -} - -#define REG_WRITE16(reg, val) REGISTER_WRITE16(dev, (reg), (val)) - -static inline void REGISTER_WRITE8(struct drm_device *dev, - uint32_t reg, uint32_t val) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - - PSB_DEBUG_REG("reg = 0x%x, val = 0x%x. \n", reg, val); - - iowrite8((val), dev_priv->vdc_reg + (reg)); -} - -#define REG_WRITE8(reg, val) REGISTER_WRITE8(dev, (reg), (val)) - -#define PSB_ALIGN_TO(_val, _align) \ - (((_val) + ((_align) - 1)) & ~((_align) - 1)) -#define PSB_WVDC32(_val, _offs) \ - iowrite32(_val, dev_priv->vdc_reg + (_offs)) -#define PSB_RVDC32(_offs) \ - ioread32(dev_priv->vdc_reg + (_offs)) - -/* #define TRAP_SGX_PM_FAULT 1 */ -#ifdef TRAP_SGX_PM_FAULT -#define PSB_RSGX32(_offs) \ -({ \ - if (inl(dev_priv->apm_base + PSB_APM_STS) & 0x3) { \ - DRM_ERROR("access sgx when it's off!! (READ) %s, %d\n", \ - __FILE__, __LINE__); \ - mdelay(1000); \ - } \ - ioread32(dev_priv->sgx_reg + (_offs)); \ -}) -#else -#define PSB_RSGX32(_offs) \ - ioread32(dev_priv->sgx_reg + (_offs)) -#endif - -#define MSVDX_REG_DUMP 0 - -#if MSVDX_REG_DUMP - -#define PSB_WMSVDX32(_val, _offs) \ - DRM_DEBUG("MSVDX: write %08x to reg 0x%08x\n", (unsigned int)(_val), (unsigned int)(_offs));\ - iowrite32(_val, dev_priv->msvdx_reg + (_offs)) -#define PSB_RMSVDX32(_offs) \ - ioread32(dev_priv->msvdx_reg + (_offs)) - -#else - -#define PSB_WMSVDX32(_val, _offs) \ - iowrite32(_val, dev_priv->msvdx_reg + (_offs)) -#define PSB_RMSVDX32(_offs) \ - ioread32(dev_priv->msvdx_reg + (_offs)) - -#endif - -#define PSB_ALPL(_val, _base) \ - (((_val) >> (_base ## _ALIGNSHIFT)) << (_base ## _SHIFT)) -#define PSB_ALPLM(_val, _base) \ - ((((_val) >> (_base ## _ALIGNSHIFT)) << (_base ## _SHIFT)) & (_base ## _MASK)) - - -#define IS_PENWELL(dev) 0 /* FIXME */ - - -#define IS_CDV(dev) (((dev)->pci_device & 0xfff8) == 0x0BE0) -#define IS_MID(dev) (IS_CDV(dev)) - -#define IS_MSVDX(dev) (IS_CDV(dev)) -#define IS_TOPAZ(dev) (IS_CDV(dev)) - -extern int drm_psb_ospm; - -#endif diff --git a/drivers/staging/cdv/drv/psb_fb.c b/drivers/staging/cdv/drv/psb_fb.c deleted file mode 100644 index 867f43c..0000000 --- a/drivers/staging/cdv/drv/psb_fb.c +++ /dev/null @@ -1,812 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "psb_drv.h" -#include "psb_intel_reg.h" -#include "psb_intel_drv.h" -#include "psb_ttm_userobj_api.h" -#include "psb_fb.h" -#include "psb_sgx.h" -#include "psb_pvr_glue.h" - - -extern int MRSTLFBHandleChangeFB(struct drm_device* dev, struct psb_framebuffer *psbfb); - -struct MRSTLFB_BUFFER_TAG; -uint32_t MRSTLFBGetSize(struct MRSTLFB_BUFFER_TAG *pBuffer); -void* MRSTLFBGetCPUVAddr(struct MRSTLFB_BUFFER_TAG *pBuffer); -uint32_t MRSTLFBGetDevVAddr(struct MRSTLFB_BUFFER_TAG *pBuffer); -extern int MRSTLFBAllocBuffer(struct drm_device *dev, - IMG_UINT32 ui32Size, struct MRSTLFB_BUFFER_TAG **ppBuffer); -extern int MRSTLFBFreeBuffer(struct drm_device *dev, - struct MRSTLFB_BUFFER_TAG **ppBuffer); - -static void psb_user_framebuffer_destroy(struct drm_framebuffer *fb); -static int psb_user_framebuffer_create_handle(struct drm_framebuffer *fb, - struct drm_file *file_priv, - unsigned int *handle); - -static const struct drm_framebuffer_funcs psb_fb_funcs = { - .destroy = psb_user_framebuffer_destroy, - .create_handle = psb_user_framebuffer_create_handle, -}; - -#define CMAP_TOHW(_val, _width) ((((_val) << (_width)) + 0x7FFF - (_val)) >> 16) - -void *psbfb_vdc_reg(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv; - dev_priv = (struct drm_psb_private *) dev->dev_private; - return dev_priv->vdc_reg; -} -/*EXPORT_SYMBOL(psbfb_vdc_reg); */ - -static int psbfb_setcolreg(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, - struct fb_info *info) -{ - struct psb_fbdev * fbdev = info->par; - struct drm_framebuffer *fb = fbdev->psb_fb_helper.fb; - uint32_t v; - - if (!fb) - return -ENOMEM; - - if (regno > 255) - return 1; - - red = CMAP_TOHW(red, info->var.red.length); - blue = CMAP_TOHW(blue, info->var.blue.length); - green = CMAP_TOHW(green, info->var.green.length); - transp = CMAP_TOHW(transp, info->var.transp.length); - - v = (red << info->var.red.offset) | - (green << info->var.green.offset) | - (blue << info->var.blue.offset) | - (transp << info->var.transp.offset); - - if (regno < 16) { - switch (fb->bits_per_pixel) { - case 16: - ((uint32_t *) info->pseudo_palette)[regno] = v; - break; - case 24: - case 32: - ((uint32_t *) info->pseudo_palette)[regno] = v; - break; - } - } - - return 0; -} - -static int psbfb_kms_off(struct drm_device *dev, int suspend) -{ - struct drm_framebuffer *fb = 0; - struct psb_framebuffer * psbfb = to_psb_fb(fb); - DRM_DEBUG("psbfb_kms_off_ioctl\n"); - - mutex_lock(&dev->mode_config.mutex); - list_for_each_entry(fb, &dev->mode_config.fb_list, head) { - struct fb_info *info = psbfb->fbdev; - - if (suspend) { - fb_set_suspend(info, 1); - drm_fb_helper_blank(FB_BLANK_POWERDOWN, info); - } - } - mutex_unlock(&dev->mode_config.mutex); - return 0; -} - -int psbfb_kms_off_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - int ret; - - if (drm_psb_no_fb) - return 0; - console_lock(); - ret = psbfb_kms_off(dev, 0); - console_unlock(); - - return ret; -} - -static int psbfb_kms_on(struct drm_device *dev, int resume) -{ - struct drm_framebuffer *fb = 0; - struct psb_framebuffer * psbfb = to_psb_fb(fb); - - DRM_DEBUG("psbfb_kms_on_ioctl\n"); - - mutex_lock(&dev->mode_config.mutex); - list_for_each_entry(fb, &dev->mode_config.fb_list, head) { - struct fb_info *info = psbfb->fbdev; - - if (resume) { - fb_set_suspend(info, 0); - drm_fb_helper_blank(FB_BLANK_UNBLANK, info); - } - } - mutex_unlock(&dev->mode_config.mutex); - - return 0; -} - -int psbfb_kms_on_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - int ret; - - if (drm_psb_no_fb) - return 0; - console_lock(); - ret = psbfb_kms_on(dev, 0); - console_unlock(); - drm_helper_disable_unused_functions(dev); - return ret; -} - -void psbfb_suspend(struct drm_device *dev) -{ - console_lock(); - psbfb_kms_off(dev, 1); - console_unlock(); -} - -void psbfb_resume(struct drm_device *dev) -{ - console_lock(); - psbfb_kms_on(dev, 1); - console_unlock(); - drm_helper_disable_unused_functions(dev); -} - -static struct fb_ops psbfb_ops = { - .owner = THIS_MODULE, - .fb_check_var = drm_fb_helper_check_var, - .fb_set_par = drm_fb_helper_set_par, - .fb_blank = drm_fb_helper_blank, - .fb_setcolreg = psbfb_setcolreg, - .fb_fillrect = cfb_fillrect, - .fb_copyarea = cfb_copyarea, - .fb_imageblit = cfb_imageblit, -}; - -static struct drm_framebuffer *psb_framebuffer_create - (struct drm_device *dev, struct drm_mode_fb_cmd *r, - void *mm_private) -{ - struct psb_framebuffer *fb; - int ret; - - fb = kzalloc(sizeof(*fb), GFP_KERNEL); - if (!fb) - return NULL; - - ret = drm_framebuffer_init(dev, &fb->base, &psb_fb_funcs); - - if (ret) - goto err; - - drm_helper_mode_fill_fb_struct(&fb->base, r); - - fb->pvrBO = mm_private; - - return &fb->base; - -err: - kfree(fb); - return NULL; -} - -static struct drm_framebuffer *psb_user_framebuffer_create - (struct drm_device *dev, struct drm_file *filp, - struct drm_mode_fb_cmd *r) -{ - struct psb_framebuffer *psbfb; - struct drm_framebuffer *fb; - struct fb_info *info; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; - IMG_HANDLE hKernelMemInfo = (IMG_HANDLE)r->handle; - struct drm_psb_private *dev_priv - = (struct drm_psb_private *) dev->dev_private; - struct psb_fbdev * fbdev = dev_priv->fbdev; - struct psb_gtt *pg = dev_priv->pg; - struct MRSTLFB_BUFFER_TAG *buffer; - int ret; - uint32_t offset; - uint64_t size; - - ret = psb_get_meminfo_by_handle(hKernelMemInfo, &psKernelMemInfo); - if (ret) { - DRM_ERROR("Cannot get meminfo for handle 0x%x\n", - (IMG_UINT32)hKernelMemInfo); - - return NULL; - } - - DRM_DEBUG("Got Kernel MemInfo for handle %x\n", - (IMG_UINT32)hKernelMemInfo); - - /* JB: TODO not drop, make smarter */ - size = psKernelMemInfo->uAllocSize; - if (size < r->height * r->pitch) - return NULL; - - /* JB: TODO not drop, refcount buffer */ - /* return psb_framebuffer_create(dev, r, bo); */ - - fb = psb_framebuffer_create(dev, r, (void *)psKernelMemInfo); - if (!fb) { - DRM_ERROR("failed to allocate fb.\n"); - return NULL; - } - - psbfb = to_psb_fb(fb); - psbfb->size = size; - psbfb->hKernelMemInfo = hKernelMemInfo; - - DRM_DEBUG("Mapping to gtt..., KernelMemInfo %p\n", psKernelMemInfo); - - buffer = (struct MRSTLFB_BUFFER_TAG *)dev_priv->fb_reloc; - /*if not VRAM, map it into tt aperture*/ - if (psKernelMemInfo->pvLinAddrKM != pg->vram_addr && - (!buffer || psKernelMemInfo->pvLinAddrKM != MRSTLFBGetCPUVAddr(buffer))) { - ret = psb_gtt_map_meminfo(dev, hKernelMemInfo, &offset); - if (ret) { - DRM_ERROR("map meminfo for 0x%x failed\n", - (IMG_UINT32)hKernelMemInfo); - return NULL; - } - psbfb->offset = (offset << PAGE_SHIFT); - } else { - if (buffer) - psbfb->offset = MRSTLFBGetDevVAddr(buffer); - else - psbfb->offset = 0; - } - info = framebuffer_alloc(0, &dev->pdev->dev); - if (!info) - return NULL; - - strcpy(info->fix.id, "psbfb"); - - info->flags = FBINFO_DEFAULT; - info->fbops = &psbfb_ops; - - info->fix.smem_start = dev->mode_config.fb_base; - info->fix.smem_len = size; - - info->screen_base = psKernelMemInfo->pvLinAddrKM; - info->screen_size = size; - - drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); - drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, fb->width, fb->height); - - info->fix.mmio_start = pci_resource_start(dev->pdev, 0); - info->fix.mmio_len = pci_resource_len(dev->pdev, 0); - - info->pixmap.size = 64 * 1024; - info->pixmap.buf_align = 8; - info->pixmap.access_align = 32; - info->pixmap.flags = FB_PIXMAP_SYSTEM; - info->pixmap.scan_align = 1; - - info->par = fbdev; - psbfb->fbdev = info; - fbdev->pfb = psbfb; - - fbdev->psb_fb_helper.fb = fb; - fbdev->psb_fb_helper.fbdev = info; - MRSTLFBHandleChangeFB(dev, psbfb); - - return fb; -} - -static int psbfb_create(struct psb_fbdev * fbdev, struct drm_fb_helper_surface_size * sizes) -{ - struct drm_device * dev = fbdev->psb_fb_helper.dev; - struct drm_psb_private * dev_priv = (struct drm_psb_private *)dev->dev_private; - struct psb_gtt *pg = dev_priv->pg; - struct fb_info * info; - struct drm_framebuffer *fb; - struct psb_framebuffer * psbfb; - struct drm_mode_fb_cmd mode_cmd; - struct device * device = &dev->pdev->dev; - struct MRSTLFB_BUFFER_TAG *buffer = NULL; - int size, aligned_size; - int ret, stride; - - mode_cmd.width = sizes->surface_width; - mode_cmd.height = sizes->surface_height; - - DRM_DEBUG("psbfb_create called with w = %d h = %d\n", sizes->surface_width, sizes->surface_height); - - mode_cmd.bpp = 32; - //HW requires pitch to be 64 byte aligned - /* - * The framebuffer is used by PVR driver. And it expects that the - * stride is aligned to 32 in pixels. So we will first align the width to - * 32. As currently it uses the 32bpp in framebuffer, it can assure that - * it is aligned to 64 bytes. - */ - stride = ALIGN(mode_cmd.width, 32); - mode_cmd.pitch = ALIGN(stride * ((mode_cmd.bpp + 1) / 8), 64); - mode_cmd.depth = 24; - - size = mode_cmd.pitch * mode_cmd.height; - aligned_size = ALIGN(size, PAGE_SIZE); - - mutex_lock(&dev->struct_mutex); - - if (aligned_size > pg->stolen_size) { - /* - * allocate new buffer if the request size is larger than - * the stolen memory size - */ - ret = MRSTLFBAllocBuffer(dev, aligned_size, &buffer); - if (ret) { - ret = -ENOMEM; - goto out_err0; - } - dev_priv->fb_reloc = buffer; - } - - fb = psb_framebuffer_create(dev, &mode_cmd, NULL); - if (!fb) { - ret = -ENOMEM; - goto out_err1; - } - - psbfb = to_psb_fb(fb); - psbfb->size = size; - if (buffer) - psbfb->offset = MRSTLFBGetDevVAddr(buffer); - - info = framebuffer_alloc(sizeof(struct psb_fbdev), device); - if(!info) { - ret = -ENOMEM; - goto out_err2; - } - - info->par = fbdev; - psbfb->fbdev = info; - - fbdev->psb_fb_helper.fb = fb; - fbdev->psb_fb_helper.fbdev = info; - fbdev->pfb = psbfb; - - strcpy(info->fix.id, "psbfb"); - - info->flags = FBINFO_DEFAULT; - info->fbops = &psbfb_ops; - info->fix.smem_start = dev->mode_config.fb_base; - info->fix.smem_len = size; - - if (buffer) - info->screen_base = MRSTLFBGetCPUVAddr(buffer); - else - info->screen_base = (char *)pg->vram_addr; - - info->screen_size = size; - - memset(info->screen_base, 0, size); - - drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); - drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, sizes->fb_width, sizes->fb_height); - - info->fix.mmio_start = pci_resource_start(dev->pdev, 0); - info->fix.mmio_len = pci_resource_len(dev->pdev, 0); - - info->pixmap.size = 64 * 1024; - info->pixmap.buf_align = 8; - info->pixmap.access_align = 32; - info->pixmap.flags = FB_PIXMAP_SYSTEM; - info->pixmap.scan_align = 1; - - DRM_DEBUG("fb depth is %d\n", fb->depth); - DRM_DEBUG(" pitch is %d\n", fb->pitch); - DRM_DEBUG("allocated %dx%d fb\n", psbfb->base.width, psbfb->base.height); - - mutex_unlock(&dev->struct_mutex); - - return 0; -out_err2: - fb->funcs->destroy(fb); -out_err1: - MRSTLFBFreeBuffer(dev, &buffer); -out_err0: - mutex_unlock(&dev->struct_mutex); - return ret; -} - -static void psbfb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, u16 blue, int regno) -{ - DRM_DEBUG("%s\n", __FUNCTION__); -} - -static void psbfb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue, int regno) -{ - DRM_DEBUG("%s\n", __FUNCTION__); -} - -static int psbfb_probe(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes) -{ - struct psb_fbdev * psb_fbdev = (struct psb_fbdev *)helper; - int new_fb = 0; - int ret; - - DRM_DEBUG("%s\n", __FUNCTION__); - - if(!helper->fb) { - ret = psbfb_create(psb_fbdev, sizes); - if(ret) { - return ret; - } - - new_fb = 1; - } - - return new_fb; -} - -struct drm_fb_helper_funcs psb_fb_helper_funcs = { - .gamma_set = psbfb_gamma_set, - .gamma_get = psbfb_gamma_get, - .fb_probe = psbfb_probe, -}; - -int psb_fbdev_destroy(struct drm_device * dev, struct psb_fbdev * fbdev) -{ - struct fb_info * info; - struct psb_framebuffer * psbfb = fbdev->pfb; - - if(fbdev->psb_fb_helper.fbdev) { - info = fbdev->psb_fb_helper.fbdev; - unregister_framebuffer(info); - iounmap(info->screen_base); - framebuffer_release(info); - } - - drm_fb_helper_fini(&fbdev->psb_fb_helper); - - drm_framebuffer_cleanup(&psbfb->base); - - return 0; -} - -int psb_fbdev_init(struct drm_device * dev) -{ - struct psb_fbdev * fbdev; - struct drm_psb_private * dev_priv = - (struct drm_psb_private *)dev->dev_private; - int num_crtc; - - fbdev = kzalloc(sizeof(struct psb_fbdev), GFP_KERNEL); - if(!fbdev) { - DRM_ERROR("no memory\n"); - return -ENOMEM; - } - - dev_priv->fbdev = fbdev; - fbdev->psb_fb_helper.funcs = &psb_fb_helper_funcs; - - if( IS_CDV(dev) ) { - num_crtc = 2; - } - - drm_fb_helper_init(dev, &fbdev->psb_fb_helper, num_crtc, INTELFB_CONN_LIMIT); - - drm_fb_helper_single_add_all_connectors(&fbdev->psb_fb_helper); - drm_fb_helper_initial_config(&fbdev->psb_fb_helper, 32); - return 0; -} - -void psb_fbdev_fini(struct drm_device * dev) -{ - struct drm_psb_private * dev_priv = - (struct drm_psb_private *)dev->dev_private; - - if(!dev_priv->fbdev) { - return; - } - - psb_fbdev_destroy(dev, dev_priv->fbdev); - MRSTLFBFreeBuffer(dev, (struct MRSTLFB_BUFFER_TAG **)(&dev_priv->fb_reloc)); - kfree(dev_priv->fbdev); - dev_priv->fbdev = NULL; -} - -static void psbfb_output_poll_changed(struct drm_device * dev) -{ - struct drm_psb_private * dev_priv = (struct drm_psb_private *)dev->dev_private; - struct psb_fbdev * fbdev = (struct psb_fbdev *)dev_priv->fbdev; - drm_fb_helper_hotplug_event(&fbdev->psb_fb_helper); -} - -int psbfb_remove(struct drm_device *dev, struct drm_framebuffer *fb) -{ - struct fb_info *info; - struct psb_framebuffer * psbfb = to_psb_fb(fb); - - if (drm_psb_no_fb) - return 0; - - info = psbfb->fbdev; - psbfb->pvrBO = NULL; - - if (info) { - framebuffer_release(info); - } - - return 0; -} -/*EXPORT_SYMBOL(psbfb_remove); */ - -static int psb_user_framebuffer_create_handle(struct drm_framebuffer *fb, - struct drm_file *file_priv, - unsigned int *handle) -{ - /* JB: TODO currently we can't go from a bo to a handle with ttm */ - (void) file_priv; - *handle = 0; - return 0; -} - -static void psb_user_framebuffer_destroy(struct drm_framebuffer *fb) -{ - struct drm_device *dev = fb->dev; - struct psb_framebuffer *psbfb = to_psb_fb(fb); - - /*ummap gtt pages*/ - if (psbfb->hKernelMemInfo) - psb_gtt_unmap_meminfo(dev, psbfb->hKernelMemInfo); - if (psbfb->fbdev) - { - psbfb_remove(dev, fb); - } - - /* JB: TODO not drop, refcount buffer */ - drm_framebuffer_cleanup(fb); - - kfree(fb); -} - -static const struct drm_mode_config_funcs psb_mode_funcs = { - .fb_create = psb_user_framebuffer_create, - .output_poll_changed = psbfb_output_poll_changed, -}; - -static void cdv_disable_vga(struct drm_device *dev) -{ - u8 sr1; - u32 vga_reg; - - vga_reg = VGACNTRL; - - outb(1, VGA_SR_INDEX); - sr1 = inb(VGA_SR_DATA); - outb(sr1 | 1<<5, VGA_SR_DATA); - udelay(300); - - REG_WRITE(vga_reg, VGA_DISP_DISABLE); - REG_READ(vga_reg); -} - -static void psb_setup_outputs(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - struct drm_connector *connector; - - PSB_DEBUG_ENTRY("\n"); - - drm_mode_create_scaling_mode_property(dev); - - /* It is always called on CDV. Delete the judement of if-condition */ - { - /* disable the VGA plane explicitly on CDV*/ - cdv_disable_vga(dev); - - /* Setting CRT for CDV connector */ - psb_intel_crt_init(dev, &dev_priv->mode_dev); - - /* Set up integrated LVDS */ - psb_intel_lvds_init(dev, &dev_priv->mode_dev); - - if (REG_READ(SDVOB) & SDVO_DETECTED) { - //found = psb_intel_sdvo_init(dev, SDVOB); - //if (!found) - mdfld_hdmi_init(dev, &dev_priv->mode_dev, SDVOB); - } - - if (REG_READ(SDVOC) & SDVO_DETECTED) { - //found = psb_intel_sdvo_init(dev, SDVOC); - //if (!found) - mdfld_hdmi_init(dev, &dev_priv->mode_dev, SDVOC); - } - - } - - list_for_each_entry(connector, &dev->mode_config.connector_list, - head) { - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - struct drm_encoder *encoder = &psb_intel_output->enc; - int crtc_mask = 0, clone_mask = 0; - - /* valid crtcs */ - switch (psb_intel_output->type) { - case INTEL_OUTPUT_ANALOG: - crtc_mask = (1 << 0); - clone_mask = (1 << INTEL_OUTPUT_ANALOG); - break; - case INTEL_OUTPUT_SDVO: - crtc_mask = ((1 << 0) | (1 << 1)); - clone_mask = (1 << INTEL_OUTPUT_SDVO); - break; - case INTEL_OUTPUT_LVDS: - crtc_mask = (1 << 1); - clone_mask = (1 << INTEL_OUTPUT_LVDS); - break; - case INTEL_OUTPUT_HDMI: - clone_mask = (1 << INTEL_OUTPUT_HDMI); - crtc_mask = (1 << 0); - break; - } - - encoder->possible_crtcs = crtc_mask; - encoder->possible_clones = - psb_intel_connector_clones(dev, clone_mask); - - } -} - -static void *psb_bo_from_handle(struct drm_device *dev, - struct drm_file *file_priv, - unsigned int handle) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; - IMG_HANDLE hKernelMemInfo = (IMG_HANDLE)handle; - int ret; - - ret = psb_get_meminfo_by_handle(hKernelMemInfo, &psKernelMemInfo); - if (ret) { - DRM_ERROR("Cannot get meminfo for handle 0x%x\n", - (IMG_UINT32)hKernelMemInfo); - return NULL; - } - - return (void *)psKernelMemInfo; -} - -static size_t psb_bo_size(struct drm_device *dev, void *bof) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = (PVRSRV_KERNEL_MEM_INFO *)bof; - return (size_t)psKernelMemInfo->uAllocSize; -} - -static size_t psb_bo_offset(struct drm_device *dev, void *bof) -{ - struct psb_framebuffer *psbfb - = (struct psb_framebuffer *)bof; - - return (size_t)psbfb->offset; -} - -static int psb_bo_pin_for_scanout(struct drm_device *dev, void *bo) -{ - return 0; -} - -static int psb_bo_unpin_for_scanout(struct drm_device *dev, void *bo) -{ - return 0; -} - -void psb_modeset_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; - int i; - - PSB_DEBUG_ENTRY("\n"); - /* Init mm functions */ - mode_dev->bo_from_handle = psb_bo_from_handle; - mode_dev->bo_size = psb_bo_size; - mode_dev->bo_offset = psb_bo_offset; - mode_dev->bo_pin_for_scanout = psb_bo_pin_for_scanout; - mode_dev->bo_unpin_for_scanout = psb_bo_unpin_for_scanout; - - drm_mode_config_init(dev); - - dev->mode_config.min_width = 0; - dev->mode_config.min_height = 0; - - dev->mode_config.funcs = (void *) &psb_mode_funcs; - - /* set memory base */ - /* MRST and PSB should use BAR 2*/ - pci_read_config_dword(dev->pdev, PSB_BSM, (uint32_t *) &(dev->mode_config.fb_base)); - - for (i = 0; i < dev_priv->num_pipe; i++) - psb_intel_crtc_init(dev, i, mode_dev); - - dev->mode_config.max_width = 8192; - dev->mode_config.max_height = 8192; - - psb_setup_outputs(dev); - - if (!dev_priv->ovl_buf) { - struct MRSTLFB_BUFFER_TAG *ovl_buffer = NULL; - if (MRSTLFBAllocBuffer(dev, 64 * 1024, &ovl_buffer)) { - printk(KERN_ERR "Can't allocate GTT memory for overlay\n"); - dev_priv->ovl_offset = 0; - } else { - dev_priv->ovl_buf = ovl_buffer; - memset(MRSTLFBGetCPUVAddr(ovl_buffer), 0, 64 * 1024); - dev_priv->ovl_offset = MRSTLFBGetDevVAddr(ovl_buffer); - printk(KERN_INFO "Overlay GTT address is %x\n", dev_priv->ovl_offset); - } - } - /* set memory base */ - - /* setup fbs */ - /* drm_initial_config(dev); */ -} - -void psb_modeset_cleanup(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - - mutex_lock(&dev->struct_mutex); - - drm_kms_helper_poll_fini(dev); - psb_fbdev_fini(dev); - - if (dev_priv->ovl_buf) { - struct MRSTLFB_BUFFER_TAG *ovl_buffer = dev_priv->ovl_buf; - MRSTLFBFreeBuffer(dev, &ovl_buffer); - dev_priv->ovl_buf = NULL; - } - - drm_mode_config_cleanup(dev); - - mutex_unlock(&dev->struct_mutex); -} diff --git a/drivers/staging/cdv/drv/psb_fb.h b/drivers/staging/cdv/drv/psb_fb.h deleted file mode 100644 index 8679353..0000000 --- a/drivers/staging/cdv/drv/psb_fb.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef _PSB_FB_H_ -#define _PSB_FB_H_ - -#include -#include - -#include - -#include "psb_drv.h" - -/*IMG Headers*/ -#include "servicesint.h" - -struct psb_framebuffer { - struct drm_framebuffer base; - struct address_space *addr_space; - struct ttm_buffer_object *bo; - struct fb_info * fbdev; - /* struct ttm_bo_kmap_obj kmap; */ - PVRSRV_KERNEL_MEM_INFO *pvrBO; - IMG_HANDLE hKernelMemInfo; - uint32_t size; - uint32_t offset; -}; - -struct psb_fbdev { - struct drm_fb_helper psb_fb_helper; - struct psb_framebuffer * pfb; -}; - -#define to_psb_fb(x) container_of(x, struct psb_framebuffer, base) - - -extern int psb_intel_connector_clones(struct drm_device *dev, int type_mask); - - -#endif - diff --git a/drivers/staging/cdv/drv/psb_gtt.c b/drivers/staging/cdv/drv/psb_gtt.c deleted file mode 100644 index 8e51385..0000000 --- a/drivers/staging/cdv/drv/psb_gtt.c +++ /dev/null @@ -1,1045 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: Thomas Hellstrom - */ - -#include -#include "psb_drv.h" -#include "psb_pvr_glue.h" - -static inline uint32_t psb_gtt_mask_pte(uint32_t pfn, int type) -{ - uint32_t mask = PSB_PTE_VALID; - - if (type & PSB_MMU_CACHED_MEMORY) - mask |= PSB_PTE_CACHED; - if (type & PSB_MMU_RO_MEMORY) - mask |= PSB_PTE_RO; - if (type & PSB_MMU_WO_MEMORY) - mask |= PSB_PTE_WO; - - return (pfn << PAGE_SHIFT) | mask; -} - -struct psb_gtt *psb_gtt_alloc(struct drm_device *dev) -{ - struct psb_gtt *tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); - - if (!tmp) - return NULL; - - init_rwsem(&tmp->sem); - tmp->dev = dev; - - return tmp; -} - -void psb_gtt_takedown(struct psb_gtt *pg, int free) -{ - struct drm_psb_private *dev_priv = pg->dev->dev_private; - - if (!pg) - return; - - if (pg->gtt_map) { - iounmap(pg->gtt_map); - pg->gtt_map = NULL; - } - if (pg->initialized) { - pci_write_config_word(pg->dev->pdev, PSB_GMCH_CTRL, - pg->gmch_ctrl); - PSB_WVDC32(pg->pge_ctl, PSB_PGETBL_CTL); - (void) PSB_RVDC32(PSB_PGETBL_CTL); - } - if (free) - kfree(pg); -} - -int psb_gtt_init(struct psb_gtt *pg, int resume) -{ - struct drm_device *dev = pg->dev; - struct drm_psb_private *dev_priv = dev->dev_private; - unsigned gtt_pages; - unsigned long stolen_size, vram_stolen_size, ci_stolen_size; - unsigned long rar_stolen_size; - unsigned i, num_pages; - unsigned pfn_base; - uint32_t ci_pages; - uint32_t tt_pages; - uint32_t *ttm_gtt_map; - uint32_t dvmt_mode = 0; - int ret = 0; - uint32_t pte; - - pci_read_config_word(dev->pdev, PSB_GMCH_CTRL, &pg->gmch_ctrl); - pci_write_config_word(dev->pdev, PSB_GMCH_CTRL, - pg->gmch_ctrl | _PSB_GMCH_ENABLED); - - pg->pge_ctl = PSB_RVDC32(PSB_PGETBL_CTL); - PSB_WVDC32(pg->pge_ctl | _PSB_PGETBL_ENABLED, PSB_PGETBL_CTL); - (void) PSB_RVDC32(PSB_PGETBL_CTL); - - pg->initialized = 1; - - pg->gtt_phys_start = pg->pge_ctl; // & PAGE_MASK; - DRM_DEBUG("pg->gtt_phys_start = %x\n", pg->gtt_phys_start); - - pg->gatt_start = 0x40000000; //pci_resource_start(dev->pdev, PSB_GATT_RESOURCE); - DRM_DEBUG("pg->gatt_start = %x\n", pg->gatt_start); - /* fix me: video mmu has hw bug to access 0x0D0000000, - * then make gatt start at 0x0e000,0000 */ - pg->mmu_gatt_start = PSB_MEM_TT_START; - pg->gtt_start = pg->pge_ctl; - DRM_DEBUG("pg->gtt_start %x\n", pg->gtt_start); -// gtt_pages = -// pci_resource_len(dev->pdev, PSB_GTT_RESOURCE) >> PAGE_SHIFT; -// pg->gatt_pages = pci_resource_len(dev->pdev, PSB_GATT_RESOURCE) -// >> PAGE_SHIFT; - - gtt_pages = (256) / 4; - pg->gatt_pages = 256 * 1024 * 1024 >> PAGE_SHIFT; - - DRM_DEBUG("gtt_pages = %x\n", gtt_pages); - - pci_read_config_dword(dev->pdev, PSB_BSM, &pg->stolen_base); - vram_stolen_size = pg->gtt_phys_start - pg->stolen_base - PAGE_SIZE; - - /* CI is not included in the stolen size since the TOPAZ MMU bug */ - ci_stolen_size = dev_priv->ci_region_size; - /* Don't add CI & RAR share buffer space - * managed by TTM to stolen_size */ - stolen_size = vram_stolen_size; - - rar_stolen_size = dev_priv->rar_region_size; - - dvmt_mode = (pg->gmch_ctrl >> 4) & 0x7; - - DRM_DEBUG("GMMADR(region 0) start: 0x%08x (%dM).\n", - pg->gatt_start, pg->gatt_pages/256); - DRM_DEBUG("GTTADR(region 3) start: 0x%08x (can map %dM RAM), and actual RAM base 0x%08x.\n", - pg->gtt_start, gtt_pages * 4, pg->gtt_phys_start); - DRM_DEBUG("Stole memory information \n"); - DRM_DEBUG(" base in RAM: 0x%x \n", pg->stolen_base); - DRM_DEBUG(" size: %luK, calculated by (GTT RAM base) - (Stolen base), seems wrong\n", - vram_stolen_size/1024); - DRM_DEBUG(" the correct size should be: %dM(dvmt mode=%d) \n", - (dvmt_mode == 1) ? 1 : (2 << (dvmt_mode - 1)), dvmt_mode); - - if (ci_stolen_size > 0) - DRM_DEBUG("CI Stole memory: RAM base = 0x%08x, size = %lu M \n", - dev_priv->ci_region_start, - ci_stolen_size / 1024 / 1024); - if (rar_stolen_size > 0) - DRM_DEBUG("RAR Stole memory: RAM base = 0x%08x, size = %lu M \n", - dev_priv->rar_region_start, - rar_stolen_size / 1024 / 1024); - - if (resume && (gtt_pages != pg->gtt_pages) && - (stolen_size != pg->stolen_size)) { - DRM_ERROR("GTT resume error.\n"); - ret = -EINVAL; - goto out_err; - } - - pg->gtt_pages = gtt_pages; - pg->stolen_size = stolen_size; - pg->vram_stolen_size = vram_stolen_size; - pg->ci_stolen_size = ci_stolen_size; - pg->rar_stolen_size = rar_stolen_size; - pg->gtt_map = ioremap_nocache(pg->gtt_phys_start, gtt_pages << PAGE_SHIFT); - if (!pg->gtt_map) { - DRM_ERROR("Failure to map gtt.\n"); - ret = -ENOMEM; - goto out_err; - } - - pg->vram_addr = ioremap_wc(pg->stolen_base, stolen_size); - if (!pg->vram_addr) { - DRM_ERROR("Failure to map stolen base.\n"); - ret = -ENOMEM; - goto out_err; - } - - DRM_DEBUG("%s: vram kernel virtual address %p\n", __func__, pg->vram_addr); - - tt_pages = (pg->gatt_pages < PSB_TT_PRIV0_PLIMIT) ? - (pg->gatt_pages) : PSB_TT_PRIV0_PLIMIT; - - ttm_gtt_map = pg->gtt_map + tt_pages / 2; - - /* - * insert vram stolen pages. - */ - - pfn_base = pg->stolen_base >> PAGE_SHIFT; - num_pages = vram_stolen_size >> PAGE_SHIFT; - DRM_DEBUG("Set up %d stolen pages starting at 0x%08x, GTT offset %dK\n", - num_pages, pfn_base, 0); - for (i = 0; i < num_pages; ++i) { - pte = psb_gtt_mask_pte(pfn_base + i, 0); - iowrite32(pte, pg->gtt_map + i); - } - - /* - * Init rest of gtt managed by IMG. - */ - pfn_base = page_to_pfn(dev_priv->scratch_page); - pte = psb_gtt_mask_pte(pfn_base, 0); - for (; i < tt_pages / 2 - 1; ++i) - iowrite32(pte, pg->gtt_map + i); - - /* - * insert CI stolen pages - */ - - pfn_base = dev_priv->ci_region_start >> PAGE_SHIFT; - ci_pages = num_pages = ci_stolen_size >> PAGE_SHIFT; - DRM_DEBUG("Set up %d CI stolen pages starting at 0x%08x, GTT offset %dK\n", - num_pages, pfn_base, (ttm_gtt_map - pg->gtt_map) * 4); - for (i = 0; i < num_pages; ++i) { - pte = psb_gtt_mask_pte(pfn_base + i, 0); - iowrite32(pte, ttm_gtt_map + i); - } - - /* - * insert RAR stolen pages - */ - if (rar_stolen_size != 0) { - pfn_base = dev_priv->rar_region_start >> PAGE_SHIFT; - num_pages = rar_stolen_size >> PAGE_SHIFT; - DRM_DEBUG("Set up %d RAR stolen pages starting at 0x%08x, GTT offset %dK\n", - num_pages, pfn_base, - (ttm_gtt_map - pg->gtt_map + i) * 4); - for (; i < num_pages + ci_pages; ++i) { - pte = psb_gtt_mask_pte(pfn_base + i - ci_pages, 0); - iowrite32(pte, ttm_gtt_map + i); - } - } - /* - * Init rest of gtt managed by TTM. - */ - - pfn_base = page_to_pfn(dev_priv->scratch_page); - pte = psb_gtt_mask_pte(pfn_base, 0); - PSB_DEBUG_INIT("Initializing the rest of a total " - "of %u gtt pages.\n", pg->gatt_pages); - - for (; i < pg->gatt_pages - tt_pages / 2; ++i) - iowrite32(pte, ttm_gtt_map + i); - (void) ioread32(pg->gtt_map + i - 1); - - return 0; - -out_err: - psb_gtt_takedown(pg, 0); - return ret; -} - -int psb_gtt_insert_pages(struct psb_gtt *pg, struct page **pages, - unsigned offset_pages, unsigned num_pages, - unsigned desired_tile_stride, - unsigned hw_tile_stride, int type) -{ - unsigned rows = 1; - unsigned add; - unsigned i; - unsigned j; - uint32_t *cur_page = NULL; - uint32_t pte; - - if (hw_tile_stride) - rows = num_pages / desired_tile_stride; - else - desired_tile_stride = num_pages; - - add = desired_tile_stride; - - down_read(&pg->sem); - for (i = 0; i < rows; ++i) { - cur_page = pg->gtt_map + offset_pages; - for (j = 0; j < desired_tile_stride; ++j) { - pte = - psb_gtt_mask_pte(page_to_pfn(*pages++), type); - iowrite32(pte, cur_page++); - } - offset_pages += add; - } - (void) ioread32(cur_page - 1); - up_read(&pg->sem); - - return 0; -} - -int psb_gtt_insert_phys_addresses(struct psb_gtt *pg, IMG_CPU_PHYADDR *pPhysFrames, - unsigned offset_pages, unsigned num_pages, int type) -{ - unsigned j; - uint32_t *cur_page = NULL; - uint32_t pte; - - //printk("Allocatng IMG GTT mem at %x (pages %d)\n",offset_pages,num_pages); - down_read(&pg->sem); - - cur_page = pg->gtt_map + offset_pages; - for (j = 0; j < num_pages; ++j) - { - pte = psb_gtt_mask_pte( (pPhysFrames++)->uiAddr >> PAGE_SHIFT, type); - iowrite32(pte, cur_page++); - //printk("PTE %d: %x/%x\n",j,(pPhysFrames-1)->uiAddr,pte); - } - (void) ioread32(cur_page - 1); - - up_read(&pg->sem); - - return 0; -} - -int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages, - unsigned num_pages, unsigned desired_tile_stride, - unsigned hw_tile_stride, int rc_prot) -{ - struct drm_psb_private *dev_priv = pg->dev->dev_private; - unsigned rows = 1; - unsigned add; - unsigned i; - unsigned j; - uint32_t *cur_page = NULL; - unsigned pfn_base = page_to_pfn(dev_priv->scratch_page); - uint32_t pte = psb_gtt_mask_pte(pfn_base, 0); - - if (hw_tile_stride) - rows = num_pages / desired_tile_stride; - else - desired_tile_stride = num_pages; - - add = desired_tile_stride; - - if (rc_prot) - down_read(&pg->sem); - for (i = 0; i < rows; ++i) { - cur_page = pg->gtt_map + offset_pages; - for (j = 0; j < desired_tile_stride; ++j) - iowrite32(pte, cur_page++); - - offset_pages += add; - } - (void) ioread32(cur_page - 1); - if (rc_prot) - up_read(&pg->sem); - - return 0; -} - -int psb_gtt_mm_init(struct psb_gtt *pg) -{ - struct psb_gtt_mm *gtt_mm; - struct drm_psb_private *dev_priv = pg->dev->dev_private; - struct drm_open_hash *ht; - struct drm_mm *mm; - int ret; - uint32_t tt_start; - uint32_t tt_size; - - if (!pg || !pg->initialized) { - DRM_DEBUG("Invalid gtt struct\n"); - return -EINVAL; - } - - gtt_mm = kzalloc(sizeof(struct psb_gtt_mm), GFP_KERNEL); - if (!gtt_mm) - return -ENOMEM; - - spin_lock_init(>t_mm->lock); - - ht = >t_mm->hash; - ret = drm_ht_create(ht, 20); - if (ret) { - DRM_DEBUG("Create hash table failed(%d)\n", ret); - goto err_free; - } - - tt_start = (pg->stolen_size + PAGE_SIZE - 1) >> PAGE_SHIFT; - /* align to 256K bytes. This is to pre-allocated overlay buffer,which is - * aligned to 64K bytes */ - tt_start = ALIGN(tt_start, 64); - tt_start = (tt_start < pg->gatt_pages) ? tt_start : pg->gatt_pages; - tt_size = (pg->gatt_pages < PSB_TT_PRIV0_PLIMIT) ? - (pg->gatt_pages) : PSB_TT_PRIV0_PLIMIT; - mm = >t_mm->base; - - /*will use tt_start ~ 128M for IMG TT buffers*/ - ret = drm_mm_init(mm, tt_start, ((tt_size / 2) - tt_start)); - if (ret) { - DRM_DEBUG("drm_mm_int error(%d)\n", ret); - goto err_mm_init; - } - - gtt_mm->count = 0; - - dev_priv->gtt_mm = gtt_mm; - - DRM_DEBUG("PSB GTT mem manager ready, tt_start %ld, tt_size %ld pages\n", - (unsigned long)tt_start, - (unsigned long)((tt_size / 2) - tt_start)); - return 0; -err_mm_init: - drm_ht_remove(ht); - -err_free: - kfree(gtt_mm); - return ret; -} - -/** - * Delete all hash entries; - */ -void psb_gtt_mm_takedown(void) -{ - return; -} - -static int psb_gtt_mm_get_ht_by_pid_locked(struct psb_gtt_mm *mm, - u32 tgid, - struct psb_gtt_hash_entry **hentry) -{ - struct drm_hash_item *entry; - struct psb_gtt_hash_entry *psb_entry; - int ret; - - ret = drm_ht_find_item(&mm->hash, tgid, &entry); - if (ret) { - DRM_DEBUG("Cannot find entry pid=%u\n", tgid); - return ret; - } - - psb_entry = container_of(entry, struct psb_gtt_hash_entry, item); - if (!psb_entry) { - DRM_DEBUG("Invalid entry"); - return -EINVAL; - } - - *hentry = psb_entry; - return 0; -} - - -static int psb_gtt_mm_insert_ht_locked(struct psb_gtt_mm *mm, - u32 tgid, - struct psb_gtt_hash_entry *hentry) -{ - struct drm_hash_item *item; - int ret; - - if (!hentry) { - DRM_DEBUG("Invalid parameters\n"); - return -EINVAL; - } - - item = &hentry->item; - item->key = tgid; - - /** - * NOTE: drm_ht_insert_item will perform such a check - ret = psb_gtt_mm_get_ht_by_pid(mm, tgid, &tmp); - if (!ret) { - DRM_DEBUG("Entry already exists for pid %ld\n", tgid); - return -EAGAIN; - } - */ - - /*Insert the given entry*/ - ret = drm_ht_insert_item(&mm->hash, item); - if (ret) { - DRM_DEBUG("Insert failure\n"); - return ret; - } - - mm->count++; - - return 0; -} - -static int psb_gtt_mm_alloc_insert_ht(struct psb_gtt_mm *mm, - u32 tgid, - struct psb_gtt_hash_entry **entry) -{ - struct psb_gtt_hash_entry *hentry; - int ret; - - /*if the hentry for this tgid exists, just get it and return*/ - spin_lock(&mm->lock); - ret = psb_gtt_mm_get_ht_by_pid_locked(mm, tgid, &hentry); - if (!ret) { - DRM_DEBUG("Entry for tgid %u exist, hentry %p\n", - tgid, hentry); - *entry = hentry; - spin_unlock(&mm->lock); - return 0; - } - spin_unlock(&mm->lock); - - DRM_DEBUG("Entry for tgid %u doesn't exist, will create it\n", tgid); - - hentry = kzalloc(sizeof(struct psb_gtt_hash_entry), GFP_KERNEL); - if (!hentry) { - DRM_DEBUG("Kmalloc failled\n"); - return -ENOMEM; - } - - ret = drm_ht_create(&hentry->ht, 20); - if (ret) { - DRM_DEBUG("Create hash table failed\n"); - return ret; - } - - spin_lock(&mm->lock); - ret = psb_gtt_mm_insert_ht_locked(mm, tgid, hentry); - spin_unlock(&mm->lock); - - if (!ret) - *entry = hentry; - - return ret; -} - -static struct psb_gtt_hash_entry * -psb_gtt_mm_remove_ht_locked(struct psb_gtt_mm *mm, u32 tgid) -{ - struct psb_gtt_hash_entry *tmp; - int ret; - - ret = psb_gtt_mm_get_ht_by_pid_locked(mm, tgid, &tmp); - if (ret) { - DRM_DEBUG("Cannot find entry pid %u\n", tgid); - return NULL; - } - - /*remove it from ht*/ - drm_ht_remove_item(&mm->hash, &tmp->item); - - mm->count--; - - return tmp; -} - -static int psb_gtt_mm_remove_free_ht_locked(struct psb_gtt_mm *mm, u32 tgid) -{ - struct psb_gtt_hash_entry *entry; - - entry = psb_gtt_mm_remove_ht_locked(mm, tgid); - - if (!entry) { - DRM_DEBUG("Invalid entry"); - return -EINVAL; - } - - /*delete ht*/ - drm_ht_remove(&entry->ht); - - /*free this entry*/ - kfree(entry); - return 0; -} - -static int -psb_gtt_mm_get_mem_mapping_locked(struct drm_open_hash *ht, - u32 key, - struct psb_gtt_mem_mapping **hentry) -{ - struct drm_hash_item *entry; - struct psb_gtt_mem_mapping *mapping; - int ret; - - ret = drm_ht_find_item(ht, key, &entry); - if (ret) { - DRM_DEBUG("Cannot find key %u\n", key); - return ret; - } - - mapping = container_of(entry, struct psb_gtt_mem_mapping, item); - if (!mapping) { - DRM_DEBUG("Invalid entry\n"); - return -EINVAL; - } - - *hentry = mapping; - return 0; -} - -static int -psb_gtt_mm_insert_mem_mapping_locked(struct drm_open_hash *ht, - u32 key, - struct psb_gtt_mem_mapping *hentry) -{ - struct drm_hash_item *item; - struct psb_gtt_hash_entry *entry; - int ret; - - if (!hentry) { - DRM_DEBUG("hentry is NULL\n"); - return -EINVAL; - } - - item = &hentry->item; - item->key = key; - - ret = drm_ht_insert_item(ht, item); - if (ret) { - DRM_DEBUG("insert_item failed\n"); - return ret; - } - - entry = container_of(ht, struct psb_gtt_hash_entry, ht); - if (entry) - entry->count++; - - return 0; -} - -static int -psb_gtt_mm_alloc_insert_mem_mapping(struct psb_gtt_mm *mm, - struct drm_open_hash *ht, - u32 key, - struct drm_mm_node *node, - struct psb_gtt_mem_mapping **entry) -{ - struct psb_gtt_mem_mapping *mapping; - int ret; - - if (!node || !ht) { - DRM_DEBUG("parameter error\n"); - return -EINVAL; - } - - /*try to get this mem_map */ - spin_lock(&mm->lock); - ret = psb_gtt_mm_get_mem_mapping_locked(ht, key, &mapping); - if (!ret) { - DRM_DEBUG("mapping entry for key %u exists, entry %p\n", - key, mapping); - *entry = mapping; - spin_unlock(&mm->lock); - return 0; - } - spin_unlock(&mm->lock); - - DRM_DEBUG("Mapping entry for key %u doesn't exist, will create it\n", key); - - mapping = kzalloc(sizeof(struct psb_gtt_mem_mapping), GFP_KERNEL); - if (!mapping) { - DRM_DEBUG("kmalloc failed\n"); - return -ENOMEM; - } - - mapping->node = node; - - spin_lock(&mm->lock); - ret = psb_gtt_mm_insert_mem_mapping_locked(ht, key, mapping); - spin_unlock(&mm->lock); - - if (!ret) - *entry = mapping; - - return ret; -} - -static struct psb_gtt_mem_mapping * -psb_gtt_mm_remove_mem_mapping_locked(struct drm_open_hash *ht, u32 key) -{ - struct psb_gtt_mem_mapping *tmp; - struct psb_gtt_hash_entry *entry; - int ret; - - ret = psb_gtt_mm_get_mem_mapping_locked(ht, key, &tmp); - if (ret) { - DRM_DEBUG("Cannot find key %u\n", key); - return NULL; - } - - drm_ht_remove_item(ht, &tmp->item); - - entry = container_of(ht, struct psb_gtt_hash_entry, ht); - if (entry) - entry->count--; - - return tmp; -} - -static int psb_gtt_mm_remove_free_mem_mapping_locked(struct drm_open_hash *ht, - u32 key, - struct drm_mm_node **node) -{ - struct psb_gtt_mem_mapping *entry; - - entry = psb_gtt_mm_remove_mem_mapping_locked(ht, key); - if (!entry) { - DRM_DEBUG("entry is NULL\n"); - return -EINVAL; - } - - *node = entry->node; - - kfree(entry); - return 0; -} - -static int psb_gtt_add_node(struct psb_gtt_mm *mm, - u32 tgid, - u32 key, - struct drm_mm_node *node, - struct psb_gtt_mem_mapping **entry) -{ - struct psb_gtt_hash_entry *hentry; - struct psb_gtt_mem_mapping *mapping; - int ret; - - ret = psb_gtt_mm_alloc_insert_ht(mm, tgid, &hentry); - if (ret) { - DRM_DEBUG("alloc_insert failed\n"); - return ret; - } - - ret = psb_gtt_mm_alloc_insert_mem_mapping(mm, - &hentry->ht, - key, - node, - &mapping); - if (ret) { - DRM_DEBUG("mapping alloc_insert failed\n"); - return ret; - } - - *entry = mapping; - - return 0; -} - -static int psb_gtt_remove_node(struct psb_gtt_mm *mm, - u32 tgid, - u32 key, - struct drm_mm_node **node) -{ - struct psb_gtt_hash_entry *hentry; - struct drm_mm_node *tmp; - int ret; - - spin_lock(&mm->lock); - ret = psb_gtt_mm_get_ht_by_pid_locked(mm, tgid, &hentry); - if (ret) { - DRM_DEBUG("Cannot find entry for pid %u\n", tgid); - spin_unlock(&mm->lock); - return ret; - } - spin_unlock(&mm->lock); - - /*remove mapping entry*/ - spin_lock(&mm->lock); - ret = psb_gtt_mm_remove_free_mem_mapping_locked(&hentry->ht, - key, - &tmp); - if (ret) { - DRM_DEBUG("remove_free failed\n"); - spin_unlock(&mm->lock); - return ret; - } - - *node = tmp; - - /*check the count of mapping entry*/ - if (!hentry->count) { - DRM_DEBUG("count of mapping entry is zero, tgid=%u\n", tgid); - psb_gtt_mm_remove_free_ht_locked(mm, tgid); - } - - spin_unlock(&mm->lock); - - return 0; -} - -static int psb_gtt_mm_alloc_mem(struct psb_gtt_mm *mm, - uint32_t pages, - uint32_t align, - struct drm_mm_node **node) -{ - struct drm_mm_node *tmp_node; - int ret; - - do { - ret = drm_mm_pre_get(&mm->base); - if (unlikely(ret)) { - DRM_DEBUG("drm_mm_pre_get error\n"); - return ret; - } - - spin_lock(&mm->lock); - tmp_node = drm_mm_search_free(&mm->base, pages, align, 1); - if (unlikely(!tmp_node)) { - DRM_DEBUG("No free node found\n"); - spin_unlock(&mm->lock); - break; - } - - tmp_node = drm_mm_get_block_atomic(tmp_node, pages, align); - spin_unlock(&mm->lock); - } while (!tmp_node); - - if (!tmp_node) { - DRM_DEBUG("Node allocation failed\n"); - return -ENOMEM; - } - - *node = tmp_node; - return 0; -} - -static void psb_gtt_mm_free_mem(struct psb_gtt_mm *mm, struct drm_mm_node *node) -{ - spin_lock(&mm->lock); - drm_mm_put_block(node); - spin_unlock(&mm->lock); -} - -int psb_gtt_map_meminfo(struct drm_device *dev, - IMG_HANDLE hKernelMemInfo, - uint32_t *offset) -{ - struct drm_psb_private *dev_priv - = (struct drm_psb_private *)dev->dev_private; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - struct psb_gtt_mm *mm = dev_priv->gtt_mm; - struct psb_gtt *pg = dev_priv->pg; - uint32_t size, pages, offset_pages; - void *kmem; - struct drm_mm_node *node; - struct page **page_list; - struct psb_gtt_mem_mapping *mapping = NULL; - int ret; - - ret = psb_get_meminfo_by_handle(hKernelMemInfo, &psKernelMemInfo); - if (ret) { - DRM_DEBUG("Cannot find kernelMemInfo handle 0x%x\n", - (unsigned int)hKernelMemInfo); - return -EINVAL; - } - - DRM_DEBUG("Got psKernelMemInfo %p for handle 0x%x\n", - psKernelMemInfo, (u32)hKernelMemInfo); - - size = psKernelMemInfo->uAllocSize; - kmem = psKernelMemInfo->pvLinAddrKM; - pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; - - DRM_DEBUG("KerMemInfo size %u, cpuVadr 0x%x, pages %u, osMemHdl 0x%x\n", - size, (unsigned int)kmem, pages, (unsigned int)psKernelMemInfo->sMemBlk.hOSMemHandle); - - if (!kmem) - DRM_DEBUG("kmem is NULL"); - - /*get pages*/ - ret = psb_get_pages_by_mem_handle(psKernelMemInfo->sMemBlk.hOSMemHandle, - &page_list); - if (ret) { - DRM_DEBUG("get pages error\n"); - return ret; - } - - DRM_DEBUG("get %u pages\n", pages); - - /*alloc memory in TT apeture*/ - ret = psb_gtt_mm_alloc_mem(mm, pages, 0, &node); - if (ret) { - DRM_DEBUG("alloc TT memory error\n"); - goto failed_pages_alloc; - } - - /*update psb_gtt_mm*/ - ret = psb_gtt_add_node(mm, - (u32)psb_get_tgid(), - (u32)hKernelMemInfo, - node, - &mapping); - if (ret) { - DRM_DEBUG("add_node failed"); - goto failed_add_node; - } - - node = mapping->node; - offset_pages = node->start; - - DRM_DEBUG("get free node for %u pages, offset %u pages", - pages, offset_pages); - - /*update gtt*/ - psb_gtt_insert_pages(pg, page_list, - (unsigned)offset_pages, - (unsigned)pages, - 0, - 0, - 0); - - *offset = offset_pages; - return 0; - -failed_add_node: - psb_gtt_mm_free_mem(mm, node); -failed_pages_alloc: - kfree(page_list); - return ret; -} - -int psb_gtt_unmap_meminfo(struct drm_device *dev, IMG_HANDLE hKernelMemInfo) -{ - struct drm_psb_private *dev_priv - = (struct drm_psb_private *)dev->dev_private; - struct psb_gtt_mm *mm = dev_priv->gtt_mm; - struct psb_gtt *pg = dev_priv->pg; - uint32_t pages, offset_pages; - struct drm_mm_node *node; - int ret; - - ret = psb_gtt_remove_node(mm, - (u32)psb_get_tgid(), - (u32)hKernelMemInfo, - &node); - if (ret) { - DRM_DEBUG("remove node failed\n"); - return ret; - } - - /*remove gtt entries*/ - offset_pages = node->start; - pages = node->size; - - psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0, 1); - - - /*free tt node*/ - - psb_gtt_mm_free_mem(mm, node); - return 0; -} - -int psb_gtt_map_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct psb_gtt_mapping_arg *arg - = (struct psb_gtt_mapping_arg *)data; - uint32_t *offset_pages = &arg->offset_pages; - - DRM_DEBUG("\n"); - - return psb_gtt_map_meminfo(dev, arg->hKernelMemInfo, offset_pages); -} - -int psb_gtt_unmap_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - - struct psb_gtt_mapping_arg *arg - = (struct psb_gtt_mapping_arg *)data; - - DRM_DEBUG("\n"); - - return psb_gtt_unmap_meminfo(dev, arg->hKernelMemInfo); -} - -int psb_gtt_map_pvr_memory(struct drm_device *dev, - unsigned int hHandle, - unsigned int ui32TaskId, - IMG_CPU_PHYADDR *pPages, - unsigned int ui32PagesNum, - unsigned int *ui32Offset) -{ - struct drm_psb_private * dev_priv = (struct drm_psb_private *)dev->dev_private; - struct psb_gtt_mm * mm = dev_priv->gtt_mm; - struct psb_gtt * pg = dev_priv->pg; - - uint32_t pages, offset_pages; - struct drm_mm_node * node = NULL; - struct psb_gtt_mem_mapping * mapping = NULL; - int ret; - - pages = 0; - - /*alloc memory in TT apeture*/ - ret = psb_gtt_mm_alloc_mem(mm, ui32PagesNum, 0, &node); - if(ret) - { - DRM_DEBUG("alloc TT memory error\n"); - goto failed_pages_alloc; - } - - /*update psb_gtt_mm*/ - ret = psb_gtt_add_node(mm, - (u32)ui32TaskId, - (u32)hHandle, - node, - &mapping); - if(ret) - { - DRM_DEBUG("add_node failed"); - goto failed_add_node; - } - - node = mapping->node; - offset_pages = node->start; - - DRM_DEBUG("get free node for %u pages, offset %u pages", pages, offset_pages); - - /*update gtt*/ - psb_gtt_insert_phys_addresses( pg, pPages, (unsigned)offset_pages, (unsigned)ui32PagesNum, 0 ); - - *ui32Offset = offset_pages; - return 0; - -failed_add_node: - psb_gtt_mm_free_mem(mm, node); -failed_pages_alloc: - return ret; -} - - -int psb_gtt_unmap_pvr_memory(struct drm_device *dev, unsigned int hHandle, unsigned int ui32TaskId) -{ - struct drm_psb_private * dev_priv = (struct drm_psb_private *)dev->dev_private; - struct psb_gtt_mm * mm = dev_priv->gtt_mm; - struct psb_gtt * pg = dev_priv->pg; - uint32_t pages, offset_pages; - struct drm_mm_node * node; - int ret; - - ret = psb_gtt_remove_node(mm, - (u32)ui32TaskId, - (u32)hHandle, - &node); - if(ret) - { - DRM_ERROR("remove node failed\n"); - return ret; - } - - /*remove gtt entries*/ - offset_pages = node->start; - pages = node->size; - - psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0, 1); - - /*free tt node*/ - psb_gtt_mm_free_mem(mm, node); - return 0; -} diff --git a/drivers/staging/cdv/drv/psb_gtt.h b/drivers/staging/cdv/drv/psb_gtt.h deleted file mode 100644 index 6966676..0000000 --- a/drivers/staging/cdv/drv/psb_gtt.h +++ /dev/null @@ -1,112 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#ifndef _PSB_GTT_H_ -#define _PSB_GTT_H_ - -#include - -#include "img_types.h" - -struct psb_gtt { - struct drm_device *dev; - int initialized; - uint32_t gatt_start; - uint32_t mmu_gatt_start; - uint32_t ci_start; - uint32_t rar_start; - uint32_t gtt_start; - uint32_t gtt_phys_start; - unsigned gtt_pages; - unsigned gatt_pages; - uint32_t stolen_base; - void *vram_addr; - uint32_t pge_ctl; - u16 gmch_ctrl; - unsigned long stolen_size; - unsigned long vram_stolen_size; - unsigned long ci_stolen_size; - unsigned long rar_stolen_size; - uint32_t *gtt_map; - struct rw_semaphore sem; -}; - -struct psb_gtt_mm { - struct drm_mm base; - struct drm_open_hash hash; - uint32_t count; - spinlock_t lock; -}; - -struct psb_gtt_hash_entry { - struct drm_open_hash ht; - uint32_t count; - struct drm_hash_item item; -}; - -struct psb_gtt_mem_mapping { - struct drm_mm_node *node; - struct drm_hash_item item; -}; - -#if 0 -/*Ioctl args*/ -struct psb_gtt_mapping_arg { - IMG_HANDLE hKernelMemInfo; -}; -#endif - -/*Exported functions*/ -extern int psb_gtt_init(struct psb_gtt *pg, int resume); -extern int psb_gtt_insert_pages(struct psb_gtt *pg, struct page **pages, - unsigned offset_pages, unsigned num_pages, - unsigned desired_tile_stride, - unsigned hw_tile_stride, int type); -extern int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages, - unsigned num_pages, - unsigned desired_tile_stride, - unsigned hw_tile_stride, - int rc_prot); - -extern struct psb_gtt *psb_gtt_alloc(struct drm_device *dev); -extern void psb_gtt_takedown(struct psb_gtt *pg, int free); -extern int psb_gtt_map_meminfo(struct drm_device *dev, - IMG_HANDLE hKernelMemInfo, - uint32_t *offset); -extern int psb_gtt_unmap_meminfo(struct drm_device *dev, - IMG_HANDLE hKernelMemInfo); -extern int psb_gtt_map_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_gtt_unmap_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_gtt_mm_init(struct psb_gtt *pg); -extern void psb_gtt_mm_takedown(void); - -extern int psb_gtt_map_pvr_memory(struct drm_device *dev, - unsigned int hHandle, - unsigned int ui32TaskId, - IMG_CPU_PHYADDR *pPages, - unsigned int ui32PagesNum, - unsigned int *ui32Offset); - -extern int psb_gtt_unmap_pvr_memory(struct drm_device *dev, - unsigned int hHandle, - unsigned int ui32TaskId); - -#endif diff --git a/drivers/staging/cdv/drv/psb_hotplug.c b/drivers/staging/cdv/drv/psb_hotplug.c deleted file mode 100644 index 61219e1..0000000 --- a/drivers/staging/cdv/drv/psb_hotplug.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ - -#include "psb_umevents.h" -#include "psb_hotplug.h" -/** - * inform the kernel of the work to be performed and related function. - * - */ -DECLARE_WORK(hotplug_dev_create_work, &psb_hotplug_dev_create_wq); -DECLARE_WORK(hotplug_dev_remove_work, &psb_hotplug_dev_remove_wq); -DECLARE_WORK(hotplug_dev_change_work, &psb_hotplug_dev_change_wq); -/** - * psb_hotplug_notify_change_um - notify user mode of hotplug changes - * - * @name: name of event to notify user mode of change to - * @state: hotplug state to search for event object in - * - */ -int psb_hotplug_notify_change_um(const char *name, - struct hotplug_state *state) -{ - strcpy(&(state->hotplug_change_wq_data.dev_name_arry - [state->hotplug_change_wq_data.dev_name_write][0]), name); - state->hotplug_change_wq_data.dev_name_arry_rw_status - [state->hotplug_change_wq_data.dev_name_write] = - DRM_HOTPLUG_READY_TO_READ; - if (state->hotplug_change_wq_data.dev_name_read_write_wrap_ack == 1) - state->hotplug_change_wq_data.dev_name_read_write_wrap_ack = 0; - state->hotplug_change_wq_data.dev_name_write++; - if (state->hotplug_change_wq_data.dev_name_write == - state->hotplug_change_wq_data.dev_name_read) { - state->hotplug_change_wq_data.dev_name_write--; - return IRQ_NONE; - } - if (state->hotplug_change_wq_data.dev_name_write > - DRM_HOTPLUG_RING_DEPTH_MAX) { - state->hotplug_change_wq_data.dev_name_write = 0; - state->hotplug_change_wq_data.dev_name_write_wrap = 1; - } - state->hotplug_change_wq_data.hotplug_dev_list = state->list; - queue_work(state->hotplug_wq, &(state->hotplug_change_wq_data.work)); - return IRQ_HANDLED; -} -/** - * - * psb_hotplug_create_and_notify_um - create and notify user mode of new dev - * - * @name: name to give for new event / device - * @state: hotplug state to track new event /device in - * - */ -int psb_hotplug_create_and_notify_um(const char *name, - struct hotplug_state *state) -{ - strcpy(&(state->hotplug_create_wq_data.dev_name_arry - [state->hotplug_create_wq_data.dev_name_write][0]), name); - state->hotplug_create_wq_data.dev_name_arry_rw_status - [state->hotplug_create_wq_data.dev_name_write] = - DRM_HOTPLUG_READY_TO_READ; - if (state->hotplug_create_wq_data.dev_name_read_write_wrap_ack == 1) - state->hotplug_create_wq_data.dev_name_read_write_wrap_ack = 0; - state->hotplug_create_wq_data.dev_name_write++; - if (state->hotplug_create_wq_data.dev_name_write == - state->hotplug_create_wq_data.dev_name_read) { - state->hotplug_create_wq_data.dev_name_write--; - return IRQ_NONE; - } - if (state->hotplug_create_wq_data.dev_name_write > - DRM_HOTPLUG_RING_DEPTH_MAX) { - state->hotplug_create_wq_data.dev_name_write = 0; - state->hotplug_create_wq_data.dev_name_write_wrap = 1; - } - state->hotplug_create_wq_data.hotplug_dev_list = state->list; - queue_work(state->hotplug_wq, &(state->hotplug_create_wq_data.work)); - return IRQ_HANDLED; -} -/*EXPORT_SYMBOL(psb_hotplug_create_and_notify_um); */ -/** - * psb_hotplug_remove_and_notify_um - remove device and notify user mode - * - * @name: name of event / device to remove - * @state: hotplug state to remove event / device from - * - */ -int psb_hotplug_remove_and_notify_um(const char *name, - struct hotplug_state *state) -{ - strcpy(&(state->hotplug_remove_wq_data.dev_name_arry - [state->hotplug_remove_wq_data.dev_name_write][0]), name); - state->hotplug_remove_wq_data.dev_name_arry_rw_status - [state->hotplug_remove_wq_data.dev_name_write] = - DRM_HOTPLUG_READY_TO_READ; - if (state->hotplug_remove_wq_data.dev_name_read_write_wrap_ack == 1) - state->hotplug_remove_wq_data.dev_name_read_write_wrap_ack = 0; - state->hotplug_remove_wq_data.dev_name_write++; - if (state->hotplug_remove_wq_data.dev_name_write == - state->hotplug_remove_wq_data.dev_name_read) { - state->hotplug_remove_wq_data.dev_name_write--; - return IRQ_NONE; - } - if (state->hotplug_remove_wq_data.dev_name_write > - DRM_HOTPLUG_RING_DEPTH_MAX) { - state->hotplug_remove_wq_data.dev_name_write = 0; - state->hotplug_remove_wq_data.dev_name_write_wrap = 1; - } - state->hotplug_remove_wq_data.hotplug_dev_list = state->list; - queue_work(state->hotplug_wq, &(state->hotplug_remove_wq_data.work)); - return IRQ_HANDLED; -} -/*EXPORT_SYMBOL(psb_hotplug_remove_and_notify_um); */ -/** - * psb_hotplug_device_pool_create_and_init - make new hotplug device pool - * - * @parent_kobj: parent kobject to associate hotplug kset with - * @state: hotplug state to assocaite workqueues with - * - */ -struct umevent_list *psb_hotplug_device_pool_create_and_init( - struct kobject *parent_kobj, - struct hotplug_state *state) -{ - struct umevent_list *new_hotplug_dev_list = NULL; - - new_hotplug_dev_list = psb_umevent_create_list(); - if (new_hotplug_dev_list) - psb_umevent_init(parent_kobj, new_hotplug_dev_list, - "psb_hotplug"); - - state->hotplug_wq = create_singlethread_workqueue("hotplug-wq"); - if (!state->hotplug_wq) - return NULL; - - INIT_WORK(&state->hotplug_create_wq_data.work, - psb_hotplug_dev_create_wq); - INIT_WORK(&state->hotplug_remove_wq_data.work, - psb_hotplug_dev_remove_wq); - INIT_WORK(&state->hotplug_change_wq_data.work, - psb_hotplug_dev_change_wq); - - state->hotplug_create_wq_data.dev_name_read = 0; - state->hotplug_create_wq_data.dev_name_write = 0; - state->hotplug_create_wq_data.dev_name_write_wrap = 0; - state->hotplug_create_wq_data.dev_name_read_write_wrap_ack = 0; - memset(&(state->hotplug_create_wq_data.dev_name_arry_rw_status[0]), - 0, sizeof(int)*DRM_HOTPLUG_RING_DEPTH); - - state->hotplug_remove_wq_data.dev_name_read = 0; - state->hotplug_remove_wq_data.dev_name_write = 0; - state->hotplug_remove_wq_data.dev_name_write_wrap = 0; - state->hotplug_remove_wq_data.dev_name_read_write_wrap_ack = 0; - memset(&(state->hotplug_remove_wq_data.dev_name_arry_rw_status[0]), - 0, sizeof(int)*DRM_HOTPLUG_RING_DEPTH); - - state->hotplug_change_wq_data.dev_name_read = 0; - state->hotplug_change_wq_data.dev_name_write = 0; - state->hotplug_change_wq_data.dev_name_write_wrap = 0; - state->hotplug_change_wq_data.dev_name_read_write_wrap_ack = 0; - memset(&(state->hotplug_change_wq_data.dev_name_arry_rw_status[0]), - 0, sizeof(int)*DRM_HOTPLUG_RING_DEPTH); - - return new_hotplug_dev_list; -} -/*EXPORT_SYMBOL(psb_hotplug_device_pool_create_and_init); */ -/** - * - * psb_hotplug_init - init hotplug subsystem - * - * @parent_kobj: parent kobject to associate hotplug state with - * - */ -struct hotplug_state *psb_hotplug_init(struct kobject *parent_kobj) -{ - struct hotplug_state *state; - state = kzalloc(sizeof(struct hotplug_state), GFP_KERNEL); - - if (!state) - return state; - - state->list = NULL; - state->list = psb_hotplug_device_pool_create_and_init( - parent_kobj, - state); - - psb_hotplug_create_and_notify_um("hpd_hdmi", state); - - return state; -} -/** - * psb_hotplug_device_pool_destroy - destroy all hotplug related resources - * - * @state: hotplug state to destroy - * - */ -void psb_hotplug_device_pool_destroy(struct hotplug_state *state) -{ - flush_workqueue(state->hotplug_wq); - destroy_workqueue(state->hotplug_wq); - psb_umevent_cleanup(state->list); - kfree(state); -} -/*EXPORT_SYMBOL(psb_hotplug_device_pool_destroy); */ -/** - * psb_hotplug_dev_create_wq - create workqueue implementation - * - * @work: work struct to use for kernel scheduling - * - */ -void psb_hotplug_dev_create_wq(struct work_struct *work) -{ - struct hotplug_disp_workqueue_data *wq_data; - /* struct umevent_obj *wq_working_hotplug_disp_obj; */ - wq_data = to_hotplug_disp_workqueue_data(work); - if (wq_data->dev_name_write_wrap == 1) { - wq_data->dev_name_read_write_wrap_ack = 1; - wq_data->dev_name_write_wrap = 0; - while (wq_data->dev_name_read != DRM_HOTPLUG_RING_DEPTH_MAX) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - /* - wq_working_hotplug_disp_obj = - psb_create_umevent_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - */ - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - /* psb_umevent_notify - (wq_working_hotplug_disp_obj);*/ - } - wq_data->dev_name_read++; - } - wq_data->dev_name_read = 0; - while (wq_data->dev_name_read < wq_data->dev_name_write-1) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - /* - wq_working_hotplug_disp_obj = - psb_create_umevent_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - */ - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - /*psb_umevent_notify - (wq_working_hotplug_disp_obj);*/ - } - wq_data->dev_name_read++; - } - } else { - while (wq_data->dev_name_read < wq_data->dev_name_write) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - /* - wq_working_hotplug_disp_obj = - psb_create_umevent_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - */ - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - /*psb_umevent_notify - (wq_working_hotplug_disp_obj);*/ - } - wq_data->dev_name_read++; - } - } - if (wq_data->dev_name_read > DRM_HOTPLUG_RING_DEPTH_MAX) - wq_data->dev_name_read = 0; -} -/*EXPORT_SYMBOL(psb_hotplug_dev_create_wq); */ -/** - * psb_hotplug_dev_remove_wq - remove workqueue implementation - * - * @work: work struct to use for kernel scheduling - * - */ -void psb_hotplug_dev_remove_wq(struct work_struct *work) -{ - struct hotplug_disp_workqueue_data *wq_data; - wq_data = to_hotplug_disp_workqueue_data(work); - if (wq_data->dev_name_write_wrap == 1) { - wq_data->dev_name_read_write_wrap_ack = 1; - wq_data->dev_name_write_wrap = 0; - while (wq_data->dev_name_read != DRM_HOTPLUG_RING_DEPTH_MAX) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - psb_umevent_remove_from_list( - wq_data->hotplug_dev_list, - &wq_data->dev_name_arry - [wq_data->dev_name_read][0]); - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - } - wq_data->dev_name_read++; - } - wq_data->dev_name_read = 0; - while (wq_data->dev_name_read < wq_data->dev_name_write-1) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - psb_umevent_remove_from_list( - wq_data->hotplug_dev_list, - &wq_data->dev_name_arry - [wq_data->dev_name_read][0]); - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - } - wq_data->dev_name_read++; - } - } else { - while (wq_data->dev_name_read < wq_data->dev_name_write) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - psb_umevent_remove_from_list( - wq_data->hotplug_dev_list, - &wq_data->dev_name_arry - [wq_data->dev_name_read][0]); - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - } - wq_data->dev_name_read++; - } - } - if (wq_data->dev_name_read > DRM_HOTPLUG_RING_DEPTH_MAX) - wq_data->dev_name_read = 0; -} -/*EXPORT_SYMBOL(psb_hotplug_dev_remove_wq); */ -/** - * psb_hotplug_dev_change_wq - change workqueue implementation - * - * @work: work struct to use for kernel scheduling - * - */ -void psb_hotplug_dev_change_wq(struct work_struct *work) -{ - struct hotplug_disp_workqueue_data *wq_data; - struct umevent_obj *wq_working_hotplug_disp_obj; - - wq_data = to_hotplug_disp_workqueue_data(work); - if (wq_data->dev_name_write_wrap == 1) { - wq_data->dev_name_read_write_wrap_ack = 1; - wq_data->dev_name_write_wrap = 0; - while (wq_data->dev_name_read != DRM_HOTPLUG_RING_DEPTH_MAX) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - - wq_working_hotplug_disp_obj = - psb_umevent_find_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - psb_umevent_notify_change_gfxsock - (wq_working_hotplug_disp_obj, - DRM_HOTPLUG_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - wq_data->dev_name_read = 0; - while (wq_data->dev_name_read < wq_data->dev_name_write-1) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - - wq_working_hotplug_disp_obj = - psb_umevent_find_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - psb_umevent_notify_change_gfxsock - (wq_working_hotplug_disp_obj, - DRM_HOTPLUG_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - } else { - while (wq_data->dev_name_read < wq_data->dev_name_write) { - if (wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] == - DRM_HOTPLUG_READY_TO_READ) { - wq_data->dev_name_arry_rw_status - [wq_data->dev_name_read] = - DRM_HOTPLUG_READ_COMPLETE; - - wq_working_hotplug_disp_obj = - psb_umevent_find_obj( - &wq_data->dev_name_arry - [wq_data->dev_name_read][0], - wq_data->hotplug_dev_list); - psb_umevent_notify_change_gfxsock - (wq_working_hotplug_disp_obj, - DRM_HOTPLUG_SOCKET_GROUP_ID); - } - wq_data->dev_name_read++; - } - } - if (wq_data->dev_name_read > DRM_HOTPLUG_RING_DEPTH_MAX) - wq_data->dev_name_read = 0; -} -/*EXPORT_SYMBOL(psb_hotplug_dev_change_wq); */ diff --git a/drivers/staging/cdv/drv/psb_hotplug.h b/drivers/staging/cdv/drv/psb_hotplug.h deleted file mode 100644 index cffede5..0000000 --- a/drivers/staging/cdv/drv/psb_hotplug.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ -#ifndef _PSB_HOTPLUG_H_ -#define _PSB_HOTPLUG_H_ -/** - * required includes - * - */ -#include "psb_umevents.h" -/** - * hotplug specific defines - * - */ -#define DRM_HOTPLUG_RING_DEPTH 256 -#define DRM_HOTPLUG_RING_DEPTH_MAX (DRM_HOTPLUG_RING_DEPTH-1) -#define DRM_HOTPLUG_READY_TO_READ 1 -#define DRM_HOTPLUG_READ_COMPLETE 2 -/** - * hotplug workqueue data struct. - */ -struct hotplug_disp_workqueue_data { - struct work_struct work; - const char *dev_name; - int dev_name_write; - int dev_name_read; - int dev_name_write_wrap; - int dev_name_read_write_wrap_ack; - char dev_name_arry[DRM_HOTPLUG_RING_DEPTH][24]; - int dev_name_arry_rw_status[DRM_HOTPLUG_RING_DEPTH]; - struct umevent_list *hotplug_dev_list; -}; -/** - * hotplug state structure - * - */ -struct hotplug_state { - struct workqueue_struct *hotplug_wq; - struct hotplug_disp_workqueue_data hotplug_remove_wq_data; - struct hotplug_disp_workqueue_data hotplug_create_wq_data; - struct hotplug_disp_workqueue_data hotplug_change_wq_data; - struct umevent_list *list; -}; -/** - * main interface function prototytpes for hotplug support. - * - */ -struct hotplug_state *psb_hotplug_init(struct kobject *parent_kobj); -extern int psb_hotplug_notify_change_um(const char *name, - struct hotplug_state *state); -extern int psb_hotplug_create_and_notify_um(const char *name, - struct hotplug_state *state); -extern int psb_hotplug_remove_and_notify_um(const char *name, - struct hotplug_state *state); -extern struct umevent_list *psb_hotplug_device_pool_create_and_init( - struct kobject *parent_kobj, - struct hotplug_state *state); -extern void psb_hotplug_device_pool_destroy(struct hotplug_state *state); -/** - * to go back and forth between work strauct and workqueue data - * - */ -#define to_hotplug_disp_workqueue_data(x) \ - container_of(x, struct hotplug_disp_workqueue_data, work) - -/** - * function prototypes for workqueue implementation - * - */ -extern void psb_hotplug_dev_create_wq(struct work_struct *work); -extern void psb_hotplug_dev_remove_wq(struct work_struct *work); -extern void psb_hotplug_dev_change_wq(struct work_struct *work); -#endif diff --git a/drivers/staging/cdv/drv/psb_intel_bios.c b/drivers/staging/cdv/drv/psb_intel_bios.c deleted file mode 100644 index b82bd85..0000000 --- a/drivers/staging/cdv/drv/psb_intel_bios.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (c) 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - * - */ -#include -#include -#include "psb_drm.h" -#include "psb_drv.h" -#include "psb_intel_drv.h" -#include "psb_intel_reg.h" -#include "psb_intel_bios.h" - - -static void *find_section(struct bdb_header *bdb, int section_id) -{ - u8 *base = (u8 *)bdb; - int index = 0; - u16 total, current_size; - u8 current_id; - - /* skip to first section */ - index += bdb->header_size; - total = bdb->bdb_size; - - /* walk the sections looking for section_id */ - while (index < total) { - current_id = *(base + index); - index++; - current_size = *((u16 *)(base + index)); - index += 2; - if (current_id == section_id) - return base + index; - index += current_size; - } - - return NULL; -} - -static void fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode, - struct lvds_dvo_timing *dvo_timing) -{ - panel_fixed_mode->hdisplay = (dvo_timing->hactive_hi << 8) | - dvo_timing->hactive_lo; - panel_fixed_mode->hsync_start = panel_fixed_mode->hdisplay + - ((dvo_timing->hsync_off_hi << 8) | dvo_timing->hsync_off_lo); - panel_fixed_mode->hsync_end = panel_fixed_mode->hsync_start + - dvo_timing->hsync_pulse_width; - panel_fixed_mode->htotal = panel_fixed_mode->hdisplay + - ((dvo_timing->hblank_hi << 8) | dvo_timing->hblank_lo); - - panel_fixed_mode->vdisplay = (dvo_timing->vactive_hi << 8) | - dvo_timing->vactive_lo; - panel_fixed_mode->vsync_start = panel_fixed_mode->vdisplay + - dvo_timing->vsync_off; - panel_fixed_mode->vsync_end = panel_fixed_mode->vsync_start + - dvo_timing->vsync_pulse_width; - panel_fixed_mode->vtotal = panel_fixed_mode->vdisplay + - ((dvo_timing->vblank_hi << 8) | dvo_timing->vblank_lo); - panel_fixed_mode->clock = dvo_timing->clock * 10; - panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; - - /* Some VBTs have bogus h/vtotal values */ - if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) - panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; - if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal) - panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1; - - drm_mode_set_name(panel_fixed_mode); -} - -static void parse_backlight_data(struct drm_psb_private *dev_priv, - struct bdb_header *bdb) -{ - struct bdb_lvds_backlight *vbt_lvds_bl = NULL; - struct bdb_lvds_backlight *lvds_bl; - u8 p_type = 0; - void *bl_start = NULL; - struct bdb_lvds_options *lvds_opts - = find_section(bdb, BDB_LVDS_OPTIONS); - - dev_priv->lvds_bl = NULL; - - if (lvds_opts) { - DRM_DEBUG("lvds_options found at %p\n", lvds_opts); - p_type = lvds_opts->panel_type; - } else { - DRM_DEBUG("no lvds_options\n"); - return; - } - - bl_start = find_section(bdb, BDB_LVDS_BACKLIGHT); - vbt_lvds_bl = (struct bdb_lvds_backlight *)(bl_start + 1) + p_type; - - lvds_bl = kzalloc(sizeof(*vbt_lvds_bl), GFP_KERNEL); - if (!lvds_bl) { - DRM_DEBUG("No memory\n"); - return; - } - - memcpy(lvds_bl, vbt_lvds_bl, sizeof(*vbt_lvds_bl)); - - dev_priv->lvds_bl = lvds_bl; -} - -/* Try to find integrated panel data */ -static void parse_lfp_panel_data(struct drm_psb_private *dev_priv, - struct bdb_header *bdb) -{ - struct bdb_lvds_options *lvds_options; - struct bdb_lvds_lfp_data *lvds_lfp_data; - struct bdb_lvds_lfp_data_entry *entry; - struct lvds_dvo_timing *dvo_timing; - struct drm_display_mode *panel_fixed_mode; - - /* Defaults if we can't find VBT info */ - dev_priv->lvds_dither = 0; - dev_priv->lvds_vbt = 0; - - lvds_options = find_section(bdb, BDB_LVDS_OPTIONS); - if (!lvds_options) - return; - - dev_priv->lvds_dither = lvds_options->pixel_dither; - if (lvds_options->panel_type == 0xff) - return; - - lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA); - if (!lvds_lfp_data) - return; - - dev_priv->lvds_vbt = 1; - - entry = &lvds_lfp_data->data[lvds_options->panel_type]; - dvo_timing = &entry->dvo_timing; - - panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), - GFP_KERNEL); - - if (!panel_fixed_mode) { - DRM_DEBUG("Out of memory\n"); - return; - } - fill_detail_timing_data(panel_fixed_mode, dvo_timing); - - dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode; - - DRM_DEBUG("Found panel mode in BIOS VBT tables:\n"); - drm_mode_debug_printmodeline(panel_fixed_mode); - - return; -} - -static void parse_general_features(struct drm_psb_private *dev_priv, - struct bdb_header *bdb) -{ - struct bdb_general_features *general; - - /* Set sensible defaults in case we can't find the general block */ - dev_priv->int_tv_support = 1; - dev_priv->int_crt_support = 1; - - general = find_section(bdb, BDB_GENERAL_FEATURES); - if (general) { - dev_priv->int_tv_support = general->int_tv_support; - dev_priv->int_crt_support = general->int_crt_support; - dev_priv->lvds_use_ssc = general->enable_ssc; - - if (dev_priv->lvds_use_ssc) { - if (IS_I855(dev_priv->dev)) - dev_priv->lvds_ssc_freq - = general->ssc_freq ? 66 : 48; - else - dev_priv->lvds_ssc_freq - = general->ssc_freq ? 100 : 96; - } - } -} - -static void -parse_driver_features(struct drm_psb_private *dev_priv, - struct bdb_header *bdb) -{ - struct bdb_driver_features *driver; - - driver = find_section(bdb, BDB_DRIVER_FEATURES); - if (!driver) - return; - - /* This bit means to use 96Mhz for DPLL_A or not */ - if (driver->primary_lfp_id) - dev_priv->dplla_96mhz = true; - else - dev_priv->dplla_96mhz = false; -} - - -/** - * psb_intel_init_bios - initialize VBIOS settings & find VBT - * @dev: DRM device - * - * Loads the Video BIOS and checks that the VBT exists. Sets scratch registers - * to appropriate values. - * - * VBT existence is a sanity check that is relied on by other i830_bios.c code. - * Note that it would be better to use a BIOS call to get the VBT, as BIOSes may - * feed an updated VBT back through that, compared to what we'll fetch using - * this method of groping around in the BIOS data. - * - * Returns 0 on success, nonzero on failure. - */ -bool psb_intel_init_bios(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct pci_dev *pdev = dev->pdev; - struct vbt_header *vbt = NULL; - struct bdb_header *bdb; - u8 __iomem *bios; - size_t size; - int i; - - bios = pci_map_rom(pdev, &size); - if (!bios) - return -1; - - /* Scour memory looking for the VBT signature */ - for (i = 0; i + 4 < size; i++) { - if (!memcmp(bios + i, "$VBT", 4)) { - vbt = (struct vbt_header *)(bios + i); - break; - } - } - - if (!vbt) { - DRM_ERROR("VBT signature missing\n"); - pci_unmap_rom(pdev, bios); - return -1; - } - - bdb = (struct bdb_header *)(bios + i + vbt->bdb_offset); - - /* Grab useful general definitions */ - parse_general_features(dev_priv, bdb); - parse_driver_features(dev_priv, bdb); - parse_lfp_panel_data(dev_priv, bdb); - parse_backlight_data(dev_priv, bdb); - - pci_unmap_rom(pdev, bios); - - return 0; -} - -/** - * Destory and free VBT data - */ -void psb_intel_destory_bios(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct drm_display_mode *lfp_lvds_vbt_mode = - dev_priv->lfp_lvds_vbt_mode; - struct bdb_lvds_backlight *lvds_bl = - dev_priv->lvds_bl; - - - if (lfp_lvds_vbt_mode) { - dev_priv->lfp_lvds_vbt_mode = NULL; - kfree(lfp_lvds_vbt_mode); - } - - if (lvds_bl) { - dev_priv->lvds_bl = NULL; - kfree(lvds_bl); - } -} diff --git a/drivers/staging/cdv/drv/psb_intel_bios.h b/drivers/staging/cdv/drv/psb_intel_bios.h deleted file mode 100644 index 4d1c0a6..0000000 --- a/drivers/staging/cdv/drv/psb_intel_bios.h +++ /dev/null @@ -1,470 +0,0 @@ -/* - * Copyright (c) 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef _I830_BIOS_H_ -#define _I830_BIOS_H_ - -#include - -struct vbt_header { - u8 signature[20]; /**< Always starts with 'VBT$' */ - u16 version; /**< decimal */ - u16 header_size; /**< in bytes */ - u16 vbt_size; /**< in bytes */ - u8 vbt_checksum; - u8 reserved0; - u32 bdb_offset; /**< from beginning of VBT */ - u32 aim_offset[4]; /**< from beginning of VBT */ -} __attribute__((packed)); - - -struct bdb_header { - u8 signature[16]; /**< Always 'BIOS_DATA_BLOCK' */ - u16 version; /**< decimal */ - u16 header_size; /**< in bytes */ - u16 bdb_size; /**< in bytes */ -}; - -/* strictly speaking, this is a "skip" block, but it has interesting info */ -struct vbios_data { - u8 type; /* 0 == desktop, 1 == mobile */ - u8 relstage; - u8 chipset; - u8 lvds_present:1; - u8 tv_present:1; - u8 rsvd2:6; /* finish byte */ - u8 rsvd3[4]; - u8 signon[155]; - u8 copyright[61]; - u16 code_segment; - u8 dos_boot_mode; - u8 bandwidth_percent; - u8 rsvd4; /* popup memory size */ - u8 resize_pci_bios; - u8 rsvd5; /* is crt already on ddc2 */ -} __attribute__((packed)); - -/* - * There are several types of BIOS data blocks (BDBs), each block has - * an ID and size in the first 3 bytes (ID in first, size in next 2). - * Known types are listed below. - */ -#define BDB_GENERAL_FEATURES 1 -#define BDB_GENERAL_DEFINITIONS 2 -#define BDB_OLD_TOGGLE_LIST 3 -#define BDB_MODE_SUPPORT_LIST 4 -#define BDB_GENERIC_MODE_TABLE 5 -#define BDB_EXT_MMIO_REGS 6 -#define BDB_SWF_IO 7 -#define BDB_SWF_MMIO 8 -#define BDB_DOT_CLOCK_TABLE 9 -#define BDB_MODE_REMOVAL_TABLE 10 -#define BDB_CHILD_DEVICE_TABLE 11 -#define BDB_DRIVER_FEATURES 12 -#define BDB_DRIVER_PERSISTENCE 13 -#define BDB_EXT_TABLE_PTRS 14 -#define BDB_DOT_CLOCK_OVERRIDE 15 -#define BDB_DISPLAY_SELECT 16 -/* 17 rsvd */ -#define BDB_DRIVER_ROTATION 18 -#define BDB_DISPLAY_REMOVE 19 -#define BDB_OEM_CUSTOM 20 -#define BDB_EFP_LIST 21 /* workarounds for VGA hsync/vsync */ -#define BDB_SDVO_LVDS_OPTIONS 22 -#define BDB_SDVO_PANEL_DTDS 23 -#define BDB_SDVO_LVDS_PNP_IDS 24 -#define BDB_SDVO_LVDS_POWER_SEQ 25 -#define BDB_TV_OPTIONS 26 -#define BDB_LVDS_OPTIONS 40 -#define BDB_LVDS_LFP_DATA_PTRS 41 -#define BDB_LVDS_LFP_DATA 42 -#define BDB_LVDS_BACKLIGHT 43 -#define BDB_LVDS_POWER 44 -#define BDB_SKIP 254 /* VBIOS private block, ignore */ - -struct bdb_general_features { - /* bits 1 */ - u8 panel_fitting:2; - u8 flexaim:1; - u8 msg_enable:1; - u8 clear_screen:3; - u8 color_flip:1; - - /* bits 2 */ - u8 download_ext_vbt:1; - u8 enable_ssc:1; - u8 ssc_freq:1; - u8 enable_lfp_on_override:1; - u8 disable_ssc_ddt:1; - u8 rsvd8:3; /* finish byte */ - - /* bits 3 */ - u8 disable_smooth_vision:1; - u8 single_dvi:1; - u8 rsvd9:6; /* finish byte */ - - /* bits 4 */ - u8 legacy_monitor_detect; - - /* bits 5 */ - u8 int_crt_support:1; - u8 int_tv_support:1; - u8 rsvd11:6; /* finish byte */ -} __attribute__((packed)); - -struct bdb_general_definitions { - /* DDC GPIO */ - u8 crt_ddc_gmbus_pin; - - /* DPMS bits */ - u8 dpms_acpi:1; - u8 skip_boot_crt_detect:1; - u8 dpms_aim:1; - u8 rsvd1:5; /* finish byte */ - - /* boot device bits */ - u8 boot_display[2]; - u8 child_dev_size; - - /* device info */ - u8 tv_or_lvds_info[33]; - u8 dev1[33]; - u8 dev2[33]; - u8 dev3[33]; - u8 dev4[33]; - /* may be another device block here on some platforms */ -}; - -struct bdb_lvds_options { - u8 panel_type; - u8 rsvd1; - /* LVDS capabilities, stored in a dword */ - u8 pfit_mode:2; - u8 pfit_text_mode_enhanced:1; - u8 pfit_gfx_mode_enhanced:1; - u8 pfit_ratio_auto:1; - u8 pixel_dither:1; - u8 lvds_edid:1; - u8 rsvd2:1; - u8 rsvd4; -} __attribute__((packed)); - -struct bdb_lvds_backlight { - u8 type:2; - u8 pol:1; - u8 gpio:3; - u8 gmbus:2; - u16 freq; - u8 minbrightness; - u8 i2caddr; - u8 brightnesscmd; - /*FIXME: more...*/ -} __attribute__((packed)); - -/* LFP pointer table contains entries to the struct below */ -struct bdb_lvds_lfp_data_ptr { - u16 fp_timing_offset; /* offsets are from start of bdb */ - u8 fp_table_size; - u16 dvo_timing_offset; - u8 dvo_table_size; - u16 panel_pnp_id_offset; - u8 pnp_table_size; -} __attribute__((packed)); - -struct bdb_lvds_lfp_data_ptrs { - u8 lvds_entries; /* followed by one or more lvds_data_ptr structs */ - struct bdb_lvds_lfp_data_ptr ptr[16]; -} __attribute__((packed)); - -/* LFP data has 3 blocks per entry */ -struct lvds_fp_timing { - u16 x_res; - u16 y_res; - u32 lvds_reg; - u32 lvds_reg_val; - u32 pp_on_reg; - u32 pp_on_reg_val; - u32 pp_off_reg; - u32 pp_off_reg_val; - u32 pp_cycle_reg; - u32 pp_cycle_reg_val; - u32 pfit_reg; - u32 pfit_reg_val; - u16 terminator; -} __attribute__((packed)); - -struct lvds_dvo_timing { - u16 clock; /**< In 10khz */ - u8 hactive_lo; - u8 hblank_lo; - u8 hblank_hi:4; - u8 hactive_hi:4; - u8 vactive_lo; - u8 vblank_lo; - u8 vblank_hi:4; - u8 vactive_hi:4; - u8 hsync_off_lo; - u8 hsync_pulse_width; - u8 vsync_pulse_width:4; - u8 vsync_off:4; - u8 rsvd0:6; - u8 hsync_off_hi:2; - u8 h_image; - u8 v_image; - u8 max_hv; - u8 h_border; - u8 v_border; - u8 rsvd1:3; - u8 digital:2; - u8 vsync_positive:1; - u8 hsync_positive:1; - u8 rsvd2:1; -} __attribute__((packed)); - -struct lvds_pnp_id { - u16 mfg_name; - u16 product_code; - u32 serial; - u8 mfg_week; - u8 mfg_year; -} __attribute__((packed)); - -struct bdb_lvds_lfp_data_entry { - struct lvds_fp_timing fp_timing; - struct lvds_dvo_timing dvo_timing; - struct lvds_pnp_id pnp_id; -} __attribute__((packed)); - -struct bdb_lvds_lfp_data { - struct bdb_lvds_lfp_data_entry data[16]; -} __attribute__((packed)); - -struct aimdb_header { - char signature[16]; - char oem_device[20]; - u16 aimdb_version; - u16 aimdb_header_size; - u16 aimdb_size; -} __attribute__((packed)); - -struct aimdb_block { - u8 aimdb_id; - u16 aimdb_size; -} __attribute__((packed)); - -struct vch_panel_data { - u16 fp_timing_offset; - u8 fp_timing_size; - u16 dvo_timing_offset; - u8 dvo_timing_size; - u16 text_fitting_offset; - u8 text_fitting_size; - u16 graphics_fitting_offset; - u8 graphics_fitting_size; -} __attribute__((packed)); - -struct vch_bdb_22 { - struct aimdb_block aimdb_block; - struct vch_panel_data panels[16]; -} __attribute__((packed)); - -struct bdb_sdvo_lvds_options { - u8 panel_backlight; - u8 h40_set_panel_type; - u8 panel_type; - u8 ssc_clk_freq; - u16 als_low_trip; - u16 als_high_trip; - u8 sclalarcoeff_tab_row_num; - u8 sclalarcoeff_tab_row_size; - u8 coefficient[8]; - u8 panel_misc_bits_1; - u8 panel_misc_bits_2; - u8 panel_misc_bits_3; - u8 panel_misc_bits_4; -} __attribute__((packed)); - -struct bdb_driver_features { - u8 boot_dev_algorithm:1; - u8 block_display_switch:1; - u8 allow_display_switch:1; - u8 hotplug_dvo:1; - u8 dual_view_zoom:1; - u8 int15h_hook:1; - u8 sprite_in_clone:1; - u8 primary_lfp_id:1; - - u16 boot_mode_x; - u16 boot_mode_y; - u8 boot_mode_bpp; - u8 boot_mode_refresh; - - u16 enable_lfp_primary:1; - u16 selective_mode_pruning:1; - u16 dual_frequency:1; - u16 render_clock_freq:1; /* 0: high freq; 1: low freq */ - u16 nt_clone_support:1; - u16 power_scheme_ui:1; /* 0: CUI; 1: 3rd party */ - u16 sprite_display_assign:1; /* 0: secondary; 1: primary */ - u16 cui_aspect_scaling:1; - u16 preserve_aspect_ratio:1; - u16 sdvo_device_power_down:1; - u16 crt_hotplug:1; - u16 lvds_config:2; - u16 tv_hotplug:1; - u16 hdmi_config:2; - - u8 static_display:1; - u8 reserved2:7; - u16 legacy_crt_max_x; - u16 legacy_crt_max_y; - u8 legacy_crt_max_refresh; - - u8 hdmi_termination; - u8 custom_vbt_version; -} __attribute__((packed)); - - -extern bool psb_intel_init_bios(struct drm_device *dev); -extern void psb_intel_destory_bios(struct drm_device *dev); - -/* - * Driver<->VBIOS interaction occurs through scratch bits in - * GR18 & SWF*. - */ - -/* GR18 bits are set on display switch and hotkey events */ -#define GR18_DRIVER_SWITCH_EN (1<<7) /* 0: VBIOS control, 1: driver control */ -#define GR18_HOTKEY_MASK 0x78 /* See also SWF4 15:0 */ -#define GR18_HK_NONE (0x0<<3) -#define GR18_HK_LFP_STRETCH (0x1<<3) -#define GR18_HK_TOGGLE_DISP (0x2<<3) -#define GR18_HK_DISP_SWITCH (0x4<<3) /* see SWF14 15:0 for what to enable */ -#define GR18_HK_POPUP_DISABLED (0x6<<3) -#define GR18_HK_POPUP_ENABLED (0x7<<3) -#define GR18_HK_PFIT (0x8<<3) -#define GR18_HK_APM_CHANGE (0xa<<3) -#define GR18_HK_MULTIPLE (0xc<<3) -#define GR18_USER_INT_EN (1<<2) -#define GR18_A0000_FLUSH_EN (1<<1) -#define GR18_SMM_EN (1<<0) - -/* Set by driver, cleared by VBIOS */ -#define SWF00_YRES_SHIFT 16 -#define SWF00_XRES_SHIFT 0 -#define SWF00_RES_MASK 0xffff - -/* Set by VBIOS at boot time and driver at runtime */ -#define SWF01_TV2_FORMAT_SHIFT 8 -#define SWF01_TV1_FORMAT_SHIFT 0 -#define SWF01_TV_FORMAT_MASK 0xffff - -#define SWF10_VBIOS_BLC_I2C_EN (1<<29) -#define SWF10_GTT_OVERRIDE_EN (1<<28) -#define SWF10_LFP_DPMS_OVR (1<<27) /* override DPMS on display switch */ -#define SWF10_ACTIVE_TOGGLE_LIST_MASK (7<<24) -#define SWF10_OLD_TOGGLE 0x0 -#define SWF10_TOGGLE_LIST_1 0x1 -#define SWF10_TOGGLE_LIST_2 0x2 -#define SWF10_TOGGLE_LIST_3 0x3 -#define SWF10_TOGGLE_LIST_4 0x4 -#define SWF10_PANNING_EN (1<<23) -#define SWF10_DRIVER_LOADED (1<<22) -#define SWF10_EXTENDED_DESKTOP (1<<21) -#define SWF10_EXCLUSIVE_MODE (1<<20) -#define SWF10_OVERLAY_EN (1<<19) -#define SWF10_PLANEB_HOLDOFF (1<<18) -#define SWF10_PLANEA_HOLDOFF (1<<17) -#define SWF10_VGA_HOLDOFF (1<<16) -#define SWF10_ACTIVE_DISP_MASK 0xffff -#define SWF10_PIPEB_LFP2 (1<<15) -#define SWF10_PIPEB_EFP2 (1<<14) -#define SWF10_PIPEB_TV2 (1<<13) -#define SWF10_PIPEB_CRT2 (1<<12) -#define SWF10_PIPEB_LFP (1<<11) -#define SWF10_PIPEB_EFP (1<<10) -#define SWF10_PIPEB_TV (1<<9) -#define SWF10_PIPEB_CRT (1<<8) -#define SWF10_PIPEA_LFP2 (1<<7) -#define SWF10_PIPEA_EFP2 (1<<6) -#define SWF10_PIPEA_TV2 (1<<5) -#define SWF10_PIPEA_CRT2 (1<<4) -#define SWF10_PIPEA_LFP (1<<3) -#define SWF10_PIPEA_EFP (1<<2) -#define SWF10_PIPEA_TV (1<<1) -#define SWF10_PIPEA_CRT (1<<0) - -#define SWF11_MEMORY_SIZE_SHIFT 16 -#define SWF11_SV_TEST_EN (1<<15) -#define SWF11_IS_AGP (1<<14) -#define SWF11_DISPLAY_HOLDOFF (1<<13) -#define SWF11_DPMS_REDUCED (1<<12) -#define SWF11_IS_VBE_MODE (1<<11) -#define SWF11_PIPEB_ACCESS (1<<10) /* 0 here means pipe a */ -#define SWF11_DPMS_MASK 0x07 -#define SWF11_DPMS_OFF (1<<2) -#define SWF11_DPMS_SUSPEND (1<<1) -#define SWF11_DPMS_STANDBY (1<<0) -#define SWF11_DPMS_ON 0 - -#define SWF14_GFX_PFIT_EN (1<<31) -#define SWF14_TEXT_PFIT_EN (1<<30) -#define SWF14_LID_STATUS_CLOSED (1<<29) /* 0 here means open */ -#define SWF14_POPUP_EN (1<<28) -#define SWF14_DISPLAY_HOLDOFF (1<<27) -#define SWF14_DISP_DETECT_EN (1<<26) -#define SWF14_DOCKING_STATUS_DOCKED (1<<25) /* 0 here means undocked */ -#define SWF14_DRIVER_STATUS (1<<24) -#define SWF14_OS_TYPE_WIN9X (1<<23) -#define SWF14_OS_TYPE_WINNT (1<<22) -/* 21:19 rsvd */ -#define SWF14_PM_TYPE_MASK 0x00070000 -#define SWF14_PM_ACPI_VIDEO (0x4 << 16) -#define SWF14_PM_ACPI (0x3 << 16) -#define SWF14_PM_APM_12 (0x2 << 16) -#define SWF14_PM_APM_11 (0x1 << 16) -#define SWF14_HK_REQUEST_MASK 0x0000ffff /* see GR18 6:3 for event type */ - /* if GR18 indicates a display switch */ -#define SWF14_DS_PIPEB_LFP2_EN (1<<15) -#define SWF14_DS_PIPEB_EFP2_EN (1<<14) -#define SWF14_DS_PIPEB_TV2_EN (1<<13) -#define SWF14_DS_PIPEB_CRT2_EN (1<<12) -#define SWF14_DS_PIPEB_LFP_EN (1<<11) -#define SWF14_DS_PIPEB_EFP_EN (1<<10) -#define SWF14_DS_PIPEB_TV_EN (1<<9) -#define SWF14_DS_PIPEB_CRT_EN (1<<8) -#define SWF14_DS_PIPEA_LFP2_EN (1<<7) -#define SWF14_DS_PIPEA_EFP2_EN (1<<6) -#define SWF14_DS_PIPEA_TV2_EN (1<<5) -#define SWF14_DS_PIPEA_CRT2_EN (1<<4) -#define SWF14_DS_PIPEA_LFP_EN (1<<3) -#define SWF14_DS_PIPEA_EFP_EN (1<<2) -#define SWF14_DS_PIPEA_TV_EN (1<<1) -#define SWF14_DS_PIPEA_CRT_EN (1<<0) - /* if GR18 indicates a panel fitting request */ -#define SWF14_PFIT_EN (1<<0) /* 0 means disable */ - /* if GR18 indicates an APM change request */ -#define SWF14_APM_HIBERNATE 0x4 -#define SWF14_APM_SUSPEND 0x3 -#define SWF14_APM_STANDBY 0x1 -#define SWF14_APM_RESTORE 0x0 - -#endif /* _I830_BIOS_H_ */ diff --git a/drivers/staging/cdv/drv/psb_intel_crt.c b/drivers/staging/cdv/drv/psb_intel_crt.c deleted file mode 100644 index 221bcdd..0000000 --- a/drivers/staging/cdv/drv/psb_intel_crt.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Eric Anholt - */ - -#include -#include - -#include "psb_intel_bios.h" -#include "psb_drv.h" -#include "psb_intel_drv.h" -#include "psb_intel_reg.h" -#include "psb_powermgmt.h" -#include - - -static void psb_intel_crt_dpms(struct drm_encoder *encoder, int mode) -{ - struct drm_device *dev = encoder->dev; - u32 temp, reg; - reg = ADPA; - - temp = REG_READ(reg); - temp &= ~(ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE); - temp &= ~ADPA_DAC_ENABLE; - - switch(mode) { - case DRM_MODE_DPMS_ON: - temp |= ADPA_DAC_ENABLE; - break; - case DRM_MODE_DPMS_STANDBY: - temp |= ADPA_DAC_ENABLE | ADPA_HSYNC_CNTL_DISABLE; - break; - case DRM_MODE_DPMS_SUSPEND: - temp |= ADPA_DAC_ENABLE | ADPA_VSYNC_CNTL_DISABLE; - break; - case DRM_MODE_DPMS_OFF: - temp |= ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE; - break; - } - - REG_WRITE(reg, temp); -} - -static int psb_intel_crt_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) -{ - int max_clock = 0; - if (mode->flags & DRM_MODE_FLAG_DBLSCAN) - return MODE_NO_DBLESCAN; - - /* The lowest clock for CDV is 20000KHz */ - if (mode->clock < 20000) - return MODE_CLOCK_LOW; - - /* The max clock for CDV is 355 instead of 400 */ - max_clock = 355000; - if (mode->clock > max_clock) - return MODE_CLOCK_HIGH; - - return MODE_OK; -} - -static bool psb_intel_crt_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - return true; -} - -static void psb_intel_crt_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - - struct drm_device *dev = encoder->dev; - struct drm_crtc *crtc = encoder->crtc; - struct psb_intel_crtc *psb_intel_crtc = - to_psb_intel_crtc(crtc); - int dpll_md_reg; - u32 adpa, dpll_md; - u32 adpa_reg; - - if (psb_intel_crtc->pipe == 0) - dpll_md_reg = DPLL_A_MD; - else - dpll_md_reg = DPLL_B_MD; - - adpa_reg = ADPA; - - /* - * Disable separate mode multiplier used when cloning SDVO to CRT - * XXX this needs to be adjusted when we really are cloning - */ - { - dpll_md = REG_READ(dpll_md_reg); - REG_WRITE(dpll_md_reg, - dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK); - } - - adpa = 0; - if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) - adpa |= ADPA_HSYNC_ACTIVE_HIGH; - if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) - adpa |= ADPA_VSYNC_ACTIVE_HIGH; - - if (psb_intel_crtc->pipe == 0) { - adpa |= ADPA_PIPE_A_SELECT; - } else { - adpa |= ADPA_PIPE_B_SELECT; - } - - REG_WRITE(adpa_reg, adpa); -} - - -/** - * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect CRT presence. - * - * \return true if CRT is connected. - * \return false if CRT is disconnected. - */ -static bool psb_intel_crt_detect_hotplug(struct drm_connector *connector, bool force) -{ - struct drm_device *dev = connector->dev; - u32 hotplug_en, orig; - int i, tries = 0, ret = false; - - /* - * On 4 series desktop, CRT detect sequence need to be done twice - * to get a reliable result. - * This is also applied for CDV. - */ - - if (IS_CDV(dev)) - tries = 2; - else - tries = 1; - hotplug_en = orig = REG_READ(PORT_HOTPLUG_EN); - hotplug_en &= ~(CRT_HOTPLUG_DETECT_MASK); - hotplug_en |= CRT_HOTPLUG_FORCE_DETECT; - - if (IS_CDV(dev)) - hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64; - - hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50; - - for (i = 0; i < tries ; i++) { - unsigned long timeout; - /* turn on the FORCE_DETECT */ - REG_WRITE(PORT_HOTPLUG_EN, hotplug_en); - timeout = jiffies + msecs_to_jiffies(1000); - /* wait for FORCE_DETECT to go off */ - do { - if (!(REG_READ(PORT_HOTPLUG_EN) & - CRT_HOTPLUG_FORCE_DETECT)) - break; - msleep(1); - } while (time_after(timeout, jiffies)); - } - - if ((REG_READ(PORT_HOTPLUG_STAT) & CRT_HOTPLUG_MONITOR_MASK) != - CRT_HOTPLUG_MONITOR_NONE) - ret = true; - - /* clear the interrupt we just generated, if any */ - REG_WRITE(PORT_HOTPLUG_STAT, CRT_HOTPLUG_INT_STATUS); - - /* and put the bits back */ - REG_WRITE(PORT_HOTPLUG_EN, orig); - - return ret; -} - -static bool psb_intel_crt_detect_ddc(struct drm_connector *connector) -{ - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - - /* CRT should always be at 0, but check anyway */ - if (psb_intel_output->type != INTEL_OUTPUT_ANALOG) - return false; - - return psb_intel_ddc_probe(psb_intel_output); -} - - -static enum drm_connector_status psb_intel_crt_detect(struct drm_connector *connector, bool force) -{ - struct drm_device *dev = connector->dev; - - if (IS_CDV(dev)) { - if (psb_intel_crt_detect_hotplug(connector, force)) - return connector_status_connected; - else - return connector_status_disconnected; - } - - if (psb_intel_crt_detect_ddc(connector)) - return connector_status_connected; - - /* If it fails in hotplug/DDC detection, return disconnected */ - return connector_status_disconnected; -} - -static void psb_intel_crt_destroy(struct drm_connector *connector) -{ - struct psb_intel_output *intel_output = to_psb_intel_output(connector); - - psb_intel_i2c_destroy(intel_output->ddc_bus); - drm_sysfs_connector_remove(connector); - drm_connector_cleanup(connector); - kfree(connector); -} - -static int psb_intel_crt_get_modes(struct drm_connector *connector) -{ - int ret; - struct psb_intel_output *intel_output = - to_psb_intel_output(connector); - - - ret = psb_intel_ddc_get_modes(intel_output); - - return ret; - -} - -static int psb_intel_crt_set_property(struct drm_connector *connector, - struct drm_property *property, - uint64_t value) -{ - return 0; -} - -/* - * Routines for controlling stuff on the analog port - */ - -static const struct drm_encoder_helper_funcs psb_intel_crt_helper_funcs = { - .dpms = psb_intel_crt_dpms, - .mode_fixup = psb_intel_crt_mode_fixup, - .prepare = psb_intel_encoder_prepare, - .commit = psb_intel_encoder_commit, - .mode_set = psb_intel_crt_mode_set, -}; - -static const struct drm_connector_funcs psb_intel_crt_connector_funcs = { - .dpms = drm_helper_connector_dpms, - .detect = psb_intel_crt_detect, - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = psb_intel_crt_destroy, - .set_property = psb_intel_crt_set_property, -}; - -static const struct drm_connector_helper_funcs psb_intel_crt_connector_helper_funcs = { - .mode_valid = psb_intel_crt_mode_valid, - .get_modes = psb_intel_crt_get_modes, - .best_encoder = psb_intel_best_encoder, -}; - -static void psb_intel_crt_enc_destroy(struct drm_encoder *encoder) -{ - drm_encoder_cleanup(encoder); -} - -static const struct drm_encoder_funcs psb_intel_crt_enc_funcs = { - .destroy = psb_intel_crt_enc_destroy, -}; - -void psb_intel_crt_init(struct drm_device *dev, - struct psb_intel_mode_device *mode_dev) -{ - - struct psb_intel_output *psb_intel_output; - struct drm_connector *connector; - struct drm_encoder *encoder; - - u32 i2c_reg; - - psb_intel_output = kzalloc(sizeof(struct psb_intel_output), GFP_KERNEL); - if (!psb_intel_output) - return; - - psb_intel_output->mode_dev = mode_dev; - connector = &psb_intel_output->base; - drm_connector_init(dev, connector, - &psb_intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); - - encoder = &psb_intel_output->enc; - drm_encoder_init(dev, encoder, - &psb_intel_crt_enc_funcs, DRM_MODE_ENCODER_DAC); - - drm_mode_connector_attach_encoder(&psb_intel_output->base, - &psb_intel_output->enc); - - /* Set up the DDC bus. */ - i2c_reg = GPIOA; - /* Remove the following code for CDV */ - /* - if (dev_priv->crt_ddc_bus != 0) - i2c_reg = dev_priv->crt_ddc_bus; - }*/ - psb_intel_output->ddc_bus = psb_intel_i2c_create(dev, - i2c_reg, "CRTDDC_A"); - if (!psb_intel_output->ddc_bus) { - DRM_ERROR("DDC bus registration failed.\n"); - goto failed_ddc; - } - - psb_intel_output->type = INTEL_OUTPUT_ANALOG; - /* - psb_intel_output->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT); - psb_intel_output->crtc_mask = (1 << 0) | (1 << 1); - */ - connector->interlace_allowed = 0; - connector->doublescan_allowed = 0; - - connector->polled = DRM_CONNECTOR_POLL_HPD; - - drm_encoder_helper_add(encoder, &psb_intel_crt_helper_funcs); - drm_connector_helper_add(connector, &psb_intel_crt_connector_helper_funcs); - - drm_sysfs_connector_add(connector); - - return; -failed_ddc: - drm_encoder_cleanup(&psb_intel_output->enc); - drm_connector_cleanup(&psb_intel_output->base); - kfree(psb_intel_output); - return; -} diff --git a/drivers/staging/cdv/drv/psb_intel_display.c b/drivers/staging/cdv/drv/psb_intel_display.c deleted file mode 100644 index deddb27..0000000 --- a/drivers/staging/cdv/drv/psb_intel_display.c +++ /dev/null @@ -1,1675 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - */ - -#include -#include - -#include -#include "psb_fb.h" -#include "psb_drv.h" -#include "psb_intel_drv.h" -#include "psb_intel_reg.h" -#include "psb_intel_display.h" -#include "psb_powermgmt.h" - - -struct psb_intel_range_t { - int min, max; -}; - -struct psb_intel_p2_t { - int dot_limit; - int p2_slow, p2_fast; -}; - -#define INTEL_P2_NUM 2 - -struct psb_intel_limit_t { - struct psb_intel_range_t dot, vco, n, m, m1, m2, p, p1; - struct psb_intel_p2_t p2; -}; - -#define I8XX_DOT_MIN 25000 -#define I8XX_DOT_MAX 350000 -#define I8XX_VCO_MIN 930000 -#define I8XX_VCO_MAX 1400000 -#define I8XX_N_MIN 3 -#define I8XX_N_MAX 16 -#define I8XX_M_MIN 96 -#define I8XX_M_MAX 140 -#define I8XX_M1_MIN 18 -#define I8XX_M1_MAX 26 -#define I8XX_M2_MIN 6 -#define I8XX_M2_MAX 16 -#define I8XX_P_MIN 4 -#define I8XX_P_MAX 128 -#define I8XX_P1_MIN 2 -#define I8XX_P1_MAX 33 -#define I8XX_P1_LVDS_MIN 1 -#define I8XX_P1_LVDS_MAX 6 -#define I8XX_P2_SLOW 4 -#define I8XX_P2_FAST 2 -#define I8XX_P2_LVDS_SLOW 14 -#define I8XX_P2_LVDS_FAST 14 /* No fast option */ -#define I8XX_P2_SLOW_LIMIT 165000 - -#define I9XX_DOT_MIN 20000 -#define I9XX_DOT_MAX 400000 -#define I9XX_VCO_MIN 1400000 -#define I9XX_VCO_MAX 2800000 -#define I9XX_N_MIN 3 -#define I9XX_N_MAX 8 -#define I9XX_M_MIN 70 -#define I9XX_M_MAX 120 -#define I9XX_M1_MIN 10 -#define I9XX_M1_MAX 20 -#define I9XX_M2_MIN 5 -#define I9XX_M2_MAX 9 -#define I9XX_P_SDVO_DAC_MIN 5 -#define I9XX_P_SDVO_DAC_MAX 80 -#define I9XX_P_LVDS_MIN 7 -#define I9XX_P_LVDS_MAX 98 -#define I9XX_P1_MIN 1 -#define I9XX_P1_MAX 8 -#define I9XX_P2_SDVO_DAC_SLOW 10 -#define I9XX_P2_SDVO_DAC_FAST 5 -#define I9XX_P2_SDVO_DAC_SLOW_LIMIT 200000 -#define I9XX_P2_LVDS_SLOW 14 -#define I9XX_P2_LVDS_FAST 7 -#define I9XX_P2_LVDS_SLOW_LIMIT 112000 - -#define INTEL_LIMIT_I8XX_DVO_DAC 0 -#define INTEL_LIMIT_I8XX_LVDS 1 -#define INTEL_LIMIT_I9XX_SDVO_DAC 2 -#define INTEL_LIMIT_I9XX_LVDS 3 - -static const struct psb_intel_limit_t psb_intel_limits[] = { - { /* INTEL_LIMIT_I8XX_DVO_DAC */ - .dot = {.min = I8XX_DOT_MIN, .max = I8XX_DOT_MAX}, - .vco = {.min = I8XX_VCO_MIN, .max = I8XX_VCO_MAX}, - .n = {.min = I8XX_N_MIN, .max = I8XX_N_MAX}, - .m = {.min = I8XX_M_MIN, .max = I8XX_M_MAX}, - .m1 = {.min = I8XX_M1_MIN, .max = I8XX_M1_MAX}, - .m2 = {.min = I8XX_M2_MIN, .max = I8XX_M2_MAX}, - .p = {.min = I8XX_P_MIN, .max = I8XX_P_MAX}, - .p1 = {.min = I8XX_P1_MIN, .max = I8XX_P1_MAX}, - .p2 = {.dot_limit = I8XX_P2_SLOW_LIMIT, - .p2_slow = I8XX_P2_SLOW, .p2_fast = I8XX_P2_FAST}, - }, - { /* INTEL_LIMIT_I8XX_LVDS */ - .dot = {.min = I8XX_DOT_MIN, .max = I8XX_DOT_MAX}, - .vco = {.min = I8XX_VCO_MIN, .max = I8XX_VCO_MAX}, - .n = {.min = I8XX_N_MIN, .max = I8XX_N_MAX}, - .m = {.min = I8XX_M_MIN, .max = I8XX_M_MAX}, - .m1 = {.min = I8XX_M1_MIN, .max = I8XX_M1_MAX}, - .m2 = {.min = I8XX_M2_MIN, .max = I8XX_M2_MAX}, - .p = {.min = I8XX_P_MIN, .max = I8XX_P_MAX}, - .p1 = {.min = I8XX_P1_LVDS_MIN, .max = I8XX_P1_LVDS_MAX}, - .p2 = {.dot_limit = I8XX_P2_SLOW_LIMIT, - .p2_slow = I8XX_P2_LVDS_SLOW, .p2_fast = I8XX_P2_LVDS_FAST}, - }, - { /* INTEL_LIMIT_I9XX_SDVO_DAC */ - .dot = {.min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX}, - .vco = {.min = I9XX_VCO_MIN, .max = I9XX_VCO_MAX}, - .n = {.min = I9XX_N_MIN, .max = I9XX_N_MAX}, - .m = {.min = I9XX_M_MIN, .max = I9XX_M_MAX}, - .m1 = {.min = I9XX_M1_MIN, .max = I9XX_M1_MAX}, - .m2 = {.min = I9XX_M2_MIN, .max = I9XX_M2_MAX}, - .p = {.min = I9XX_P_SDVO_DAC_MIN, .max = I9XX_P_SDVO_DAC_MAX}, - .p1 = {.min = I9XX_P1_MIN, .max = I9XX_P1_MAX}, - .p2 = {.dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, - .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = - I9XX_P2_SDVO_DAC_FAST}, - }, - { /* INTEL_LIMIT_I9XX_LVDS */ - .dot = {.min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX}, - .vco = {.min = I9XX_VCO_MIN, .max = I9XX_VCO_MAX}, - .n = {.min = I9XX_N_MIN, .max = I9XX_N_MAX}, - .m = {.min = I9XX_M_MIN, .max = I9XX_M_MAX}, - .m1 = {.min = I9XX_M1_MIN, .max = I9XX_M1_MAX}, - .m2 = {.min = I9XX_M2_MIN, .max = I9XX_M2_MAX}, - .p = {.min = I9XX_P_LVDS_MIN, .max = I9XX_P_LVDS_MAX}, - .p1 = {.min = I9XX_P1_MIN, .max = I9XX_P1_MAX}, - /* The single-channel range is 25-112Mhz, and dual-channel - * is 80-224Mhz. Prefer single channel as much as possible. - */ - .p2 = {.dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, - .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_FAST}, - }, -}; -#define CDV_LIMIT_SINGLE_LVDS_96 0 -#define CDV_LIMIT_SINGLE_LVDS_100 1 -#define CDV_LIMIT_DAC_HDMI_27 2 -#define CDV_LIMIT_DAC_HDMI_96 3 -static const struct psb_intel_limit_t cdv_intel_limits[] = { - { /* CDV_SIGNLE_LVDS_96MHz */ - .dot = {.min = 20000, .max = 115500}, - .vco = {.min = 1800000, .max = 3600000}, - .n = {.min = 2, .max = 6}, - .m = {.min = 60, .max = 160}, - .m1 = {.min = 0, .max = 0}, - .m2 = {.min = 58, .max = 158}, - .p = {.min = 28, .max = 140}, - .p1 = {.min = 2, .max = 10}, - .p2 = {.dot_limit = 200000, - .p2_slow = 14, .p2_fast = 14}, - }, - { /* CDV_SINGLE_LVDS_100MHz */ - .dot = {.min = 20000, .max = 115500}, - .vco = {.min = 1800000, .max = 3600000}, - .n = {.min = 2, .max = 6}, - .m = {.min = 60, .max = 160}, - .m1 = {.min = 0, .max = 0}, - .m2 = {.min = 58, .max = 158}, - .p = {.min = 28, .max = 140}, - .p1 = {.min = 2, .max = 10}, - /* The single-channel range is 25-112Mhz, and dual-channel - * is 80-224Mhz. Prefer single channel as much as possible. - */ - .p2 = {.dot_limit = 200000, .p2_slow = 14, .p2_fast = 14}, - }, - { /* CDV_DAC_HDMI_27MHz */ - .dot = {.min = 20000, .max = 400000}, - .vco = {.min = 1809000, .max = 3564000}, - .n = {.min = 1, .max = 1}, - .m = {.min = 67, .max = 132}, - .m1 = {.min = 0, .max = 0}, - .m2 = {.min = 65, .max = 130}, - .p = {.min = 5, .max = 90}, - .p1 = {.min = 1, .max = 9}, - .p2 = {.dot_limit = 225000, .p2_slow = 10, .p2_fast = 5}, - }, - { /* CDV_DAC_HDMI_96MHz */ - .dot = {.min = 20000, .max = 400000}, - .vco = {.min = 1800000, .max = 3600000}, - .n = {.min = 2, .max = 6}, - .m = {.min = 60, .max = 160}, - .m1 = {.min = 0, .max = 0}, - .m2 = {.min = 58, .max = 158}, - .p = {.min = 5, .max = 100}, - .p1 = {.min = 1, .max = 10}, - .p2 = {.dot_limit = 225000, .p2_slow = 10, .p2_fast = 5}, - }, -}; - -static const struct psb_intel_limit_t *cdv_intel_limit(struct drm_crtc *crtc, int refclk) -{ - const struct psb_intel_limit_t *limit; - - DRM_DEBUG("ref clk is %d\n", refclk); - - if (psb_intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { - /* - * Now only single-channel LVDS is supported on CDV. If it is - * incorrect, please add the dual-channel LVDS. - */ - if (refclk == 96000) - limit = &cdv_intel_limits[CDV_LIMIT_SINGLE_LVDS_96]; - else - limit = &cdv_intel_limits[CDV_LIMIT_SINGLE_LVDS_100]; - } else { - if (refclk == 27000) - limit = &cdv_intel_limits[CDV_LIMIT_DAC_HDMI_27]; - else - limit = &cdv_intel_limits[CDV_LIMIT_DAC_HDMI_96]; - } - return limit; -} -/* On the CDV the M is written, which is similar to that on Pineview */ -/*static bool single_m_multiplier(struct drm_device *dev) -{ - return IS_CDV(dev); -} -*/ - -/** Derive the pixel clock for the given refclk and divisors for 8xx chips. */ -static void i8xx_clock(int refclk, struct psb_intel_clock_t *clock) -{ - clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2); - clock->p = clock->p1 * clock->p2; - clock->vco = refclk * clock->m / (clock->n + 2); - clock->dot = clock->vco / clock->p; -} - - -/* m1 is reserved as 0 in CDV, n is a ring counter */ -static void cdv_intel_clock(struct drm_device *dev, - int refclk, struct psb_intel_clock_t *clock) -{ - clock->m = clock->m2 + 2; - clock->p = clock->p1 * clock->p2; - clock->vco = (refclk * clock->m) / clock->n; - clock->dot = clock->vco / clock->p; -} - -/** - * Returns whether any output on the specified pipe is of the specified type - */ -bool psb_intel_pipe_has_type(struct drm_crtc *crtc, int type) -{ - struct drm_device *dev = crtc->dev; - struct drm_mode_config *mode_config = &dev->mode_config; - struct drm_connector *l_entry; - - list_for_each_entry(l_entry, &mode_config->connector_list, head) { - if (l_entry->encoder && l_entry->encoder->crtc == crtc) { - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(l_entry); - if (psb_intel_output->type == type) - return true; - } - } - return false; -} - -#define INTELPllInvalid(s) { /* ErrorF (s) */; return false; } -/** - * Returns whether the given set of divisors are valid for a given refclk with - * the given connectors. - */ - -static bool cdv_intel_PLL_is_valid(struct drm_crtc *crtc, - const struct psb_intel_limit_t *limit, - struct psb_intel_clock_t *clock) -{ - if (clock->p1 < limit->p1.min || limit->p1.max < clock->p1) - INTELPllInvalid("p1 out of range\n"); - if (clock->p < limit->p.min || limit->p.max < clock->p) - INTELPllInvalid("p out of range\n"); - /* unnecessary to check the range of m(m1/M2)/n again */ - /* - if (clock->m2 < limit->m2.min || limit->m2.max < clock->m2) - INTELPllInvalid("m2 out of range\n"); - if (clock->m < limit->m.min || limit->m.max < clock->m) - INTELPllInvalid("m out of range\n"); - if (clock->n < limit->n.min || limit->n.max < clock->n) - INTELPllInvalid("n out of range\n"); - */ - if (clock->vco < limit->vco.min || limit->vco.max < clock->vco) - INTELPllInvalid("vco out of range\n"); - /* XXX: We may need to be checking "Dot clock" - * depending on the multiplier, connector, etc., - * rather than just a single range. - */ - if (clock->dot < limit->dot.min || limit->dot.max < clock->dot) - INTELPllInvalid("dot out of range\n"); - - return true; -} - -static bool cdv_intel_find_best_PLL(struct drm_crtc *crtc, int target, - int refclk, - struct psb_intel_clock_t *best_clock) -{ - struct drm_device *dev = crtc->dev; - struct psb_intel_clock_t clock; - const struct psb_intel_limit_t *limit = cdv_intel_limit(crtc, refclk); - int err = target; - - - if (psb_intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) && - (REG_READ(LVDS) & LVDS_PORT_EN) != 0) { - /* - * For LVDS, if the panel is on, just rely on its current - * settings for dual-channel. We haven't figured out how to - * reliably set up different single/dual channel state, if we - * even can. - */ - if ((REG_READ(LVDS) & LVDS_CLKB_POWER_MASK) == - LVDS_CLKB_POWER_UP) - clock.p2 = limit->p2.p2_fast; - else - clock.p2 = limit->p2.p2_slow; - } else { - if (target < limit->p2.dot_limit) - clock.p2 = limit->p2.p2_slow; - else - clock.p2 = limit->p2.p2_fast; - } - - memset(best_clock, 0, sizeof(*best_clock)); - clock.m1 = 0; - /* m1 is reserved as 0 in CDV, n is a ring counter. So skip the m1 loop */ - for (clock.n = limit->n.min; clock.n <= limit->n.max; clock.n++) { - for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; - clock.m2++) { - for (clock.p1 = limit->p1.min; clock.p1 <= limit->p1.max; - clock.p1++) { - int this_err; - - cdv_intel_clock(dev, refclk, &clock); - - if (!cdv_intel_PLL_is_valid(crtc, limit, &clock)) - continue; - - this_err = abs(clock.dot - target); - if (this_err < err) { - *best_clock = clock; - err = this_err; - } - } - } - } - - return err != target; -} - -void psb_intel_wait_for_vblank(struct drm_device *dev) -{ - /* Wait for 20ms, i.e. one cycle at 50hz. */ - udelay(20000); -} - -static bool psb_intel_pipe_enabled(struct drm_device *dev, int pipe) -{ - struct drm_crtc *crtc; - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_crtc *psb_intel_crtc = NULL; - - crtc = dev_priv->pipe_to_crtc_mapping[pipe]; - psb_intel_crtc = to_psb_intel_crtc(crtc); - if (crtc->fb == NULL || !psb_intel_crtc->psb_crtc_active) { - return false; - } - return true; -} - -#define FIFO_PIPEA (1 << 0) -#define FIFO_PIPEB (1 << 1) -static void psb_intel_update_watermarks(struct drm_device *dev) -{ - uint32_t pipe_enabled; - - pipe_enabled = 0; - - if (psb_intel_pipe_enabled(dev, 0)) { - pipe_enabled |= FIFO_PIPEA; - } - if (psb_intel_pipe_enabled(dev, 1)) { - pipe_enabled |= FIFO_PIPEB; - } - - /* Now we have no latency spec. So use the default self-refresh watermark setting - * recommended from the spec. - * At the same time it will control the fifo entry size for the enabled - * pipe. When only one pipe is enabled, the available fifo - * entry size is about 0x70. - */ - if ((pipe_enabled == FIFO_PIPEA) || (pipe_enabled == FIFO_PIPEB)) { - if (pipe_enabled == FIFO_PIPEA) - /* the 0x70 fifo entry is allocated to Pipe A */ - REG_WRITE(DSPARB, 0x3F70); - else { - /* the first 16 entry is allocated to pipe A. And - * then the following 0x70 fifo entry is allocated - * to pipe B. - */ - REG_WRITE(DSPARB, 0x3F10); - } - /* enable the self refresh-bit */ - REG_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); - REG_READ(FW_BLC_SELF); - psb_intel_wait_for_vblank(dev); - } else { - REG_WRITE(DSPARB, 0x3F54); - /* when two pipe are enabled, it will use the fixed hardcode value. 0x3F54 */ - psb_intel_wait_for_vblank(dev); - /* As the SR is already disabled when calling crtc dpms callback function, - * it is unnecessary to disable it again - */ - // REG_WRITE(FW_BLC_SELF, REG_READ(FW_BLC_SEFL) & ~FW_BLC_SELF_EN)); - } - DRM_DEBUG_KMS("pipe enabled %x, REG %x = %x\n", pipe_enabled, FW_BLC_SELF, REG_READ(FW_BLC_SELF)); -} - -int psb_intel_pipe_set_base(struct drm_crtc *crtc, - int x, int y, struct drm_framebuffer *old_fb) -{ - struct drm_device *dev = crtc->dev; - /* struct drm_i915_master_private *master_priv; */ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - struct psb_framebuffer *psbfb = to_psb_fb(crtc->fb); - struct psb_intel_mode_device *mode_dev = psb_intel_crtc->mode_dev; - int pipe = psb_intel_crtc->pipe; - unsigned long Start, Offset; - int dspbase = (pipe == 0 ? DSPABASE : DSPBBASE); - int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF); - int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; - int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; - u32 dspcntr; - int ret = 0; - - PSB_DEBUG_ENTRY("\n"); - - /* no fb bound */ - if (!crtc->fb) { - DRM_DEBUG("No FB bound\n"); - return 0; - } - - Start = mode_dev->bo_offset(dev, psbfb); - Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); - - REG_WRITE(dspstride, crtc->fb->pitch); - - dspcntr = REG_READ(dspcntr_reg); - dspcntr &= ~DISPPLANE_PIXFORMAT_MASK; - - switch (crtc->fb->bits_per_pixel) { - case 8: - dspcntr |= DISPPLANE_8BPP; - break; - case 16: - if (crtc->fb->depth == 15) - dspcntr |= DISPPLANE_15_16BPP; - else - dspcntr |= DISPPLANE_16BPP; - break; - case 24: - case 32: - dspcntr |= DISPPLANE_32BPP_NO_ALPHA; - break; - default: - DRM_ERROR("Unknown color depth\n"); - ret = -EINVAL; - goto psb_intel_pipe_set_base_exit; - } - REG_WRITE(dspcntr_reg, dspcntr); - - DRM_DEBUG("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y); - if (IS_CDV(dev)) { - REG_WRITE(dspbase, Offset); - REG_READ(dspbase); - REG_WRITE(dspsurf, Start); - REG_READ(dspsurf); - } else { - REG_WRITE(dspbase, Start + Offset); - REG_READ(dspbase); - } - -psb_intel_pipe_set_base_exit: - - return ret; -} - -#define CRTC_FLIP_TIMEOUT 100 /* ms */ -#define LVDS_PIPEB 1 -#define MAX_FLIP_COUNTER 100 -static void psb_crtc_flip_timer(unsigned long arg) -{ - struct psb_intel_crtc *psb_crtc = (struct psb_intel_crtc *)arg; - struct drm_crtc *crtc = &psb_crtc->base; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)(crtc->dev->dev_private); - - if (dev_priv->psb_vsync_handler) - (dev_priv->psb_vsync_handler)(crtc->dev, psb_crtc->pipe); - - psb_crtc->flip_counter--; - if (dev_priv->vblanksEnabledForFlips && !psb_crtc->crtc_enable && - psb_crtc->flip_counter) { - mod_timer(&psb_crtc->flip_timer, jiffies + - msecs_to_jiffies(CRTC_FLIP_TIMEOUT)); - } -} - -/** - * Sets the power management mode of the pipe and plane. - * - * This code should probably grow support for turning the cursor off and back - * on appropriately at the same time as we're turning the pipe off/on. - */ -static void psb_intel_crtc_dpms(struct drm_crtc *crtc, int mode) -{ - struct drm_device *dev = crtc->dev; - /* struct drm_i915_master_private *master_priv; */ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int pipe = psb_intel_crtc->pipe; - int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; - int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; - int dspbase_reg = (pipe == 0) ? DSPABASE : DSPBBASE; - int pipeconf_reg = (pipe == 0) ? PIPEACONF : PIPEBCONF; - int pipestat_reg = (pipe == 0) ? PIPEASTAT : PIPEBSTAT; - u32 temp; - - /* XXX: When our outputs are all unaware of DPMS modes other than off - * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC. - */ - /* Disable SR */ - if (REG_READ(FW_BLC_SELF) & FW_BLC_SELF_EN) { - REG_WRITE(FW_BLC_SELF, (REG_READ(FW_BLC_SELF) & ~FW_BLC_SELF_EN)); - REG_READ(FW_BLC_SELF); - - psb_intel_wait_for_vblank(dev); - - REG_WRITE(OV_OVADD, dev_priv->ovl_offset); - psb_intel_wait_for_vblank(dev); - } - - switch (mode) { - case DRM_MODE_DPMS_ON: - case DRM_MODE_DPMS_STANDBY: - case DRM_MODE_DPMS_SUSPEND: - DRM_DEBUG_KMS("Turning on display in dpms on pipe: %d\n", pipe); - psb_intel_crtc->psb_crtc_active = 1; - /* Enable the DPLL */ - temp = REG_READ(dpll_reg); - if ((temp & DPLL_VCO_ENABLE) == 0) { - REG_WRITE(dpll_reg, temp); - REG_READ(dpll_reg); - /* Wait for the clocks to stabilize. */ - udelay(150); - REG_WRITE(dpll_reg, temp | DPLL_VCO_ENABLE); - REG_READ(dpll_reg); - /* Wait for the clocks to stabilize. */ - udelay(150); - REG_WRITE(dpll_reg, temp | DPLL_VCO_ENABLE); - REG_READ(dpll_reg); - /* Wait for the clocks to stabilize. */ - udelay(150); - } - - /* Jim Bish - switch plan and pipe per scott */ - /* Enable the plane */ - temp = REG_READ(dspcntr_reg); - if ((temp & DISPLAY_PLANE_ENABLE) == 0) { - REG_WRITE(dspcntr_reg, - temp | DISPLAY_PLANE_ENABLE); - /* Flush the plane changes */ - REG_WRITE(dspbase_reg, REG_READ(dspbase_reg)); - } - - udelay(150); - - /* Enable the pipe */ - temp = REG_READ(pipeconf_reg); - if ((temp & PIPEACONF_ENABLE) == 0) - REG_WRITE(pipeconf_reg, temp | PIPEACONF_ENABLE); - - temp = REG_READ(pipestat_reg); - temp &= ~(0xFFFF); - temp |= PIPE_FIFO_UNDERRUN; - REG_WRITE(pipestat_reg, temp); - REG_READ(pipestat_reg); - - psb_intel_crtc_load_lut(crtc); - - /* Give the overlay scaler a chance to enable - * if it's on this pipe */ - /* psb_intel_crtc_dpms_video(crtc, true); TODO */ - break; - case DRM_MODE_DPMS_OFF: - DRM_DEBUG_KMS("Turning off display in dpms on pipe: %d\n", pipe); - psb_intel_crtc->psb_crtc_active = 0; - /* Give the overlay scaler a chance to disable - * if it's on this pipe */ - /* psb_intel_crtc_dpms_video(crtc, FALSE); TODO */ - - /* Disable the VGA plane that we never use */ - REG_WRITE(VGACNTRL, VGA_DISP_DISABLE); - - drm_vblank_off(dev, pipe); - - /* Jim Bish - changed pipe/plane here as well. */ - - if (!IS_I9XX(dev)) { - /* Wait for vblank for the disable to take effect */ - psb_intel_wait_for_vblank(dev); - } - - /* Next, disable display pipes */ - temp = REG_READ(pipeconf_reg); - if ((temp & PIPEACONF_ENABLE) != 0) { - REG_WRITE(pipeconf_reg, temp & ~PIPEACONF_ENABLE); - REG_READ(pipeconf_reg); - } - - /* Wait for vblank for the disable to take effect. */ - psb_intel_wait_for_vblank(dev); - - /* Disable display plane */ - temp = REG_READ(dspcntr_reg); - if ((temp & DISPLAY_PLANE_ENABLE) != 0) { - REG_WRITE(dspcntr_reg, - temp & ~DISPLAY_PLANE_ENABLE); - /* Flush the plane changes */ - REG_WRITE(dspbase_reg, REG_READ(dspbase_reg)); - REG_READ(dspbase_reg); - } - - temp = REG_READ(dpll_reg); - if ((temp & DPLL_VCO_ENABLE) != 0) { - REG_WRITE(dpll_reg, temp & ~DPLL_VCO_ENABLE); - REG_READ(dpll_reg); - } - - /* Wait for the clocks to turn off. */ - udelay(150); - break; - } - - psb_intel_update_watermarks(dev); - if (mode == DRM_MODE_DPMS_OFF) { - psb_intel_crtc->crtc_enable = false; - if (dev_priv->vblanksEnabledForFlips && (psb_intel_crtc->pipe == LVDS_PIPEB)) { - psb_intel_crtc->flip_counter = MAX_FLIP_COUNTER; - mod_timer(&psb_intel_crtc->flip_timer, jiffies + - msecs_to_jiffies(CRTC_FLIP_TIMEOUT)); - } - } else { - psb_intel_crtc->crtc_enable = true; - psb_intel_crtc->flip_counter = 0; - del_timer(&psb_intel_crtc->flip_timer); - - } -} - -static void psb_intel_crtc_prepare(struct drm_crtc *crtc) -{ - struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; - crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); -} - -static void psb_intel_crtc_commit(struct drm_crtc *crtc) -{ - struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; - crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON); -} - -void psb_intel_encoder_prepare(struct drm_encoder *encoder) -{ - struct drm_encoder_helper_funcs *encoder_funcs = - encoder->helper_private; - /* lvds has its own version of prepare see psb_intel_lvds_prepare */ - encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF); -} - -void psb_intel_encoder_commit(struct drm_encoder *encoder) -{ - struct drm_encoder_helper_funcs *encoder_funcs = - encoder->helper_private; - /* lvds has its own version of commit see psb_intel_lvds_commit */ - encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON); -} - -static bool psb_intel_crtc_mode_fixup(struct drm_crtc *crtc, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - return true; -} - - -/** - * Return the pipe currently connected to the panel fitter, - * or -1 if the panel fitter is not present or not in use - */ -static int psb_intel_panel_fitter_pipe(struct drm_device *dev) -{ - u32 pfit_control; - - /* i830 doesn't have a panel fitter */ - if (IS_I830(dev)) - return -1; - - pfit_control = REG_READ(PFIT_CONTROL); - - /* See if the panel fitter is in use */ - if ((pfit_control & PFIT_ENABLE) == 0) - return -1; - - /* 965 can place panel fitter on either pipe */ - if (IS_I965G(dev) || IS_MID(dev)) - return (pfit_control >> 29) & 0x3; - - /* older chips can only use pipe 1 */ - return 1; -} - -static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode, - int x, int y, - struct drm_framebuffer *old_fb) -{ - struct drm_device *dev = crtc->dev; - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int pipe = psb_intel_crtc->pipe; - int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; - int dpll_md_reg = (psb_intel_crtc->pipe == 0) ? DPLL_A_MD : DPLL_B_MD; - int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; - int pipeconf_reg = (pipe == 0) ? PIPEACONF : PIPEBCONF; - int htot_reg = (pipe == 0) ? HTOTAL_A : HTOTAL_B; - int hblank_reg = (pipe == 0) ? HBLANK_A : HBLANK_B; - int hsync_reg = (pipe == 0) ? HSYNC_A : HSYNC_B; - int vtot_reg = (pipe == 0) ? VTOTAL_A : VTOTAL_B; - int vblank_reg = (pipe == 0) ? VBLANK_A : VBLANK_B; - int vsync_reg = (pipe == 0) ? VSYNC_A : VSYNC_B; - int dspsize_reg = (pipe == 0) ? DSPASIZE : DSPBSIZE; - int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS; - int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC; - int refclk; - struct psb_intel_clock_t clock; - u32 dpll = 0, dspcntr, pipeconf; - bool ok; - bool is_crt = false, is_lvds = false, is_tv = false; - bool is_hdmi = false; - struct drm_mode_config *mode_config = &dev->mode_config; - struct drm_connector *connector; - - DRM_DEBUG("cdv_intel_crtc_mode_set called for pipe %d\n", pipe); - - list_for_each_entry(connector, &mode_config->connector_list, head) { - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - - if (!connector->encoder - || connector->encoder->crtc != crtc) - continue; - - switch (psb_intel_output->type) { - case INTEL_OUTPUT_LVDS: - is_lvds = true; - break; - case INTEL_OUTPUT_TVOUT: - is_tv = true; - break; - case INTEL_OUTPUT_ANALOG: - is_crt = true; - break; - case INTEL_OUTPUT_HDMI: - is_hdmi = true; - break; - default: - DRM_ERROR("Unsupported output type!\n"); - return 0; - } - } - - if (IS_I9XX(dev) || IS_CDV(dev)) - refclk = 96000; - else - refclk = 48000; - - /* Hack selection about ref clk for CRT */ - /* Select 27MHz as the reference clk for HDMI */ - if (is_crt || is_hdmi) - refclk = 27000; - - if (pipe == 0 && dev_priv->dplla_96mhz) - refclk = 96000; - - drm_mode_debug_printmodeline(adjusted_mode); - - ok = cdv_intel_find_best_PLL(crtc, adjusted_mode->clock, refclk, - &clock); - if (!ok) { - DRM_ERROR("Couldn't find PLL settings for mode!\n"); - return 0; - } - if (REG_READ(FW_BLC_SELF) & FW_BLC_SELF_EN) { - REG_WRITE(FW_BLC_SELF, (REG_READ(FW_BLC_SELF) & ~FW_BLC_SELF_EN)); - REG_READ(FW_BLC_SELF); - psb_intel_wait_for_vblank(dev); - - REG_WRITE(OV_OVADD, dev_priv->ovl_offset); - psb_intel_wait_for_vblank(dev); - } - - dpll = DPLL_VGA_MODE_DIS; - if (is_tv) { - /* XXX: just matching BIOS for now */ -/* dpll |= PLL_REF_INPUT_TVCLKINBC; */ - dpll |= 3; - } -#if 0 - else if (is_lvds) - dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; - -#endif - dpll |= PLL_REF_INPUT_DREFCLK; - - if( IS_CDV(dev) ) { - dpll |= DPLL_SYNCLOCK_ENABLE; - dpll |= DPLL_VGA_MODE_DIS; - if (is_lvds) - dpll |= DPLLB_MODE_LVDS; - else - dpll |= DPLLB_MODE_DAC_SERIAL; - //dpll |= (2 << 11); - } - - /* setup pipeconf */ - pipeconf = REG_READ(pipeconf_reg); - - /* Set up the display plane register */ - dspcntr = DISPPLANE_GAMMA_ENABLE; - - if (pipe == 0) - dspcntr |= DISPPLANE_SEL_PIPE_A; - else - dspcntr |= DISPPLANE_SEL_PIPE_B; - - dspcntr |= DISPLAY_PLANE_ENABLE; - pipeconf |= PIPEACONF_ENABLE; - - REG_WRITE(dpll_reg, - dpll | DPLL_VGA_MODE_DIS | - DPLL_SYNCLOCK_ENABLE); - REG_READ(dpll_reg); - - psb_dpll_set_clock_cdv(dev, crtc, &clock); - - udelay(150); - - - /* The LVDS pin pair needs to be on before the DPLLs are enabled. - * This is an exception to the general rule that mode_set doesn't turn - * things on. - */ - if (is_lvds) { - u32 lvds = REG_READ(LVDS); - - lvds |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP | - LVDS_PIPEB_SELECT; - /* Set the B0-B3 data pairs corresponding to - * whether we're going to - * set the DPLLs for dual-channel mode or not. - */ - if (clock.p2 == 7) - lvds |= LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP; - else - lvds &= ~(LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP); - - /* It would be nice to set 24 vs 18-bit mode (LVDS_A3_POWER_UP) - * appropriately here, but we need to look more - * thoroughly into how panels behave in the two modes. - */ - - REG_WRITE(LVDS, lvds); - REG_READ(LVDS); - } - - dpll |= DPLL_VCO_ENABLE; - - - /* Disable the panel fitter if it was on our pipe */ - if (psb_intel_panel_fitter_pipe(dev) == pipe) - REG_WRITE(PFIT_CONTROL, 0); - - DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); - drm_mode_debug_printmodeline(mode); - - REG_WRITE(dpll_reg, - (REG_READ(dpll_reg) & ~DPLL_LOCK) | - DPLL_VCO_ENABLE); - REG_READ(dpll_reg); - /* Wait for the clocks to stabilize. */ - udelay(150); /* 42 usec w/o calibration, 110 with. rounded up. */ - - if (!(REG_READ(dpll_reg) & DPLL_LOCK)) { - DRM_ERROR("Failed to get DPLL lock\n"); - return -EBUSY; - } - - if (IS_CDV(dev)) { - int sdvo_pixel_multiply = - adjusted_mode->clock / mode->clock; - REG_WRITE(dpll_md_reg, - (0 << DPLL_MD_UDI_DIVIDER_SHIFT) | - ((sdvo_pixel_multiply - - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT)); - } - - REG_WRITE(htot_reg, (adjusted_mode->crtc_hdisplay - 1) | - ((adjusted_mode->crtc_htotal - 1) << 16)); - REG_WRITE(hblank_reg, (adjusted_mode->crtc_hblank_start - 1) | - ((adjusted_mode->crtc_hblank_end - 1) << 16)); - REG_WRITE(hsync_reg, (adjusted_mode->crtc_hsync_start - 1) | - ((adjusted_mode->crtc_hsync_end - 1) << 16)); - REG_WRITE(vtot_reg, (adjusted_mode->crtc_vdisplay - 1) | - ((adjusted_mode->crtc_vtotal - 1) << 16)); - REG_WRITE(vblank_reg, (adjusted_mode->crtc_vblank_start - 1) | - ((adjusted_mode->crtc_vblank_end - 1) << 16)); - REG_WRITE(vsync_reg, (adjusted_mode->crtc_vsync_start - 1) | - ((adjusted_mode->crtc_vsync_end - 1) << 16)); - /* pipesrc and dspsize control the size that is scaled from, - * which should always be the user's requested size. - */ - REG_WRITE(dspsize_reg, - ((mode->vdisplay - 1) << 16) | (mode->hdisplay - 1)); - REG_WRITE(dsppos_reg, 0); - REG_WRITE(pipesrc_reg, - ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1)); - REG_WRITE(pipeconf_reg, pipeconf); - REG_READ(pipeconf_reg); - - psb_intel_wait_for_vblank(dev); - - REG_WRITE(dspcntr_reg, dspcntr); - - /* Flush the plane changes */ - { - struct drm_crtc_helper_funcs *crtc_funcs = - crtc->helper_private; - crtc_funcs->mode_set_base(crtc, x, y, old_fb); - } - - psb_intel_wait_for_vblank(dev); - - return 0; -} - -/** Loads the palette/gamma unit for the CRTC with the prepared values */ -void psb_intel_crtc_load_lut(struct drm_crtc *crtc) -{ - struct drm_device *dev = crtc->dev; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int palreg = PALETTE_A; - int i; - - /* The clocks have to be on to load the palette. */ - if (!crtc->enabled) - return; - - switch (psb_intel_crtc->pipe) { - case 0: - break; - case 1: - palreg = PALETTE_B; - break; - case 2: - palreg = PALETTE_C; - break; - default: - DRM_ERROR("Illegal Pipe Number. \n"); - return; - } - - for (i = 0; i < 256; i++) { - REG_WRITE(palreg + 4 * i, - ((psb_intel_crtc->lut_r[i] + - psb_intel_crtc->lut_adj[i]) << 16) | - ((psb_intel_crtc->lut_g[i] + - psb_intel_crtc->lut_adj[i]) << 8) | - (psb_intel_crtc->lut_b[i] + - psb_intel_crtc->lut_adj[i])); - } -} - -/** - * Save HW states of giving crtc - */ -static void psb_intel_crtc_save(struct drm_crtc *crtc) -{ - struct drm_device *dev = crtc->dev; - /* struct drm_psb_private *dev_priv = - (struct drm_psb_private *)dev->dev_private; */ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - struct psb_intel_crtc_state *crtc_state = psb_intel_crtc->crtc_state; - int pipeA = (psb_intel_crtc->pipe == 0); - uint32_t paletteReg; - int i; - - DRM_DEBUG("\n"); - - if (!crtc_state) { - DRM_DEBUG("No CRTC state found\n"); - return; - } - - crtc_state->saveDSPCNTR = REG_READ(pipeA ? DSPACNTR : DSPBCNTR); - crtc_state->savePIPECONF = REG_READ(pipeA ? PIPEACONF : PIPEBCONF); - crtc_state->savePIPESRC = REG_READ(pipeA ? PIPEASRC : PIPEBSRC); - crtc_state->saveFP0 = REG_READ(pipeA ? FPA0 : FPB0); - crtc_state->saveFP1 = REG_READ(pipeA ? FPA1 : FPB1); - crtc_state->saveDPLL = REG_READ(pipeA ? DPLL_A : DPLL_B); - crtc_state->saveHTOTAL = REG_READ(pipeA ? HTOTAL_A : HTOTAL_B); - crtc_state->saveHBLANK = REG_READ(pipeA ? HBLANK_A : HBLANK_B); - crtc_state->saveHSYNC = REG_READ(pipeA ? HSYNC_A : HSYNC_B); - crtc_state->saveVTOTAL = REG_READ(pipeA ? VTOTAL_A : VTOTAL_B); - crtc_state->saveVBLANK = REG_READ(pipeA ? VBLANK_A : VBLANK_B); - crtc_state->saveVSYNC = REG_READ(pipeA ? VSYNC_A : VSYNC_B); - crtc_state->saveDSPSTRIDE = REG_READ(pipeA ? DSPASTRIDE : DSPBSTRIDE); - - /*NOTE: DSPSIZE DSPPOS only for psb*/ - crtc_state->saveDSPSIZE = REG_READ(pipeA ? DSPASIZE : DSPBSIZE); - crtc_state->saveDSPPOS = REG_READ(pipeA ? DSPAPOS : DSPBPOS); - - crtc_state->saveDSPBASE = REG_READ(pipeA ? DSPABASE : DSPBBASE); - - DRM_DEBUG("(%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n", - crtc_state->saveDSPCNTR, - crtc_state->savePIPECONF, - crtc_state->savePIPESRC, - crtc_state->saveFP0, - crtc_state->saveFP1, - crtc_state->saveDPLL, - crtc_state->saveHTOTAL, - crtc_state->saveHBLANK, - crtc_state->saveHSYNC, - crtc_state->saveVTOTAL, - crtc_state->saveVBLANK, - crtc_state->saveVSYNC, - crtc_state->saveDSPSTRIDE, - crtc_state->saveDSPSIZE, - crtc_state->saveDSPPOS, - crtc_state->saveDSPBASE - ); - - paletteReg = pipeA ? PALETTE_A : PALETTE_B; - for (i = 0; i < 256; ++i) - crtc_state->savePalette[i] = REG_READ(paletteReg + (i << 2)); -} - -/** - * Restore HW states of giving crtc - */ -static void psb_intel_crtc_restore(struct drm_crtc *crtc) -{ - struct drm_device *dev = crtc->dev; - /* struct drm_psb_private * dev_priv = - (struct drm_psb_private *)dev->dev_private; */ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - struct psb_intel_crtc_state *crtc_state = psb_intel_crtc->crtc_state; - /* struct drm_crtc_helper_funcs * crtc_funcs = crtc->helper_private; */ - int pipeA = (psb_intel_crtc->pipe == 0); - uint32_t paletteReg; - int i; - - DRM_DEBUG("\n"); - - if (!crtc_state) { - DRM_DEBUG("No crtc state\n"); - return; - } - - DRM_DEBUG( - "current:(%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n", - REG_READ(pipeA ? DSPACNTR : DSPBCNTR), - REG_READ(pipeA ? PIPEACONF : PIPEBCONF), - REG_READ(pipeA ? PIPEASRC : PIPEBSRC), - REG_READ(pipeA ? FPA0 : FPB0), - REG_READ(pipeA ? FPA1 : FPB1), - REG_READ(pipeA ? DPLL_A : DPLL_B), - REG_READ(pipeA ? HTOTAL_A : HTOTAL_B), - REG_READ(pipeA ? HBLANK_A : HBLANK_B), - REG_READ(pipeA ? HSYNC_A : HSYNC_B), - REG_READ(pipeA ? VTOTAL_A : VTOTAL_B), - REG_READ(pipeA ? VBLANK_A : VBLANK_B), - REG_READ(pipeA ? VSYNC_A : VSYNC_B), - REG_READ(pipeA ? DSPASTRIDE : DSPBSTRIDE), - REG_READ(pipeA ? DSPASIZE : DSPBSIZE), - REG_READ(pipeA ? DSPAPOS : DSPBPOS), - REG_READ(pipeA ? DSPABASE : DSPBBASE) - ); - - DRM_DEBUG( - "saved: (%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x)\n", - crtc_state->saveDSPCNTR, - crtc_state->savePIPECONF, - crtc_state->savePIPESRC, - crtc_state->saveFP0, - crtc_state->saveFP1, - crtc_state->saveDPLL, - crtc_state->saveHTOTAL, - crtc_state->saveHBLANK, - crtc_state->saveHSYNC, - crtc_state->saveVTOTAL, - crtc_state->saveVBLANK, - crtc_state->saveVSYNC, - crtc_state->saveDSPSTRIDE, - crtc_state->saveDSPSIZE, - crtc_state->saveDSPPOS, - crtc_state->saveDSPBASE - ); - - -#if 0 - if (drm_helper_crtc_in_use(crtc)) - crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); - - - if (psb_intel_panel_fitter_pipe(dev) == psb_intel_crtc->pipe) { - REG_WRITE(PFIT_CONTROL, crtc_state->savePFITCTRL); - DRM_DEBUG("write pfit_controle: %x\n", REG_READ(PFIT_CONTROL)); - } -#endif - - if (crtc_state->saveDPLL & DPLL_VCO_ENABLE) { - REG_WRITE(pipeA ? DPLL_A : DPLL_B, - crtc_state->saveDPLL & ~DPLL_VCO_ENABLE); - REG_READ(pipeA ? DPLL_A : DPLL_B); - DRM_DEBUG("write dpll: %x\n", - REG_READ(pipeA ? DPLL_A : DPLL_B)); - udelay(150); - } - - REG_WRITE(pipeA ? FPA0 : FPB0, crtc_state->saveFP0); - REG_READ(pipeA ? FPA0 : FPB0); - - REG_WRITE(pipeA ? FPA1 : FPB1, crtc_state->saveFP1); - REG_READ(pipeA ? FPA1 : FPB1); - - REG_WRITE(pipeA ? DPLL_A : DPLL_B, crtc_state->saveDPLL); - REG_READ(pipeA ? DPLL_A : DPLL_B); - udelay(150); - - REG_WRITE(pipeA ? HTOTAL_A : HTOTAL_B, crtc_state->saveHTOTAL); - REG_WRITE(pipeA ? HBLANK_A : HBLANK_B, crtc_state->saveHBLANK); - REG_WRITE(pipeA ? HSYNC_A : HSYNC_B, crtc_state->saveHSYNC); - REG_WRITE(pipeA ? VTOTAL_A : VTOTAL_B, crtc_state->saveVTOTAL); - REG_WRITE(pipeA ? VBLANK_A : VBLANK_B, crtc_state->saveVBLANK); - REG_WRITE(pipeA ? VSYNC_A : VSYNC_B, crtc_state->saveVSYNC); - REG_WRITE(pipeA ? DSPASTRIDE : DSPBSTRIDE, crtc_state->saveDSPSTRIDE); - - REG_WRITE(pipeA ? DSPASIZE : DSPBSIZE, crtc_state->saveDSPSIZE); - REG_WRITE(pipeA ? DSPAPOS : DSPBPOS, crtc_state->saveDSPPOS); - - REG_WRITE(pipeA ? PIPEASRC : PIPEBSRC, crtc_state->savePIPESRC); - REG_WRITE(pipeA ? DSPABASE : DSPBBASE, crtc_state->saveDSPBASE); - REG_WRITE(pipeA ? PIPEACONF : PIPEBCONF, crtc_state->savePIPECONF); - - psb_intel_wait_for_vblank(dev); - - REG_WRITE(pipeA ? DSPACNTR : DSPBCNTR, crtc_state->saveDSPCNTR); - REG_WRITE(pipeA ? DSPABASE : DSPBBASE, crtc_state->saveDSPBASE); - - psb_intel_wait_for_vblank(dev); - - paletteReg = pipeA ? PALETTE_A : PALETTE_B; - for (i = 0; i < 256; ++i) - REG_WRITE(paletteReg + (i << 2), crtc_state->savePalette[i]); -} - -static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, - struct drm_file *file_priv, - uint32_t handle, - uint32_t width, uint32_t height) -{ - struct drm_device *dev = crtc->dev; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - struct psb_intel_mode_device *mode_dev = psb_intel_crtc->mode_dev; - int pipe = psb_intel_crtc->pipe; - uint32_t control = (pipe == 0) ? CURACNTR : CURBCNTR; - uint32_t base = (pipe == 0) ? CURABASE : CURBBASE; - uint32_t temp; - size_t addr = 0; - uint32_t page_offset; - size_t size; - void *bo; - int ret; - - DRM_DEBUG("\n"); - - /* if we want to turn of the cursor ignore width and height */ - if (!handle) { - DRM_DEBUG("cursor off\n"); - /* turn off the cursor */ - temp = 0; - temp |= CURSOR_MODE_DISABLE; - - REG_WRITE(control, temp); - REG_WRITE(base, 0); - - /* unpin the old bo */ - if (psb_intel_crtc->cursor_bo) { - mode_dev->bo_unpin_for_scanout(dev, - psb_intel_crtc->cursor_bo); - psb_intel_crtc->cursor_bo = NULL; - } - - if (psb_intel_crtc->cursor_handle) { - psb_gtt_unmap_meminfo(dev, psb_intel_crtc->cursor_handle); - psb_intel_crtc->cursor_handle = NULL; - } - - return 0; - } - - /* Currently we only support 64x64 cursors */ - if (width != 64 || height != 64) { - DRM_ERROR("we currently only support 64x64 cursors\n"); - return -EINVAL; - } - - bo = mode_dev->bo_from_handle(dev, file_priv, handle); - if (!bo) - return -ENOENT; - - ret = mode_dev->bo_pin_for_scanout(dev, bo); - if (ret) - return ret; - size = mode_dev->bo_size(dev, bo); - if (size < width * height * 4) { - DRM_ERROR("buffer is to small\n"); - return -ENOMEM; - } - - /*insert this bo into gtt*/ - DRM_DEBUG("%s: map meminfo for hw cursor. handle %x\n", - __func__, handle); - - ret = psb_gtt_map_meminfo(dev, (IMG_HANDLE)handle, &page_offset); - if (ret) { - DRM_ERROR("Can not map meminfo to GTT. handle 0x%x\n", handle); - return ret; - } - - addr = page_offset << PAGE_SHIFT; - - - psb_intel_crtc->cursor_addr = addr; - - temp = 0; - /* set the pipe for the cursor */ - temp |= (pipe << 28); - temp |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE; - - REG_WRITE(control, temp); - REG_WRITE(base, addr); - - /* unpin the old bo */ - if (psb_intel_crtc->cursor_bo && psb_intel_crtc->cursor_bo != bo) - mode_dev->bo_unpin_for_scanout(dev, psb_intel_crtc->cursor_bo); - - psb_intel_crtc->cursor_bo = bo; - - if (psb_intel_crtc->cursor_handle && psb_intel_crtc->cursor_handle != (void *)handle) - psb_gtt_unmap_meminfo(dev, psb_intel_crtc->cursor_handle); - - psb_intel_crtc->cursor_handle = (IMG_HANDLE)handle; - - return 0; -} - -static int psb_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) -{ - struct drm_device *dev = crtc->dev; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int pipe = psb_intel_crtc->pipe; - uint32_t temp = 0; - uint32_t adder; - - - if (x < 0) { - temp |= (CURSOR_POS_SIGN << CURSOR_X_SHIFT); - x = -x; - } - if (y < 0) { - temp |= (CURSOR_POS_SIGN << CURSOR_Y_SHIFT); - y = -y; - } - - temp |= ((x & CURSOR_POS_MASK) << CURSOR_X_SHIFT); - temp |= ((y & CURSOR_POS_MASK) << CURSOR_Y_SHIFT); - - adder = psb_intel_crtc->cursor_addr; - - REG_WRITE((pipe == 0) ? CURAPOS : CURBPOS, temp); - REG_WRITE((pipe == 0) ? CURABASE : CURBBASE, adder); - - return 0; -} - -static void psb_intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, - u16 *green, u16 *blue, uint32_t start, uint32_t size) -{ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int i; - int end = (start + size > 256) ? 256 : start + size; - - for (i = start; i < end; i++) { - psb_intel_crtc->lut_r[i] = red[i] >> 8; - psb_intel_crtc->lut_g[i] = green[i] >> 8; - psb_intel_crtc->lut_b[i] = blue[i] >> 8; - } - - psb_intel_crtc_load_lut(crtc); -} - -static int psb_crtc_set_config(struct drm_mode_set *set) -{ - int ret = 0; - struct drm_device * dev = set->crtc->dev; - struct drm_psb_private * dev_priv = dev->dev_private; - - if(!dev_priv->rpm_enabled) - return drm_crtc_helper_set_config(set); - - pm_runtime_forbid(&dev->pdev->dev); - - ret = drm_crtc_helper_set_config(set); - - pm_runtime_allow(&dev->pdev->dev); - - return ret; -} - -/* Returns the clock of the currently programmed mode of the given pipe. */ -static int psb_intel_crtc_clock_get(struct drm_device *dev, - struct drm_crtc *crtc) -{ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int pipe = psb_intel_crtc->pipe; - u32 dpll; - u32 fp; - struct psb_intel_clock_t clock; - bool is_lvds; - - dpll = REG_READ((pipe == 0) ? DPLL_A : DPLL_B); - if ((dpll & DISPLAY_RATE_SELECT_FPA1) == 0) - fp = REG_READ((pipe == 0) ? FPA0 : FPB0); - else - fp = REG_READ((pipe == 0) ? FPA1 : FPB1); - is_lvds = (pipe == 1) && (REG_READ(LVDS) & LVDS_PORT_EN); - - clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT; - clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT; - clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT; - - if (is_lvds) { - clock.p1 = - ffs((dpll & - DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >> - DPLL_FPA01_P1_POST_DIV_SHIFT); - clock.p2 = 14; - - if ((dpll & PLL_REF_INPUT_MASK) == - PLLB_REF_INPUT_SPREADSPECTRUMIN) { - /* XXX: might not be 66MHz */ - i8xx_clock(66000, &clock); - } else - i8xx_clock(48000, &clock); - } else { - if (dpll & PLL_P1_DIVIDE_BY_TWO) - clock.p1 = 2; - else { - clock.p1 = - ((dpll & - DPLL_FPA01_P1_POST_DIV_MASK_I830) >> - DPLL_FPA01_P1_POST_DIV_SHIFT) + 2; - } - if (dpll & PLL_P2_DIVIDE_BY_4) - clock.p2 = 4; - else - clock.p2 = 2; - - i8xx_clock(48000, &clock); - } - - /* XXX: It would be nice to validate the clocks, but we can't reuse - * i830PllIsValid() because it relies on the xf86_config connector - * configuration being accurate, which it isn't necessarily. - */ - - return clock.dot; -} - -/** Returns the currently programmed mode of the given pipe. */ -struct drm_display_mode *psb_intel_crtc_mode_get(struct drm_device *dev, - struct drm_crtc *crtc) -{ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - int pipe = psb_intel_crtc->pipe; - struct drm_display_mode *mode; - int htot; - int hsync; - int vtot; - int vsync; - - htot = REG_READ((pipe == 0) ? HTOTAL_A : HTOTAL_B); - hsync = REG_READ((pipe == 0) ? HSYNC_A : HSYNC_B); - vtot = REG_READ((pipe == 0) ? VTOTAL_A : VTOTAL_B); - vsync = REG_READ((pipe == 0) ? VSYNC_A : VSYNC_B); - - mode = kzalloc(sizeof(*mode), GFP_KERNEL); - if (!mode) - return NULL; - - mode->clock = psb_intel_crtc_clock_get(dev, crtc); - mode->hdisplay = (htot & 0xffff) + 1; - mode->htotal = ((htot & 0xffff0000) >> 16) + 1; - mode->hsync_start = (hsync & 0xffff) + 1; - mode->hsync_end = ((hsync & 0xffff0000) >> 16) + 1; - mode->vdisplay = (vtot & 0xffff) + 1; - mode->vtotal = ((vtot & 0xffff0000) >> 16) + 1; - mode->vsync_start = (vsync & 0xffff) + 1; - mode->vsync_end = ((vsync & 0xffff0000) >> 16) + 1; - - drm_mode_set_name(mode); - drm_mode_set_crtcinfo(mode, 0); - - return mode; -} - -static void psb_intel_crtc_destroy(struct drm_crtc *crtc) -{ - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - - kfree(psb_intel_crtc->crtc_state); - drm_crtc_cleanup(crtc); - kfree(psb_intel_crtc); -} - -static const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = { - .dpms = psb_intel_crtc_dpms, - .mode_fixup = psb_intel_crtc_mode_fixup, - .mode_set = cdv_intel_crtc_mode_set, - .mode_set_base = psb_intel_pipe_set_base, - .prepare = psb_intel_crtc_prepare, - .commit = psb_intel_crtc_commit, -}; - -const struct drm_crtc_funcs psb_intel_crtc_funcs = { - .save = psb_intel_crtc_save, - .restore = psb_intel_crtc_restore, - .cursor_set = psb_intel_crtc_cursor_set, - .cursor_move = psb_intel_crtc_cursor_move, - .gamma_set = psb_intel_crtc_gamma_set, - .set_config = psb_crtc_set_config, - .destroy = psb_intel_crtc_destroy, -}; - -/* - * Set the default value of cursor control and base register - * to zero. This is a workaround for h/w defect on oaktrail - */ -void psb_intel_cursor_init(struct drm_device *dev, int pipe) -{ - uint32_t control; - uint32_t base; - - switch (pipe) { - case 0: - control = CURACNTR; - base = CURABASE; - break; - case 1: - control = CURBCNTR; - base = CURBBASE; - break; - case 2: - control = CURCCNTR; - base = CURCBASE; - break; - default: - return; - } - - REG_WRITE(control, 0); - REG_WRITE(base, 0); -} - -void psb_intel_crtc_init(struct drm_device *dev, int pipe, - struct psb_intel_mode_device *mode_dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_crtc *psb_intel_crtc; - int i; - uint16_t *r_base, *g_base, *b_base; - - PSB_DEBUG_ENTRY("\n"); - - /* We allocate a extra array of drm_connector pointers - * for fbdev after the crtc */ - psb_intel_crtc = kzalloc(sizeof(struct psb_intel_crtc) + - (INTELFB_CONN_LIMIT * sizeof(struct drm_connector *)), - GFP_KERNEL); - if (psb_intel_crtc == NULL) - return; - - psb_intel_crtc->crtc_state = kzalloc(sizeof(struct psb_intel_crtc_state), - GFP_KERNEL); - if (!psb_intel_crtc->crtc_state) { - DRM_ERROR("Crtc state error: No memory\n"); - kfree(psb_intel_crtc); - return; - } - - drm_crtc_init(dev, &psb_intel_crtc->base, &psb_intel_crtc_funcs); - - drm_mode_crtc_set_gamma_size(&psb_intel_crtc->base, 256); - psb_intel_crtc->pipe = pipe; - psb_intel_crtc->plane = pipe; - - r_base = psb_intel_crtc->base.gamma_store; - g_base = r_base + 256; - b_base = g_base + 256; - for (i = 0; i < 256; i++) { - psb_intel_crtc->lut_r[i] = i; - psb_intel_crtc->lut_g[i] = i; - psb_intel_crtc->lut_b[i] = i; - r_base[i] = i << 8; - g_base[i] = i << 8; - b_base[i] = i << 8; - - psb_intel_crtc->lut_adj[i] = 0; - } - - psb_intel_crtc->mode_dev = mode_dev; - psb_intel_crtc->cursor_addr = 0; - - drm_crtc_helper_add(&psb_intel_crtc->base, - &cdv_intel_helper_funcs); - - /* Setup the array of drm_connector pointer array */ - psb_intel_crtc->mode_set.crtc = &psb_intel_crtc->base; - BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) || - dev_priv->plane_to_crtc_mapping[psb_intel_crtc->plane] != NULL); - dev_priv->plane_to_crtc_mapping[psb_intel_crtc->plane] = &psb_intel_crtc->base; - dev_priv->pipe_to_crtc_mapping[psb_intel_crtc->pipe] = &psb_intel_crtc->base; - psb_intel_crtc->mode_set.connectors = - (struct drm_connector **) (psb_intel_crtc + 1); - psb_intel_crtc->mode_set.num_connectors = 0; - - psb_intel_cursor_init(dev, pipe); - - init_timer(&psb_intel_crtc->flip_timer); - psb_intel_crtc->flip_timer.function = psb_crtc_flip_timer; - psb_intel_crtc->flip_timer.data = (unsigned long)psb_intel_crtc; - psb_intel_crtc->crtc_enable = false; -} - -int psb_intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct drm_psb_get_pipe_from_crtc_id_arg *pipe_from_crtc_id = data; - struct drm_mode_object *drmmode_obj; - struct psb_intel_crtc *crtc; - - if (!dev_priv) { - DRM_ERROR("called with no initialization\n"); - return -EINVAL; - } - - drmmode_obj = drm_mode_object_find(dev, pipe_from_crtc_id->crtc_id, - DRM_MODE_OBJECT_CRTC); - - if (!drmmode_obj) { - DRM_ERROR("no such CRTC id\n"); - return -EINVAL; - } - - crtc = to_psb_intel_crtc(obj_to_crtc(drmmode_obj)); - pipe_from_crtc_id->pipe = crtc->pipe; - - return 0; -} - -struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, int pipe) -{ - struct drm_crtc *crtc = NULL; - - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - if (psb_intel_crtc->pipe == pipe) - break; - } - return crtc; -} - -int psb_intel_connector_clones(struct drm_device *dev, int type_mask) -{ - int index_mask = 0; - struct drm_connector *connector; - int entry = 0; - - list_for_each_entry(connector, &dev->mode_config.connector_list, - head) { - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - if (type_mask & (1 << psb_intel_output->type)) - index_mask |= (1 << entry); - entry++; - } - return index_mask; -} - -void psb_intel_modeset_cleanup(struct drm_device *dev) -{ - struct drm_crtc *crtc; - struct psb_intel_crtc *psb_intel_crtc; - - /* Shut off flip_timer before the crtcs get freed. */ - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { - psb_intel_crtc = to_psb_intel_crtc(crtc); - del_timer_sync(&psb_intel_crtc->flip_timer); - } - - drm_mode_config_cleanup(dev); -} - - -/* current intel driver doesn't take advantage of encoders - always give back the encoder for the connector -*/ -struct drm_encoder *psb_intel_best_encoder(struct drm_connector *connector) -{ - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - - return &psb_intel_output->enc; -} - - diff --git a/drivers/staging/cdv/drv/psb_intel_display.h b/drivers/staging/cdv/drv/psb_intel_display.h deleted file mode 100644 index 8e90e05..0000000 --- a/drivers/staging/cdv/drv/psb_intel_display.h +++ /dev/null @@ -1,25 +0,0 @@ -/* copyright (c) 2011, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - */ - -#ifndef _INTEL_DISPLAY_H_ -#define _INTEL_DISPLAY_H_ - -bool psb_intel_pipe_has_type(struct drm_crtc *crtc, int type); - -#endif diff --git a/drivers/staging/cdv/drv/psb_intel_dpll_cdv.c b/drivers/staging/cdv/drv/psb_intel_dpll_cdv.c deleted file mode 100644 index d19d603..0000000 --- a/drivers/staging/cdv/drv/psb_intel_dpll_cdv.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2011 Intel Corporation - * - * This program is free software: you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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, see . - */ - -#include - -#include "psb_intel_bios.h" -#include "psb_drv.h" -#include "psb_intel_drv.h" -#include "psb_intel_reg.h" - - -#define _wait_for(COND, MS, W) ({ \ - unsigned long timeout__ = jiffies + msecs_to_jiffies(MS); \ - int ret__ = 0; \ - while (! (COND)) { \ - if (time_after(jiffies, timeout__)) { \ - ret__ = -ETIMEDOUT; \ - break; \ - } \ - if (W && !in_dbg_master()) msleep(W); \ - } \ - ret__; \ -}) - -#define wait_for(COND, MS) _wait_for(COND, MS, 1) - - -static int -psb_sb_read(struct drm_device *dev, u32 reg, u32 *val) -{ - int ret; - - ret = wait_for((REG_READ(SB_PCKT) & SB_BUSY) == 0, 1000); - if (ret) { - DRM_ERROR("timeout waiting for SB to idle before read\n"); - return ret; - } - - REG_WRITE(SB_ADDR, reg); - REG_WRITE(SB_PCKT, - SET_FIELD(SB_OPCODE_READ, SB_OPCODE) | - SET_FIELD(SB_DEST_DPLL, SB_DEST) | - SET_FIELD(0xf, SB_BYTE_ENABLE)); - - ret = wait_for((REG_READ(SB_PCKT) & SB_BUSY) == 0, 1000); - if (ret) { - DRM_ERROR("timeout waiting for SB to idle after read\n"); - return ret; - } - - *val = REG_READ(SB_DATA); - - return 0; -} - -static int -psb_sb_write(struct drm_device *dev, u32 reg, u32 val) -{ - int ret; - static bool dpio_debug = true; - u32 temp; - - if (dpio_debug) { - if (psb_sb_read(dev, reg, &temp) == 0) - DRM_DEBUG_KMS("0x%08x: 0x%08x (before)\n", reg, temp); - DRM_DEBUG_KMS("0x%08x: 0x%08x\n", reg, val); - } - - ret = wait_for((REG_READ(SB_PCKT) & SB_BUSY) == 0, 1000); - if (ret) { - DRM_ERROR("timeout waiting for SB to idle before write\n"); - return ret; - } - - REG_WRITE(SB_ADDR, reg); - REG_WRITE(SB_DATA, val); - REG_WRITE(SB_PCKT, - SET_FIELD(SB_OPCODE_WRITE, SB_OPCODE) | - SET_FIELD(SB_DEST_DPLL, SB_DEST) | - SET_FIELD(0xf, SB_BYTE_ENABLE)); - - ret = wait_for((REG_READ(SB_PCKT) & SB_BUSY) == 0, 1000); - if (ret) { - DRM_ERROR("timeout waiting for SB to idle after write\n"); - return ret; - } - - if (dpio_debug) { - if (psb_sb_read(dev, reg, &temp) == 0) - DRM_DEBUG_KMS("0x%08x: 0x%08x (after)\n", reg, temp); - } - - return 0; -} - -/* Reset the DPIO configuration register. The BIOS does this at every - * mode set. - */ -static void -psb_sb_reset(struct drm_device *dev) -{ - - REG_WRITE(DPIO_CFG, 0); - REG_READ(DPIO_CFG); - REG_WRITE(DPIO_CFG, DPIO_MODE_SELECT_0 | DPIO_CMN_RESET_N); -} - -static void -psb_print_clock(struct psb_intel_clock_t *clock) -{ - DRM_DEBUG_KMS("CDV clock: n %d m1 %d m2 %d p1 %d p2 %d dot %d vco %d m %d p %d\n", - clock->n, clock->m1, clock->m2, clock->p1, clock->p2, clock->dot, - clock->vco, clock->m, clock->p); -} - -/* Unlike most Intel display engines, on Cedarview the DPLL registers - * are behind this sideband bus. They must be programmed while the - * DPLL reference clock is on in the DPLL control register, but before - * the DPLL is enabled in the DPLL control register. - */ -int -psb_dpll_set_clock_cdv(struct drm_device *dev, struct drm_crtc *crtc, - struct psb_intel_clock_t *clock) -{ - struct psb_intel_crtc *psb_crtc = - to_psb_intel_crtc(crtc); - int pipe = psb_crtc->pipe; - u32 m, n_vco, p; - int ret = 0; - int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; - u32 ref_value; - - psb_print_clock(clock); - - psb_sb_reset(dev); - - if ((REG_READ(dpll_reg) & DPLL_SYNCLOCK_ENABLE) == 0) { - DRM_ERROR("Attempting to set DPLL with refclk disabled\n"); - return -EBUSY; - } - - /* Follow the BIOS and write the REF/SFR Register. Hardcoded value */ - ref_value = 0x68A701; - - psb_sb_write(dev, SB_REF_SFR(pipe), ref_value); - - /* We don't know what the other fields of these regs are, so - * leave them in place. - */ - ret = psb_sb_read(dev, SB_M(pipe), &m); - if (ret) - return ret; - m &= ~SB_M_DIVIDER_MASK; - m |= ((clock->m2) << SB_M_DIVIDER_SHIFT); - ret = psb_sb_write(dev, SB_M(pipe), m); - if (ret) - return ret; - - ret = psb_sb_read(dev, SB_N_VCO(pipe), &n_vco); - if (ret) - return ret; - - /* Follow the BIOS to program the N_DIVIDER REG */ - n_vco &= 0xFFFF; - n_vco |= 0x107; - n_vco &= ~(SB_N_VCO_SEL_MASK | - SB_N_DIVIDER_MASK | - SB_N_CB_TUNE_MASK); - - n_vco |= ((clock->n) << SB_N_DIVIDER_SHIFT); - - if (clock->vco < 2250000) { - n_vco |= (2 << SB_N_CB_TUNE_SHIFT); - n_vco |= (0 << SB_N_VCO_SEL_SHIFT); - } else if (clock->vco < 2750000) { - n_vco |= (1 << SB_N_CB_TUNE_SHIFT); - n_vco |= (1 << SB_N_VCO_SEL_SHIFT); - } else if (clock->vco < 3300000) { - n_vco |= (0 << SB_N_CB_TUNE_SHIFT); - n_vco |= (2 << SB_N_VCO_SEL_SHIFT); - } else { - n_vco |= (0 << SB_N_CB_TUNE_SHIFT); - n_vco |= (3 << SB_N_VCO_SEL_SHIFT); - } - - ret = psb_sb_write(dev, SB_N_VCO(pipe), n_vco); - if (ret) - return ret; - - ret = psb_sb_read(dev, SB_P(pipe), &p); - if (ret) - return ret; - p &= ~(SB_P2_DIVIDER_MASK | SB_P1_DIVIDER_MASK); - p |= SET_FIELD(clock->p1, SB_P1_DIVIDER); - switch (clock->p2) { - case 5: - p |= SET_FIELD(SB_P2_5, SB_P2_DIVIDER); - break; - case 10: - p |= SET_FIELD(SB_P2_10, SB_P2_DIVIDER); - break; - case 14: - p |= SET_FIELD(SB_P2_14, SB_P2_DIVIDER); - break; - case 7: - p |= SET_FIELD(SB_P2_7, SB_P2_DIVIDER); - break; - default: - DRM_ERROR("Bad P2 clock: %d\n", clock->p2); - return -EINVAL; - } - ret = psb_sb_write(dev, SB_P(pipe), p); - if (ret) - return ret; - - /* always Program the Lane Register for the Pipe A*/ - if (pipe == 0) { - /* Program the Lane0/1 for HDMI B */ - u32 lane_reg, lane_value; - - lane_reg = PSB_LANE0; - psb_sb_read(dev, lane_reg, &lane_value); - lane_value &= ~(LANE_PLL_MASK); - lane_value |= LANE_PLL_ENABLE; - psb_sb_write(dev, lane_reg, lane_value); - - lane_reg = PSB_LANE1; - psb_sb_read(dev, lane_reg, &lane_value); - lane_value &= ~(LANE_PLL_MASK); - lane_value |= LANE_PLL_ENABLE; - psb_sb_write(dev, lane_reg, lane_value); - - /* Program the Lane2/3 for HDMI C */ - lane_reg = PSB_LANE2; - psb_sb_read(dev, lane_reg, &lane_value); - lane_value &= ~(LANE_PLL_MASK); - lane_value |= LANE_PLL_ENABLE; - psb_sb_write(dev, lane_reg, lane_value); - - - lane_reg = PSB_LANE3; - psb_sb_read(dev, lane_reg, &lane_value); - lane_value &= ~(LANE_PLL_MASK); - lane_value |= LANE_PLL_ENABLE; - psb_sb_write(dev, lane_reg, lane_value); - } - - return 0; -} diff --git a/drivers/staging/cdv/drv/psb_intel_drv.h b/drivers/staging/cdv/drv/psb_intel_drv.h deleted file mode 100644 index 732e477..0000000 --- a/drivers/staging/cdv/drv/psb_intel_drv.h +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#ifndef __INTEL_DRV_H__ -#define __INTEL_DRV_H__ - -#include -#include -#include -#include -#include - -/* - * Display related stuff - */ - -/* store information about an Ixxx DVO */ -/* The i830->i865 use multiple DVOs with multiple i2cs */ -/* the i915, i945 have a single sDVO i2c bus - which is different */ -#define MAX_OUTPUTS 6 -/* maximum connectors per crtcs in the mode set */ -#define INTELFB_CONN_LIMIT 4 - -#define INTEL_I2C_BUS_DVO 1 -#define INTEL_I2C_BUS_SDVO 2 - -/* these are outputs from the chip - integrated only - * external chips are via DVO or SDVO output */ -#define INTEL_OUTPUT_UNUSED 0 -#define INTEL_OUTPUT_ANALOG 1 -#define INTEL_OUTPUT_DVO 2 -#define INTEL_OUTPUT_SDVO 3 -#define INTEL_OUTPUT_LVDS 4 -#define INTEL_OUTPUT_TVOUT 5 -#define INTEL_OUTPUT_HDMI 6 - -#define INTEL_DVO_CHIP_NONE 0 -#define INTEL_DVO_CHIP_LVDS 1 -#define INTEL_DVO_CHIP_TMDS 2 -#define INTEL_DVO_CHIP_TVOUT 4 - -struct psb_intel_clock_t -{ - /* given values */ - int n; - int m1, m2; - int p1, p2; - /* derived values */ - int dot; - int vco; - int m; - int p; -}; -/** - * Hold information useally put on the device driver privates here, - * since it needs to be shared across multiple of devices drivers privates. -*/ -struct psb_intel_mode_device { - - /* - * Abstracted memory manager operations - */ - void *(*bo_from_handle) (struct drm_device *dev, - struct drm_file *file_priv, - unsigned int handle); - size_t(*bo_size) (struct drm_device *dev, void *bo); - size_t(*bo_offset) (struct drm_device *dev, void *bo); - int (*bo_pin_for_scanout) (struct drm_device *dev, void *bo); - int (*bo_unpin_for_scanout) (struct drm_device *dev, void *bo); - - /* - * Cursor - */ - int cursor_needs_physical; - - /* - * LVDS info - */ - int backlight_duty_cycle; /* restore backlight to this value */ - bool panel_wants_dither; - struct drm_display_mode *panel_fixed_mode; - struct drm_display_mode *panel_fixed_mode2; - struct drm_display_mode *vbt_mode; /* if any */ - - uint32_t saveBLC_PWM_CTL; -}; - -struct psb_intel_i2c_chan { - /* for getting at dev. private (mmio etc.) */ - struct drm_device *drm_dev; - u32 reg; /* GPIO reg */ - struct i2c_adapter adapter; - struct i2c_algo_bit_data algo; - u8 slave_addr; -}; - -struct psb_intel_output { - struct drm_connector base; - - struct drm_encoder enc; - int type; -#if 1 /*MDFLD_HDMI_JLIU7*/ - struct i2c_adapter *hdmi_i2c_adapter; /* for control functions */ -#endif - struct psb_intel_i2c_chan *i2c_bus; /* for control functions */ - struct psb_intel_i2c_chan *ddc_bus; /* for DDC only stuff */ - bool load_detect_temp; - void *dev_priv; - - struct psb_intel_mode_device *mode_dev; - -}; - -struct psb_intel_crtc_state { - uint32_t saveDSPCNTR; - uint32_t savePIPECONF; - uint32_t savePIPESRC; - uint32_t saveDPLL; - uint32_t saveFP0; - uint32_t saveFP1; - uint32_t saveHTOTAL; - uint32_t saveHBLANK; - uint32_t saveHSYNC; - uint32_t saveVTOTAL; - uint32_t saveVBLANK; - uint32_t saveVSYNC; - uint32_t saveDSPSTRIDE; - uint32_t saveDSPSIZE; - uint32_t saveDSPPOS; - uint32_t saveDSPBASE; - uint32_t savePalette[256]; -}; - -struct psb_intel_crtc { - struct drm_crtc base; - int pipe; - int plane; - uint32_t cursor_addr; - u8 lut_r[256], lut_g[256], lut_b[256]; - u8 lut_adj[256]; - struct psb_intel_framebuffer *fbdev_fb; - /* a mode_set for fbdev users on this crtc */ - struct drm_mode_set mode_set; - - /* Add one flip timer that still can handle the flip operation - * when the pipe is disabled - */ - struct timer_list flip_timer; - int crtc_enable; - int flip_counter; - - /* current bo we scanout from */ - void *scanout_bo; - - /* current bo we cursor from */ - void *cursor_bo; - void *cursor_handle; - - struct drm_display_mode saved_mode; - struct drm_display_mode saved_adjusted_mode; - - struct psb_intel_mode_device *mode_dev; - - /*crtc mode setting flags*/ - u32 mode_flags; - -/*FIXME: Workaround to avoid MRST block.*/ - /* Saved Crtc HW states */ - struct psb_intel_crtc_state *crtc_state; - - int psb_crtc_active; -}; - -#define to_psb_intel_crtc(x) \ - container_of(x, struct psb_intel_crtc, base) -#define to_psb_intel_output(x) \ - container_of(x, struct psb_intel_output, base) -#define enc_to_psb_intel_output(x) \ - container_of(x, struct psb_intel_output, enc) -#define to_psb_intel_framebuffer(x) \ - container_of(x, struct psb_intel_framebuffer, base) - -struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev, - const u32 reg, const char *name); -void psb_intel_i2c_destroy(struct psb_intel_i2c_chan *chan); -int psb_intel_ddc_get_modes(struct psb_intel_output *psb_intel_output); -extern bool psb_intel_ddc_probe(struct psb_intel_output *psb_intel_output); - -extern void psb_intel_crtc_init(struct drm_device *dev, int pipe, - struct psb_intel_mode_device *mode_dev); -extern void psb_intel_crt_init(struct drm_device *dev, - struct psb_intel_mode_device *mode_dev); -extern void psb_intel_tv_init(struct drm_device *dev); -extern void psb_intel_lvds_init(struct drm_device *dev, - struct psb_intel_mode_device *mode_dev); -extern void mdfld_hdmi_init(struct drm_device *dev, - struct psb_intel_mode_device *mode_dev, int reg); - -extern void psb_intel_crtc_load_lut(struct drm_crtc *crtc); -extern void psb_intel_encoder_prepare(struct drm_encoder *encoder); -extern void psb_intel_encoder_commit(struct drm_encoder *encoder); - -extern struct drm_encoder *psb_intel_best_encoder(struct drm_connector - *connector); - -extern struct drm_display_mode *psb_intel_crtc_mode_get(struct drm_device *dev, - struct drm_crtc *crtc); -extern void psb_intel_wait_for_vblank(struct drm_device *dev); -extern int psb_intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, - int pipe); -extern int intelfb_probe(struct drm_device *dev); -extern int intelfb_remove(struct drm_device *dev, - struct drm_framebuffer *fb); -extern struct drm_framebuffer *psb_intel_framebuffer_create(struct drm_device - *dev, struct - drm_mode_fb_cmd - *mode_cmd, - void *mm_private); -extern bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode); -extern int psb_intel_lvds_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode); -extern int psb_intel_lvds_set_property(struct drm_connector *connector, - struct drm_property *property, - uint64_t value); -extern void psb_intel_lvds_destroy(struct drm_connector *connector); -extern const struct drm_encoder_funcs psb_intel_lvds_enc_funcs; - -extern uint8_t blc_pol; -extern uint8_t blc_freq; - -extern int psb_dpll_set_clock_cdv(struct drm_device *dev, struct drm_crtc *crtc, - struct psb_intel_clock_t *clock); -#endif /* __INTEL_DRV_H__ */ diff --git a/drivers/staging/cdv/drv/psb_intel_hdmi.c b/drivers/staging/cdv/drv/psb_intel_hdmi.c deleted file mode 100644 index 676fc2a..0000000 --- a/drivers/staging/cdv/drv/psb_intel_hdmi.c +++ /dev/null @@ -1,684 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * jim liu - */ - -#include -#include -#include -#include -#include "psb_intel_drv.h" -#include "psb_drv.h" -#include "psb_intel_reg.h" -#include "psb_intel_hdmi_reg.h" -#include "psb_intel_hdmi_edid.h" -#include "psb_intel_hdmi.h" -#include - -static void mdfld_hdmi_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); - struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; - u32 hdmib; - struct drm_crtc *crtc = encoder->crtc; - struct psb_intel_crtc *intel_crtc = to_psb_intel_crtc(crtc); - PSB_DEBUG_ENTRY("\n"); - - hdmib = (2 << 10); - - if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) - hdmib |= SDVO_VSYNC_ACTIVE_HIGH; - if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) - hdmib |= SDVO_HSYNC_ACTIVE_HIGH; - - if (intel_crtc->pipe == 1) - hdmib |= HDMIB_PIPE_B_SELECT; - - if (hdmi_priv->has_hdmi_audio) { - hdmib |= HDMI_AUDIO_ENABLE; - hdmib |= HDMI_NULL_PACKETS_DURING_VSYNC; - } - - REG_WRITE(hdmi_priv->hdmi_reg, hdmib); - REG_READ(hdmi_priv->hdmi_reg); -} - -static bool mdfld_hdmi_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - - return true; -} - - -static void mdfld_hdmi_dpms(struct drm_encoder *encoder, int mode) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); - struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; - u32 hdmib; - - PSB_DEBUG_ENTRY("%s \n", mode == DRM_MODE_DPMS_ON ? "on" : "off"); - - hdmib = REG_READ(hdmi_priv->hdmi_reg); - - if (mode != DRM_MODE_DPMS_ON) { - REG_WRITE(hdmi_priv->hdmi_reg, hdmib & ~HDMIB_PORT_EN); - } else { - REG_WRITE(hdmi_priv->hdmi_reg, hdmib | HDMIB_PORT_EN); - } - REG_READ(hdmi_priv->hdmi_reg); -} - -static void mdfld_hdmi_save(struct drm_connector *connector) -{ - struct drm_device *dev = connector->dev; - struct psb_intel_output *output = to_psb_intel_output(connector); - struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; - - PSB_DEBUG_ENTRY("\n"); - - hdmi_priv->save_HDMIB = REG_READ(hdmi_priv->hdmi_reg); -} - -static void mdfld_hdmi_restore(struct drm_connector *connector) -{ - struct drm_device *dev = connector->dev; - struct psb_intel_output *output = to_psb_intel_output(connector); - struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; - - PSB_DEBUG_ENTRY("\n"); - - REG_WRITE(hdmi_priv->hdmi_reg, hdmi_priv->save_HDMIB); - REG_READ(hdmi_priv->hdmi_reg); -} - -#if 0 - -/* HDMI DIP related stuff */ -static int mdfld_hdmi_get_cached_edid_block(struct drm_connector *connector, uint32_t num_block, uint8_t *edid_block, uint32_t size) -{ - struct drm_display_info *displayinfo = &(connector->display_info); - if (num_block >= MAX_EDID_BLOCKS) - { - DRM_ERROR("mdfld_hdmi_get_cached_edid_block() - Invalid EDID block\n"); - return 0; - } - edid_block = &displayinfo->raw_edid[EDID_BLOCK_SIZE*num_block]; - return 1; -} - -///////////////////////////////////////////////////////////////////////// -// INTHDMIENCODER_CreateEELDPacket(): -// This function parses v1.3 base EDID and CEA-861b EDID Timing Extension -// Version3 and creates EELD (Enhanced EDID Like Data) packet. This EELD data contains -// audio configuration information and other details read EDID.This can also contain Vendor specific Data -// -///////////////////////////////////////////////////////////////////////// -static int mdfld_hdmi_create_eeld_packet(struct drm_connector *connector) -{ - struct psb_intel_output *output = to_psb_intel_output(connector); - struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; - uint8_t ucEdidBlock[128]; - hdmi_eeld_t *pEEld = NULL; - baseedid_1_x_t *pEdid = NULL; - ce_edid_t *pCeEdid = NULL; - int dwNumOfBytes = 0; - int sizeOfCEADataBlock = 0; - uint8_t * pDataBlock = NULL; - edid_dtd_timing_t *pDTD = NULL; - uint8_t *pData = NULL; - uint8_t ucDataBlockTag = 0; - cea_861b_adb_t *pADB = NULL; - uint8_t i = 0; - uint8_t j = 0; - uint8_t * pSADBlocks = NULL; - uint8_t * pCurrentSADBlocks = NULL; - uint32_t ulNumSADBytes = 0; - //vsdb_byte6_to_byte8_t *pVSDB = NULL; - uint32_t ulIndex = 0; - //uint8_t b48kHzCADPresent = false; - - pEEld = (hdmi_eeld_t *) &hdmi_priv->eeld; - - // Fill Version info - pEEld->cea_edid_rev_id = HDMI_EELD_CEA_EDID_VERSION; - pEEld->eld_ver = HDMI_EELD_VERSION; - - // Fill BaseLine ELD length - // This is 80 bytes as per EELD proposal - pEEld->baseline_eld_length = HDMI_EELD_BASELINE_DATA_LENGTH; - - //Zero out EDID block buffer - memset(ucEdidBlock, 0, sizeof(ucEdidBlock)); - - // Get Extn EDID - if(!mdfld_hdmi_get_cached_edid_block(connector, 1, ucEdidBlock, EDID_BLOCK_SIZE)) - { - return 0; - } - - pCeEdid = (ce_edid_t *) ucEdidBlock; - - //allocate memory (48 bytes) for SAD Blocks buffer - pSADBlocks = kcalloc(1, 48, GFP_KERNEL); - - if(pSADBlocks == NULL) - { - DRM_ERROR("mdfld_hdmi_create_eld_packaet() - Failed to allocate mem for pSADBlocks\n"); - return 0; - } - - pCurrentSADBlocks = pSADBlocks; - - // Now pull out data from CEA Extension EDID - // If Offset <= 4, we will not have CEA DataBlocks - if(pCeEdid->ucDTDOffset > CEA_EDID_HEADER_SZIE) - { - sizeOfCEADataBlock = pCeEdid->ucDTDOffset - CEA_EDID_HEADER_SZIE; - - pDataBlock = (uint8_t *)pCeEdid; - - // skip header (first 4 bytes) in CEA EDID Timing Extension - // and set pointer to start of DataBlocks collection - pDataBlock += CEA_EDID_HEADER_SZIE; - - // General Format of CEA Data Block Collection - // -----------+--------------------+-----------------------------------------+ - // |Byte# |bits5-7 | bits 0-4 | - // -----------|--------------------+-----------------------------------------+ - // | 1 | Video Tag |Length = total #of video bytes following | - // | | Code |this byte (L1) | - // |--------------------+-----------------------------------------+ - // Video | 2 | CEA Short Video Descriptor 1 | - // Data |--------+-----------------------------------------------------| - // Block | 3 | CEA Short Video Descriptor 2 | - // |--------+-----------------------------------------------------| - // | ... | ... | - // |--------------------------------------------------------------+ - // | 1+L1 | CEA Short Video Descriptor L1 | - // -----------+--------------------+-----------------------------------------+ - // | 2+L1 | Audio Tag |Length = total #of audio bytes following | - // | | Code |this byte (L2) | - // |--------------------+-----------------------------------------+ - // Audio | 3+L1 | | - // Data |--------+ | - // Block | 4+L1 | CEA Short Audio Descriptor 1 | - // |--------+ | - // | 5+L1 | | - // |--------------------------------------------------------------+ - // | ... | | - // | | | - // | | | - // | ... | | - // |--------------------------------------------------------------- - // |L1+L2 | | - // |--------| | - // |1+L1+L2 | CEA Short Audio Descriptor L2/3 | - // |--------| | - // |2+L1+L2 | | - // -----------+--------------------------------------------------------------+ - // |3+L1+L2 | Speaker |Length = total #of SA bytes following | - // | | Tag Code |this byte (L1) | - // Speaker |--------------------------------------------------------------+ - // Allocation|4+L1+L2 | | - // Data |--------| | - // Block |5+L1+L2 | Speaker Allocation Data Block Payload(3 bytes) | - // |--------| | - // |6+L1+L2 | | - // -----------+--------------------------------------------------------------+ - // |7+L1+L2 | VSDB Tag |Length = total #of VSDB bytes following | - // | | Code |this byte (L1) | - // Vendor |--------------------------------------------------------------+ - // Specific |8+L1+L2 | | - // Data |--------| | - // Block |9+L1+L2 | 24-bit IEEE Registration Identifier (LSB first) | - // |--------| | - // |10+L1+L2| | - // |--------------------------------------------------------------+ - // | ... | Vendor Specific Data block Payload | - // -----------+--------------------------------------------------------------+ - - while(sizeOfCEADataBlock > 0) - { - // Get the Size of CEA DataBlock in bytes and TAG - dwNumOfBytes = *pDataBlock & CEA_DATABLOCK_LENGTH_MASK; - ucDataBlockTag = (*pDataBlock & CEA_DATABLOCK_TAG_MASK) >> 5; - - switch(ucDataBlockTag) - { - case CEA_AUDIO_DATABLOCK: - // move beyond tag/length byte - ++pDataBlock; - for (i = 0; i < (dwNumOfBytes / 3); ++i, pDataBlock += 3) - { - pADB = (cea_861b_adb_t*)pDataBlock; - switch(pADB->audio_format_code) - { - // uncompressed audio (Linear PCM) - case AUDIO_LPCM: - memcpy(&(hdmi_priv->lpcm_sad),pDataBlock,3); - //save these blocks - memcpy(pCurrentSADBlocks, pDataBlock, 3); - // move pointer in SAD blocks buffer - pCurrentSADBlocks += 3; - // update SADC field - pEEld->sadc += 1; - break; - // compressed audio - case AUDIO_AC3: - case AUDIO_MPEG1: - case AUDIO_MP3: - case AUDIO_MPEG2: - case AUDIO_AAC: - case AUDIO_DTS: - case AUDIO_ATRAC: - case AUDIO_OBA: - case AUDIO_DOLBY_DIGITAL: - case AUDIO_DTS_HD: - case AUDIO_MAT: - case AUDIO_DST: - case AUDIO_WMA_PRO: - //save these blocks - memcpy(pCurrentSADBlocks, pDataBlock, 3); - // move pointer in SAD blocks buffer - pCurrentSADBlocks += 3; - // update SADC field - pEEld->sadc += 1; - break; - } - } - break; - - case CEA_VENDOR_DATABLOCK: - // audio wants data from 6th byte of VSDB onwards - //Sighting 94842: - - // | Byte # | bits[7-0] | - // |--------------------------------------------------------------------| - // | 1-3 |24-bit IEEE Registration Identifier (0x000C03) | - // |--------------------------------------------------------------------| - // | 4-5 | Source Physical Address | - // |--------------------------------------------------------------------| - // | 6 |SupportsAI|DC48bit|DC36bit|Dc30bit|DCY444|Rsvd|Rsvd|DVIDual| - // |--------------------------------------------------------------------| - // | 7 | Max TMDS clock | - // |--------------------------------------------------------------------| - // | 8 |Latency_Field |I_Latency_Field| Reserved bits 5-0 | - // | | _Present | _Present | | - // |--------------------------------------------------------------------| - // | 9 | Video Latency | - // |--------------------------------------------------------------------| - // | 10 | Audio Latency | - // |--------------------------------------------------------------------| - // | 11 | Interlaced Video Latency | - // |--------------------------------------------------------------------| - // | 12 | Interlaced Audio Latency | - // |--------------------------------------------------------------------| - - ++pDataBlock; - // move pointer to next CEA Datablock - pDataBlock += dwNumOfBytes; - break; - - case CEA_SPEAKER_DATABLOCK: - pEEld->speaker_allocation_block = *(++pDataBlock); - // move pointer to next CEA Datablock - pDataBlock += dwNumOfBytes; - break; - - default: - // Move pointer to next CEA DataBlock - pDataBlock += (dwNumOfBytes + 1); - } - // Decrement size of CEA DataBlock - sizeOfCEADataBlock -= (dwNumOfBytes + 1); - } - } - - //Copy all the saved SAD blocks at the end of ELD - //SAD blocks should be written after the Monitor name and VSDB. - //See ELD definition in iHDMI.h - ulNumSADBytes = (pEEld->sadc) * 3; //Size of each SAD block is 3 bytes - - //DCN 460119: Audio does not play on displays which do not provide SAB in EDID. - //Solution: Graphics driver should create a default SAB in ELD with front left and front right - //speakers enabled if the display supports basic audio. - pDataBlock = (uint8_t *)pCeEdid; - if((*(pDataBlock + HDMI_CEA_EXTENSION_BLOCK_BYTE_3) & HDMI_BASIC_AUDIO_SUPPORTED) && (pEEld->speaker_allocation_block == 0)) - { - pEEld->flr = 1; - } - //End of DCN 460119 - - // zero out local buffers - memset(ucEdidBlock, 0, sizeof(ucEdidBlock)); - - // Get base EDID - if(!mdfld_hdmi_get_cached_edid_block(connector, 0, ucEdidBlock, EDID_BLOCK_SIZE)) - { - return 0; - } - - pEdid = (baseedid_1_x_t*) ucEdidBlock; - pDTD = &pEdid->DTD[1]; - - //Update the Manufacturer ID and Product Code here - memcpy(pEEld->manufacturer_id,pEdid->ManufacturerID,2); - memcpy(pEEld->product_id,pEdid->ProductID,2); - - // Now Fill the monitor string name - // Search through DTD blocks, looking for monitor name - for (i = 0; i < MAX_BASEEDID_DTD_BLOCKS - 1; ++i, ++pDTD) - { - // Set a uint8_t pointer to DTD data - pData = (uint8_t *)pDTD; - - // Check the Flag (the first two bytes) to determine - // if this block is used as descriptor - if (pData[0] == 0x00 && pData[1] == 0x00) - { - // And now check Data Type Tag within this descriptor - // Tag = 0xFC, then monitor name stored as ASCII - if (pData[3] == 0xFC) - { - ulIndex = 0; - // Copy monitor name - for (j = 0; (j < 13) && (pData[j+5] != 0x0A); ++j) - { - pEEld->mn_sand_sads[ulIndex] = pData[j+5]; - ulIndex++; - } - pEEld->mnl = j; - break; - } - } - } - - //Check if number of SAD Bytes > 0 and for size within limits of allowed Base line Data size as per EELD spec - if((ulNumSADBytes > 0) && (ulNumSADBytes <= 64)) - { - //Copy the SADs immediately after the Monitor Name String - memcpy(&pEEld->mn_sand_sads[j], pSADBlocks, ulNumSADBytes); - } - - - // Header = 4, Baseline Data = 60 and Vendor (INTEL) specific = 2 - // 4 + 60 + 2 = 66 - hdmi_priv->hdmi_eeld_size = HDMI_EELD_SIZE; - - //free the buffer allocated for SAD blocks - kfree(pSADBlocks); - pSADBlocks = NULL; - pCurrentSADBlocks = NULL; - return 1; -} - -#endif - -static enum drm_connector_status mdfld_hdmi_detect(struct drm_connector *connector, bool force) -{ - struct psb_intel_output *psb_intel_output = to_psb_intel_output(connector); - struct mid_intel_hdmi_priv *hdmi_priv = psb_intel_output->dev_priv; - struct edid *edid = NULL; - enum drm_connector_status status = connector_status_disconnected; - - PSB_DEBUG_ENTRY("\n"); - - edid = drm_get_edid(&psb_intel_output->base, - psb_intel_output->hdmi_i2c_adapter); - - hdmi_priv->has_hdmi_sink = false; - hdmi_priv->has_hdmi_audio = false; - if (edid) { - if (edid->input & DRM_EDID_INPUT_DIGITAL) { - status = connector_status_connected; - hdmi_priv->has_hdmi_sink = drm_detect_hdmi_monitor(edid); - hdmi_priv->has_hdmi_audio = drm_detect_monitor_audio(edid); - } - - psb_intel_output->base.display_info.raw_edid = NULL; - kfree(edid); - } - - return status; -} - -static int mdfld_hdmi_set_property(struct drm_connector *connector, - struct drm_property *property, - uint64_t value) -{ - struct drm_encoder *pEncoder = connector->encoder; - - PSB_DEBUG_ENTRY("connector info, type = %d, type_id=%d, base=0x%p, base.id=0x%x. \n", connector->connector_type, connector->connector_type_id, &connector->base, connector->base.id); - PSB_DEBUG_ENTRY("encoder info, base.id=%d, encoder_type=%d, dev=0x%p, base=0x%p, possible_clones=0x%x. \n", pEncoder->base.id, pEncoder->encoder_type, pEncoder->dev, &pEncoder->base, pEncoder->possible_clones); - PSB_DEBUG_ENTRY("encoder info, possible_crtcs=0x%x, crtc=0x%p. \n", pEncoder->possible_crtcs, pEncoder->crtc); - - if (!strcmp(property->name, "scaling mode") && pEncoder) { - PSB_DEBUG_ENTRY("scaling mode \n"); - } else if (!strcmp(property->name, "backlight") && pEncoder) { - PSB_DEBUG_ENTRY("backlight \n"); - } else if (!strcmp(property->name, "DPMS") && pEncoder) { - PSB_DEBUG_ENTRY("DPMS \n"); - } - - if (!strcmp(property->name, "scaling mode") && pEncoder) { - struct psb_intel_crtc *pPsbCrtc = to_psb_intel_crtc(pEncoder->crtc); - bool bTransitionFromToCentered; - uint64_t curValue; - - if (!pPsbCrtc) - goto set_prop_error; - - switch (value) { - case DRM_MODE_SCALE_FULLSCREEN: - break; - case DRM_MODE_SCALE_NO_SCALE: - break; - case DRM_MODE_SCALE_ASPECT: - break; - default: - goto set_prop_error; - } - - if (drm_connector_property_get_value(connector, property, &curValue)) - goto set_prop_error; - - if (curValue == value) - goto set_prop_done; - - if (drm_connector_property_set_value(connector, property, value)) - goto set_prop_error; - - bTransitionFromToCentered = (curValue == DRM_MODE_SCALE_NO_SCALE) || - (value == DRM_MODE_SCALE_NO_SCALE); - - if (pPsbCrtc->saved_mode.hdisplay != 0 && - pPsbCrtc->saved_mode.vdisplay != 0) { - if (bTransitionFromToCentered) { - if (!drm_crtc_helper_set_mode(pEncoder->crtc, &pPsbCrtc->saved_mode, - pEncoder->crtc->x, pEncoder->crtc->y, pEncoder->crtc->fb)) - goto set_prop_error; - } else { - struct drm_encoder_helper_funcs *pEncHFuncs = pEncoder->helper_private; - pEncHFuncs->mode_set(pEncoder, &pPsbCrtc->saved_mode, - &pPsbCrtc->saved_adjusted_mode); - } - } - } -set_prop_done: - return 0; -set_prop_error: - return -1; -} - -/** - * Return the list of HDMI DDC modes if available. - */ -static int mdfld_hdmi_get_modes(struct drm_connector *connector) -{ - struct psb_intel_output *psb_intel_output = to_psb_intel_output(connector); - struct edid *edid = NULL; - int ret = 0; - - PSB_DEBUG_ENTRY("\n"); - - edid = drm_get_edid(&psb_intel_output->base, - psb_intel_output->hdmi_i2c_adapter); - if (edid) { - drm_mode_connector_update_edid_property(&psb_intel_output-> - base, edid); - ret = drm_add_edid_modes(&psb_intel_output->base, edid); - kfree(edid); - } - - return ret; -} - -static int mdfld_hdmi_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) -{ - - PSB_DEBUG_ENTRY("display info. hdisplay = %d, vdisplay = %d. \n", mode->hdisplay, mode->vdisplay); - - if (mode->clock > 165000) - return MODE_CLOCK_HIGH; - if (mode->clock < 20000) - return MODE_CLOCK_HIGH; - - /* just in case */ - if (mode->flags & DRM_MODE_FLAG_DBLSCAN) - return MODE_NO_DBLESCAN; - - /* just in case */ - if (mode->flags & DRM_MODE_FLAG_INTERLACE) - return MODE_NO_INTERLACE; - - return MODE_OK; -} - -static const struct drm_encoder_helper_funcs mdfld_hdmi_helper_funcs = { - .dpms = mdfld_hdmi_dpms, - .mode_fixup = mdfld_hdmi_mode_fixup, - .prepare = psb_intel_encoder_prepare, - .mode_set = mdfld_hdmi_mode_set, - .commit = psb_intel_encoder_commit, -}; - -static const struct drm_connector_helper_funcs mdfld_hdmi_connector_helper_funcs = { - .get_modes = mdfld_hdmi_get_modes, - .mode_valid = mdfld_hdmi_mode_valid, - .best_encoder = psb_intel_best_encoder, -}; - -static const struct drm_connector_funcs mdfld_hdmi_connector_funcs = { - .dpms = drm_helper_connector_dpms, - .save = mdfld_hdmi_save, - .restore = mdfld_hdmi_restore, - .detect = mdfld_hdmi_detect, - .fill_modes = drm_helper_probe_single_connector_modes, - .set_property = mdfld_hdmi_set_property, - .destroy = psb_intel_lvds_destroy, -}; - -void mdfld_hdmi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev, int reg) -{ - struct psb_intel_output *psb_intel_output; - struct drm_connector *connector; - struct drm_encoder *encoder; - struct mid_intel_hdmi_priv *hdmi_priv; - int ddc_bus; - - PSB_DEBUG_ENTRY("\n"); - - psb_intel_output = kzalloc(sizeof(struct psb_intel_output) + - sizeof(struct mid_intel_hdmi_priv), GFP_KERNEL); - if (!psb_intel_output) - return; - - hdmi_priv = (struct mid_intel_hdmi_priv *)(psb_intel_output + 1); - psb_intel_output->mode_dev = mode_dev; - connector = &psb_intel_output->base; - encoder = &psb_intel_output->enc; - drm_connector_init(dev, &psb_intel_output->base, - &mdfld_hdmi_connector_funcs, - DRM_MODE_CONNECTOR_DVID); - - drm_encoder_init(dev, &psb_intel_output->enc, &psb_intel_lvds_enc_funcs, - DRM_MODE_ENCODER_TMDS); - - drm_mode_connector_attach_encoder(&psb_intel_output->base, - &psb_intel_output->enc); - psb_intel_output->type = INTEL_OUTPUT_HDMI; - hdmi_priv->hdmi_reg = reg; - hdmi_priv->has_hdmi_sink = false; - psb_intel_output->dev_priv = hdmi_priv; - - drm_encoder_helper_add(encoder, &mdfld_hdmi_helper_funcs); - drm_connector_helper_add(connector, - &mdfld_hdmi_connector_helper_funcs); - connector->display_info.subpixel_order = SubPixelHorizontalRGB; - connector->interlace_allowed = false; - connector->doublescan_allowed = false; - - connector->polled = DRM_CONNECTOR_POLL_HPD; - - drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN); - - switch (reg) { - case SDVOB: - ddc_bus = GPIOE; - break; - case SDVOC: - ddc_bus = GPIOD; - break; - default: - DRM_ERROR("unknown reg 0x%x for HDMI\n", reg); - goto failed_ddc; - break; - } - - psb_intel_output->ddc_bus = psb_intel_i2c_create(dev, - ddc_bus, (reg == SDVOB) ? "HDMIB":"HDMIC"); - - if (!psb_intel_output->ddc_bus) { - DRM_ERROR("No ddc adapter available!\n"); - goto failed_ddc; - } - psb_intel_output->hdmi_i2c_adapter = &(psb_intel_output->ddc_bus->adapter); - - hdmi_priv->is_hdcp_supported = true; - hdmi_priv->dev = dev; - drm_sysfs_connector_add(connector); - return; - -failed_ddc: - drm_encoder_cleanup(&psb_intel_output->enc); - drm_connector_cleanup(&psb_intel_output->base); - kfree(psb_intel_output); -} diff --git a/drivers/staging/cdv/drv/psb_intel_hdmi.h b/drivers/staging/cdv/drv/psb_intel_hdmi.h deleted file mode 100644 index 175b706..0000000 --- a/drivers/staging/cdv/drv/psb_intel_hdmi.h +++ /dev/null @@ -1,935 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Chunfeng Zhao - * Jim Liu - */ - -#ifndef __PSB_INTEL_HDMI_H__ -#define __PSB_INTEL_HDMI_H__ - -/* - * HDMI Parameters - */ - -/* GUID HDMI Parameters */ -#if 0 -//#ifdef DEFINE_GUID -//#undef DEFINE_GUID -#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} -//#endif /* DEFINE_GUID */ - -#define HDMI_PARAMETERS_GUID "{6FD3BE0E-80F9-4206-86B7-3714FA439634}" -DEFINE_GUID(GUID_HDMI_PARAMETERS, 0x6fd3be0e, 0x80f9, 0x4206, 0x86, 0xb7, 0x37, 0x14, 0xfa, 0x43, 0x96, 0x34); - -#define AVI_INFOFRAME_GUID "{DFCB113B-E54F-49A2-B5E3-78D0C6B4F4CB}" -DEFINE_GUID(GUID_AVI_INFOFRAME, 0xdfcb113b, 0xe54f, 0x49a2, 0xb5, 0xe3, 0x78, 0xd0, 0xc6, 0xb4, 0xf4, 0xcb); -#endif - -#define HDMI_DEVICE_NAME "ABC_VEND" -#define HDMI_DEVICE_DESC "XZ05 PC VIDEO" - -#define HDMI_MAX_PIXEL_REPETITION 0x04 // On Cantiga only upto 4X pixel repetition is supported -#define HDMI_HBR_AUDIO_SAMPLE_RATE 192000 // 192kHz is the sample rate corresponding to the HBR audio formats -#define HDMI_AUDIO_CLOCK_PACKET_RATE 1500 // Audio clock packet rate of 1.5kHz has to be considered while calculating audio BW - -#define HDMI_BAR_INFO_LENGTH 8 // 8 bytes of barinfo - -#define HDMI_MONITOR_NAME_LENGTH 20 - -// BaseLineDataLength. -// Total size is in multiple of 4 bytes. i.e, 80/4 = 20 -#define HDMI_EELD_BASELINE_DATA_LENGTH 0x14 - -// Header = 4, Baseline Data = 80 and Vendor (INTEL) specific = 2 as per EELD spec -// 4 + 80 + = 84 -#define HDMI_EELD_SIZE 84 - -// -// HDMI command types -// -typedef enum -{ - HDMI_COMMAND_GET, - HDMI_COMMAND_SET -} hdmi_command_t; - -#define HDMI_AVI_FLAG_ITCONTENT 0x00800000 -#define HDMI_AVI_FLAG_RGB_QUANT_RANGE 0x00040000 -#define HDMI_AVI_FLAG_SCAN_INFO 0x00000001 -#define HDMI_AVI_FLAG_BAR_INFO 0x00000010 -// -// CEA-861b definitions -// -#define HDMI_CEA_VERSION 0x00 -#define HDMI_ELD_VERSION 0x01 -#define HDMI_EELD_VERSION 0x02 -#define HDMI_BASE_ELD_SIZE 0x0E -#define HDMI_CEA_EDID_HEADER_SIZE 0x04 -#define HDMI_EELD_CEA_EDID_VERSION 0x03 -#define HDMI_CEA_EDID_BLOCK_SIZE 128 - -// -//Basic Audio support definitions -// - -#define HDMI_BASIC_AUDIO_SUPPORTED 0x40 -#define HDMI_CEA_EXTENSION_BLOCK_BYTE_3 3 -#define HDMI_FL_AND_FR_SPEAKERS_CONNECTED 0x1 - -// -// HDMI buffer/information types -// -typedef enum { - // Non-standard or non-HDMI type - HDMI_ELD_TYPE = 0x00, // ELD buffer type - HDMI_EELD_TYPE = 0x01, // EELD buffer type - - // Per HDMI Spec, refer Table 2-1 in HDMI EDS - // or Table 5-8 in HDMI spec - HDMI_VS_TYPE = 0x81, // Vendor-Specific InfoFrame type - HDMI_AVI_TYPE = 0x82, // AVI InfoFrame type - HDMI_SPD_TYPE = 0x83, // SPD InfoFrame type - HDMI_AUDIO_TYPE = 0x84, // Audio InfoFrame type - HDMI_MS_TYPE = 0x85, // MPEG Source InfoFrame type - - // Non-standard or non-HDMI types - HDMI_PR_PE_TYPE = 0x86, // Pixel Replication & Pixel Encoding(colorimetry) type - HDMI_AUDIO_CAPS_TYPE = 0x87, // Encoder Audio Capabilities type - HDMI_AUDIO_ENABLE_FLAGS_TYPE = 0x88 // Flags for enabling / disabling audio -} hdmi_info_type_t; - -// -// InfoFrame Version Information -// -typedef enum { - HDMI_VS_VERSION = 1, // Vendor-Specific InfoFrame Version 1 - HDMI_AVI_VERSION = 1, // AVI InfoFrame Version 1 - HDMI_AVI_VERSION2 = 2, // AVI InfoFrame Version 2 - HDMI_SPD_VERSION = 1, // SPD InfoFrame Version 1 - HDMI_AUDIO_VERSION = 1, // Audio InfoFrame Version 1 - HDMI_MS_VERSION = 1 // MPEG Source InfoFrame Version 1 -} infoframe_version_t; - -// -// InfoFrame Payload Length in bytes -// -typedef enum { - HDMI_VS_MAX_LENGTH = 27, // Vendor-Specific InfoFrame Payload Length, including IEEE reg ID - HDMI_AVI_LENGTH = 13, // AVI InfoFrame Payload Length - HDMI_SPD_LENGTH = 25, // SPD InfoFrame Payload Length - HDMI_AUDIO_LENGTH = 10, // Audio InfoFrame Payload Length - HDMI_MS_LENGTH = 10, // MPEG Source InfoFrame Payload Length - HDMI_PR_PE_LENGTH = 4, // Length of PR_PE_TYPE - HDMI_AUDIO_CAPS_LENGTH = 4 // Length of AUDIO_CAPS_TYPE -} infoframe_length_t; - -// -// InfoFrame TOTAL Length in bytes (includes header + payload) -// -typedef enum { - HDMI_VS_MAX_TOTAL_LENGTH = HDMI_VS_MAX_LENGTH + 4, // Max Total size of Vendor-Specific InfoFrame - HDMI_AVI_TOTAL_LENGTH = HDMI_AVI_LENGTH + 4, // Total size of AVI InfoFrame - HDMI_SPD_TOTAL_LENGTH = HDMI_SPD_LENGTH + 4, // Total size of SPD InfoFrame - HDMI_AUDIO_TOTAL_LENGTH = HDMI_AUDIO_LENGTH + 4, // Total size of Audio InfoFrame - HDMI_MS_TOTAL_LENGTH = HDMI_MS_LENGTH + 4, // Total size of MPEG Source InfoFrame -} infoframe_total_length_t; - - -// -// Pixel Replication multipliers -// -typedef enum { - HDMI_PR_ONE = 0, // No repetition (ie., pixel sent once) - HDMI_PR_TWO, // Pixel sent 2 times (ie.,repeated once) - HDMI_PR_THREE, // Pixel sent 3 times - HDMI_PR_FOUR, // Pixel sent 4 times - HDMI_PR_FIVE, // Pixel sent 5 times - HDMI_PR_SIX, // Pixel sent 6 times - HDMI_PR_SEVEN, // Pixel sent 7 times - HDMI_PR_EIGHT, // Pixel sent 8 times - HDMI_PR_NINE, // Pixel sent 9 times - HDMI_PR_TEN // Pixel sent 10 times -} hdmi_pixel_replication_t; - -// -// Pixel encoding modes -// -//typedef typedef enum { - // HDMI_RGB256 = 0x01, - // HDMI_RGB220 = 0x02, - // HDMI_YCrCb422 = 0x04, - // HDMI_YCrCb444 = 0x08 -//}HDMI_COLORIMETRY; - -// -// Pixel encoding modes -// -typedef enum { - HDMI_COLORIMETRY_RGB256 = 0x01, - HDMI_COLORIMETRY_RGB220 = 0x02, - HDMI_COLORIMETRY_YCrCb422 = 0x04, - HDMI_COLORIMETRY_YCrCb444 = 0x08 -} hdmi_colorimetry_t; - -// -// AVI InfoFrame definitions - start -// -// Scan Info -typedef enum { - HDMI_AVI_SCAN_NODATA = 0, // No data - HDMI_AVI_SCAN_OVERSCAN = 1, // Overscanned (TV) - HDMI_AVI_SCAN_UNDERSCAN = 2, // Underscanned (Computer) - HDMI_AVI_SCAN_FUTURE = 3 // Future -} avi_scan_info_t; - -// Bar Info -typedef enum { - HDMI_AVI_BAR_INVALID = 0, // Bar data not valid - HDMI_AVI_BAR_VALID_VERTICAL = 1, // Vertical Bar data valid - HDMI_AVI_BAR_VALID_HORIZONTAL= 2, // Horizontal Bar data valid - HDMI_AVI_BAR_VALID_BOTH = 3 // Vertical & Horizontal Bar data valid -} avi_bar_info_t; - -// Active Format Information -typedef enum { - HDMI_AVI_AFI_INVALID = 0, // No data - HDMI_AVI_AFI_VALID = 1 // Active Format Information valid -} avi_fi_info_t; - -// AVI Pixel Encoding modes -typedef enum { - HDMI_AVI_RGB_MODE = 0, // RGB pixel encoding mode - HDMI_AVI_YCRCB422_MODE = 1, // YCrCb 4:2:2 mode - HDMI_AVI_YCRCB444_MODE = 2, // YCrCb 4:4:4 mode - HDMI_AVI_FUTURE_MODE = 3 // Future mode -} avi_encoding_mode_t; - -// AVI Active Format Aspect Ratio -typedef enum { - HDMI_AVI_AFAR_SAME = 8, // same as picture aspect ratio - HDMI_AVI_AFAR_4_3 = 9, // 4:3 center - HDMI_AVI_AFAR_16_9 = 10, // 16:9 center - HDMI_AVI_AFAR_14_9 = 11 // 14:9 center -} avi_afar_info_t; - -// AVI Picture Aspect Ratio -typedef enum { - HDMI_AVI_PAR_NODATA = 0, // No Data - HDMI_AVI_PAR_4_3 = 1, // 4:3 - HDMI_AVI_PAR_16_9 = 2, // 16:9 - HDMI_AVI_PAR_FUTURE = 3 // Future -} avi_par_info_t; - -// AVI Colorimetry Information -typedef enum { - HDMI_AVI_COLOR_NODATA = 0, // No data - HDMI_AVI_COLOR_ITU601 = 1, // SMPTE 170M, ITU601 - HDMI_AVI_COLOR_ITU709 = 2, // ITU709 - HDMI_AVI_COLOR_FUTURE = 3 // Future -} avi_color_info_t; - -// AVI Non-uniform Picture Scaling Info -typedef enum { - HDMI_AVI_SCALING_NODATA = 0, // No scaling - HDMI_AVI_SCALING_HORIZONTAL = 1, // horizontal scaling - HDMI_AVI_SCALING_VERTICAL = 2, // vertical scaling - HDMI_AVI_SCALING_BOTH = 3 // horizontal & vertical scaling -} avi_scaling_infp_t; - -// AVI RGB Quantization Range -typedef enum { - HDMI_AVI_RGBQUANT_DEFAULT = 0, // Default value - HDMI_AVI_RGBQUANT_LIMITED = 1, // Limited Range - HDMI_AVI_RGBQUANT_FULL = 2, // Full Range - HDMI_AVI_RGBQUANT_FUTURE = 3 // Future use -} avi_rgbquant_range_t; - -// AVI IT Content -typedef enum { - HDMI_AVI_ITC_NODATA = 0, // No Data - HDMI_AVI_ITC_ITCONTENT = 1 //IT Content -} avi_it_content_t; - -// -// AVI InfoFrame definitions - end -// - -// -// SPD InfoFrame definitions - start -// -// SPD InfoFrame Data Byte 25, refer Table-17 in CEA-861b -typedef enum { - HDMI_SPD_SRC_UNKNOWN = 0x00, // unknown - HDMI_SPD_SRC_DIGITAL_STB = 0x01, // Digital STB - HDMI_SPD_SRC_DVD = 0x02, // DVD - HDMI_SPD_SRC_DVHS = 0x03, // D-VHS - HDMI_SPD_SRC_HDD_VIDEO = 0x04, // HDD Video - HDMI_SPD_SRC_DVC = 0x05, // DVC - HDMI_SPD_SRC_DSC = 0x06, // DSC - HDMI_SPD_SRC_VCD = 0x07, // Video CD - HDMI_SPD_SRC_GAME = 0x08, // Game - HDMI_SPD_SRC_PC = 0x09 // PC General -} spd_src_type_t; - -// SPD InfoFrame Vendor Name & Descriptor Length in bytes -typedef enum { - HDMI_SPD_VNAME_LENGTH = 8, // SPD Vendor Name Length in bytes - HDMI_SPD_VDESC_LENGTH = 16, // SPD Vendor Descriptor Length in bytes -} spd_namedesc_length_info_t; - -// -// SPD InfoFrame definitions - end -// - -// -// InfoFrame Packet Header - generic -// -typedef struct _if_header { - uint8_t type; // InfoFrame Type - uint8_t version; // InfoFrame Version - uint8_t length; // InfoFrame Length - uint8_t chksum; // Checksum of the InfoFrame -} if_header_t; - -// -// AVI InfoFrame structure -// -typedef union _avi_if { - uint8_t avi_buf[HDMI_AVI_TOTAL_LENGTH]; - #pragma pack(1) - struct - { - if_header_t avi_if_header; // AVI header data - union - { - uint8_t byte1; - struct - { - uint8_t scan_info:2; // scan information - uint8_t bar_info :2; // bar information - uint8_t format :1; // active format information - uint8_t enc_mode :2; // pixel encoding (RGB or YCrCb) - uint8_t b1rsvd :1; // reserved - }; - }; - union - { - uint8_t byte2; - struct - { - uint8_t afar :4; // Active Format Aspect Ratio - uint8_t par :2; // Picture Aspect Ratio - uint8_t colorimetry :2; // colorimetry - }; - }; - union - { - uint8_t byte3; - struct - { - uint8_t scaling_info :2; // Scaling information - uint8_t rgbquant_range :2; // RGB Quantization Range - uint8_t ext_colorimetry :3; //Extended Colorimetry - uint8_t it_content :1; //IT Content - }; - }; - union - { - uint8_t byte4; - struct - { - uint8_t vic :7; // Video Identification code (refer Table 13 in CEA-861b) - uint8_t b4rsvd :1; // reserved - }; - }; - union - { - uint8_t byte5; - struct - { - uint8_t pr :4; // pixel repetition (refer Table 15 in CEA-861b) - uint8_t b5rsvd :4; // reserved - }; - }; - uint8_t byte6; // end of top bar(lower), set to "00" - uint8_t byte7; // end of top bar(upper), set to "00" - uint8_t byte8; // start of bottom bar(lower), set to "00" - uint8_t byte9; // start of bottom bar(upper), set to "00" - uint8_t byte10; // end of left bar(lower), set to "00" - uint8_t byte11; // end of left bar(upper), set to "00" - uint8_t byte12; // start of right bar(lower), set to "00" - uint8_t byte13; // start of right bar(upper), set to "00" - }; - #pragma pack() -} avi_if_t; - -// -// SPD InfoFrame structure -// -typedef union _spd_if { - uint8_t spd_buf[HDMI_SPD_TOTAL_LENGTH]; - #pragma pack(1) - struct - { - if_header_t spd_if_header; // SPD header data - uint8_t name[8]; // Vendor Name, 8 characters - uint8_t desc[16]; // Product Description, 16 characters - uint8_t sdi; // Source Device Information - }; - #pragma pack() -} spd_if_t; - -// -// Vendor Specific InfoFrame structure -// -typedef union _vs_if -{ - uint8_t vs_buf[HDMI_VS_MAX_TOTAL_LENGTH]; - #pragma pack(1) - struct - { - if_header_t vs_if_header; // VS header data - uint8_t ieee_reg_id[3]; // 3-byte IEEE registration ID - uint8_t pay_load[24]; // Payload bytes - }; - #pragma pack() -} vs_if_t; - -// -// AVI Infoframe structure for customization -// - -typedef struct _avi_infoframe_custom { - //GUID guid; // GUID - int32_t command; // Command - int32_t flags; // Flags - uint32_t type_code; // Type code of AVI Infoframe - uint32_t version; // Version of AVI Infoframe - uint32_t length; // Length of AVI Info Frame - uint8_t r3r0_valid; // Reserved - uint8_t it_content; // IT Content - uint8_t bar_info[8]; // Reserved - int32_t active_format_aspect_ratio;// Reserved - int32_t non_uniform_scaling; // Reserved - int32_t rgb_ycc_indicator; // Reserved - int32_t ext_colorimetry; // Reserved - int32_t pixel_factor; // Reserved - int32_t bar_info_valid; // Reserved - int32_t colorimetry; // Reserved - int32_t aspect_ratio; // Reserved - int32_t quant_range; // Quantization Range - int32_t video_code; // Reserved - int32_t scan_info; // Scan Information -} avi_infoframe_custom_t; - - -// -// LinearPCM Consolidated Audio Data(CAD) structure -// -typedef union _lpcm_cad { - uint8_t value; - struct { - uint8_t maxch_cp_on :3; // Max channels-1 supported with CP turned ON - uint8_t maxch_cp_off :3; // Max channels-1 supported with CP turned OFF - uint8_t sp_20bit :1; // 20-bit sample support - uint8_t sp_24bit :1; // 24-bit sample support - }; -} lpcm_cad_t; - -// -// CEA Short Audio Descriptor -// -typedef struct _cea_861b_adb { -#pragma pack(1) - union - { - uint8_t byte1; - struct - { - uint8_t max_channels :3; // Bits[0-2] - uint8_t audio_format_code :4; // Bits[3-6], see AUDIO_FORMAT_CODES - uint8_t b1reserved :1; // Bit[7] - reserved - }; - }; - union - { - uint8_t byte2; - struct - { - uint8_t sp_rate_32kHz :1; // Bit[0] sample rate = 32kHz - uint8_t sp_rate_44kHz :1; // Bit[1] sample rate = 44kHz - uint8_t sp_rate_48kHz :1; // Bit[2] sample rate = 48kHz - uint8_t sp_rate_88kHz :1; // Bit[3] sample rate = 88kHz - uint8_t sp_rate_96kHz :1; // Bit[4] sample rate = 96kHz - uint8_t sp_rate_176kHz :1; // Bit[5] sample rate = 176kHz - uint8_t sp_rate_192kHz :1; // Bit[6] sample rate = 192kHz - uint8_t sp_rate_b2reserved :1; // Bit[7] - reserved - }; - }; - union - { - uint8_t byte3; // maximum bit rate divided by 8kHz - // following is the format of 3rd byte for uncompressed(LPCM) audio - struct - { - uint8_t bit_rate_16bit :1; // Bit[0] - uint8_t bit_rate_20bit :1; // Bit[1] - uint8_t bit_rate_24bit :1; // Bit[2] - uint8_t bit_rate_b3reserved :5; // Bits[3-7] - }; - }; -#pragma pack() -}cea_861b_adb_t; - -// -// Enhanced EDID Like Data aka EELD structure -// -typedef union _hdmi_eeld { - uint8_t eeld[HDMI_EELD_SIZE]; - #pragma pack(1) - struct - { - // Byte[0] = ELD Version Number - union - { - uint8_t byte0; - struct - { - uint8_t reserved:3; // Reserf - uint8_t eld_ver:5; // ELD Version Number - // 00000b - reserved - // 00001b - first rev - // 00010b:11111b - reserved for future - }; - }; - - // Byte[1] = Vendor Version Field - union - { - uint8_t vendor_version; - struct - { - uint8_t reserved1:3; - uint8_t veld_ver:5; // Version number of the ELD extension. - // This value is provisioned and unique to each vendor. - }; - }; - - // Byte[2] = Baseline Lenght field - uint8_t baseline_eld_length; // Length of the Baseline structure divided by Four. - - // Byte [3] = Reserved for future use - uint8_t byte3; - - // Starting of the BaseLine EELD structure - // Byte[4] = Monitor Name Length - union - { - uint8_t byte4; - struct - { - uint8_t mnl:5; - uint8_t cea_edid_rev_id:3; - }; - }; - - // Byte[5] = Capabilities - union - { - uint8_t capabilities; - struct - { - uint8_t hdcp:1; // Indicates HDCP support - uint8_t ai_support:1; // Inidcates AI support - uint8_t connection_type:2; // Indicates Connection type - // 00 - HDMI - // 01 - DP - // 10 -11 Reserved for future connection types - uint8_t sadc:4; // Indicates number of 3 bytes Short Audio Descriptors. - }; - }; - - // Byte[6] = Audio Synch Delay - uint8_t audio_synch_delay; // Amount of time reported by the sink that the video trails audio in milliseconds. - - // Byte[7] = Speaker Allocation Block - union - { - uint8_t speaker_allocation_block; - struct - { - uint8_t flr:1; // Front Left and Right channels - uint8_t lfe:1; // Low Frequency Effect channel - uint8_t fc:1; // Center transmission channel - uint8_t rlr:1; // Rear Left and Right channels - uint8_t rc:1; // Rear Center channel - uint8_t flrc:1; // Front left and Right of Center transmission channels - uint8_t rlrc:1; // Rear left and Right of Center transmission channels - uint8_t reserved3:1; // Reserved - }; - }; - - // Byte[8 - 15] - 8 Byte port identification value - uint8_t port_id_value[8]; - - // Byte[16 - 17] - 2 Byte Manufacturer ID - uint8_t manufacturer_id[2]; - - // Byte[18 - 19] - 2 Byte Product ID - uint8_t product_id[2]; - - // Byte [20-83] - 64 Bytes of BaseLine Data - uint8_t mn_sand_sads[64]; // This will include - // - ASCII string of Monitor name - // - List of 3 byte SADs - // - Zero padding - - // Vendor ELD Block should continue here! - // No Vendor ELD block defined as of now. - }; - #pragma pack() -} hdmi_eeld_t; - -// -// Data structure for misc HDMI data -// -typedef struct _misc_hdmi_data { - int32_t colorimetry :4; // - int32_t pr :4; // pixel repetition value - int32_t reserved :24;// reserved bits -} misc_hdmi_data_t; - -// -// Audio capability structure -// -typedef struct _device_audio_caps { - int32_t npl_design :8; // max number of audio packets device can - // deliver per line - int32_t k0 :8; // The overhead(in pixels) per line requied - // by device for setting up audio packets when - // CP is disabled - int32_t k1 :8; // The overhead(in pixels) per line requied - // by device for setting up audio packets when - // CP is enabled - // Misc data - int32_t pr :4; // Pixel Replication value - int32_t is_hdcp :1; // Driver, Device and Receiver support HDCP - int32_t is_rptr :1; // Receiver is HDCP repeater - int32_t reserved :2; // reserved bits -} device_audio_caps_t; - -typedef struct _audio_enable_flags { - int32_t is_hdmi_display :1; //1 if HDMI display, 0 if not HDMI display - int32_t is_eld_valid :1; //1 if ELD valid, 0 if ELD not valid - int32_t reserved1 :30; -} audio_enable_flags_t; - -// -// Data structure to exchange HDMI data through GetSetParameters interface -// -typedef struct _hdmi_parameters { - //GUID Guid; - hdmi_command_t command; - uint8_t type; - uint8_t size; - union { - hdmi_eeld_t eeld_buffer; - avi_if_t avi_infoframe; - spd_if_t spd_infoframe; - vs_if_t vs_infoframe; - union { - int32_t gen_data; - device_audio_caps_t audio_caps; - misc_hdmi_data_t misc_data; - audio_enable_flags_t fl_audio_enable_flags; - }; - }; -} hdmi_parameters_t; - -// -// Audio format codes -// -typedef enum { - AUDIO_LPCM = 0x0001, // Linear PCM (eg. IEC60958) - AUDIO_AC3 = 0x0002, // AC-3 - AUDIO_MPEG1 = 0x0003, // MPEG1 (Layers 1 & 2) - AUDIO_MP3 = 0x0004, // MP3 (MPEG1 Layer 3) - AUDIO_MPEG2 = 0x0005, // MPEG2 (multichannel) - AUDIO_AAC = 0x0006, // AAC - AUDIO_DTS = 0x0007, // DTS - AUDIO_ATRAC = 0x0008, // ATRAC - AUDIO_OBA = 0x0009, // One Bit Audio - AUDIO_DOLBY_DIGITAL = 0x000A, // Dolby Digital - AUDIO_DTS_HD = 0x000B, // DTS-HD - AUDIO_MAT = 0x000C, // MAT (MLP) - AUDIO_DST = 0x000D, // DST - AUDIO_WMA_PRO = 0x000E // WMA Pro -} audio_format_codes_t; - -// -// Data structure for byte #6 to 8 which has fixed definition -// -typedef struct _vsdb_char6_to_char8 -{ - #pragma pack(1) - - union - { - uint8_t byte1; - struct - { - uint8_t dvi_dual :1; // Bit[0] - uint8_t b1reserved :2; // Bits[1-2] - uint8_t dcy444 :1; // Bit[3] YCBCR 4:4:4 in Deep Color modes. - uint8_t dc30bit :1; //Bit[4] - uint8_t dc36bit :1; //Bit[5] - uint8_t dc48bit :1; //Bit[6] - uint8_t supports_ai :1; // Bit[7] - }; - }; - - uint8_t max_tmds_clock; - - union - { - uint8_t byte3; - struct - { - uint8_t b3reserved :6; // Bit[0-5] reserved - uint8_t i_latency_field_present :1;// Bit[6] - uint8_t latency_field_present :1;// Bits[7] - }; - }; - - #pragma pack() -} vsdb_byte6_to_byte8_t; - - -// -// Gamut metadata structure -// -// Note : The data is written in big endian format -#if 0 -// GUID for calling GBD interface -// {EEE24BDF-6D30-40bf-9BA2-139F0FFFC797} -#define DXVA_HDMI13_GBD_P0_GUID "{EEE24BDF-6D30-40BF-9BA2-139F0FFFC797}" -DEFINE_GUID(GUID_DXVA_HDMI13_GBD_P0, 0xeee24bdf, 0x6d30, 0x40bf, 0x9b, 0xa2, 0x13, 0x9f, 0xf, 0xff, 0xc7, 0x97); -#endif - -#define HDMI_GBD_PKT_TYPE 0x0A -#define HDMI_GBD_P0_DATA_SIZE 27 -#define HDMI_MAX_VERTICES_DATA 25 -#define HDMI_MAX_FACET_DATA 25 - -typedef enum { - VERTICES_AND_FACETS = 0, - RGB_MIN_MAX_RANGE = 1 -} gbd_format_flag_t; - -typedef enum { - GBD_8BIT_PRECISION = 0, - GBD_10BIT_PRECISION = 1, - GBD_12BIT_PRECISION = 2 -} gbd_color_precision_t; - -typedef enum { - RGB_BT709 = 0, - XVY_CC601 = 1, - XVY_CC709 = 2, - RESERVED_COLORSPACE -} gbd_color_space_t; - -typedef enum { - MIN_RED_INDEX = 0, - MAX_RED_INDEX = 1, - MIN_GREEN_INDEX = 2, - MAX_GREEN_INDEX = 3, - MIN_BLUE_INDEX = 4, - MAX_BLUE_INDEX = 5, - MAX_RANGE_DATA_INDEX_LIMIT = 6 -} gbd_rgb_range_data_index_t; - -// -// App needs to feel the data in this structure -// -typedef struct _gbd_p0_hdmi_1_3 { - uint8_t enable; // Enable/Disable GBD profile sending - gbd_format_flag_t format_flag; // uses GBD_FORMAT_FLAG_EN, this defines the gamut data format - gbd_color_precision_t color_precision; // uses GBD_COLOR_PRECISION, this is the bit precision of GBD vertex and range data - gbd_color_space_t color_space; // uses GBD_COLOR_SPACE_EN, this defines the color space being represented - - union - { - // If bFormatFlag is 0 - struct { - uint8_t facet_mode; // spec supports 0 alone right now - uint16_t num_vertices; // Number of vertices - uint16_t num_facets; // Number of faces - - // For 4 vertices of 12bits size is 18 - // Max possible with 0 facets and 28 bytes of GBD is 28-5=23 bytes - uint16_t vertices_data[HDMI_MAX_VERTICES_DATA]; // Vertices data representation - uint16_t facets_data[HDMI_MAX_FACET_DATA]; // kept it as input data but to be defined based on future spec - } vertices_facets_data; - - - // If eFormatFlag is 1 - struct { - uint16_t rgb_primary_data[MAX_RANGE_DATA_INDEX_LIMIT]; - } rgb_range_data; - }; - -} gbd_p0_hdmi_1_3_t; - -#define HDMI_GBD_MAX_SEQ_NUM_INDEX 16 - -// various GBD profiles -typedef enum { - P0_PROFILE = 0, - P1_PROFILE = 1, - P2_PROFILE = 2, - P3_PROFILE = 3, - INVALID_PROFILE -} gbd_profile_type_t; - -// various packet transmission options -typedef enum { - INTERMEDIATE_PKT_IN_SEQ = 0, - FIRST_PKT_IN_SEQ = 1, - LAST_PKT_IN_SEQ = 2, - ONLY_PKT_IN_SEQ = 3 -} gbd_pkt_seq_t; - -// -// Packet header defn as per HDMI spec -// -typedef struct _gamut_pkt_header { - uint8_t pkt_type; // Defines the pkt type - union{ - uint8_t field_byte; - struct{ - uint8_t affected_gamut_info :4; // BIT 3:0 - uint8_t gbd_profile :3; // BIT 6:4 ; uses GBD_PROFILE_TYPE_EN - uint8_t next_field :1; // BIT7 - }; - }; - - union{ - uint8_t gbd_seq_info; - struct{ - uint8_t current_gamut_info :4; // BIT 3:0 - uint8_t packet_seq :2; // BIT 5:4 ; use GBD_PKT_SEQ_EN - uint8_t reserved2 :1; // BIT 6 - uint8_t no_current_gbd :1; // BIT 7 - }; - }; -} gamut_pkt_header_t; - -// -// Gamut structure contains data in following format -// -typedef struct _gamut_metadata_struct { - #pragma pack(1) - gamut_pkt_header_t pkt_hdr; // Gamut Metadata header data - union - { - uint8_t byte1; - struct - { - uint8_t gbd_color_space :3; - // Note: GBD buffer is formatted based upon the color precision - // 8 bit precision : 1 sign bit, 2 bits of integer, 5 bits of fraction - // 10 bit precision : 1 sign bit, 2 bits of integer, 7 bits of fraction - // 12 bit precision : 1 sign bit, 2 bits of integer, 9 bits of fraction - uint8_t gbd_color_precision :2; - uint8_t reserved3 :1; - uint8_t facet_mode :1; // 0 - No facet info in GBD; 1 - Facet info in GBD - uint8_t format_flag :1; // uses GBD_FORMAT_FLAG_EN - }; - }; - - // For P0 profile below is the syntax in which data will be filled - // If Format is YUV - // char 2 : Higher 8 bits of number of vertices - // char 3 : Lower 8 bits of number of vertices - // char 4 to VSIZE+2 : Vertex data of size VSIZE, - // where VSIZE = 3*number of vertices*GBD color precision/8 + 0.99999 - // char VSIZE+3: Higher 8 bits of number of facets - // char VSIZE+4: Lower 8 bits of number of facets - // char VSIZE+5 to VSIZE+FSIZE+4 : Facet data - // where VSIZE = number of facet data - uint8_t gbd_data[HDMI_GBD_P0_DATA_SIZE]; // data will be filled - - #pragma pack() -} gamut_metadata_st_t; - -struct mid_intel_hdmi_priv { - u32 hdmi_reg; - u32 save_HDMIB; - bool has_hdmi_sink; - bool has_hdmi_audio; - /* Should set this when detect hotplug */ - bool hdmi_device_connected; - struct mdfld_hdmi_i2c *i2c_bus; - /* EELD packet holder*/ - hdmi_eeld_t eeld; - u32 hdmi_eeld_size; - cea_861b_adb_t lpcm_sad; - bool is_hdcp_supported; - struct i2c_adapter *hdmi_i2c_adapter; /* for control functions */ - struct drm_device *dev; -}; - -struct hdmi_edid_info { - char monitor_name[HDMI_MONITOR_NAME_LENGTH]; - char *edid_info; -}; - -#define HDMI_EDID_INFO(nm, info) \ - .monitor_name = nm, .edid_info = info - -#define MSIC_IRQLVL1_STATUS 0x02 - #define VREG_STATUS (1 << 5) -#define MSIC_VRINT_STATUS 0x0d - #define HDMI_HPD_STATUS (1 << 3) - #define HDMI_OCP_STATUS (1 << 2) - #define VR_OCP_STATUS (1 << 1) - #define VR_OVP_STATUS (1 << 0) -#define MSIC_VRINT_MASK 0x1c - #define HDMI_HPD_MASK (1 << 3) - #define HDMI_OCP_MASK (1 << 2) - #define VR_OCP_MASK (1 << 1) - #define VR_OVP_MASK (1 << 0) -#define MSIC_IRQLVL1_MASK 0x21 - #define VREG_MASK (1 << 5) -#define MSIC_VCC330CNT 0xd3 - #define VCC330_OFF 0x24 - #define VCC330_ON 0x37 -#define MSIC_VHDMICNT 0xde - #define VHDMI_OFF 0x25 - #define VHDMI_ON 0xa5 -#define MSIC_HDMI_STATUS 0x281 - #define HPD_SIGNAL_STATUS (1 << 0) - -#endif //__IHDMI_H__ diff --git a/drivers/staging/cdv/drv/psb_intel_hdmi_edid.h b/drivers/staging/cdv/drv/psb_intel_hdmi_edid.h deleted file mode 100644 index 583abb2..0000000 --- a/drivers/staging/cdv/drv/psb_intel_hdmi_edid.h +++ /dev/null @@ -1,1057 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * - */ -/* chunfeng.zhao@intel.com - */ -#ifndef PSB_INTEL_HDMI_EDID_H -#define PSB_INTEL_HDMI_EDID_H - -//#include "..\\..\\Common\\Platform.h" - -//////////////////////////////////////////// -// -// Max number of EDID extensions possible -// -//////////////////////////////////////////// -#define MAX_EDID_EXTENSIONS 254 //Max EDID blocks minus Block 0 -#define NUM_BASEEDID_STANDARD_TIMING 8 -#define MAX_BASEEDID_DTD_BLOCKS 4 - -#define MAX_VIC_DEFINED 128 - -// New Macros for supporting EDID 1.4 - -// Macros for EDID Revision and Version -#define EDID_VERSION_1 0x01 -#define EDID_REVISION_4 0x04 - -// Macros for CVT and GTF related support in Monitor descriptor -#define EDID14_CVT_TIMING_SUPPORTED 0x04 -#define EDID14_DEFAULT_GTF_SUPPORTED 0x00 -#define EDID14_SECONDARY_GTF_SUPPORTED 0x02 - -// Macros for display device data block in CEA. -#define EDID14_DISPLAY_DEVICE_DATA_TAG 0xFF -#define EDID14_DISPLAY_DEVICE_DATA_CHILD_TAG 0x02 -#define EDID14_DISPLAY_DEVICE_DATA_LENGTH 0x20 -#define EDID14_DISPLAY_PORT_INTERFACE 0x09 - -// Macros indicating digital interfaces supported by the display. -#define EDID14_DVI_SUPPORTED 0x01 -#define EDID14_DISPLAY_PORT_SUPPORTED 0x05 -#define EDID14_HDMI_A_SUPPORTED 0x02 -#define EDID14_HDMI_B_SUPPORTED 0x03 - -#define EDID14_MAX_MONITOR_DESCRIPTORS 0x03 - -// Macros related to EDID 1.4 Color Bit Depth support -#define EDID14_COLOR_BIT_DEPTH_UNDEFINED 0x00 -#define EDID14_SIX_BITS_PER_PRIMARY_COLOR 0x06 -#define EDID14_EIGHT_BITS_PER_PRIMARY_COLOR 0x08 -#define EDID14_TEN_BITS_PER_PRIMARY_COLOR 0x0A -#define EDID14_TWELVE_BITS_PER_PRIMARY_COLOR 0x0C -#define EDID14_FOURTEEN_BITS_PER_PRIMARY_COLOR 0x0E -#define EDID14_SIXTEEN_BITS_PER_PRIMARY_COLOR 0x10 -#define EDID14_INVALID_COLOR_BIT_DEPTH 0x07 - -// Macro for showing Color Bit Depth support for existing displays -#define EDID_EIGHT_BITS_PER_PRIMARY_COLOR 0x08 - -// Macro for Established Timings III Block descriptor -#define EST_TIMINGS_III_BLOCK_TAG 0xF7 -#define EST_TIMINGS_III_BLOCK_DATA_LENGTH 0x06 - -// Macro for indicating byte length -#define BYTE_LENGTH 0x08 - -//////////////////////////////////////////// -// -// Max number of EDID Blocks -// -//////////////////////////////////////////// -#define MAX_EDID_BLOCKS 255 //According to E-EDID Standard doc. -#define EDID_BLOCK_SIZE 128 - -// Macros for EDID Revision and Version for EDID 1.3 -#define EDID_VERSION_1_3 0x01 -#define EDID_REVISION_1_3 0x03 - -//////////////////////////////////////////// -// Base EDID header -//////////////////////////////////////////// -static const unsigned char BASEEDID_Header[8] = {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}; - -// Display Range Limits Offset Flags. -// Applicable only from EDID 1.4 onwards -typedef union _edid_range_limits_flags { - uint8_t ucRangeLimitOffsetFlags; // Range Limits Offset Flags - struct { - uint8_t ucVerticalRateOffset : 2; // Vertical Rate Offset - uint8_t ucHorizontalRateOffset : 2; // Horizontal Rate Offset - uint8_t ucReserved : 4; // Reserved. - }; -} edid_range_limits_flags_t; - -//////////////////////////////////////////// -// -// 18-byte DTD block -// Refer Table 3.16, 3.17 & 3.18 of -// EDID spec -// -//////////////////////////////////////////// -typedef struct _edid_dtd_timing { -#pragma pack(1) - - int16_t wPixelClock; // Pixel clock / 10000 - - uint8_t ucHA_low; // Lower 8 bits of H. active pixels - uint8_t ucHBL_low; // Lower 8 bits of H. blanking - union { - uint8_t ucHAHBL_high; - struct { - uint8_t ucHBL_high : 4; // Upper 4 bits of H. blanking - uint8_t ucHA_high : 4; // Upper 4 bits of H. active pixels - }; - }; - - uint8_t ucVA_low; // Lower 8 bits of V. active lines - uint8_t ucVBL_low; // Lower 8 bits of V. blanking - union { - uint8_t ucVAVBL_high; - struct { - uint8_t ucVBL_high : 4; // Upper 4 bits of V. blanking - uint8_t ucVA_high : 4; // Upper 4 bits of V. active pixels - }; - }; - - uint8_t ucHSO_low; // Lower 8 bits of H. sync offset - uint8_t ucHSPW_low; // Lower 8 bits of H. sync pulse width - union { - uint8_t ucVSOVSPW_low; - struct { - uint8_t ucVSPW_low : 4; // Lower 4 bits of V. sync pulse width - uint8_t ucVSO_low : 4; // Lower 4 bits of V. sync offset - }; - }; - union { - uint8_t ucHSVS_high; - struct { - uint8_t ucVSPW_high : 2; // Upper 2 bits of V. sync pulse width - uint8_t ucVSO_high : 2; // Upper 2 bits of V. sync offset - uint8_t ucHSPW_high : 2; // Upper 2 bits of H. sync pulse width - uint8_t ucHSO_high : 2; // Upper 2 bits of H. sync offset - }; - }; - - uint8_t ucHIS_low; // Lower 8 bits of H. image size in mm - uint8_t ucVIS_low; // Lower 8 bits of V. image size in mm - union { - uint8_t ucHISVIS_high; - struct { - uint8_t ucVIS_high : 4; // Upper 4 bits of V. image size - uint8_t ucHIS_high : 4; // Upper 4 bits of H. image size - }; - }; - - uint8_t ucHBorder; // H. border in pixels - uint8_t ucVBorder; // V. border in pixels - - union { - uint8_t ucFlags; // Hsync & Vsync polarity, etc. flags - struct { - uint8_t ucStereo1 : 1; // Stereo definition with bit[6:5] - uint8_t ucHSync_Pol : 1; // Hsync polarity (0: Neg, 1: Pos) - uint8_t ucVSync_Pol : 1; // Vsync polarity (0: Neg, 1: Pos) - uint8_t ucSync_Conf : 2; // Sync configuration - // 00 : Analog composite - // 01 : Bipolar analog composite - // 00 : Digital composite - // 00 : Digital separate - uint8_t ucStereo2 : 2; // Stereo definition - // 00 : Normal display, no stereo - // xx : Stereo definition with bit0 - uint8_t ucInterlaced : 1; // Interlaced / Non-interlaced - // 0 : Non-interlaced - // 1 : Interlaced - }; - }; - -#pragma pack() -} edid_dtd_timing_t; - - -//////////////////////////////////////////// -// -// Standard timing identification -// Refer Table 3.15 of EDID spec -// -//////////////////////////////////////////// -typedef union _edid_std_timing { - uint16_t usStdTiming; - - struct { -#pragma pack(1) - uint8_t ucHActive; // (HActive/8) - 31; - struct { - uint8_t ucRefreshRate : 6; // Refresh Rate - 60 - uint8_t ucAspectRatio : 2; // Aspect ratio (HActive/VActive) - // 00: 1:1 Aspect ratio - // 01: 4:3 Aspect ratio - // 10: 5:4 Aspect ratio - // 11: 16:9 Aspect ratio - }; - }; -#pragma pack() - -} edid_std_timing_t; -//////////////////////////////////////////////////////// -// Aspect Ratio def's as per Edid 1.3 Standard Timings -//////////////////////////////////////////////////////// -#define EDID_STD_ASPECT_RATIO_16_10 0x0 -#define EDID_STD_ASPECT_RATIO_4_3 0x1 -#define EDID_STD_ASPECT_RATIO_5_4 0x2 -#define EDID_STD_ASPECT_RATIO_16_9 0x3 - - -//////////////////////////////////////////// -// -// Monitor range limits -// -//////////////////////////////////////////// -typedef struct _monitor_range_limits { -#pragma pack(1) - - uint8_t ucMin_vert_rate; //Min Vertical Rate,in Hz - uint8_t ucMax_vert_rate; //Max Vertical Rate, in Hz - uint8_t ucMin_horz_rate; //Min Horizontal Rate, in Hz - uint8_t ucMax_horz_rate; //Max Horizontal Rate, in Hz - uint8_t ucMax_pixel_clock; //Max Pixel Clock,Value/10 Mhz - uint8_t ucTiming_formula_support; //00 - No Secondary Timing Formula Supported - //02 - Secondary GTF Curve Supported - //In EDID 1.4, this may indicate CVT support as well - //If timing_formula_support is 02 - uint8_t ucReserved; //00h - uint8_t ucStart_freq; //Horizontal Freq, Value/2, KHz - uint8_t ucByte_C; //C*2 - uint8_t ucLSB_M; //LSB of M Value - uint8_t ucMSB_M; //MSB of M Value - uint8_t ucByte_K; //K Value - uint8_t ucByte_J; //J*2 - -#pragma pack() -} monitor_range_limits_t; - -//////////////////////////////////////////// -// -// Color point -// -//////////////////////////////////////////// -typedef struct _color_point { -#pragma pack(1) - - uint8_t ucWhite_point_index_number_1; - uint8_t ucWhite_low_bits_1; - uint8_t ucWhite_x_1; - uint8_t ucWhite_y_1; - uint8_t ucWhite_gamma_1; - uint8_t ucWhite_point_index_number_2; - uint8_t ucWhite_low_bits_2; - uint8_t ucWhite_x_2; - uint8_t ucWhite_y_2; - uint8_t ucWhite_gamma_2; - uint8_t ucByte_15; - uint8_t ucByte_16_17[2]; - -#pragma pack() -} color_point_t; - -//////////////////////////////////////////// -// -// Monitor description descriptor -// Refer Table 3.19 & 3.20 of EDID spec -// -//////////////////////////////////////////// -#define BASEEDID_MONITORSN_MDDATATYPE 0xFF -#define BASEEDID_ASCIISTRING_MDDATATYPE 0xFE -#define BASEEDID_MONITORRANGELIMIT_MDDATATYPE 0xFD -#define BASEEDID_MONITORNAME_MDDATATYPE 0xFC -#define BASEEDID_COLORPOINT_MDDATATYPE 0xFB -#define BASEEDID_STDTIMINGS_MDDATATYPE 0xFA - -// Structure definition for Established Timings III monitor block -typedef struct _est_timings_iii_block { -#pragma pack(1) - // The first byte will show the VESA DMTS Standard Version. - // The following six bytes will have the Timings Bit Mask. - // Right now only 6 bytes are used for this!!! - // Rest is reserved. - uint8_t ucVesaDMTVersion; //Byte 0 indicating the VESA DMT Version. - uint8_t ucTimingBitMask[6];// Next 6 bytes indicating the Timing Bit Mask Bytes used in Est Timing III. - uint8_t bReserved[6];//Next 6 bytes are reserved -#pragma pack() -} est_timings_iii_block_t; - -typedef struct _monitor_descriptor { -#pragma pack(1) - - int16_t wFlag; // = 0000 when block is used as descriptor - uint8_t ucFlag0; // Reserved - - uint8_t ucDataTypeTag; - - uint8_t ucFlag1; // 00 for descriptor - - union { - - // Monitor S/N (ucDataTypeTag = FF) - uint8_t ucMonitorSerialNumber[13]; - - // ASCII string (ucDataTypeTag = FE) - uint8_t ucASCIIString[13]; - - // Monitor range limit (ucDataTypeTag = FD) - monitor_range_limits_t MonitorRangeLimits; - - // Monitor name (ucDataTypeTag = FC) - uint8_t ucMonitorName[13]; - - // Color point (ucDataTypeTag = FB) - color_point_t ColorPoint; - - // ESTABLISHED TIMINGS III BLOCK = F7 (Added for EDID 1.4) - est_timings_iii_block_t stEstTimingsIIIBlock; - - // Standard timings (ucDataTypeTag = FA) - struct { - edid_std_timing_t ExtraStdTiming[6]; - uint8_t ucFixedValueOfA0; // Should be 0xA0 - }; - - // Manufacturer specific value (ucDataTypeTag = 0F-00) - uint8_t ucMfgSpecificData[13]; - }; - -#pragma pack() -} monitor_descriptor_t; - -//////////////////////////////////////////// -// -// EDID PnP ID fields -// -//////////////////////////////////////////// -typedef union _baseedid_pnpid { - uint8_t VendorProductID[10]; // Vendor / Product identification - - struct { - uint8_t ManufacturerID[2]; // Bytes 8, 9: Manufacturer ID - uint8_t ProductID[2]; // Bytes 10, 11: Product ID - uint8_t SerialNumber[4]; // Bytes 12-15: Serial numbers - uint8_t WeekOfManufacture; // Byte 16: Week of manufacture - uint8_t YearOfManufacture; // Byte 17: Year of manufacture - }; -} baseedid_pnpid_t; - -// -// Chromaticity structure -// Table 3.12 of Base Block for details -// -typedef struct _baseedid_chromaticity_block { - union{ - uint8_t RedGreenLowBits; // Byte 1 - struct{ - uint8_t ucGreenYLowBits : 2; // bit 1:0 - uint8_t ucGreenXLowBits : 2; // bit 3:2 - uint8_t ucRedYLowBits : 2; // bit 5:4 - uint8_t ucRedXLowBits : 2; // bit 7:6 - }; - }; - - union{ - uint8_t ucBlueWhiteLowBits; // Byte 2 - struct{ - uint8_t ucWhiteYLowBits : 2; // bit 1:0 - uint8_t ucWhiteXLowBits : 2; // bit 3:2 - uint8_t ucBlueYLowBits : 2; // bit 5:4 - uint8_t ucBlueXLowBits : 2; // bit 7:6 - }; - }; - - uint8_t ucRedXUpperBits; // bit 9:2 Byte 3 - uint8_t ucRedYUpperBits; // bit 9:2 Byte 4 - - uint8_t ucGreenXUpperBits; // bit 9:2 Byte 5 - uint8_t ucGreenYUpperBits; // bit 9:2 Byte 6 - - uint8_t ucBlueXUpperBits; // bit 9:2 Byte 7 - uint8_t ucBlueYUpperBits; // bit 9:2 Byte 8 - - uint8_t ucWhiteXUpperBits; // bit 9:2 Byte 9 - uint8_t ucWhiteYUpperBits; // bit 9:2 Byte 10 -} baseedid_chromaticity_block_t; - -//////////////////////////////////////////// -// -// 128-byte EDID 1.x block0 structure -// -//////////////////////////////////////////// -typedef struct _baseedid_1_x { -#pragma pack(1) - - // - // Header: 8 bytes (Table 3.3 of EDID spec) - char Header[8]; // EDID1.x header "0 FFh FFh FFh FFh FFh FFh 0" - - // - // Vendor/Product ID: 10 bytes (Table 3.4, 3.5 & 3.6 of EDID spec) - //baseedid_pnpid_t; - union { - uint8_t VendorProductID[10]; // Vendor / Product identification - struct { - uint8_t ManufacturerID[2]; // Bytes 8, 9: Manufacturer ID - uint8_t ProductID[2]; // Bytes 10, 11: Product ID - uint8_t SerialNumber[4]; // Bytes 12-15: Serial numbers - uint8_t WeekOfManufacture; // Byte 16: Week of manufacture - uint8_t YearOfManufacture; // Byte 17: Year of manufacture - }; - }; - - // - // EDID structure Version/Revision: 2 bytes (Table 3.7 of EDID spec) - uint8_t ucVersion; // EDID version no. - uint8_t ucRevision; // EDID revision no. - - // - // Basic display parameters & features: 5 bytes (Table 3.8 of EDID spec) - union { - uint8_t ucVideoInput; // Video input definition (Refer Table 3.9 of EDID spec) - - struct { - uint8_t ucSyncInput : 4; // Sync input supported (iff ucDigitInput = 0) - uint8_t ucSetup : 1; // Display setup (iff ucDigitInput = 0) - uint8_t ucSigLevStd : 2; // Signal level Standard (iff ucDigitInput = 0) - - uint8_t ucDigitInput : 1; // 1: Digital input; 0: Analog input - }; - }; - - // Image size (Table 3.10 of EDID spec) - uint8_t ucMaxHIS; // Maximum H. image size in cm - uint8_t ucMaxVIS; // Maximum V. image size in cm - - // Gamma (display transfer characteristic) - uint8_t ucGamma; // Display gamma value [= (gamma*100)-100] - - // Feature support (Table 3.11 of EDID spec) - union { - uint8_t ucDMPSFeature; // DPMS feature support - - struct { - uint8_t ucGTFSupport : 1; // GTF timing support (1: Yes) - uint8_t ucPTM : 1; // Preferred timing is 1st DTD (1: Yes) [Must if EDID >= 1.3] - uint8_t ucColorSpace : 1; // Use STD color space (1:Yes) [If set ColorChars should match sRGB values in EDID spec Appendix A] - uint8_t ucDispType : 2; // Display type - // 00: Monochrome - // 01: R/G/B color display - // 10: Non R/G/B multicolor display - // 11: Undefined - uint8_t ucActiveOff : 1; // Active off (Display consumes less power/blanks out when it receives an out of range timing) - uint8_t ucSuspend : 1; // Suspend (Refer VESA DPMS spec) - uint8_t ucStandBy : 1; // Stand-by (Refer VESA DPMS spec) - }; - }; - - // - // Phosphor or Filter Chromaticity: 10 bytes - uint8_t ColorChars[10]; // Color characteristics (Refer Table 3.12 of EDID spec) - - // - // Established timings: 3 bytes (Table 3.14 of EDID spec) - union { - uint8_t EstTiming1; - struct { - uint8_t bSupports800x600_60 : 1; - uint8_t bSupports800x600_56 : 1; - uint8_t bSupports640x480_75 : 1; - uint8_t bSupports640x480_72 : 1; - uint8_t bSupports640x480_67 : 1; - uint8_t bSupports640x480_60 : 1; - uint8_t bSupports720x400_88 : 1; - uint8_t bSupports720x400_70 : 1; - }; - }; - union { - uint8_t EstTiming2; - struct { - uint8_t bSupports1280x1024_75 : 1; - uint8_t bSupports1024x768_75 : 1; - uint8_t bSupports1024x768_70 : 1; - uint8_t bSupports1024x768_60 : 1; - uint8_t bSupports1024x768_87i : 1; - uint8_t bSupports832x624_75 : 1; - uint8_t bSupports800x600_75 : 1; - uint8_t bSupports800x600_72 : 1; - }; - }; - union { - uint8_t MfgTimings; - struct { - uint8_t bMfgReservedTimings : 7; - uint8_t bSupports1152x870_75 : 1; - }; - }; - - // - // Standard timings: 8 bytes (Table 3.15 of EDID spec) - edid_std_timing_t StdTiming[NUM_BASEEDID_STANDARD_TIMING]; // 8 Standard timing support - - // - // Detailed timing section - 72 bytes (4*18 bytes) - union { - edid_dtd_timing_t DTD[MAX_BASEEDID_DTD_BLOCKS]; // Four DTD data blocks - - monitor_descriptor_t MonitorInfo[MAX_BASEEDID_DTD_BLOCKS]; - }; - - uint8_t ucNumExtBlocks; // Number of extension EDID blocks - uint8_t ucChecksum; // Checksum of the EDID block - -#pragma pack() -} baseedid_1_x_t; - -//////////////////////////////////////////// -// -// 128-byte EDID 1.4 block0 structure -// EDID 1.4 block0 structure is different from 1.3 block0 -// Thats why this new structure has been added -// Changes are commented in the structure itself -// -//////////////////////////////////////////// -typedef struct _baseedid_1_4 { -#pragma pack(1) - - // - // Header: 8 bytes (Table 3.3 of EDID spec) - char Header[8]; // EDID1.x header "0 FFh FFh FFh FFh FFh FFh 0" - - // - // Vendor/Product ID: 10 bytes (Table 3.4, 3.5 & 3.6 of EDID spec) - union { - uint8_t VendorProductID[10]; // Vendor / Product identification - struct { - uint8_t ManufacturerID[2]; // Bytes 8, 9: Manufacturer ID - uint8_t ProductID[2]; // Bytes 10, 11: Product ID - uint8_t SerialNumber[4]; // Bytes 12-15: Serial numbers - uint8_t WeekOfManufacture; // Byte 16: Week of manufacture - uint8_t YearOfManufacture; // Byte 17: Year of manufacture - }; - }; - - // - // EDID structure Version/Revision: 2 bytes (Table 3.7 of EDID spec) - uint8_t ucVersion; // EDID version no. - uint8_t ucRevision; // EDID revision no. - - // - // Basic display parameters & features: 5 bytes (Table 3.8 of EDID spec) - union { - uint8_t ucVideoInput; // Video input definition (Refer Table 3.9 of EDID spec) - - struct { - uint8_t ucSyncInput : 4; // Sync input supported (iff ucDigitInput = 0) - uint8_t ucSetup : 1; // Display setup (iff ucDigitInput = 0) - uint8_t ucSigLevStd : 2; // Signal level Standard (iff ucDigitInput = 0) - - uint8_t ucDigitInput : 1; // 1: Digital input; 0: Analog input - }; - // This structure has been introduced to reflect the changes in EDID 1.4 spec - // This sturcture shows new meaning of VIDEO INPUT DEFINITION when input is digital - struct { - uint8_t ucDigitalVideoInterface : 4; // Digital Video Interface Standard Supported. - uint8_t ucColorBitDepth : 3; // Color Bit Depth. - // 0 0 0 -- Color Bit Depth is undefined - // 0 0 1 -- 6 Bits per Primary Color - // 0 1 0 -- 8 Bits per Primary Color - // 0 1 1 -- 10 Bits per Primary Color - // 1 0 0 -- 12 Bits per Primary Color - // 1 0 1 -- 14 Bits per Primary Color - // 1 1 0 -- 16 Bits per Primary Color - // 1 1 1 -- Reserved (Do Not Use) - uint8_t bIsDigitalVideoSignalInterface : 1; // Bit 7 - }; - }; - - // As per the EDID spec 1.4, the following two fields can be aspect ratios as well. - union { - uint8_t ucMaxHIS; // Maximum H. image size in cm - uint8_t ucARLandscape; // Landscape Aspect raio as per EDID 1.4 spec - }; - union { - uint8_t ucMaxVIS; // Maximum V. image size in cm - uint8_t ucARPortrait; // Portrait Aspect raio as per EDID 1.4 spec - }; - - // Gamma (display transfer characteristic) - uint8_t ucGamma; // Display gamma value [= (gamma*100)-100] - - // Feature support (Table 3.11 of EDID spec) - union { - uint8_t ucDMPSFeature; // DPMS feature support - - struct { - uint8_t ucContinuousDisplay : 1; // Display is continuous or non-continuous (1: Yes) - uint8_t ucPTM : 1; // Preferred timing mode indicates native pixel format and native RR. - uint8_t ucColorSpace : 1; // Use STD color space (1:Yes) [If set ColorChars should match sRGB values in EDID spec Appendix A] - uint8_t ucDispType : 2; // Display type - // 00: Monochrome - // 01: R/G/B color display - // 10: Non R/G/B multicolor display - // 11: Undefined - uint8_t ucActiveOff : 1; // Active off (Display consumes less power/blanks out when it receives an out of range timing) - uint8_t ucSuspend : 1; // Suspend (Refer VESA DPMS spec) - uint8_t ucStandBy : 1; // Stand-by (Refer VESA DPMS spec) - }; - - struct { - uint8_t bReserved0 : 1; - uint8_t bReserved1 : 1; - uint8_t bReserved2 : 1; - uint8_t ucColorEncodingFormat : 2; // Supported Color Encoding Format if Video Input is digital - // 00: RGB 4:4:4 - // 01: RGB 4:4:4 & YCrCb 4:4:4 - // 10: RGB 4:4:4 & YCrCb 4:2:2 - // 11: RGB 4:4:4 & YCrCb 4:4:4 & YCrCb 4:2:2 - uint8_t bReserved3 : 1; - uint8_t bReserved4 : 1; - uint8_t bReserved5 : 1; - }; - }; - - // - // Phosphor or Filter Chromaticity: 10 bytes - uint8_t ColorChars[10]; // Color characteristics (Refer Table 3.12 of EDID spec) - - // - // Established timings: 3 bytes (Table 3.14 of EDID spec) - union { - uint8_t EstTiming1; - struct { - uint8_t bSupports800x600_60 : 1; - uint8_t bSupports800x600_56 : 1; - uint8_t bSupports640x480_75 : 1; - uint8_t bSupports640x480_72 : 1; - uint8_t bSupports640x480_67 : 1; - uint8_t bSupports640x480_60 : 1; - uint8_t bSupports720x400_88 : 1; - uint8_t bSupports720x400_70 : 1; - }; - }; - union { - uint8_t EstTiming2; - struct { - uint8_t bSupports1280x1024_75 : 1; - uint8_t bSupports1024x768_75 : 1; - uint8_t bSupports1024x768_70 : 1; - uint8_t bSupports1024x768_60 : 1; - uint8_t bSupports1024x768_87i : 1; - uint8_t bSupports832x624_75 : 1; - uint8_t bSupports800x600_75 : 1; - uint8_t bSupports800x600_72 : 1; - }; - }; - union { - uint8_t MfgTimings; - struct { - uint8_t bMfgReservedTimings : 7; - uint8_t bSupports1152x870_75 : 1; - }; - }; - - // - // Standard timings: 8 bytes (Table 3.15 of EDID spec) - edid_std_timing_t StdTiming[NUM_BASEEDID_STANDARD_TIMING]; // 8 Standard timing support - - // Detailed timing section - 72 bytes (4*18 bytes) - // As per the new spec 1.4, the first Detailed Timing Section should contain the PREFERED TIMING BLOCK - edid_dtd_timing_t PreferedTimingMode; - // The rest 54 bytes of the Detailed Timing Section. - union { - edid_dtd_timing_t DTD[MAX_BASEEDID_DTD_BLOCKS - 1]; // Three DTD data blocks - - monitor_descriptor_t MonitorInfo[MAX_BASEEDID_DTD_BLOCKS - 1]; // Three Monitor Descriptor blocks - }; - - uint8_t ucNumExtBlocks; // Number of extension EDID blocks - uint8_t ucChecksum; // Checksum of the EDID block - -#pragma pack() -} baseedid_1_4_t; - - -//***************************************************** -//***************************************************** -// -// DATA STRUCTURES AND DEFINITIONS FOR CE-EXTENSION -// -//***************************************************** -//***************************************************** - -///////////////////////////////// -// -//CE - Extension Block Structure -// -///////////////////////////////// -typedef struct _ce_edid { - uint8_t ucTag; - uint8_t ucRevision; - uint8_t ucDTDOffset; - uint8_t ucCapabilty; - uint8_t data[123]; - uint8_t ucCheckSum; -} ce_edid_t; - -//////////////////////////////////////////// -// -//CE - Video Capability Data block structure -// -//////////////////////////////////////////// -typedef union _video_cap_data_block { - uint8_t ucValue; - struct - { - uint8_t ucCEScanBehavior :2; // Indicates scan behavior of CE mode - uint8_t ucITScanBehavior :2; // Indicates scan behavior of IT mode - uint8_t ucPTScanBehavior :2; // Indicates scan behavior of Preferred mode - uint8_t ucQuantRangeSelectable :1; // Indicates if RGB Quantization Range can be overridden - uint8_t ucReserved :1; - }; -} video_cap_data_block_t; - -//////////////////////////////////////////// -// -//CEA Extn Block Byte3 structure -// -//////////////////////////////////////////// -typedef union _cea_ext_capability { - uint8_t ucValue; - struct - { - uint8_t ucTotalNativeDTDs :4; // Total number of DTDs in extension block - uint8_t ucSupportsYCBCR422 :1; // Indicates support for YCBCR 4:2:2 - uint8_t ucSupportsYCBCR444 :1; // Indicates support for YCBCR 4:4:4 - uint8_t ucSupportsBasicAudio :1; // Indicates support for Basic audio - uint8_t ucUnderscansITFormats :1; // Indicates underscan behavior of IT formats - }; -} cea_ext_capability_t; - -//////////////////////////////////////////// -// -//CE - Video Capability Data block structure -// -//////////////////////////////////////////// -typedef enum { - FORMAT_NOT_SUPPORTED = 0, // Format is not supported - ALWAYS_OVERSCANNED = 1, // Format is always overscanned - ALWAYS_UNDERSCANNED = 2, // Format is always underscanned - SUPPORTS_OVER_AND_UNDERSCAN = 3 // Sink supports both overscan and underscan -} cea_scan_behavior_t; - - -///////////////////////////////// -// -// #defines required for CE Etxn -// -///////////////////////////////// -#define CEA_EXT_TAG 0x02 -#define CEA_EXT_SUPPORTED_VERSION 0x03 -#define CEA_EXT_861_REVISION 0x01 - -#define CEA_USE_EXTENDED_TAG 0x7 - -#define CEA_AUDIO_DATABLOCK 0x1 -#define CEA_VIDEO_DATABLOCK 0x2 -#define CEA_VENDOR_DATABLOCK 0x3 -#define CEA_SPEAKER_DATABLOCK 0x4 -#define CEA_VIDEO_CAP_DATABLOCK 0x0 - -#define CEA_DATABLOCK_TAG_MASK 0xE0 -#define CEA_DATABLOCK_LENGTH_MASK 0x1F -#define CEA_SHORT_VIDEO_DESCRIPTOR_CODE_MASK 0x7F -#define CEA_NATIVE_FORMAT_BIT_MASK 0x80 - -#define CEA_HDMI_IEEE_REG_ID 0x00000C03 -#define CEA_EDID_HEADER_SZIE 0x04 - -// Extended Data block type -// This bit definitions are as per CE 861-D spec -#define CEA_COLORIMETRY_DATABLOCK 0x5 - #define CE_COLORIMETRY_MD0_MASK BIT0 - #define CE_COLORIMETRY_MD1_MASK BIT1 - #define CE_COLORIMETRY_MD2_MASK BIT3 -#if 0 -//================================================================================== -//================================================================================== -// DATA Structure definitions for VTB parsing..... -// Reference VESA Documents are VTB Extension(Release A) & CVT standard version 1.1 -//=================================================================================== -// #defines for VTB-EXT -//=================================================================================== - -#define VTB_EXT_TAG 0x10 -#define VTB_EXT_SUPPORTED_VERSION 0x03 - -#define VTB_MAX_DTD_TIMINGS 6 -#define VTB_MAX_CVT_TIMINGS 40 -#define VTB_MAX_STANDARD_TIMINGS 61 - -#define VTB_DTD_OFFSET 5 -#define VTB_DTD_SIZE 18 -#define VTB_CVT_SIZE 3 -#define VTB_ST_SIZE 2 - -// This struct is for VTB Extension block. -typedef struct _VTB_EXT -{ - uint8_t ucTag; - uint8_t ucVersion; - uint8_t ulNumDTD; - uint8_t ulNumCVT; - uint8_t ulNumST; - uint8_t DATA[122]; - uint8_t ucChecksum; -}VTB_EXT, *PVTB_EXT; - -// Following struct is for CVT descriptor (Version 1.1) -typedef struct _VTB_CVT_TIMING -{ -#pragma pack(1) - - uint8_t ucVA_low; // Lower 8 bits of Vertical size. This Vsize = (vertical active lines/2)-1. - // Range for VA lines is 2 to 8192. CVT supprts only an even no. of active lines per frame. - - union { - uint8_t ucVA_high_AR; - struct { - - uint8_t ucReserved00 :2; //Bits 1-0 are reserved and set to 00h - uint8_t ucAspectRatio :2; // Aspect Ratio specifier bits. - // 00: 4:3 Aspect ratio - // 01: 16:9 Aspect ratio - // 10: 16:10 Aspect ratio - // 11: Undefined (Reserved) - - - uint8_t ucVA_high :4; // Upper 4 bits of Vertical Size. - }; - }; - - union { - uint8_t ucRefresh_Rate_Bits; - struct { - - uint8_t ucRR_60Hz_RB :1; // When set, indicates 60Hz support with Reduced Blanking. - uint8_t ucRR_85Hz :1; // || 85Hz || . - uint8_t ucRR_75Hz :1; // || 75Hz || . - uint8_t ucRR_60Hz :1; // || 60Hz || . - uint8_t ucRR_50Hz :1; // When set, indicates 50Hz Refrash Rate with CRT Blanking supports specified pixel format. - uint8_t ucPreferredRefresh_Rate :2; // Preferred Refresh Rate specifier bits. - // 00: 50 Hz - // 01: 60 Hz (this means either CRT blanking or Reduced Blanking whichever is supported. - // If both are supported, then RB is preferred.) - // 10: 75 Hz - // 11: 85 Hz - - uint8_t ucReserved0 :1; // This bit is reserved and set to '0'. - - }; - }; -#pragma pack() -} VTB_CVT_TIMING, *PVTB_CVT_TIMING; - - -// This struct is for storing extracted Info from CVT descriptor.... -// This is defined by author.....not based on CVT specs. -typedef struct _CVT_INFO -{ - ULONG ulYRes; - ULONG ulXRes; - ULONG ulRRate[5]; //As max 5 Refresh Rates can be supported. - BOOLEAN bRed_Blank_Req[5]; - BOOLEAN bPreferred_RR[5]; //To set flag for Preffered RR - ULONG ulNumRates; //Number of Refresh rates Supported. (Max. 5) -} CVT_INFO, *PCVT_INFO; -#endif -// This structure is for stroing the Display device Data retreived from CEA block -// This is defined as per the Display Device Data Block standard. -typedef struct _display_device_data { -#pragma pack (1) - union - { - uint8_t ucTagAndLength; // Data Block Tag and Block Length. should be 0xFF - struct - { - uint8_t ucLength : 5; - uint8_t ucTag : 3; - }; - }; - uint8_t ucChildTag; // Child tag required as per CEA spec should be 0x02 - union - { - uint8_t ucInterfaceType; - struct - { - uint8_t ucNumOfChannels : 4;// Number of channels supported - uint8_t ucInterfaceCode : 4;// Interface code - }; - }; - union - { - uint8_t ucVerAndRel; - struct - { - uint8_t ucRelease : 4;// Release - uint8_t ucVersion : 4;// Version. - }; - }; - uint8_t ucContentProtectionSuppFlag;// Flag indicating support for content protection. - union - { - uint16_t usClockFrequency;// Clock Frequency - struct - { - uint16_t usMinClockFrequency : 6; // First 6 bits indicates Min frequency - uint16_t usMaxClockFrequency : 10;// Next 10 bits indicates Max frequency - }; - }; - union - { - uint8_t ucNativePixelFormat[4];// Pixel Format - struct - { - uint8_t ucHorizontalPixelCntLower;// Lower byte value of the Horizontal pixel count - uint8_t ucHorizontalPixelCntUpper;// Upper byte value of the Horizontal pixel count - uint8_t ucVerticalPixelCntLower;// Lower byte value of the vertical pixel count - uint8_t ucVerticalPixelCntUpper; // Upper byte value of the vertical pixel count - }; - }; - uint8_t ucAspectRatio;// Byte indicating Aspect ratio. - union - { - uint8_t ucOrientationAndRotation; - struct - { - uint8_t ucScanDirection : 2;// Scan direction. - uint8_t ucZeroPixelLocation : 2;// Zero Pixel Location. - uint8_t ucRotationCapability : 2;// Indicates rotation capability - uint8_t ucDefaultOrientation : 2;// Default Orientation. - }; - }; - uint8_t ucSubPixelInfo;// Sub-Pixle Information. - uint8_t ucHorizontalPitch;// Horizontal Pitch - uint8_t ucVerticalPitch;// Vertical Pitch - union - { - uint8_t ucMiscDisplayCapabilities; - struct - { - uint8_t bReserved : 3; - uint8_t ucDeinterlacing : 1;// indicates deinterlacing support - uint8_t ucOverdriverNotRecommended : 1; - uint8_t ucDirectDrive : 1;// indicates DirectDrive support - uint8_t ucDithering : 2;// indicates Dithering support. - }; - }; - union - { - uint8_t ucAudioFlags;// Flags indicating Audio details - struct - { - uint8_t bReserved1 : 4; - uint8_t ucAudioInputOverride : 1;// Indicates Audio Input Override - uint8_t ucSeparateAudioInputs : 1;// Indicates Separate Audio Inputs - uint8_t ucAudioInputOnVideoInterface : 1;// Shows whether Audio input is through the video interface. - }; - }; - union - { - uint8_t ucAudioDelayFlags; // Audio Delay Flags - struct - { - uint8_t ucAudioDelay : 7;// Absolute offset between the audio and video signals. - uint8_t ucAudioSign : 1;// Indicates positive or negative delay. - }; - }; - union - { - uint8_t ucFrameRateAndModeConversion; - struct - { - uint8_t ucFrameRateRange : 6;//Device Frame rate Range - uint8_t ucFrameRateConversion : 2;//00 � No dedicated rate conversion hardware is provided; - //01 � The display provides a single frame buffer - //10 � The display provides double-buffering - //11- The display provides frame-rate conversion involving interframe interpolation - }; - }; - uint8_t ucDeviceNativeRate;// Device Native Frame rate - union - { - uint8_t ucColorBitDepth;// Color bit depth - struct - { - uint8_t ucDisplayDeviceColBitDepth : 4; // Color bit depth of the display device - uint8_t ucInterfaceColBitDepth : 4;// color bit depth supported by the interface.h - }; - }; - uint8_t ucAddPrimaryChromaticities[8];// Additional Primary Chromaticities. - union - { - uint8_t ucResponseTimeFlags; - struct - { - uint8_t ucResponseTime : 7;// Time for transition. - uint8_t ucBlackToWhite : 1;// if 1, then transition from black to white - // if 0, then transition from white to black - }; - }; - union - { - uint8_t ucOverscanInformation; - struct - { - uint8_t ucVerticalPercentage : 4;// Percentage of Overscan in vertical direction. - uint8_t ucHorizontalPercentage : 4;// Percentage of Overscan in horizontal direction. - }; - }; -#pragma pack() -} display_device_data_t; - -//========================================================================= -//========================================================================= -// #defines for Block Map Ext. -//========================================================================= -//========================================================================= -#define BLOCK_MAP_EXT_TAG 0xF0 - -#endif // EDIDSTRUCTS_H diff --git a/drivers/staging/cdv/drv/psb_intel_hdmi_reg.h b/drivers/staging/cdv/drv/psb_intel_hdmi_reg.h deleted file mode 100644 index 6a3c83e..0000000 --- a/drivers/staging/cdv/drv/psb_intel_hdmi_reg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * - */ -/* chunfeng.zhao@intel.com - */ - -#ifndef PSB_INTEL_HDMI_REG_H -#define PSB_INTEL_HDMI_REG_H - -////////////////////////////////////////// -// -// Integrated HDMI specific registers -// -///////////////////////////////////////// - -#define RESERVED2(x,y) x##y -#define RESERVED1(x,y) RESERVED2(x,y) -#define RANDOMNUMBER __LINE__ // __COUNTER__ -#define UNIQUENAME(ValueName) RESERVED1(ValueName, RANDOMNUMBER) - -/** Requird for HDMI operation */ -#define HDMI_NULL_PACKETS_DURING_VSYNC (1 << 9) -#define HDMI_BORDER_ENABLE (1 << 7) -#define HDMI_AUDIO_ENABLE (1 << 6) -/** New with 965, default is to be set */ -#define HDMI_VSYNC_ACTIVE_HIGH (1 << 4) -/** New with 965, default is to be set */ -#define HDMI_HSYNC_ACTIVE_HIGH (1 << 3) -#define HDMIB_PCIE_CONCURRENCY (1 << 3) -#define HDMI_DETECTED (1 << 2) -/* Bits to be preserved when writing */ -#if 0 -#define HDMIB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14) | (1 << 26)) -#define HDMIC_PRESERVE_MASK ((1 << 17) | (1 << 26)) -#endif -// -//AUDIO configuration register -// -#define MDFLD_AUD_CONFIG_REG 0x69000 - #define MDFLD_AUD_CONFIG_REG_RESERVED_BITS BITRANGE(31,25) -typedef union _mdfld_aud_config { - uint32_t value; - - struct - { - const uint32_t disable_ncts : 1; //Bit 0 - uint32_t lay_out : 1; //Bit 1 (0 - layout 0 1 - layout 1) - uint32_t format : 2; /*Bit [3:2] - * 00 - l-PCM or IEC 61937 - * 01 - High bit rate IEC 61937 stream packet) - * 10 - Not supported - * 11 - Not supported - */ - uint32_t num_audio_ch : 2; /*Bit [5:4] - * 00 - 2 channels(stereo) - * 01 - 3 or 4 channels - * 10 - 5 or 6 channels - * 11 - 7 or 8 channels - */ - uint32_t UNIQUENAME(Reserved) : 1; //Bit 6 - uint32_t b_bit_enabled : 1; /* Bit 7 (0 - B bit set only for sub-packet 0 - * 1 - B bit set for all valid sub packet) - */ - uint32_t sample_flat_bit : 1; //Bit 8 - uint32_t validity_bit : 1; //Bit 9 (1 - set V bit in sub-frame 0 - clear V bit(debugging, testing)) - uint32_t user_bit : 1; //Bit 10 (1 - set U bit in sub frame 0 - clear U bit(default) - uint32_t underrun_packet_bit : 1; //Bit 11 (1 - send underrun packet 0 - send null packet) - uint32_t UNIQUENAME(Reserved) : 20; //Bit [31:12] - }; -} mdfld_aud_config_t; - -// -// Audio control state register -// -#define MDFLD_AUD_CNTL_ST_REG 0x69060 - #define MDFLD_AUD_CNTL_ST_RESERVED_BITS (BITRANGE(14,4) | BITRANGE(31,25)) -// Note => DIP : Data Island Packet -typedef union _mdfld_aud_cntl { - uint32_t value; - - struct - { - uint32_t dip_ram_access_address :4; // bit 3:0 - uint32_t UNIQUENAME(Reserved) :11; // bit 14:4 - uint32_t cp_ready :1; // bit 15 - uint32_t video_dip_trans_freq :2; // bit 17:16 - uint32_t dip_buffer_index :3; // bit 20:18 - uint32_t enable_dip_type :4; // bit 24:21 - uint32_t UNIQUENAME(Reserved) :7; // bit 31:25 - }; - -} mdfld_aud_cntl_t; - - -// HDMI Audio Data Island Packet Data -// -#define MDFLD_HDMI_AUDPAC_DATA_REG 0x69114 - -typedef union _mdfld_hdmi_audpac_data { - uint32_t value; - - struct - { - uint32_t audio_dip_data :32; // bit 31:0 - }; -} mdfld_hdmi_audpac_data_t; - -#endif // PSB_INTEL_HDMI_REG_H diff --git a/drivers/staging/cdv/drv/psb_intel_i2c.c b/drivers/staging/cdv/drv/psb_intel_i2c.c deleted file mode 100644 index 02c9f1c..0000000 --- a/drivers/staging/cdv/drv/psb_intel_i2c.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - */ - -#include -#include - -#include "psb_drv.h" -#include "psb_intel_reg.h" - -/* - * Intel GPIO access functions - */ - -#define I2C_RISEFALL_TIME 20 - -static int get_clock(void *data) -{ - struct psb_intel_i2c_chan *chan = data; - struct drm_device *dev = chan->drm_dev; - u32 val; - - val = REG_READ(chan->reg); - return (val & GPIO_CLOCK_VAL_IN) != 0; -} - -static int get_data(void *data) -{ - struct psb_intel_i2c_chan *chan = data; - struct drm_device *dev = chan->drm_dev; - u32 val; - - val = REG_READ(chan->reg); - return (val & GPIO_DATA_VAL_IN) != 0; -} - -static void set_clock(void *data, int state_high) -{ - struct psb_intel_i2c_chan *chan = data; - struct drm_device *dev = chan->drm_dev; - u32 reserved = 0, clock_bits; - - /* On most chips, these bits must be preserved in software. */ - if (!IS_I830(dev) && !IS_845G(dev)) - reserved = - REG_READ(chan->reg) & (GPIO_DATA_PULLUP_DISABLE | - GPIO_CLOCK_PULLUP_DISABLE); - - if (state_high) - clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK; - else - clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK | - GPIO_CLOCK_VAL_MASK; - REG_WRITE(chan->reg, reserved | clock_bits); - udelay(I2C_RISEFALL_TIME); /* wait for the line to change state */ -} - -static void set_data(void *data, int state_high) -{ - struct psb_intel_i2c_chan *chan = data; - struct drm_device *dev = chan->drm_dev; - u32 reserved = 0, data_bits; - - /* On most chips, these bits must be preserved in software. */ - if (!IS_I830(dev) && !IS_845G(dev)) - reserved = - REG_READ(chan->reg) & (GPIO_DATA_PULLUP_DISABLE | - GPIO_CLOCK_PULLUP_DISABLE); - - if (state_high) - data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK; - else - data_bits = - GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK | - GPIO_DATA_VAL_MASK; - - REG_WRITE(chan->reg, reserved | data_bits); - udelay(I2C_RISEFALL_TIME); /* wait for the line to change state */ -} - -/** - * psb_intel_i2c_create - instantiate an Intel i2c bus using the specified GPIO reg - * @dev: DRM device - * @output: driver specific output device - * @reg: GPIO reg to use - * @name: name for this bus - * - * Creates and registers a new i2c bus with the Linux i2c layer, for use - * in output probing and control (e.g. DDC or SDVO control functions). - * - * Possible values for @reg include: - * %GPIOA - * %GPIOB - * %GPIOC - * %GPIOD - * %GPIOE - * %GPIOF - * %GPIOG - * %GPIOH - * see PRM for details on how these different busses are used. - */ -struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev, - const u32 reg, const char *name) -{ - struct psb_intel_i2c_chan *chan; - - chan = kzalloc(sizeof(struct psb_intel_i2c_chan), GFP_KERNEL); - if (!chan) - goto out_free; - - chan->drm_dev = dev; - chan->reg = reg; - snprintf(chan->adapter.name, I2C_NAME_SIZE, "intel drm %s", name); - chan->adapter.owner = THIS_MODULE; - chan->adapter.algo_data = &chan->algo; - chan->adapter.dev.parent = &dev->pdev->dev; - chan->algo.setsda = set_data; - chan->algo.setscl = set_clock; - chan->algo.getsda = get_data; - chan->algo.getscl = get_clock; - chan->algo.udelay = 20; - chan->algo.timeout = usecs_to_jiffies(2200); - chan->algo.data = chan; - - i2c_set_adapdata(&chan->adapter, chan); - - if (i2c_bit_add_bus(&chan->adapter)) - goto out_free; - - /* JJJ: raise SCL and SDA? */ - set_data(chan, 1); - set_clock(chan, 1); - udelay(20); - - return chan; - -out_free: - kfree(chan); - return NULL; -} - -/** - * psb_intel_i2c_destroy - unregister and free i2c bus resources - * @output: channel to free - * - * Unregister the adapter from the i2c layer, then free the structure. - */ -void psb_intel_i2c_destroy(struct psb_intel_i2c_chan *chan) -{ - if (!chan) - return; - - i2c_del_adapter(&chan->adapter); - kfree(chan); -} diff --git a/drivers/staging/cdv/drv/psb_intel_lvds.c b/drivers/staging/cdv/drv/psb_intel_lvds.c deleted file mode 100644 index 90292d8..0000000 --- a/drivers/staging/cdv/drv/psb_intel_lvds.c +++ /dev/null @@ -1,701 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - * Dave Airlie - * Jesse Barnes - */ - -#include -#include -/* #include */ -/* #include */ -#include - -#include "psb_intel_bios.h" -#include "psb_drv.h" -#include "psb_intel_drv.h" -#include "psb_intel_reg.h" -#include "psb_powermgmt.h" -#include - -/* MRST defines start */ -uint8_t blc_freq; -uint8_t blc_minbrightness; -uint8_t blc_i2caddr; -uint8_t blc_brightnesscmd; -int lvds_backlight; /* restore backlight to this value */ - -u32 CoreClock; -u32 PWMControlRegFreq; - -/** - * LVDS I2C backlight control macros - */ -#define BLC_I2C_TYPE 0x01 -#define BLC_PWM_TYPT 0x02 - -#define BLC_POLARITY_NORMAL 0 -#define BLC_POLARITY_INVERSE 1 - -#define PSB_BLC_MAX_PWM_REG_FREQ (0xFFFE) -#define PSB_BLC_MIN_PWM_REG_FREQ (0x2) -#define PSB_BLC_PWM_PRECISION_FACTOR (10) -#define PSB_BACKLIGHT_PWM_MODULATION_MASK (0xFFFF0000) -#define PSB_BACKLIGHT_PWM_CTL_SHIFT (16) -#define PSB_BACKLIGHT_PWM_POLARITY_BIT_CLEAR (0xFFFE) - -struct psb_intel_lvds_priv { - /** - * Saved LVDO output states - */ - uint32_t savePP_ON; - uint32_t savePP_OFF; - uint32_t saveLVDS; - uint32_t savePP_CONTROL; - uint32_t savePP_CYCLE; - uint32_t savePFIT_CONTROL; - uint32_t savePFIT_PGM_RATIOS; - uint32_t saveBLC_PWM_CTL; -}; - -static int is_backlight_combination_mode(struct drm_device *dev) -{ - return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE; -} - -static u32 psb_intel_get_pwm_ctl(struct drm_device *dev) -{ - u32 val; - struct drm_psb_private *dev_priv = (struct drm_psb_private *)dev->dev_private; - - val = REG_READ(BLC_PWM_CTL); - - if (dev_priv->saveBLC_PWM_CTL == 0) { - dev_priv->saveBLC_PWM_CTL = val; - dev_priv->saveBLC_PWM_CTL2 = REG_READ(BLC_PWM_CTL2); - } else if (val == 0) { - REG_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL); - REG_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2); - val = dev_priv->saveBLC_PWM_CTL; - } - return val; -} - -u32 psb_intel_lvds_get_backlight(struct drm_device *dev) -{ - u32 val; - - val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; - - if (is_backlight_combination_mode(dev)) { - u8 lbpc; - - val &= ~1; - pci_read_config_byte(dev->pdev, 0xF4, &lbpc); - val *= lbpc; - } - - return val; -} - -/** - * * Returns the maximum level of the backlight duty cycle field. - * */ -u32 psb_intel_lvds_get_max_backlight(struct drm_device *dev) -{ - u32 max; - - max = psb_intel_get_pwm_ctl(dev); - - if (max == 0) { - DRM_DEBUG_KMS("LVDS Panel PWM value is 0!\n"); - /* i915 does this, I believe which means that we should not - * smash PWM control as firmware will take control of it. */ - return 1; - } - - max >>= 16; - if (is_backlight_combination_mode(dev)) - max *= 0xff; - - return max; -} - -void psb_intel_lvds_set_backlight(struct drm_device *dev, int level) -{ - u32 blc_pwm_ctl; - - if (is_backlight_combination_mode(dev)) { - u32 max = psb_intel_lvds_get_max_backlight(dev); - u8 lbpc; - - lbpc = level * 0xfe / max + 1; - level /= lbpc; - - pci_write_config_byte(dev->pdev, 0xF4, lbpc); - } - - blc_pwm_ctl = REG_READ(BLC_PWM_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK; - REG_WRITE(BLC_PWM_CTL, (blc_pwm_ctl | (level << BACKLIGHT_DUTY_CYCLE_SHIFT))); -} - -/** - * Sets the power state for the panel. - */ -static void psb_intel_lvds_set_power(struct drm_device *dev, - struct psb_intel_output *output, bool on) -{ - u32 pp_status; - - if (on) { - REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | - POWER_TARGET_ON); - do { - pp_status = REG_READ(PP_STATUS); - } while ((pp_status & PP_ON) == 0); - - psb_intel_lvds_set_backlight(dev, output->mode_dev->backlight_duty_cycle); - } else { - psb_intel_lvds_set_backlight(dev, 0); - - REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) & - ~POWER_TARGET_ON); - do { - pp_status = REG_READ(PP_STATUS); - } while (pp_status & PP_ON); - } -} - -static void psb_intel_lvds_encoder_dpms(struct drm_encoder *encoder, int mode) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); - - if (mode == DRM_MODE_DPMS_ON) - psb_intel_lvds_set_power(dev, output, true); - else - psb_intel_lvds_set_power(dev, output, false); - - /* XXX: We never power down the LVDS pairs. */ -} - -static void psb_intel_lvds_save(struct drm_connector *connector) -{ - return; -} - -static void psb_intel_lvds_restore(struct drm_connector *connector) -{ - return; -} - -int psb_intel_lvds_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) -{ - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - struct drm_display_mode *fixed_mode = - psb_intel_output->mode_dev->panel_fixed_mode; - - PSB_DEBUG_ENTRY("\n"); - - /* just in case */ - if (mode->flags & DRM_MODE_FLAG_DBLSCAN) - return MODE_NO_DBLESCAN; - - /* just in case */ - if (mode->flags & DRM_MODE_FLAG_INTERLACE) - return MODE_NO_INTERLACE; - - if (fixed_mode) { - if (mode->hdisplay > fixed_mode->hdisplay) - return MODE_PANEL; - if (mode->vdisplay > fixed_mode->vdisplay) - return MODE_PANEL; - } - return MODE_OK; -} - -bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - struct psb_intel_mode_device *mode_dev = - enc_to_psb_intel_output(encoder)->mode_dev; - struct drm_device *dev = encoder->dev; - struct psb_intel_crtc *psb_intel_crtc = - to_psb_intel_crtc(encoder->crtc); - struct drm_encoder *tmp_encoder; - struct drm_display_mode *panel_fixed_mode = mode_dev->panel_fixed_mode; - struct psb_intel_output *psb_intel_output = enc_to_psb_intel_output(encoder); - - PSB_DEBUG_ENTRY("type = 0x%x, pipe = %d.\n",psb_intel_output->type, psb_intel_crtc->pipe); - - /* Should never happen!! */ - if (IS_MID(dev) && !IS_CDV(dev) && psb_intel_crtc->pipe == 1) { - DRM_ERROR("Can't support LVDS/MIPI on pipe B on MRST\n"); - return false; - } else if (!IS_MID(dev) && !IS_I965G(dev) - && psb_intel_crtc->pipe == 0) { - DRM_ERROR("Can't support LVDS on pipe A\n"); - return false; - } - /* Should never happen!! */ - list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list, - head) { - if (tmp_encoder != encoder - && tmp_encoder->crtc == encoder->crtc) { - DRM_ERROR("Can't enable LVDS and another " - "encoder on the same pipe\n"); - return false; - } - } - - /* - * If we have timings from the BIOS for the panel, put them in - * to the adjusted mode. The CRTC will be set up for this mode, - * with the panel scaling set up to source from the H/VDisplay - * of the original mode. - */ - if (panel_fixed_mode != NULL) { - adjusted_mode->hdisplay = panel_fixed_mode->hdisplay; - adjusted_mode->hsync_start = panel_fixed_mode->hsync_start; - adjusted_mode->hsync_end = panel_fixed_mode->hsync_end; - adjusted_mode->htotal = panel_fixed_mode->htotal; - adjusted_mode->vdisplay = panel_fixed_mode->vdisplay; - adjusted_mode->vsync_start = panel_fixed_mode->vsync_start; - adjusted_mode->vsync_end = panel_fixed_mode->vsync_end; - adjusted_mode->vtotal = panel_fixed_mode->vtotal; - adjusted_mode->clock = panel_fixed_mode->clock; - drm_mode_set_crtcinfo(adjusted_mode, - CRTC_INTERLACE_HALVE_V); - } - - /* - * XXX: It would be nice to support lower refresh rates on the - * panels to reduce power consumption, and perhaps match the - * user's requested refresh rate. - */ - - return true; -} - -static void psb_intel_lvds_prepare(struct drm_encoder *encoder) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); - struct psb_intel_mode_device *mode_dev = output->mode_dev; - - PSB_DEBUG_ENTRY("\n"); - - mode_dev->saveBLC_PWM_CTL = REG_READ(BLC_PWM_CTL); - mode_dev->backlight_duty_cycle = psb_intel_lvds_get_backlight(dev); - - psb_intel_lvds_set_power(dev, output, false); -} - -static void psb_intel_lvds_commit(struct drm_encoder *encoder) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); - struct psb_intel_mode_device *mode_dev = output->mode_dev; - - PSB_DEBUG_ENTRY("\n"); - - if (mode_dev->backlight_duty_cycle == 0) - mode_dev->backlight_duty_cycle = psb_intel_lvds_get_max_backlight(dev); - - psb_intel_lvds_set_power(dev, output, true); -} - -static void psb_intel_lvds_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - struct drm_device *dev = encoder->dev; - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc( - encoder->crtc); - u32 pfit_control; - - /* - * The LVDS pin pair will already have been turned on in the - * psb_intel_crtc_mode_set since it has a large impact on the DPLL - * settings. - */ - - /* - * Enable automatic panel scaling so that non-native modes fill the - * screen. Should be enabled before the pipe is enabled, according to - * register description and PRM. - */ - if (mode->hdisplay != adjusted_mode->hdisplay || - mode->vdisplay != adjusted_mode->vdisplay) - pfit_control = PFIT_ENABLE; - else - pfit_control = 0; - - pfit_control |= psb_intel_crtc->pipe << PFIT_PIPE_SHIFT; - - REG_WRITE(PFIT_CONTROL, pfit_control); -} - -/** - * Detect the LVDS connection. - * - * This always returns CONNECTOR_STATUS_CONNECTED. - * This connector should only have - * been set up if the LVDS was actually connected anyway. - */ -static enum drm_connector_status psb_intel_lvds_detect(struct drm_connector *connector, bool force) -{ - return connector_status_connected; -} - -/** - * Return the list of DDC modes if available, or the BIOS fixed mode otherwise. - */ -static int psb_intel_lvds_get_modes(struct drm_connector *connector) -{ - struct drm_device *dev = connector->dev; - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - struct psb_intel_mode_device *mode_dev = - psb_intel_output->mode_dev; - int ret = 0; - - ret = psb_intel_ddc_get_modes(psb_intel_output); - - if (ret) - return ret; - - /* Didn't get an EDID, so - * Set wide sync ranges so we get all modes - * handed to valid_mode for checking - */ - connector->display_info.min_vfreq = 0; - connector->display_info.max_vfreq = 200; - connector->display_info.min_hfreq = 0; - connector->display_info.max_hfreq = 200; - - if (mode_dev->panel_fixed_mode != NULL) { - struct drm_display_mode *mode = - drm_mode_duplicate(dev, mode_dev->panel_fixed_mode); - drm_mode_probed_add(connector, mode); - return 1; - } - - return 0; -} - -/** - * psb_intel_lvds_destroy - unregister and free LVDS structures - * @connector: connector to free - * - * Unregister the DDC bus for this connector then free the driver private - * structure. - */ -void psb_intel_lvds_destroy(struct drm_connector *connector) -{ - struct psb_intel_output *psb_intel_output = - to_psb_intel_output(connector); - - if (psb_intel_output->ddc_bus) - psb_intel_i2c_destroy(psb_intel_output->ddc_bus); - drm_sysfs_connector_remove(connector); - drm_connector_cleanup(connector); - kfree(connector); -} - -int psb_intel_lvds_set_property(struct drm_connector *connector, - struct drm_property *property, - uint64_t value) -{ - struct drm_encoder *pEncoder = connector->encoder; - - PSB_DEBUG_ENTRY("\n"); - - if (!strcmp(property->name, "scaling mode") && pEncoder) { - struct psb_intel_crtc *pPsbCrtc = - to_psb_intel_crtc(pEncoder->crtc); - uint64_t curValue; - - PSB_DEBUG_ENTRY("scaling mode \n"); - - if (!pPsbCrtc) - goto set_prop_error; - - switch (value) { - case DRM_MODE_SCALE_FULLSCREEN: - break; - case DRM_MODE_SCALE_NO_SCALE: - break; - case DRM_MODE_SCALE_ASPECT: - break; - default: - goto set_prop_error; - } - - if (drm_connector_property_get_value(connector, - property, - &curValue)) - goto set_prop_error; - - if (curValue == value) - goto set_prop_done; - - if (drm_connector_property_set_value(connector, - property, - value)) - goto set_prop_error; - - if (pPsbCrtc->saved_mode.hdisplay != 0 && - pPsbCrtc->saved_mode.vdisplay != 0) { - if (!drm_crtc_helper_set_mode(pEncoder->crtc, - &pPsbCrtc->saved_mode, - pEncoder->crtc->x, - pEncoder->crtc->y, - pEncoder->crtc->fb)) - goto set_prop_error; - } - } - -set_prop_done: - return 0; -set_prop_error: - return -1; -} - -static const struct drm_encoder_helper_funcs psb_intel_lvds_helper_funcs = { - .dpms = psb_intel_lvds_encoder_dpms, - .mode_fixup = psb_intel_lvds_mode_fixup, - .prepare = psb_intel_lvds_prepare, - .mode_set = psb_intel_lvds_mode_set, - .commit = psb_intel_lvds_commit, -}; - -static const struct drm_connector_helper_funcs psb_intel_lvds_connector_helper_funcs = { - .get_modes = psb_intel_lvds_get_modes, - .mode_valid = psb_intel_lvds_mode_valid, - .best_encoder = psb_intel_best_encoder, -}; - -static const struct drm_connector_funcs psb_intel_lvds_connector_funcs = { - .dpms = drm_helper_connector_dpms, - .save = psb_intel_lvds_save, - .restore = psb_intel_lvds_restore, - .detect = psb_intel_lvds_detect, - .fill_modes = drm_helper_probe_single_connector_modes, - .set_property = psb_intel_lvds_set_property, - .destroy = psb_intel_lvds_destroy, -}; - - -static void psb_intel_lvds_enc_destroy(struct drm_encoder *encoder) -{ - drm_encoder_cleanup(encoder); -} - -const struct drm_encoder_funcs psb_intel_lvds_enc_funcs = { - .destroy = psb_intel_lvds_enc_destroy, -}; - - - -/** - * psb_intel_lvds_init - setup LVDS connectors on this device - * @dev: drm device - * - * Create the connector, register the LVDS DDC bus, and try to figure out what - * modes we can display on the LVDS panel (if present). - */ -void psb_intel_lvds_init(struct drm_device *dev, - struct psb_intel_mode_device *mode_dev) -{ - struct psb_intel_output *psb_intel_output; - struct psb_intel_lvds_priv *lvds_priv; - struct drm_connector *connector; - struct drm_encoder *encoder; - struct drm_display_mode *scan; /* *modes, *bios_mode; */ - struct drm_crtc *crtc; - struct drm_psb_private *dev_priv = (struct drm_psb_private *)dev->dev_private; - u32 lvds; - int pipe; - - psb_intel_output = kzalloc(sizeof(struct psb_intel_output) + - sizeof(struct psb_intel_lvds_priv), GFP_KERNEL); - if (!psb_intel_output) - return; - - lvds_priv = (struct psb_intel_lvds_priv *)(psb_intel_output + 1); - - psb_intel_output->dev_priv = lvds_priv; - - psb_intel_output->mode_dev = mode_dev; - connector = &psb_intel_output->base; - encoder = &psb_intel_output->enc; - drm_connector_init(dev, &psb_intel_output->base, - &psb_intel_lvds_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); - - drm_encoder_init(dev, &psb_intel_output->enc, - &psb_intel_lvds_enc_funcs, - DRM_MODE_ENCODER_LVDS); - - drm_mode_connector_attach_encoder(&psb_intel_output->base, - &psb_intel_output->enc); - psb_intel_output->type = INTEL_OUTPUT_LVDS; - - drm_encoder_helper_add(encoder, &psb_intel_lvds_helper_funcs); - drm_connector_helper_add(connector, - &psb_intel_lvds_connector_helper_funcs); - connector->display_info.subpixel_order = SubPixelHorizontalRGB; - connector->interlace_allowed = false; - connector->doublescan_allowed = false; - - /*Attach connector properties*/ - drm_connector_attach_property(connector, - dev->mode_config.scaling_mode_property, - DRM_MODE_SCALE_FULLSCREEN); - - /** - * Set up I2C bus - * FIXME: distroy i2c_bus when exit - */ - psb_intel_output->i2c_bus = psb_intel_i2c_create(dev, - GPIOB, - "LVDSBLC_B"); - if (!psb_intel_output->i2c_bus) { - DRM_ERROR("I2C bus registration failed.\n"); - goto failed_blc_i2c; - } - psb_intel_output->i2c_bus->slave_addr = 0x2C; - dev_priv->lvds_i2c_bus = psb_intel_output->i2c_bus; - - /* - * LVDS discovery: - * 1) check for EDID on DDC - * 2) check for VBT data - * 3) check to see if LVDS is already on - * if none of the above, no panel - * 4) make sure lid is open - * if closed, act like it's not there for now - */ - - /* Set up the DDC bus. */ - psb_intel_output->ddc_bus = psb_intel_i2c_create(dev, - GPIOC, - "LVDSDDC_C"); - if (!psb_intel_output->ddc_bus) { - DRM_ERROR("DDC bus registration failed.\n"); - goto failed_ddc; - } - - /* - * Attempt to get the fixed panel mode from DDC. Assume that the - * preferred mode is the right one. - */ - psb_intel_ddc_get_modes(psb_intel_output); - list_for_each_entry(scan, &connector->probed_modes, head) { - DRM_DEBUG("scan type: %d hdisplay: %d vdisplay %d", scan->type, scan->hdisplay, scan->vdisplay); - if (scan->type & DRM_MODE_TYPE_PREFERRED) { - mode_dev->panel_fixed_mode = drm_mode_duplicate(dev, scan); - goto out; /* FIXME: check for quirks */ - } - } - - /* Failed to get EDID, what about VBT? do we need this?*/ - - if (dev_priv->lfp_lvds_vbt_mode) { - mode_dev->panel_fixed_mode = drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode); - if (mode_dev->panel_fixed_mode) { - mode_dev->panel_fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; - goto out; /* FIXME: check for quirks */ - } - } - - /* - * If we didn't get EDID, try checking if the panel is already turned - * on. If so, assume that whatever is currently programmed is the - * correct mode. - */ - lvds = REG_READ(LVDS); - pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0; - crtc = psb_intel_get_crtc_from_pipe(dev, pipe); - - if (crtc && (lvds & LVDS_PORT_EN)) { - mode_dev->panel_fixed_mode = psb_intel_crtc_mode_get(dev, crtc); - if (mode_dev->panel_fixed_mode) { - mode_dev->panel_fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; - goto out; /* FIXME: check for quirks */ - } - } - - /* If we still don't have a mode after all that, give up. */ - if (!mode_dev->panel_fixed_mode) { - DRM_DEBUG("Found no modes on the lvds, ignoring the LVDS\n"); - goto failed_find; - } - - /* setup PWM */ - { - u32 pwm; - - pwm = REG_READ(BLC_PWM_CTL2); - if (pipe == 1) - pwm |= PWM_PIPE_B; - else - pwm &= ~PWM_PIPE_B; - pwm |= PWM_ENABLE; - REG_WRITE(BLC_PWM_CTL2, pwm); - } - -out: - drm_sysfs_connector_add(connector); - - PSB_DEBUG_ENTRY("hdisplay = %d\n", - mode_dev->panel_fixed_mode->hdisplay); - PSB_DEBUG_ENTRY(" vdisplay = %d\n", - mode_dev->panel_fixed_mode->vdisplay); - PSB_DEBUG_ENTRY(" hsync_start = %d\n", - mode_dev->panel_fixed_mode->hsync_start); - PSB_DEBUG_ENTRY(" hsync_end = %d\n", - mode_dev->panel_fixed_mode->hsync_end); - PSB_DEBUG_ENTRY(" htotal = %d\n", - mode_dev->panel_fixed_mode->htotal); - PSB_DEBUG_ENTRY(" vsync_start = %d\n", - mode_dev->panel_fixed_mode->vsync_start); - PSB_DEBUG_ENTRY(" vsync_end = %d\n", - mode_dev->panel_fixed_mode->vsync_end); - PSB_DEBUG_ENTRY(" vtotal = %d\n", - mode_dev->panel_fixed_mode->vtotal); - PSB_DEBUG_ENTRY(" clock = %d\n", - mode_dev->panel_fixed_mode->clock); - - return; - -failed_find: - if (psb_intel_output->ddc_bus) - psb_intel_i2c_destroy(psb_intel_output->ddc_bus); -failed_ddc: - if (psb_intel_output->i2c_bus) - psb_intel_i2c_destroy(psb_intel_output->i2c_bus); -failed_blc_i2c: - drm_encoder_cleanup(encoder); - drm_connector_cleanup(connector); - kfree(connector); -} diff --git a/drivers/staging/cdv/drv/psb_intel_modes.c b/drivers/staging/cdv/drv/psb_intel_modes.c deleted file mode 100644 index 00125cd..0000000 --- a/drivers/staging/cdv/drv/psb_intel_modes.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authers: Jesse Barnes - */ - -#include -#include -#include -#include "psb_intel_drv.h" - -/** - * psb_intel_ddc_probe - * - */ -bool psb_intel_ddc_probe(struct psb_intel_output *psb_intel_output) -{ - u8 out_buf[] = { 0x0, 0x0 }; - u8 buf[2]; - int ret; - struct i2c_msg msgs[] = { - { - .addr = 0x50, - .flags = 0, - .len = 1, - .buf = out_buf, - }, - { - .addr = 0x50, - .flags = I2C_M_RD, - .len = 1, - .buf = buf, - } - }; - - ret = i2c_transfer(&psb_intel_output->ddc_bus->adapter, msgs, 2); - if (ret == 2) - return true; - - return false; -} - -/** - * psb_intel_ddc_get_modes - get modelist from monitor - * @connector: DRM connector device to use - * - * Fetch the EDID information from @connector using the DDC bus. - */ -int psb_intel_ddc_get_modes(struct psb_intel_output *psb_intel_output) -{ - struct edid *edid; - int ret = 0; - - edid = - drm_get_edid(&psb_intel_output->base, - &psb_intel_output->ddc_bus->adapter); - if (edid) { - drm_mode_connector_update_edid_property(&psb_intel_output-> - base, edid); - ret = drm_add_edid_modes(&psb_intel_output->base, edid); - kfree(edid); - } - return ret; -} diff --git a/drivers/staging/cdv/drv/psb_intel_opregion.c b/drivers/staging/cdv/drv/psb_intel_opregion.c deleted file mode 100644 index 16dbf00..0000000 --- a/drivers/staging/cdv/drv/psb_intel_opregion.c +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ -#ifdef CONFIG_ACPI -#include -#include -#endif -#include "psb_drv.h" - -#define PCI_ASLE 0xe4 -#define PCI_ASLS 0xfc - -#define OPREGION_HEADER_OFFSET 0 -#define OPREGION_ACPI_OFFSET 0x100 -#define ACPI_CLID 0x01ac /* current lid state indicator */ -#define ACPI_CDCK 0x01b0 /* current docking state indicator */ -#define OPREGION_SWSCI_OFFSET 0x200 -#define OPREGION_ASLE_OFFSET 0x300 -#define OPREGION_VBT_OFFSET 0x400 - -#define OPREGION_SIGNATURE "IntelGraphicsMem" -#define MBOX_ACPI (1<<0) -#define MBOX_SWSCI (1<<1) -#define MBOX_ASLE (1<<2) - -struct opregion_header { - u8 signature[16]; - u32 size; - u32 opregion_ver; - u8 bios_ver[32]; - u8 vbios_ver[16]; - u8 driver_ver[16]; - u32 mboxes; - u8 reserved[164]; -} __attribute__((packed)); - -/* OpRegion mailbox #1: public ACPI methods */ -struct opregion_acpi { - u32 drdy; /* driver readiness */ - u32 csts; /* notification status */ - u32 cevt; /* current event */ - u8 rsvd1[20]; - u32 didl[8]; /* supported display devices ID list */ - u32 cpdl[8]; /* currently presented display list */ - u32 cadl[8]; /* currently active display list */ - u32 nadl[8]; /* next active devices list */ - u32 aslp; /* ASL sleep time-out */ - u32 tidx; /* toggle table index */ - u32 chpd; /* current hotplug enable indicator */ - u32 clid; /* current lid state*/ - u32 cdck; /* current docking state */ - u32 sxsw; /* Sx state resume */ - u32 evts; /* ASL supported events */ - u32 cnot; /* current OS notification */ - u32 nrdy; /* driver status */ - u8 rsvd2[60]; -} __attribute__((packed)); - -/* OpRegion mailbox #2: SWSCI */ -struct opregion_swsci { - /*FIXME: add it later*/ -} __attribute__((packed)); - -/* OpRegion mailbox #3: ASLE */ -struct opregion_asle { - u32 ardy; /* driver readiness */ - u32 aslc; /* ASLE interrupt command */ - u32 tche; /* technology enabled indicator */ - u32 alsi; /* current ALS illuminance reading */ - u32 bclp; /* backlight brightness to set */ - u32 pfit; /* panel fitting state */ - u32 cblv; /* current brightness level */ - u16 bclm[20]; /* backlight level duty cycle mapping table */ - u32 cpfm; /* current panel fitting mode */ - u32 epfm; /* enabled panel fitting modes */ - u8 plut[74]; /* panel LUT and identifier */ - u32 pfmb; /* PWM freq and min brightness */ - u8 rsvd[102]; -} __attribute__((packed)); - -/* ASLE irq request bits */ -#define ASLE_SET_ALS_ILLUM (1 << 0) -#define ASLE_SET_BACKLIGHT (1 << 1) -#define ASLE_SET_PFIT (1 << 2) -#define ASLE_SET_PWM_FREQ (1 << 3) -#define ASLE_REQ_MSK 0xf - -/* response bits of ASLE irq request */ -#define ASLE_ALS_ILLUM_FAILED (1<<10) -#define ASLE_BACKLIGHT_FAILED (1<<12) -#define ASLE_PFIT_FAILED (1<<14) -#define ASLE_PWM_FREQ_FAILED (1<<16) - -/* ASLE backlight brightness to set */ -#define ASLE_BCLP_VALID (1<<31) -#define ASLE_BCLP_MSK (~(1<<31)) - -/* ASLE panel fitting request */ -#define ASLE_PFIT_VALID (1<<31) -#define ASLE_PFIT_CENTER (1<<0) -#define ASLE_PFIT_STRETCH_TEXT (1<<1) -#define ASLE_PFIT_STRETCH_GFX (1<<2) - -/* response bits of ASLE irq request */ -#define ASLE_ALS_ILLUM_FAILED (1<<10) -#define ASLE_BACKLIGHT_FAILED (1<<12) -#define ASLE_PFIT_FAILED (1<<14) -#define ASLE_PWM_FREQ_FAILED (1<<16) - -/* ASLE backlight brightness to set */ -#define ASLE_BCLP_VALID (1<<31) -#define ASLE_BCLP_MSK (~(1<<31)) - -/* ASLE panel fitting request */ -#define ASLE_PFIT_VALID (1<<31) -#define ASLE_PFIT_CENTER (1<<0) -#define ASLE_PFIT_STRETCH_TEXT (1<<1) -#define ASLE_PFIT_STRETCH_GFX (1<<2) - -/* PWM frequency and minimum brightness */ -#define ASLE_PFMB_BRIGHTNESS_MASK (0xff) -#define ASLE_PFMB_BRIGHTNESS_VALID (1<<8) -#define ASLE_PFMB_PWM_MASK (0x7ffffe00) -#define ASLE_PFMB_PWM_VALID (1<<31) - -#define ASLE_CBLV_VALID (1<<31) - -static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct opregion_asle *asle = dev_priv->opregion.asle; - u32 max; - - DRM_DEBUG_DRIVER("asle set backlight %x\n", bclp); - - if (!(bclp & ASLE_BCLP_VALID)) - return ASLE_BACKLIGHT_FAILED; - - bclp &= ASLE_BCLP_MSK; - if (bclp > 255) - return ASLE_BACKLIGHT_FAILED; - - max = psb_intel_lvds_get_max_backlight(dev); - psb_intel_lvds_set_backlight(dev, bclp * max / 255); - asle->cblv = (bclp*0x64)/0xff | ASLE_CBLV_VALID; - - return 0; -} - -void psb_intel_opregion_asle_intr(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct opregion_asle *asle = dev_priv->opregion.asle; - u32 asle_stat = 0; - u32 asle_req; - - if (!asle) - return; - - asle_req = asle->aslc & ASLE_REQ_MSK; - if (!asle_req) { - DRM_DEBUG_DRIVER("non asle set request??\n"); - return; - } - - if (asle_req & ASLE_SET_BACKLIGHT) - asle_stat |= asle_set_backlight(dev, asle->bclp); - - asle->aslc = asle_stat; -} - -#define ASLE_ALS_EN (1<<0) -#define ASLE_BLC_EN (1<<1) -#define ASLE_PFIT_EN (1<<2) -#define ASLE_PFMB_EN (1<<3) - -void psb_intel_opregion_enable_asle(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct opregion_asle *asle = dev_priv->opregion.asle; - - if (asle) { - /* XXX enable asle interrupt - * should only for cdv mobile device - */ - psb_intel_enable_asle(dev); - - asle->tche = ASLE_ALS_EN | ASLE_BLC_EN | ASLE_PFIT_EN | ASLE_PFMB_EN; - asle->ardy = 1; - } -} - -#define ACPI_EV_DISPLAY_SWITCH (1<<0) -#define ACPI_EV_LID (1<<1) -#define ACPI_EV_DOCK (1<<2) - -static struct psb_intel_opregion *system_opregion; - -static int psb_intel_opregion_video_event(struct notifier_block *nb, - unsigned long val, void *data) -{ - /* The only video events relevant to opregion are 0x80. These indicate - either a docking event, lid switch or display switch request. In - Linux, these are handled by the dock, button and video drivers. - We might want to fix the video driver to be opregion-aware in - future, but right now we just indicate to the firmware that the - request has been handled */ - - struct opregion_acpi *acpi; - - if (!system_opregion) - return NOTIFY_DONE; - - acpi = system_opregion->acpi; - acpi->csts = 0; - - return NOTIFY_OK; -} - -static struct notifier_block psb_intel_opregion_notifier = { - .notifier_call = psb_intel_opregion_video_event, -}; - -void psb_intel_opregion_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_opregion *opregion = &dev_priv->opregion; - - if (!opregion->header) - return; - - if (opregion->acpi) { - /* Notify BIOS we are ready to handle ACPI video ext notifs. - * Right now, all the events are handled by the ACPI video module. - * We don't actually need to do anything with them. */ - opregion->acpi->csts = 0; - opregion->acpi->drdy = 1; - - system_opregion = opregion; - register_acpi_notifier(&psb_intel_opregion_notifier); - } - - if (opregion->asle) - psb_intel_opregion_enable_asle(dev); -} - -void psb_intel_opregion_fini(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_opregion *opregion = &dev_priv->opregion; - - if (!opregion->header) - return; - - if (opregion->acpi) { - opregion->acpi->drdy = 0; - - system_opregion = NULL; - unregister_acpi_notifier(&psb_intel_opregion_notifier); - } - - /* just clear all opregion memory pointers now */ - iounmap(opregion->header); - opregion->header = NULL; - opregion->acpi = NULL; - opregion->swsci = NULL; - opregion->asle = NULL; - opregion->vbt = NULL; -} - -int psb_intel_opregion_setup(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_intel_opregion *opregion = &dev_priv->opregion; - u32 opregion_phy, mboxes; - void *base; - int err = 0; - - pci_read_config_dword(dev->pdev, PCI_ASLS, &opregion_phy); - if (opregion_phy == 0) { - DRM_DEBUG_DRIVER("ACPI Opregion not supported\n"); - return -ENOTSUPP; - } - DRM_DEBUG("OpRegion detected at 0x%8x\n", opregion_phy); -#ifdef CONFIG_ACPI - base = acpi_os_ioremap(opregion_phy, 8*1024); -#else - base = ioremap(opregion_phy, 8*1024); -#endif - if (!base) - return -ENOMEM; - - if (memcmp(base, OPREGION_SIGNATURE, 16)) { - DRM_DEBUG_DRIVER("opregion signature mismatch\n"); - err = -EINVAL; - goto err_out; - } - - opregion->header = base; - opregion->vbt = base + OPREGION_VBT_OFFSET; - - opregion->lid_state = base + ACPI_CLID; - - mboxes = opregion->header->mboxes; - if (mboxes & MBOX_ACPI) { - DRM_DEBUG_DRIVER("Public ACPI methods supported\n"); - opregion->acpi = base + OPREGION_ACPI_OFFSET; - } - - if (mboxes & MBOX_ASLE) { - DRM_DEBUG_DRIVER("ASLE supported\n"); - opregion->asle = base + OPREGION_ASLE_OFFSET; - } - - return 0; - -err_out: - iounmap(base); - return err; -} diff --git a/drivers/staging/cdv/drv/psb_intel_reg.h b/drivers/staging/cdv/drv/psb_intel_reg.h deleted file mode 100644 index f07c5dc..0000000 --- a/drivers/staging/cdv/drv/psb_intel_reg.h +++ /dev/null @@ -1,1461 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef __PSB_INTEL_REG_H__ -#define __PSB_INTEL_REG_H__ - -#define BLC_PWM_CTL 0x61254 -#define BLC_PWM_CTL2 0x61250 -#define PWM_ENABLE (1 << 31) -#define PWM_LEGACY_MODE (1 << 30) -#define PWM_PIPE_B (1 << 29) -#define BLC_PWM_CTL_C 0x62254 -#define BLC_PWM_CTL2_C 0x62250 -#define BACKLIGHT_MODULATION_FREQ_SHIFT (17) -/** - * This is the most significant 15 bits of the number of backlight cycles in a - * complete cycle of the modulated backlight control. - * - * The actual value is this field multiplied by two. - */ -#define BACKLIGHT_MODULATION_FREQ_MASK (0x7fff << 17) -#define BLM_LEGACY_MODE (1 << 16) -/** - * This is the number of cycles out of the backlight modulation cycle for which - * the backlight is on. - * - * This field must be no greater than the number of cycles in the complete - * backlight modulation cycle. - */ -#define BACKLIGHT_DUTY_CYCLE_SHIFT (0) -#define BACKLIGHT_DUTY_CYCLE_MASK (0xffff) - -#define I915_GCFGC 0xf0 -#define I915_LOW_FREQUENCY_ENABLE (1 << 7) -#define I915_DISPLAY_CLOCK_190_200_MHZ (0 << 4) -#define I915_DISPLAY_CLOCK_333_MHZ (4 << 4) -#define I915_DISPLAY_CLOCK_MASK (7 << 4) - -#define I855_HPLLCC 0xc0 -#define I855_CLOCK_CONTROL_MASK (3 << 0) -#define I855_CLOCK_133_200 (0 << 0) -#define I855_CLOCK_100_200 (1 << 0) -#define I855_CLOCK_100_133 (2 << 0) -#define I855_CLOCK_166_250 (3 << 0) - -/* I830 CRTC registers */ -#define HTOTAL_A 0x60000 -#define HBLANK_A 0x60004 -#define HSYNC_A 0x60008 -#define VTOTAL_A 0x6000c -#define VBLANK_A 0x60010 -#define VSYNC_A 0x60014 -#define PIPEASRC 0x6001c -#define BCLRPAT_A 0x60020 -#define VSYNCSHIFT_A 0x60028 - -#define HTOTAL_B 0x61000 -#define HBLANK_B 0x61004 -#define HSYNC_B 0x61008 -#define VTOTAL_B 0x6100c -#define VBLANK_B 0x61010 -#define VSYNC_B 0x61014 -#define PIPEBSRC 0x6101c -#define BCLRPAT_B 0x61020 -#define VSYNCSHIFT_B 0x61028 - -#define HTOTAL_C 0x62000 -#define HBLANK_C 0x62004 -#define HSYNC_C 0x62008 -#define VTOTAL_C 0x6200c -#define VBLANK_C 0x62010 -#define VSYNC_C 0x62014 -#define PIPECSRC 0x6201c -#define BCLRPAT_C 0x62020 -#define VSYNCSHIFT_C 0x62028 - -#define PP_STATUS 0x61200 -# define PP_ON (1 << 31) -/** - * Indicates that all dependencies of the panel are on: - * - * - PLL enabled - * - pipe enabled - * - LVDS/DVOB/DVOC on - */ -# define PP_READY (1 << 30) -# define PP_SEQUENCE_NONE (0 << 28) -# define PP_SEQUENCE_ON (1 << 28) -# define PP_SEQUENCE_OFF (2 << 28) -# define PP_SEQUENCE_MASK 0x30000000 -#define PP_CONTROL 0x61204 -# define POWER_TARGET_ON (1 << 0) - -#define PP_ON_DELAYS 0x61208 -#define PP_OFF_DELAYS 0x6120c -#define PP_DIVISOR 0x61210 - -#define PFIT_CONTROL 0x61230 -# define PFIT_ENABLE (1 << 31) -# define PFIT_PIPE_MASK (3 << 29) -# define PFIT_PIPE_SHIFT 29 -# define PFIT_PIPE_SELECT_A (0 << PFIT_PIPE_SHIFT) -# define PFIT_PIPE_SELECT_B (1 << PFIT_PIPE_SHIFT) -# define PFIT_PIPE_SELECT_C (2 << PFIT_PIPE_SHIFT) -# define PFIT_PIPE_SELECT_D (3 << PFIT_PIPE_SHIFT) -# define PFIT_SCALING_MODE_PILLARBOX (1 << 27) -# define PFIT_SCALING_MODE_LETTERBOX (3 << 26) -# define VERT_INTERP_DISABLE (0 << 10) -# define VERT_INTERP_BILINEAR (1 << 10) -# define VERT_INTERP_MASK (3 << 10) -# define VERT_AUTO_SCALE (1 << 9) -# define HORIZ_INTERP_DISABLE (0 << 6) -# define HORIZ_INTERP_BILINEAR (1 << 6) -# define HORIZ_INTERP_MASK (3 << 6) -# define HORIZ_AUTO_SCALE (1 << 5) -# define PANEL_8TO6_DITHER_ENABLE (1 << 3) - -#define PFIT_PGM_RATIOS 0x61234 -# define PFIT_VERT_SCALE_MASK 0xfff00000 -# define PFIT_HORIZ_SCALE_MASK 0x0000fff0 - -#define PFIT_AUTO_RATIOS 0x61238 - - -#define DPLL_A 0x06014 -#define DPLL_B 0x06018 -# define DPLL_VCO_ENABLE (1 << 31) -# define DPLL_DVO_HIGH_SPEED (1 << 30) -# define DPLL_SYNCLOCK_ENABLE (1 << 29) -# define DPLL_VGA_MODE_DIS (1 << 28) -# define DPLLB_MODE_DAC_SERIAL (1 << 26) /* i915 */ -# define DPLLB_MODE_LVDS (2 << 26) /* i915 */ -# define DPLL_MODE_MASK (3 << 26) -# define DPLL_DAC_SERIAL_P2_CLOCK_DIV_10 (0 << 24) /* i915 */ -# define DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 (1 << 24) /* i915 */ -# define DPLLB_LVDS_P2_CLOCK_DIV_14 (0 << 24) /* i915 */ -# define DPLLB_LVDS_P2_CLOCK_DIV_7 (1 << 24) /* i915 */ -# define DPLL_P2_CLOCK_DIV_MASK 0x03000000 /* i915 */ -# define DPLL_FPA01_P1_POST_DIV_MASK 0x00ff0000 /* i915 */ -# define DPLL_LOCK (1 << 15) /* CDV */ -/** - * The i830 generation, in DAC/serial mode, defines p1 as two plus this - * bitfield, or just 2 if PLL_P1_DIVIDE_BY_TWO is set. - */ -# define DPLL_FPA01_P1_POST_DIV_MASK_I830 0x001f0000 -/** - * The i830 generation, in LVDS mode, defines P1 as the bit number set within - * this field (only one bit may be set). - */ -# define DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000 -# define DPLL_FPA01_P1_POST_DIV_SHIFT 16 -# define PLL_P2_DIVIDE_BY_4 (1 << 23) /* i830, required - * in DVO non-gang */ -# define PLL_P1_DIVIDE_BY_TWO (1 << 21) /* i830 */ -# define PLL_REF_INPUT_DREFCLK (0 << 13) -# define PLL_REF_INPUT_TVCLKINA (1 << 13) /* i830 */ -# define PLL_REF_INPUT_TVCLKINBC (2 << 13) /* SDVO - * TVCLKIN */ -# define PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13) -# define PLL_REF_INPUT_MASK (3 << 13) -# define PLL_LOAD_PULSE_PHASE_SHIFT 9 -/* - * Parallel to Serial Load Pulse phase selection. - * Selects the phase for the 10X DPLL clock for the PCIe - * digital display port. The range is 4 to 13; 10 or more - * is just a flip delay. The default is 6 - */ -# define PLL_LOAD_PULSE_PHASE_MASK (0xf << PLL_LOAD_PULSE_PHASE_SHIFT) -# define DISPLAY_RATE_SELECT_FPA1 (1 << 8) - -/** - * SDVO multiplier for 945G/GM. Not used on 965. - * - * \sa DPLL_MD_UDI_MULTIPLIER_MASK - */ -# define SDVO_MULTIPLIER_MASK 0x000000ff -# define SDVO_MULTIPLIER_SHIFT_HIRES 4 -# define SDVO_MULTIPLIER_SHIFT_VGA 0 - -/** @defgroup DPLL_MD - * @{ - */ -/** Pipe A SDVO/UDI clock multiplier/divider register for G965. */ -#define DPLL_A_MD 0x0601c -/** Pipe B SDVO/UDI clock multiplier/divider register for G965. */ -#define DPLL_B_MD 0x06020 -/** - * UDI pixel divider, controlling how many pixels are stuffed into a packet. - * - * Value is pixels minus 1. Must be set to 1 pixel for SDVO. - */ -# define DPLL_MD_UDI_DIVIDER_MASK 0x3f000000 -# define DPLL_MD_UDI_DIVIDER_SHIFT 24 -/** UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */ -# define DPLL_MD_VGA_UDI_DIVIDER_MASK 0x003f0000 -# define DPLL_MD_VGA_UDI_DIVIDER_SHIFT 16 -/** - * SDVO/UDI pixel multiplier. - * - * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus - * clock rate is 10 times the DPLL clock. At low resolution/refresh rate - * modes, the bus rate would be below the limits, so SDVO allows for stuffing - * dummy bytes in the datastream at an increased clock rate, with both sides of - * the link knowing how many bytes are fill. - * - * So, for a mode with a dotclock of 65Mhz, we would want to double the clock - * rate to 130Mhz to get a bus rate of 1.30Ghz. The DPLL clock rate would be - * set to 130Mhz, and the SDVO multiplier set to 2x in this register and - * through an SDVO command. - * - * This register field has values of multiplication factor minus 1, with - * a maximum multiplier of 5 for SDVO. - */ -# define DPLL_MD_UDI_MULTIPLIER_MASK 0x00003f00 -# define DPLL_MD_UDI_MULTIPLIER_SHIFT 8 -/** SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK. - * This best be set to the default value (3) or the CRT won't work. No, - * I don't entirely understand what this does... - */ -# define DPLL_MD_VGA_UDI_MULTIPLIER_MASK 0x0000003f -# define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT 0 -/** @} */ - -#define DPLL_TEST 0x606c -# define DPLLB_TEST_SDVO_DIV_1 (0 << 22) -# define DPLLB_TEST_SDVO_DIV_2 (1 << 22) -# define DPLLB_TEST_SDVO_DIV_4 (2 << 22) -# define DPLLB_TEST_SDVO_DIV_MASK (3 << 22) -# define DPLLB_TEST_N_BYPASS (1 << 19) -# define DPLLB_TEST_M_BYPASS (1 << 18) -# define DPLLB_INPUT_BUFFER_ENABLE (1 << 16) -# define DPLLA_TEST_N_BYPASS (1 << 3) -# define DPLLA_TEST_M_BYPASS (1 << 2) -# define DPLLA_INPUT_BUFFER_ENABLE (1 << 0) - -#define ADPA 0x61100 -#define ADPA_DAC_ENABLE (1<<31) -#define ADPA_DAC_DISABLE 0 -#define ADPA_PIPE_SELECT_MASK (1<<30) -#define ADPA_PIPE_A_SELECT 0 -#define ADPA_PIPE_B_SELECT (1<<30) -#define ADPA_USE_VGA_HVPOLARITY (1<<15) -#define ADPA_SETS_HVPOLARITY 0 -#define ADPA_VSYNC_CNTL_DISABLE (1<<11) -#define ADPA_VSYNC_CNTL_ENABLE 0 -#define ADPA_HSYNC_CNTL_DISABLE (1<<10) -#define ADPA_HSYNC_CNTL_ENABLE 0 -#define ADPA_VSYNC_ACTIVE_HIGH (1<<4) -#define ADPA_VSYNC_ACTIVE_LOW 0 -#define ADPA_HSYNC_ACTIVE_HIGH (1<<3) -#define ADPA_HSYNC_ACTIVE_LOW 0 - -#define FPA0 0x06040 -#define FPA1 0x06044 -#define FPB0 0x06048 -#define FPB1 0x0604c -# define FP_N_DIV_MASK 0x003f0000 -# define FP_N_DIV_SHIFT 16 -# define FP_M1_DIV_MASK 0x00003f00 -# define FP_M1_DIV_SHIFT 8 -# define FP_M2_DIV_MASK 0x0000003f -# define FP_M2_DIV_SHIFT 0 - - -#define PORT_HOTPLUG_EN 0x61110 -# define HDMIB_HOTPLUG_INT_EN (1 << 29) -# define HDMIC_HOTPLUG_INT_EN (1 << 28) -# define HDMID_HOTPLUG_INT_EN (1 << 27) -# define SDVOB_HOTPLUG_INT_EN (1 << 26) -# define SDVOC_HOTPLUG_INT_EN (1 << 25) -# define TV_HOTPLUG_INT_EN (1 << 18) -# define CRT_HOTPLUG_INT_EN (1 << 9) -# define CRT_HOTPLUG_FORCE_DETECT (1 << 3) - -#define CRT_HOTPLUG_ACTIVATION_PERIOD_64 (1 << 8) -#define CRT_HOTPLUG_DAC_ON_TIME_2M (0 << 7) -#define CRT_HOTPLUG_DAC_ON_TIME_4M (1 << 7) -#define CRT_HOTPLUG_VOLTAGE_COMPARE_40 (0 << 5) -#define CRT_HOTPLUG_VOLTAGE_COMPARE_50 (1 << 5) -#define CRT_HOTPLUG_VOLTAGE_COMPARE_60 (2 << 5) -#define CRT_HOTPLUG_VOLTAGE_COMPARE_70 (3 << 5) -#define CRT_HOTPLUG_VOLTAGE_COMPARE_MASK (3 << 5) -#define CRT_HOTPLUG_DETECT_DELAY_1G (0 << 4) -#define CRT_HOTPLUG_DETECT_DELAY_2G (1 << 4) -#define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2) -#define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2) -#define CRT_HOTPLUG_DETECT_MASK 0x000000F8 - -#define PORT_HOTPLUG_STAT 0x61114 -# define HDMIB_HOTPLUG_INT_STATUS (1 << 29) -# define DPB_HOTPLUG_INT_STATUS (1 << 29) -# define HDMIC_HOTPLUG_INT_STATUS (1 << 28) -# define DPC_HOTPLUG_INT_STATUS (1 << 28) -# define HDMID_HOTPLUG_INT_STATUS (1 << 27) -# define DPD_HOTPLUG_INT_STATUS (1 << 27) -# define CRT_HOTPLUG_INT_STATUS (1 << 11) -# define TV_HOTPLUG_INT_STATUS (1 << 10) -# define CRT_HOTPLUG_MONITOR_MASK (3 << 8) -# define CRT_HOTPLUG_MONITOR_COLOR (3 << 8) -# define CRT_HOTPLUG_MONITOR_MONO (2 << 8) -# define CRT_HOTPLUG_MONITOR_NONE (0 << 8) -# define SDVOC_HOTPLUG_INT_STATUS (1 << 7) -# define SDVOB_HOTPLUG_INT_STATUS (1 << 6) - -#define SDVOB 0x61140 -#define SDVOC 0x61160 -#define SDVO_ENABLE (1 << 31) -#define SDVO_PIPE_B_SELECT (1 << 30) -#define SDVO_STALL_SELECT (1 << 29) -#define SDVO_INTERRUPT_ENABLE (1 << 26) -/** New with 965, default is to be set */ -#define SDVO_VSYNC_ACTIVE_HIGH (1 << 4) -/** New with 965, default is to be set */ -#define SDVO_HSYNC_ACTIVE_HIGH (1 << 3) - -/** - * 915G/GM SDVO pixel multiplier. - * - * Programmed value is multiplier - 1, up to 5x. - * - * \sa DPLL_MD_UDI_MULTIPLIER_MASK - */ -#define SDVO_PORT_MULTIPLY_MASK (7 << 23) -#define SDVO_PORT_MULTIPLY_SHIFT 23 -#define SDVO_PHASE_SELECT_MASK (15 << 19) -#define SDVO_PHASE_SELECT_DEFAULT (6 << 19) -#define SDVO_CLOCK_OUTPUT_INVERT (1 << 18) -#define SDVOC_GANG_MODE (1 << 16) -#define SDVO_BORDER_ENABLE (1 << 7) -#define SDVOB_PCIE_CONCURRENCY (1 << 3) -#define SDVO_DETECTED (1 << 2) -/* Bits to be preserved when writing */ -#define SDVOB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14)) -#define SDVOC_PRESERVE_MASK (1 << 17) - -/** @defgroup LVDS - * @{ - */ -/** - * This register controls the LVDS output enable, pipe selection, and data - * format selection. - * - * All of the clock/data pairs are force powered down by power sequencing. - */ -#define LVDS 0x61180 -/** - * Enables the LVDS port. This bit must be set before DPLLs are enabled, as - * the DPLL semantics change when the LVDS is assigned to that pipe. - */ -# define LVDS_PORT_EN (1 << 31) -/** Selects pipe B for LVDS data. Must be set on pre-965. */ -# define LVDS_PIPEB_SELECT (1 << 30) - -/** Turns on border drawing to allow centered display. */ -# define LVDS_BORDER_EN (1 << 15) - -/** - * Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per - * pixel. - */ -# define LVDS_A0A2_CLKA_POWER_MASK (3 << 8) -# define LVDS_A0A2_CLKA_POWER_DOWN (0 << 8) -# define LVDS_A0A2_CLKA_POWER_UP (3 << 8) -/** - * Controls the A3 data pair, which contains the additional LSBs for 24 bit - * mode. Only enabled if LVDS_A0A2_CLKA_POWER_UP also indicates it should be - * on. - */ -# define LVDS_A3_POWER_MASK (3 << 6) -# define LVDS_A3_POWER_DOWN (0 << 6) -# define LVDS_A3_POWER_UP (3 << 6) -/** - * Controls the CLKB pair. This should only be set when LVDS_B0B3_POWER_UP - * is set. - */ -# define LVDS_CLKB_POWER_MASK (3 << 4) -# define LVDS_CLKB_POWER_DOWN (0 << 4) -# define LVDS_CLKB_POWER_UP (3 << 4) - -/** - * Controls the B0-B3 data pairs. This must be set to match the DPLL p2 - * setting for whether we are in dual-channel mode. The B3 pair will - * additionally only be powered up when LVDS_A3_POWER_UP is set. - */ -# define LVDS_B0B3_POWER_MASK (3 << 2) -# define LVDS_B0B3_POWER_DOWN (0 << 2) -# define LVDS_B0B3_POWER_UP (3 << 2) - -#define PIPEACONF 0x70008 -#define PIPEACONF_ENABLE (1<<31) -#define PIPEACONF_DISABLE 0 -#define PIPEACONF_DOUBLE_WIDE (1<<30) -#define PIPECONF_ACTIVE (1<<30) -#define I965_PIPECONF_ACTIVE (1<<30) -#define PIPECONF_DSIPLL_LOCK (1<<29) -#define PIPEACONF_SINGLE_WIDE 0 -#define PIPEACONF_PIPE_UNLOCKED 0 -#define PIPEACONF_DSR (1<<26) -#define PIPEACONF_PIPE_LOCKED (1<<25) -#define PIPEACONF_PALETTE 0 -#define PIPECONF_FORCE_BORDER (1<<25) -#define PIPEACONF_GAMMA (1<<24) -#define PIPECONF_PROGRESSIVE (0 << 21) -#define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21) -#define PIPECONF_INTERLACE_FIELD_0_ONLY (7 << 21) -#define PIPECONF_PLANE_OFF (1<<19) -#define PIPECONF_CURSOR_OFF (1<<18) - - -#define PIPEBCONF 0x71008 -#define PIPEBCONF_ENABLE (1<<31) -#define PIPEBCONF_DISABLE 0 -#define PIPEBCONF_DOUBLE_WIDE (1<<30) -#define PIPEBCONF_DISABLE 0 -#define PIPEBCONF_GAMMA (1<<24) -#define PIPEBCONF_PALETTE 0 - -#define PIPECCONF 0x72008 - -#define PIPEBGCMAXRED 0x71010 -#define PIPEBGCMAXGREEN 0x71014 -#define PIPEBGCMAXBLUE 0x71018 - -#define PIPEASTAT 0x70024 -#define PIPEBSTAT 0x71024 -#define PIPECSTAT 0x72024 - -#define PIPE_FIFO_UNDERRUN (1UL<<31) -#define PIPE_VBLANK_INTERRUPT_STATUS (1UL<<1) -#define PIPE_START_VBLANK_INTERRUPT_STATUS (1UL<<2) -#define PIPE_VBLANK_CLEAR (1 << 1) -#define PIPE_VBLANK_STATUS (1 << 1) -#define PIPE_LEGACY_BLC_EVENT_STATUS (1UL<<6) -#define PIPE_DPST_EVENT_STATUS (1UL<<7) -#define PIPE_VSYNC_CLEAR (1UL<<9) -#define PIPE_VSYNC_STATUS (1UL<<9) -#define PIPE_HDMI_AUDIO_UNDERRUN_STATUS (1UL<<10) -#define PIPE_HDMI_AUDIO_BUFFER_DONE_STATUS (1UL<<11) -#define PIPE_VBLANK_INTERRUPT_ENABLE (1UL<<17) -#define PIPE_START_VBLANK_INTERRUPT_ENABLE (1UL<<18) -#define PIPE_LEGACY_BLC_EVENT_ENABLE (1UL<<22) -#define PIPE_DPST_EVENT_ENABLE (1UL<<23) -#define PIPE_VSYNC_ENABL (1UL<<25) -#define PIPE_HDMI_AUDIO_UNDERRUN (1UL<<26) -#define PIPE_HDMI_AUDIO_BUFFER_DONE (1UL<<27) -#define PIPE_HDMI_AUDIO_INT_MASK (PIPE_HDMI_AUDIO_UNDERRUN | PIPE_HDMI_AUDIO_BUFFER_DONE) -#define PIPE_EVENT_MASK (BIT29|BIT28|BIT27|BIT26|BIT24|BIT23|BIT22|BIT21|BIT20|BIT16) -#define PIPE_VBLANK_MASK (BIT25|BIT24|BIT18|BIT17) -#define HISTOGRAM_INT_CONTROL 0x61268 -#define HISTOGRAM_BIN_DATA 0X61264 -#define HISTOGRAM_LOGIC_CONTROL 0x61260 -#define PWM_CONTROL_LOGIC 0x61250 -#define PIPE_HOTPLUG_INTERRUPT_STATUS (1UL<<10) -#define HISTOGRAM_INTERRUPT_ENABLE (1UL<<31) -#define HISTOGRAM_LOGIC_ENABLE (1UL<<31) -#define PWM_LOGIC_ENABLE (1UL<<31) -#define PWM_PHASEIN_ENABLE (1UL<<25) -#define PWM_PHASEIN_INT_ENABLE (1UL<<24) -#define PWM_PHASEIN_VB_COUNT 0x00001f00 -#define PWM_PHASEIN_INC 0x0000001f -#define HISTOGRAM_INT_CTRL_CLEAR (1UL<<30) -#define DPST_YUV_LUMA_MODE 0 - -struct dpst_ie_histogram_control { - union { - uint32_t data; - struct { - uint32_t bin_reg_index:7; - uint32_t reserved:4; - uint32_t bin_reg_func_select:1; - uint32_t sync_to_phase_in:1; - uint32_t alt_enhancement_mode:2; - uint32_t reserved1:1; - uint32_t sync_to_phase_in_count:8; - uint32_t histogram_mode_select:1; - uint32_t reserved2:4; - uint32_t ie_pipe_assignment:1; - uint32_t ie_mode_table_enabled:1; - uint32_t ie_histogram_enable:1; - }; - }; -}; - -struct dpst_guardband { - union { - uint32_t data; - struct { - uint32_t guardband:22; - uint32_t guardband_interrupt_delay:8; - uint32_t interrupt_status:1; - uint32_t interrupt_enable:1; - }; - }; -}; - -#define PIPEAFRAMEHIGH 0x70040 -#define PIPEAFRAMEPIXEL 0x70044 -#define PIPEBFRAMEHIGH 0x71040 -#define PIPEBFRAMEPIXEL 0x71044 -#define PIPECFRAMEHIGH 0x72040 -#define PIPECFRAMEPIXEL 0x72044 -#define PIPE_FRAME_HIGH_MASK 0x0000ffff -#define PIPE_FRAME_HIGH_SHIFT 0 -#define PIPE_FRAME_LOW_MASK 0xff000000 -#define PIPE_FRAME_LOW_SHIFT 24 -#define PIPE_PIXEL_MASK 0x00ffffff -#define PIPE_PIXEL_SHIFT 0 - -#define FW_BLC_SELF 0x20e0 -#define FW_BLC_SELF_EN (1<<15) - -#define DSPARB 0x70030 -#define DSPFW1 0x70034 -#define DSPFW2 0x70038 -#define DSPFW3 0x7003c -#define DSPFW4 0x70070 -#define DSPFW5 0x70074 -#define DSPFW6 0x70078 -#define DSPCHICKENBIT 0x70400 -#define DSPACNTR 0x70180 -#define DSPBCNTR 0x71180 -#define DSPCCNTR 0x72180 -#define DISPLAY_PLANE_ENABLE (1<<31) -#define DISPLAY_PLANE_DISABLE 0 -#define DISPPLANE_GAMMA_ENABLE (1<<30) -#define DISPPLANE_GAMMA_DISABLE 0 -#define DISPPLANE_PIXFORMAT_MASK (0xf<<26) -#define DISPPLANE_8BPP (0x2<<26) -#define DISPPLANE_15_16BPP (0x4<<26) -#define DISPPLANE_16BPP (0x5<<26) -#define DISPPLANE_32BPP_NO_ALPHA (0x6<<26) -#define DISPPLANE_32BPP (0x7<<26) -#define DISPPLANE_STEREO_ENABLE (1<<25) -#define DISPPLANE_STEREO_DISABLE 0 -#define DISPPLANE_SEL_PIPE_MASK (1<<24) -#define DISPPLANE_SEL_PIPE_POS 24 -#define DISPPLANE_SEL_PIPE_A 0 -#define DISPPLANE_SEL_PIPE_B (1<<24) -#define DISPPLANE_SRC_KEY_ENABLE (1<<22) -#define DISPPLANE_SRC_KEY_DISABLE 0 -#define DISPPLANE_LINE_DOUBLE (1<<20) -#define DISPPLANE_NO_LINE_DOUBLE 0 -#define DISPPLANE_STEREO_POLARITY_FIRST 0 -#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18) -/* plane B only */ -#define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15) -#define DISPPLANE_ALPHA_TRANS_DISABLE 0 -#define DISPPLANE_SPRITE_ABOVE_DISPLAYA 0 -#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1) -#define DISPPLANE_BOTTOM (4) - -#define DSPABASE 0x70184 -#define DSPALINOFF 0x70184 -#define DSPASTRIDE 0x70188 - -#define DSPBBASE 0x71184 -#define DSPBLINOFF 0X71184 -#define DSPBADDR DSPBBASE -#define DSPBSTRIDE 0x71188 - -#define DSPCBASE 0x72184 -#define DSPCLINOFF 0x72184 -#define DSPCSTRIDE 0x72188 - -#define DSPAKEYVAL 0x70194 -#define DSPAKEYMASK 0x70198 - -#define DSPAPOS 0x7018C /* reserved */ -#define DSPASIZE 0x70190 -#define DSPBPOS 0x7118C -#define DSPBSIZE 0x71190 -#define DSPCPOS 0x7218C -#define DSPCSIZE 0x72190 - -#define DSPASURF 0x7019C -#define DSPATILEOFF 0x701A4 - -#define DSPBSURF 0x7119C -#define DSPBTILEOFF 0x711A4 - -#define DSPCSURF 0x7219C -#define DSPCTILEOFF 0x721A4 -#define DSPCKEYMAXVAL 0x721A0 -#define DSPCKEYMINVAL 0x72194 -#define DSPCKEYMSK 0x72198 - -/* - * GPIO regs - */ -#define GPIOA 0x5010 -#define GPIOB 0x5014 -#define GPIOC 0x5018 -#define GPIOD 0x501c -#define GPIOE 0x5020 -#define GPIOF 0x5024 -#define GPIOG 0x5028 -#define GPIOH 0x502c -# define GPIO_CLOCK_DIR_MASK (1 << 0) -# define GPIO_CLOCK_DIR_IN (0 << 1) -# define GPIO_CLOCK_DIR_OUT (1 << 1) -# define GPIO_CLOCK_VAL_MASK (1 << 2) -# define GPIO_CLOCK_VAL_OUT (1 << 3) -# define GPIO_CLOCK_VAL_IN (1 << 4) -# define GPIO_CLOCK_PULLUP_DISABLE (1 << 5) -# define GPIO_DATA_DIR_MASK (1 << 8) -# define GPIO_DATA_DIR_IN (0 << 9) -# define GPIO_DATA_DIR_OUT (1 << 9) -# define GPIO_DATA_VAL_MASK (1 << 10) -# define GPIO_DATA_VAL_OUT (1 << 11) -# define GPIO_DATA_VAL_IN (1 << 12) -# define GPIO_DATA_PULLUP_DISABLE (1 << 13) - -#define GMBUS0 0x5100 /* clock/port select */ -#define GMBUS_RATE_100KHZ (0<<8) -#define GMBUS_RATE_50KHZ (1<<8) -#define GMBUS_RATE_400KHZ (2<<8) /* reserved on Pineview */ -#define GMBUS_RATE_1MHZ (3<<8) /* reserved on Pineview */ -#define GMBUS_HOLD_EXT (1<<7) /* 300ns hold time, rsvd on Pineview */ -#define GMBUS_PORT_DISABLED 0 -#define GMBUS_PORT_SSC 1 -#define GMBUS_PORT_VGADDC 2 -#define GMBUS_PORT_PANEL 3 -#define GMBUS_PORT_DPC 4 /* HDMIC */ -#define GMBUS_PORT_DPB 5 /* SDVO, HDMIB */ - /* 6 reserved */ -#define GMBUS_PORT_DPD 7 /* HDMID */ -#define GMBUS_NUM_PORTS 8 -#define GMBUS1 0x5104 /* command/status */ -#define GMBUS_SW_CLR_INT (1<<31) -#define GMBUS_SW_RDY (1<<30) -#define GMBUS_ENT (1<<29) /* enable timeout */ -#define GMBUS_CYCLE_NONE (0<<25) -#define GMBUS_CYCLE_WAIT (1<<25) -#define GMBUS_CYCLE_INDEX (2<<25) -#define GMBUS_CYCLE_STOP (4<<25) -#define GMBUS_BYTE_COUNT_SHIFT 16 -#define GMBUS_SLAVE_INDEX_SHIFT 8 -#define GMBUS_SLAVE_ADDR_SHIFT 1 -#define GMBUS_SLAVE_READ (1<<0) -#define GMBUS_SLAVE_WRITE (0<<0) -#define GMBUS2 0x5108 /* status */ -#define GMBUS_INUSE (1<<15) -#define GMBUS_HW_WAIT_PHASE (1<<14) -#define GMBUS_STALL_TIMEOUT (1<<13) -#define GMBUS_INT (1<<12) -#define GMBUS_HW_RDY (1<<11) -#define GMBUS_SATOER (1<<10) -#define GMBUS_ACTIVE (1<<9) -#define GMBUS3 0x510c /* data buffer bytes 3-0 */ -#define GMBUS4 0x5110 /* interrupt mask (Pineview+) */ -#define GMBUS_SLAVE_TIMEOUT_EN (1<<4) -#define GMBUS_NAK_EN (1<<3) -#define GMBUS_IDLE_EN (1<<2) -#define GMBUS_HW_WAIT_EN (1<<1) -#define GMBUS_HW_RDY_EN (1<<0) -#define GMBUS5 0x5120 /* byte index */ -#define GMBUS_2BYTE_INDEX_EN (1<<31) - -#define VGACNTRL 0x71400 -# define VGA_DISP_DISABLE (1 << 31) -# define VGA_2X_MODE (1 << 30) -# define VGA_PIPE_B_SELECT (1 << 29) - -#define VGA_SR_INDEX 0x3c4 -#define VGA_SR_DATA 0x3c5 - -/* - * Overlay registers - */ -#define OV_C_OFFSET 0x08000 -#define OV_OVADD 0x30000 -#define OV_DOVASTA 0x30008 -# define OV_PIPE_SELECT (BIT6|BIT7) -# define OV_PIPE_SELECT_POS 6 -# define OV_PIPE_A 0 -# define OV_PIPE_C 1 -#define OV_OGAMC5 0x30010 -#define OV_OGAMC4 0x30014 -#define OV_OGAMC3 0x30018 -#define OV_OGAMC2 0x3001C -#define OV_OGAMC1 0x30020 -#define OV_OGAMC0 0x30024 -#define OVC_OVADD 0x38000 -#define OVC_DOVCSTA 0x38008 -#define OVC_OGAMC5 0x38010 -#define OVC_OGAMC4 0x38014 -#define OVC_OGAMC3 0x38018 -#define OVC_OGAMC2 0x3801C -#define OVC_OGAMC1 0x38020 -#define OVC_OGAMC0 0x38024 - -/* - * Some BIOS scratch area registers. The 845 (and 830?) store the amount - * of video memory available to the BIOS in SWF1. - */ -#define SWF0 0x71410 -#define SWF1 0x71414 -#define SWF2 0x71418 -#define SWF3 0x7141c -#define SWF4 0x71420 -#define SWF5 0x71424 -#define SWF6 0x71428 - -/* - * 855 scratch registers. - */ -#define SWF00 0x70410 -#define SWF01 0x70414 -#define SWF02 0x70418 -#define SWF03 0x7041c -#define SWF04 0x70420 -#define SWF05 0x70424 -#define SWF06 0x70428 - -#define SWF10 SWF0 -#define SWF11 SWF1 -#define SWF12 SWF2 -#define SWF13 SWF3 -#define SWF14 SWF4 -#define SWF15 SWF5 -#define SWF16 SWF6 - -#define SWF30 0x72414 -#define SWF31 0x72418 -#define SWF32 0x7241c - - -/* - * Palette registers - */ -#define PALETTE_A 0x0a000 -#define PALETTE_B 0x0a800 -#define PALETTE_C 0x0ac00 - -#define IS_I830(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82830_CGC) -#define IS_845G(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82845G_IG) -#define IS_I85X(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82855GM_IG) -#define IS_I855(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82855GM_IG) -#define IS_I865G(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82865_IG) - - -/* || dev->pci_device == PCI_DEVICE_ID_INTELPCI_CHIP_E7221_G) */ -#define IS_I915G(dev) (dev->pci_device == PCI_DEVICE_ID_INTEL_82915G_IG) -#define IS_I915GM(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82915GM_IG) -#define IS_I945G(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82945G_IG) -#define IS_I945GM(dev) ((dev)->pci_device == PCI_DEVICE_ID_INTEL_82945GM_IG) - -#define IS_I965G(dev) ((dev)->pci_device == 0x2972 || \ - (dev)->pci_device == 0x2982 || \ - (dev)->pci_device == 0x2992 || \ - (dev)->pci_device == 0x29A2 || \ - (dev)->pci_device == 0x2A02 || \ - (dev)->pci_device == 0x2A12) - -#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02) - -#define IS_G33(dev) ((dev)->pci_device == 0x29C2 || \ - (dev)->pci_device == 0x29B2 || \ - (dev)->pci_device == 0x29D2) - -#define IS_I9XX(dev) (IS_I915G(dev) || IS_I915GM(dev) || IS_I945G(dev) || \ - IS_I945GM(dev) || IS_I965G(dev)) - -#define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \ - IS_I945GM(dev) || IS_I965GM(dev)) - -/* Cursor A & B regs */ -#define CURACNTR 0x70080 -#define CURSOR_MODE_DISABLE 0x00 -#define CURSOR_MODE_64_32B_AX 0x07 -#define CURSOR_MODE_64_ARGB_AX ((1 << 5) | CURSOR_MODE_64_32B_AX) -#define MCURSOR_GAMMA_ENABLE (1 << 26) -#define CURABASE 0x70084 -#define CURAPOS 0x70088 -#define CURSOR_POS_MASK 0x007FF -#define CURSOR_POS_SIGN 0x8000 -#define CURSOR_X_SHIFT 0 -#define CURSOR_Y_SHIFT 16 -#define CURBCNTR 0x700c0 -#define CURBBASE 0x700c4 -#define CURBPOS 0x700c8 -#define CURCCNTR 0x700e0 -#define CURCBASE 0x700e4 -#define CURCPOS 0x700e8 - -/* - * Interrupt Registers - */ -#define IER 0x020a0 -#define IIR 0x020a4 -#define IMR 0x020a8 -#define ISR 0x020ac - -/* - * MOORESTOWN delta registers - */ -#define MRST_DPLL_A 0x0f014 -#define MDFLD_DPLL_B 0x0f018 -#define MDFLD_INPUT_REF_SEL (1 << 14) -#define MDFLD_VCO_SEL (1 << 16) -#define DPLLA_MODE_LVDS (2 << 26) /* mrst */ -#define MDFLD_PLL_LATCHEN (1 << 28) -#define MDFLD_PWR_GATE_EN (1 << 30) -#define MDFLD_P1_MASK (0x1FF << 17) -#define MRST_FPA0 0x0f040 -#define MRST_FPA1 0x0f044 -#define MDFLD_DPLL_DIV0 0x0f048 -#define MDFLD_DPLL_DIV1 0x0f04c -#define MRST_PERF_MODE 0x020f4 - -/* MEDFIELD HDMI registers */ -#define HDMIPHYMISCCTL 0x61134 -# define HDMI_PHY_POWER_DOWN 0x7f -#define HDMIB_CONTROL 0x61140 -# define HDMIB_PORT_EN (1 << 31) -# define HDMIB_PIPE_B_SELECT (1 << 30) -# define HDMIB_NULL_PACKET (1 << 9) -#define HDMIB_HDCP_PORT (1 << 5) -/** Requird for HDMI operation */ -#define HDMI_NULL_PACKETS_DURING_VSYNC (1 << 9) -#define HDMI_BORDER_ENABLE (1 << 7) -#define HDMI_AUDIO_ENABLE (1 << 6) - - -/* #define LVDS 0x61180 */ -# define MRST_PANEL_8TO6_DITHER_ENABLE (1 << 25) -# define MRST_PANEL_24_DOT_1_FORMAT (1 << 24) -# define LVDS_A3_POWER_UP_0_OUTPUT (1 << 6) - -#define MIPI 0x61190 -#define MIPI_C 0x62190 -# define MIPI_PORT_EN (1 << 31) -/** Turns on border drawing to allow centered display. */ -# define SEL_FLOPPED_HSTX (1 << 23) -# define PASS_FROM_SPHY_TO_AFE (1 << 16) -# define MIPI_BORDER_EN (1 << 15) -# define MIPIA_3LANE_MIPIC_1LANE 0x1 -# define MIPIA_2LANE_MIPIC_2LANE 0x2 -# define TE_TRIGGER_DSI_PROTOCOL (1 << 2) -# define TE_TRIGGER_GPIO_PIN (1 << 3) -#define MIPI_TE_COUNT 0x61194 - -/* #define PP_CONTROL 0x61204 */ -# define POWER_DOWN_ON_RESET (1 << 1) - -/* #define PFIT_CONTROL 0x61230 */ -# define PFIT_PIPE_SELECT (3 << 29) -# define PFIT_PIPE_SELECT_SHIFT (29) - -/* #define BLC_PWM_CTL 0x61254 */ -#define MRST_BACKLIGHT_MODULATION_FREQ_SHIFT (16) -#define MRST_BACKLIGHT_MODULATION_FREQ_MASK (0xffff << 16) - -/* #define PIPEACONF 0x70008 */ -#define PIPEACONF_PIPE_STATE (1<<30) -/* #define DSPACNTR 0x70180 */ -#if 0 /*FIXME JLIU7 need to define the following */ -1000 = 32 - bit RGBX(10 : 10 : 10 : 2) -pixel format.Ignore alpha.1010 = BGRX 10 : 10 : 10 : 2 1100 = 64 - bit RGBX -(16 : 16 : 16 : 16) 16 bit floating point pixel format. -Ignore alpha.1110 = 32 - bit RGBX(8 : 8 : 8 : 8) pixel format. - Ignore - alpha. -#endif /*FIXME JLIU7 need to define the following */ - -#define MRST_DSPABASE 0x7019c -#define MRST_DSPBBASE 0x7119c -#define MDFLD_DSPCBASE 0x7219c - -/* - * MOORESTOWN reserved registers - */ -#if 0 -#define DSPAPOS 0x7018C /* reserved */ -#define DSPASIZE 0x70190 -#endif -/* - * Moorestown registers. - */ -/*=========================================================================== -; General Constants -;--------------------------------------------------------------------------*/ -#define BIT0 0x00000001 -#define BIT1 0x00000002 -#define BIT2 0x00000004 -#define BIT3 0x00000008 -#define BIT4 0x00000010 -#define BIT5 0x00000020 -#define BIT6 0x00000040 -#define BIT7 0x00000080 -#define BIT8 0x00000100 -#define BIT9 0x00000200 -#define BIT10 0x00000400 -#define BIT11 0x00000800 -#define BIT12 0x00001000 -#define BIT13 0x00002000 -#define BIT14 0x00004000 -#define BIT15 0x00008000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 -/*=========================================================================== -; MIPI IP registers -;--------------------------------------------------------------------------*/ -#define MIPIC_REG_OFFSET 0x800 -#define DEVICE_READY_REG 0xb000 -#define LP_OUTPUT_HOLD BIT16 -#define EXIT_ULPS_DEV_READY 0x3 -#define LP_OUTPUT_HOLD_RELEASE 0x810000 -# define ENTERING_ULPS (2 << 1) -# define EXITING_ULPS (1 << 1) -# define ULPS_MASK (3 << 1) -# define BUS_POSSESSION (1 << 3) -#define INTR_STAT_REG 0xb004 -#define RX_SOT_ERROR BIT0 -#define RX_SOT_SYNC_ERROR BIT1 -#define RX_ESCAPE_MODE_ENTRY_ERROR BIT3 -#define RX_LP_TX_SYNC_ERROR BIT4 -#define RX_HS_RECEIVE_TIMEOUT_ERROR BIT5 -#define RX_FALSE_CONTROL_ERROR BIT6 -#define RX_ECC_SINGLE_BIT_ERROR BIT7 -#define RX_ECC_MULTI_BIT_ERROR BIT8 -#define RX_CHECKSUM_ERROR BIT9 -#define RX_DSI_DATA_TYPE_NOT_RECOGNIZED BIT10 -#define RX_DSI_VC_ID_INVALID BIT11 -#define TX_FALSE_CONTROL_ERROR BIT12 -#define TX_ECC_SINGLE_BIT_ERROR BIT13 -#define TX_ECC_MULTI_BIT_ERROR BIT14 -#define TX_CHECKSUM_ERROR BIT15 -#define TX_DSI_DATA_TYPE_NOT_RECOGNIZED BIT16 -#define TX_DSI_VC_ID_INVALID BIT17 -#define HIGH_CONTENTION BIT18 -#define LOW_CONTENTION BIT19 -#define DPI_FIFO_UNDER_RUN BIT20 -#define HS_TX_TIMEOUT BIT21 -#define LP_RX_TIMEOUT BIT22 -#define TURN_AROUND_ACK_TIMEOUT BIT23 -#define ACK_WITH_NO_ERROR BIT24 -#define HS_GENERIC_WR_FIFO_FULL BIT27 -#define LP_GENERIC_WR_FIFO_FULL BIT28 -#define SPL_PKT_SENT BIT30 -#define INTR_EN_REG 0xb008 -#define DSI_FUNC_PRG_REG 0xb00c -#define DPI_CHANNEL_NUMBER_POS 0x03 -#define DBI_CHANNEL_NUMBER_POS 0x05 -#define FMT_DPI_POS 0x07 -#define FMT_DBI_POS 0x0A -#define DBI_DATA_WIDTH_POS 0x0D -/* DPI PIXEL FORMATS */ -#define RGB_565_FMT 0x01 /* RGB 565 FORMAT */ -#define RGB_666_FMT 0x02 /* RGB 666 FORMAT */ -#define LRGB_666_FMT 0x03 /* RGB LOOSELY PACKED - * 666 FORMAT - */ -#define RGB_888_FMT 0x04 /* RGB 888 FORMAT */ -#define VIRTUAL_CHANNEL_NUMBER_0 0x00 /* Virtual channel 0 */ -#define VIRTUAL_CHANNEL_NUMBER_1 0x01 /* Virtual channel 1 */ -#define VIRTUAL_CHANNEL_NUMBER_2 0x02 /* Virtual channel 2 */ -#define VIRTUAL_CHANNEL_NUMBER_3 0x03 /* Virtual channel 3 */ -#define DBI_NOT_SUPPORTED 0x00 /* command mode - * is not supported - */ -#define DBI_DATA_WIDTH_16BIT 0x01 /* 16 bit data */ -#define DBI_DATA_WIDTH_9BIT 0x02 /* 9 bit data */ -#define DBI_DATA_WIDTH_8BIT 0x03 /* 8 bit data */ -#define DBI_DATA_WIDTH_OPT1 0x04 /* option 1 */ -#define DBI_DATA_WIDTH_OPT2 0x05 /* option 2 */ -#define HS_TX_TIMEOUT_REG 0xb010 -#define LP_RX_TIMEOUT_REG 0xb014 -#define TURN_AROUND_TIMEOUT_REG 0xb018 -#define DEVICE_RESET_REG 0xb01C -#define DPI_RESOLUTION_REG 0xb020 -#define RES_V_POS 0x10 -#define DBI_RESOLUTION_REG 0xb024 /* Reserved for MDFLD */ -#define HORIZ_SYNC_PAD_COUNT_REG 0xb028 -#define HORIZ_BACK_PORCH_COUNT_REG 0xb02C -#define HORIZ_FRONT_PORCH_COUNT_REG 0xb030 -#define HORIZ_ACTIVE_AREA_COUNT_REG 0xb034 -#define VERT_SYNC_PAD_COUNT_REG 0xb038 -#define VERT_BACK_PORCH_COUNT_REG 0xb03c -#define VERT_FRONT_PORCH_COUNT_REG 0xb040 -#define HIGH_LOW_SWITCH_COUNT_REG 0xb044 -#define DPI_CONTROL_REG 0xb048 -#define DPI_SHUT_DOWN BIT0 -#define DPI_TURN_ON BIT1 -#define DPI_COLOR_MODE_ON BIT2 -#define DPI_COLOR_MODE_OFF BIT3 -#define DPI_BACK_LIGHT_ON BIT4 -#define DPI_BACK_LIGHT_OFF BIT5 -#define DPI_LP BIT6 -#define DPI_DATA_REG 0xb04c -#define DPI_BACK_LIGHT_ON_DATA 0x07 -#define DPI_BACK_LIGHT_OFF_DATA 0x17 -#define INIT_COUNT_REG 0xb050 -#define MAX_RET_PAK_REG 0xb054 -#define VIDEO_FMT_REG 0xb058 -#define COMPLETE_LAST_PCKT BIT2 -#define EOT_DISABLE_REG 0xb05c -#define ENABLE_CLOCK_STOPPING BIT1 -#define LP_BYTECLK_REG 0xb060 -#define LP_GEN_DATA_REG 0xb064 -#define HS_GEN_DATA_REG 0xb068 -#define LP_GEN_CTRL_REG 0xb06C -#define HS_GEN_CTRL_REG 0xb070 -#define DCS_CHANNEL_NUMBER_POS 0x06 -#define MCS_COMMANDS_POS 0x8 -#define WORD_COUNTS_POS 0x8 -#define MCS_PARAMETER_POS 0x10 -#define GEN_FIFO_STAT_REG 0xb074 -#define HS_DATA_FIFO_FULL BIT0 -#define HS_DATA_FIFO_HALF_EMPTY BIT1 -#define HS_DATA_FIFO_EMPTY BIT2 -#define LP_DATA_FIFO_FULL BIT8 -#define LP_DATA_FIFO_HALF_EMPTY BIT9 -#define LP_DATA_FIFO_EMPTY BIT10 -#define HS_CTRL_FIFO_FULL BIT16 -#define HS_CTRL_FIFO_HALF_EMPTY BIT17 -#define HS_CTRL_FIFO_EMPTY BIT18 -#define LP_CTRL_FIFO_FULL BIT24 -#define LP_CTRL_FIFO_HALF_EMPTY BIT25 -#define LP_CTRL_FIFO_EMPTY BIT26 -#define DBI_FIFO_EMPTY BIT27 -#define DPI_FIFO_EMPTY BIT28 -#define HS_LS_DBI_ENABLE_REG 0xb078 -#define TXCLKESC_REG 0xb07c -#define DPHY_PARAM_REG 0xb080 -#define DBI_BW_CTRL_REG 0xb084 -#define CLK_LANE_SWT_REG 0xb088 -/*=========================================================================== -; MIPI Adapter registers -;--------------------------------------------------------------------------*/ -#define MIPI_CONTROL_REG 0xb104 -#define MIPI_2X_CLOCK_BITS (BIT0 | BIT1) -#define MIPI_DATA_ADDRESS_REG 0xb108 -#define MIPI_DATA_LENGTH_REG 0xb10C -#define MIPI_COMMAND_ADDRESS_REG 0xb110 -#define MIPI_COMMAND_LENGTH_REG 0xb114 -#define MIPI_READ_DATA_RETURN_REG0 0xb118 -#define MIPI_READ_DATA_RETURN_REG1 0xb11C -#define MIPI_READ_DATA_RETURN_REG2 0xb120 -#define MIPI_READ_DATA_RETURN_REG3 0xb124 -#define MIPI_READ_DATA_RETURN_REG4 0xb128 -#define MIPI_READ_DATA_RETURN_REG5 0xb12C -#define MIPI_READ_DATA_RETURN_REG6 0xb130 -#define MIPI_READ_DATA_RETURN_REG7 0xb134 -#define MIPI_READ_DATA_VALID_REG 0xb138 -/* DBI COMMANDS */ -#define soft_reset 0x01 -/* ************************************************************************* *\ -The display module performs a software reset. -Registers are written with their SW Reset default values. -\* ************************************************************************* */ -#define get_power_mode 0x0a -/* ************************************************************************* *\ -The display module returns the current power mode -\* ************************************************************************* */ -#define get_address_mode 0x0b -/* ************************************************************************* *\ -The display module returns the current status. -\* ************************************************************************* */ -#define get_pixel_format 0x0c -/* ************************************************************************* *\ -This command gets the pixel format for the RGB image data -used by the interface. -\* ************************************************************************* */ -#define get_display_mode 0x0d -/* ************************************************************************* *\ -The display module returns the Display Image Mode status. -\* ************************************************************************* */ -#define get_signal_mode 0x0e -/* ************************************************************************* *\ -The display module returns the Display Signal Mode. -\* ************************************************************************* */ -#define get_diagnostic_result 0x0f -/* ************************************************************************* *\ -The display module returns the self-diagnostic results following -a Sleep Out command. -\* ************************************************************************* */ -#define enter_sleep_mode 0x10 -/* ************************************************************************* *\ -This command causes the display module to enter the Sleep mode. -In this mode, all unnecessary blocks inside the display module are disabled -except interface communication. This is the lowest power mode -the display module supports. -\* ************************************************************************* */ -#define exit_sleep_mode 0x11 -/* ************************************************************************* *\ -This command causes the display module to exit Sleep mode. -All blocks inside the display module are enabled. -\* ************************************************************************* */ -#define enter_partial_mode 0x12 -/* ************************************************************************* *\ -This command causes the display module to enter the Partial Display Mode. -The Partial Display Mode window is described by the set_partial_area command. -\* ************************************************************************* */ -#define enter_normal_mode 0x13 -/* ************************************************************************* *\ -This command causes the display module to enter the Normal mode. -Normal Mode is defined as Partial Display mode and Scroll mode are off -\* ************************************************************************* */ -#define exit_invert_mode 0x20 -/* ************************************************************************* *\ -This command causes the display module to stop inverting the image data on -the display device. The frame memory contents remain unchanged. -No status bits are changed. -\* ************************************************************************* */ -#define enter_invert_mode 0x21 -/* ************************************************************************* *\ -This command causes the display module to invert the image data only on -the display device. The frame memory contents remain unchanged. -No status bits are changed. -\* ************************************************************************* */ -#define set_gamma_curve 0x26 -/* ************************************************************************* *\ -This command selects the desired gamma curve for the display device. -Four fixed gamma curves are defined in section DCS spec. -\* ************************************************************************* */ -#define set_display_off 0x28 -/* ************************************************************************* *\ -This command causes the display module to stop displaying the image data -on the display device. The frame memory contents remain unchanged. -No status bits are changed. -\* ************************************************************************* */ -#define set_display_on 0x29 -/* ************************************************************************* *\ -This command causes the display module to start displaying the image data -on the display device. The frame memory contents remain unchanged. -No status bits are changed. -\* ************************************************************************* */ -#define set_column_address 0x2a -/* ************************************************************************* *\ -This command defines the column extent of the frame memory accessed by the -hostprocessor with the read_memory_continue and write_memory_continue commands. -No status bits are changed. -\* ************************************************************************* */ -#define set_page_addr 0x2b -/* ************************************************************************* *\ -This command defines the page extent of the frame memory accessed by the host -processor with the write_memory_continue and read_memory_continue command. -No status bits are changed. -\* ************************************************************************* */ -#define write_mem_start 0x2c -/* ************************************************************************* *\ -This command transfers image data from the host processor to the display -module s frame memory starting at the pixel location specified by -preceding set_column_address and set_page_address commands. -\* ************************************************************************* */ -#define set_partial_area 0x30 -/* ************************************************************************* *\ -This command defines the Partial Display mode s display area. -There are two parameters associated with -this command, the first defines the Start Row (SR) and the second the End Row -(ER). SR and ER refer to the Frame Memory Line Pointer. -\* ************************************************************************* */ -#define set_scroll_area 0x33 -/* ************************************************************************* *\ -This command defines the display modules Vertical Scrolling Area. -\* ************************************************************************* */ -#define set_tear_off 0x34 -/* ************************************************************************* *\ -This command turns off the display modules Tearing Effect output signal on -the TE signal line. -\* ************************************************************************* */ -#define set_tear_on 0x35 -/* ************************************************************************* *\ -This command turns on the display modules Tearing Effect output signal -on the TE signal line. -\* ************************************************************************* */ -#define set_address_mode 0x36 -/* ************************************************************************* *\ -This command sets the data order for transfers from the host processor to -display modules frame memory,bits B[7:5] and B3, and from the display -modules frame memory to the display device, bits B[2:0] and B4. -\* ************************************************************************* */ -#define set_scroll_start 0x37 -/* ************************************************************************* *\ -This command sets the start of the vertical scrolling area in the frame memory. -The vertical scrolling area is fully defined when this command is used with -the set_scroll_area command The set_scroll_start command has one parameter, -the Vertical Scroll Pointer. The VSP defines the line in the frame memory -that is written to the display device as the first line of the vertical -scroll area. -\* ************************************************************************* */ -#define exit_idle_mode 0x38 -/* ************************************************************************* *\ -This command causes the display module to exit Idle mode. -\* ************************************************************************* */ -#define enter_idle_mode 0x39 -/* ************************************************************************* *\ -This command causes the display module to enter Idle Mode. -In Idle Mode, color expression is reduced. Colors are shown on the display -device using the MSB of each of the R, G and B color components in the frame -memory -\* ************************************************************************* */ -#define set_pixel_format 0x3a -/* ************************************************************************* *\ -This command sets the pixel format for the RGB image data used by the interface. -Bits D[6:4] DPI Pixel Format Definition -Bits D[2:0] DBI Pixel Format Definition -Bits D7 and D3 are not used. -\* ************************************************************************* */ - #define DCS_PIXEL_FORMAT_3bbp 0x1 - #define DCS_PIXEL_FORMAT_8bbp 0x2 - #define DCS_PIXEL_FORMAT_12bbp 0x3 - #define DCS_PIXEL_FORMAT_16bbp 0x5 - #define DCS_PIXEL_FORMAT_18bbp 0x6 - #define DCS_PIXEL_FORMAT_24bbp 0x7 -#define write_mem_cont 0x3c -/* ************************************************************************* *\ -This command transfers image data from the host processor to the display -module's frame memory continuing from the pixel location following the -previous write_memory_continue or write_memory_start command. -\* ************************************************************************* */ -#define set_tear_scanline 0x44 -/* ************************************************************************* *\ -This command turns on the display modules Tearing Effect output signal on the -TE signal line when the display module reaches line N. -\* ************************************************************************* */ -#define get_scanline 0x45 -/* ************************************************************************* *\ -The display module returns the current scanline, N, used to update the -display device. The total number of scanlines on a display device is -defined as VSYNC + VBP + VACT + VFP.The first scanline is defined as -the first line of V Sync and is denoted as Line 0. -When in Sleep Mode, the value returned by get_scanline is undefined. -\* ************************************************************************* */ - -/* MCS or Generic COMMANDS */ -/* MCS/generic data type */ -#define GEN_SHORT_WRITE_0 0x03 /* generic short write, no parameters */ -#define GEN_SHORT_WRITE_1 0x13 /* generic short write, 1 parameters */ -#define GEN_SHORT_WRITE_2 0x23 /* generic short write, 2 parameters */ -#define GEN_READ_0 0x04 /* generic read, no parameters */ -#define GEN_READ_1 0x14 /* generic read, 1 parameters */ -#define GEN_READ_2 0x24 /* generic read, 2 parameters */ -#define GEN_LONG_WRITE 0x29 /* generic long write */ -#define MCS_SHORT_WRITE_0 0x05 /* MCS short write, no parameters */ -#define MCS_SHORT_WRITE_1 0x15 /* MCS short write, 1 parameters */ -#define MCS_READ 0x06 /* MCS read, no parameters */ -#define MCS_LONG_WRITE 0x39 /* MCS long write */ -/* MCS/generic commands */ -/*****TPO MCS**********/ -#define write_display_profile 0x50 -#define write_display_brightness 0x51 -#define write_ctrl_display 0x53 -#define write_ctrl_cabc 0x55 - #define UI_IMAGE 0x01 - #define STILL_IMAGE 0x02 - #define MOVING_IMAGE 0x03 -#define write_hysteresis 0x57 -#define write_gamma_setting 0x58 -#define write_cabc_min_bright 0x5e -#define write_kbbc_profile 0x60 -/*****TMD MCS**************/ -#define tmd_write_display_brightness 0x8c - -/* ************************************************************************* *\ -This command is used to control ambient light, panel backlight brightness and -gamma settings. -\* ************************************************************************* */ -#define BRIGHT_CNTL_BLOCK_ON BIT5 -#define AMBIENT_LIGHT_SENSE_ON BIT4 -#define DISPLAY_DIMMING_ON BIT3 -#define BACKLIGHT_ON BIT2 -#define DISPLAY_BRIGHTNESS_AUTO BIT1 -#define GAMMA_AUTO BIT0 - -/* DCS Interface Pixel Formats */ -#define DCS_PIXEL_FORMAT_3BPP 0x1 -#define DCS_PIXEL_FORMAT_8BPP 0x2 -#define DCS_PIXEL_FORMAT_12BPP 0x3 -#define DCS_PIXEL_FORMAT_16BPP 0x5 -#define DCS_PIXEL_FORMAT_18BPP 0x6 -#define DCS_PIXEL_FORMAT_24BPP 0x7 -/* ONE PARAMETER READ DATA */ -#define addr_mode_data 0xfc -#define diag_res_data 0x00 -#define disp_mode_data 0x23 -#define pxl_fmt_data 0x77 -#define pwr_mode_data 0x74 -#define sig_mode_data 0x00 -/* TWO PARAMETERS READ DATA */ -#define scanline_data1 0xff -#define scanline_data2 0xff -#define NON_BURST_MODE_SYNC_PULSE 0x01 /* Non Burst Mode - * with Sync Pulse - */ -#define NON_BURST_MODE_SYNC_EVENTS 0x02 /* Non Burst Mode - * with Sync events - */ -#define BURST_MODE 0x03 /* Burst Mode */ -#define DBI_COMMAND_BUFFER_SIZE 0x240 /* 0x32 */ /* 0x120 */ /* Allocate at least - * 0x100 Byte with 32 - * byte alignment - */ -#define DBI_DATA_BUFFER_SIZE 0x120 /* Allocate at least - * 0x100 Byte with 32 - * byte alignment - */ -#define DBI_CB_TIME_OUT 0xFFFF -#define GEN_FB_TIME_OUT 2000 -#define ALIGNMENT_32BYTE_MASK (~(BIT0|BIT1|BIT2|BIT3|BIT4)) -#define SKU_83 0x01 -#define SKU_100 0x02 -#define SKU_100L 0x04 -#define SKU_BYPASS 0x08 - - -/* Some handy macros for playing with bitfields. */ -#define PSB_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low)) -#define SET_FIELD(value, field) (((value) << field ## _SHIFT) & field ## _MASK) -#define GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT) - -#define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a))) - -/* PCI config space */ - -#define SB_PCKT 0x02100 /* cedarview */ -# define SB_OPCODE_MASK PSB_MASK(31, 16) -# define SB_OPCODE_SHIFT 16 -# define SB_OPCODE_READ 0 -# define SB_OPCODE_WRITE 1 -# define SB_DEST_MASK PSB_MASK(15, 8) -# define SB_DEST_SHIFT 8 -# define SB_DEST_DPLL 0x88 -# define SB_BYTE_ENABLE_MASK PSB_MASK(7, 4) -# define SB_BYTE_ENABLE_SHIFT 4 -# define SB_BUSY (1 << 0) - -#define DSPCLK_GATE_D 0x6200 -# define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* Fixed value on CDV */ -# define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11) -# define DPIOUNIT_CLOCK_GATE_DISABLE (1 << 6) - - -#define RAMCLK_GATE_D 0x6210 - - -/* 32-bit value read/written from the DPIO reg. */ -#define SB_DATA 0x02104 /* cedarview */ -/* 32-bit address of the DPIO reg to be read/written. */ -#define SB_ADDR 0x02108 /* cedarview */ -#define DPIO_CFG 0x02110 /* cedarview */ -# define DPIO_MODE_SELECT_1 (1 << 3) -# define DPIO_MODE_SELECT_0 (1 << 2) -# define DPIO_SFR_BYPASS (1 << 1) -/* reset is active low */ -# define DPIO_CMN_RESET_N (1 << 0) - -/* Cedarview sideband registers */ -#define _SB_M_A 0x8008 -#define _SB_M_B 0x8028 -#define SB_M(pipe) _PIPE(pipe, _SB_M_A, _SB_M_B) -# define SB_M_DIVIDER_MASK (0xFF << 24) -# define SB_M_DIVIDER_SHIFT 24 - -#define _SB_N_VCO_A 0x8014 -#define _SB_N_VCO_B 0x8034 -#define SB_N_VCO(pipe) _PIPE(pipe, _SB_N_VCO_A, _SB_N_VCO_B) -# define SB_N_VCO_SEL_MASK PSB_MASK(31, 30) -# define SB_N_VCO_SEL_SHIFT 30 -# define SB_N_DIVIDER_MASK PSB_MASK(29, 26) -# define SB_N_DIVIDER_SHIFT 26 -# define SB_N_CB_TUNE_MASK PSB_MASK(25, 24) -# define SB_N_CB_TUNE_SHIFT 24 - -#define _SB_REF_A 0x8018 -#define _SB_REF_B 0x8038 -#define SB_REF_SFR(pipe) _PIPE(pipe, _SB_REF_A, _SB_REF_B) - -#define _SB_P_A 0x801c -#define _SB_P_B 0x803c -#define SB_P(pipe) _PIPE(pipe, _SB_P_A, _SB_P_B) -# define SB_P2_DIVIDER_MASK PSB_MASK(31, 30) -# define SB_P2_DIVIDER_SHIFT 30 -# define SB_P2_10 0 /* HDMI, DP, DAC */ -# define SB_P2_5 1 /* DAC */ -# define SB_P2_14 2 /* LVDS single */ -# define SB_P2_7 3 /* LVDS double */ -# define SB_P1_DIVIDER_MASK PSB_MASK(15, 12) -# define SB_P1_DIVIDER_SHIFT 12 - -#define PSB_LANE0 0x120 -#define PSB_LANE1 0x220 -#define PSB_LANE2 0x2320 -#define PSB_LANE3 0x2420 - -#define LANE_PLL_MASK (0x7 << 20) -#define LANE_PLL_ENABLE (0x3 << 20) - -#define INTEL_CDV_DISP_CLK_FREQ 0x20c8 - -#if 0 -/* ************************************************************************* *\ -DSI command data structure -\* ************************************************************************* */ -union DSI_LONG_PACKET_HEADER { - u32 DSI_longPacketHeader; - struct { - u8 dataID; - u16 wordCount; - u8 ECC; - }; -#if 0 /*FIXME JLIU7 */ - struct { - u8 DT:6; - u8 VC:2; - }; -#endif /*FIXME JLIU7 */ -}; - -union MIPI_ADPT_CMD_LNG_REG { - u32 commnadLengthReg; - struct { - u8 command0; - u8 command1; - u8 command2; - u8 command3; - }; -}; - -struct SET_COLUMN_ADDRESS_DATA { - u8 command; - u16 SC; /* Start Column */ - u16 EC; /* End Column */ -}; - -struct SET_PAGE_ADDRESS_DATA { - u8 command; - u16 SP; /* Start Page */ - u16 EP; /* End Page */ -}; -#endif - -#endif diff --git a/drivers/staging/cdv/drv/psb_irq.c b/drivers/staging/cdv/drv/psb_irq.c deleted file mode 100644 index 84af156..0000000 --- a/drivers/staging/cdv/drv/psb_irq.c +++ /dev/null @@ -1,681 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to - * develop this driver. - * - **************************************************************************/ -/* - */ - -#include -#include "psb_drv.h" -#include "psb_reg.h" -#include "psb_msvdx.h" -#include "psb_intel_reg.h" -#include "psb_powermgmt.h" - - -/* - * inline functions - */ -static inline u32 -psb_pipestat(int pipe) -{ - if (pipe == 0) - return PIPEASTAT; - if (pipe == 1) - return PIPEBSTAT; - BUG(); -} - -static inline u32 -psb_pipe_event(int pipe) -{ - if (pipe == 0) - return PSB_IRQ_PIPEA_EVENT; - if (pipe == 1) - return PSB_IRQ_PIPEB_EVENT; - BUG(); -} - -static inline u32 -psb_pipeconf(int pipe) -{ - if (pipe == 0) - return PIPEACONF; - if (pipe == 1) - return PIPEBCONF; - BUG(); -} - -void -psb_enable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask) -{ - if ((dev_priv->pipestat[pipe] & mask) != mask) { - u32 reg = psb_pipestat(pipe); - u32 writeVal = PSB_RVDC32(reg); - - dev_priv->pipestat[pipe] |= mask; - /* Enable the interrupt, clear any pending status */ - writeVal |= (mask | (mask >> 16)); - PSB_WVDC32(writeVal, reg); - (void) PSB_RVDC32(reg); - } -} - -void -psb_disable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask) -{ - if ((dev_priv->pipestat[pipe] & mask) != 0) { - u32 reg = psb_pipestat(pipe); - u32 writeVal = PSB_RVDC32(reg); - - dev_priv->pipestat[pipe] &= ~mask; - writeVal &= ~mask; - PSB_WVDC32(writeVal, reg); - (void) PSB_RVDC32(reg); - } -} - -void -mid_enable_pipe_event(struct drm_psb_private *dev_priv, int pipe) -{ - u32 pipe_event = psb_pipe_event(pipe); - dev_priv->vdc_irq_mask |= pipe_event; - PSB_WVDC32(~dev_priv->vdc_irq_mask, PSB_INT_MASK_R); - PSB_WVDC32(dev_priv->vdc_irq_mask, PSB_INT_ENABLE_R); -} - -void -mid_disable_pipe_event(struct drm_psb_private *dev_priv, int pipe) -{ - if (dev_priv->pipestat[pipe] == 0) { - u32 pipe_event = psb_pipe_event(pipe); - dev_priv->vdc_irq_mask &= ~pipe_event; - PSB_WVDC32(~dev_priv->vdc_irq_mask, PSB_INT_MASK_R); - PSB_WVDC32(dev_priv->vdc_irq_mask, PSB_INT_ENABLE_R); - } -} - -/** - * Display controller interrupt handler for vsync/vblank. - * - */ -static void mid_vblank_handler(struct drm_device *dev, uint32_t pipe) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - /** - * Using TE interrupt for B0 + command mode panels - */ - - drm_handle_vblank(dev, pipe); - - if( dev_priv->psb_vsync_handler != NULL) - (*dev_priv->psb_vsync_handler)(dev,pipe); -} - -/** - * Display controller interrupt handler for pipe event. - * - */ -#define WAIT_STATUS_CLEAR_LOOP_COUNT 0xffff -static void mid_pipe_event_handler(struct drm_device *dev, uint32_t pipe) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - - uint32_t pipe_stat_val = 0; - uint32_t pipe_stat_reg = psb_pipestat(pipe); - uint32_t pipe_enable = dev_priv->pipestat[pipe]; - uint32_t pipe_status = dev_priv->pipestat[pipe] >> 16; - uint32_t i = 0, temp; - unsigned long irq_flags; - - spin_lock_irqsave(&dev_priv->irqmask_lock, irq_flags); - - pipe_stat_val = PSB_RVDC32(pipe_stat_reg); - pipe_stat_val &= pipe_enable | pipe_status; - pipe_stat_val &= pipe_stat_val >> 16; - - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irq_flags); - temp = PSB_RVDC32(pipe_stat_reg); - temp &=~(0xFFFF); - if (temp & PIPE_FIFO_UNDERRUN) { - DRM_DEBUG_KMS("Fifo underrun on pipe %d\n", pipe); - PSB_WVDC32(temp, pipe_stat_reg); - PSB_RVDC32(pipe_stat_reg); - } - /* clear the 2nd level interrupt status bits */ - /** - * FIXME: shouldn't use while loop here. However, the interrupt - * status 'sticky' bits cannot be cleared by setting '1' to that - * bit once... - */ - for (i = 0; i < WAIT_STATUS_CLEAR_LOOP_COUNT; i ++) { - PSB_WVDC32(PSB_RVDC32(pipe_stat_reg), pipe_stat_reg); - (void) PSB_RVDC32(pipe_stat_reg); - - if ((PSB_RVDC32(pipe_stat_reg) & pipe_status) == 0) - break; - } - - if (i == WAIT_STATUS_CLEAR_LOOP_COUNT) - DRM_ERROR("%s, can't clear the status bits in pipe_stat_reg, its value = 0x%x. \n", - __FUNCTION__, PSB_RVDC32(pipe_stat_reg)); - - if ((pipe_stat_val & PIPE_DPST_EVENT_STATUS) && - (dev_priv->psb_dpst_state != NULL)) { - uint32_t pwm_reg = 0; - uint32_t hist_reg = 0; - u32 irqCtrl = 0; - struct dpst_guardband guardband_reg; - struct dpst_ie_histogram_control ie_hist_cont_reg; - - hist_reg = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - - /* Determine if this is histogram or pwm interrupt */ - if(hist_reg & HISTOGRAM_INT_CTRL_CLEAR) { - /* Notify UM of histogram interrupt */ - psb_dpst_notify_change_um(DPST_EVENT_HIST_INTERRUPT, - dev_priv->psb_dpst_state); - - /* disable dpst interrupts */ - guardband_reg.data = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - guardband_reg.interrupt_enable = 0; - guardband_reg.interrupt_status = 1; - PSB_WVDC32(guardband_reg.data, HISTOGRAM_INT_CONTROL); - - ie_hist_cont_reg.data = PSB_RVDC32(HISTOGRAM_LOGIC_CONTROL); - ie_hist_cont_reg.ie_histogram_enable = 0; - PSB_WVDC32(ie_hist_cont_reg.data, HISTOGRAM_LOGIC_CONTROL); - - irqCtrl = PSB_RVDC32(PIPEASTAT); - irqCtrl &= ~PIPE_DPST_EVENT_ENABLE; - PSB_WVDC32(irqCtrl, PIPEASTAT); - } - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); - if((pwm_reg & PWM_PHASEIN_INT_ENABLE) && - !(pwm_reg & PWM_PHASEIN_ENABLE)) { - /* Notify UM of the phase complete */ - psb_dpst_notify_change_um(DPST_EVENT_PHASE_COMPLETE, - dev_priv->psb_dpst_state); - - /* Temporarily get phase mngr ready to generate - * another interrupt until this can be moved to - * user mode */ - /* PSB_WVDC32(pwm_reg | 0x80010100 | PWM_PHASEIN_ENABLE, - PWM_CONTROL_LOGIC); */ - } - } - - if (pipe_stat_val & PIPE_VBLANK_STATUS) { - mid_vblank_handler(dev, pipe); - } -} - -/** - * Display controller interrupt handler. - */ -static void psb_vdc_interrupt(struct drm_device *dev, uint32_t vdc_stat) -{ - if (vdc_stat & PSB_IRQ_ASLE) - psb_intel_opregion_asle_intr(dev); - - if (vdc_stat & PSB_IRQ_PIPEA_EVENT) - mid_pipe_event_handler(dev, 0); - - if (vdc_stat & PSB_IRQ_PIPEB_EVENT) - mid_pipe_event_handler(dev, 1); -} - -static void psb_hotplug_work_func(struct work_struct *work) -{ - struct drm_psb_private *dev_priv = container_of(work, struct drm_psb_private, - hotplug_work); - struct drm_device *dev = dev_priv->dev; - - /* Just fire off a uevent and let userspace tell us what to do */ - drm_helper_hpd_irq_event(dev); -} - -irqreturn_t psb_irq_handler(DRM_IRQ_ARGS) -{ - struct drm_device *dev = (struct drm_device *) arg; - struct drm_psb_private *dev_priv = (struct drm_psb_private *) dev->dev_private; - uint32_t vdc_stat, dsp_int = 0, sgx_int = 0, msvdx_int = 0, hotplug_int = 0; - int handled = 0; - unsigned long irq_flags; - -/* PSB_DEBUG_ENTRY("\n"); */ - - spin_lock_irqsave(&dev_priv->irqmask_lock, irq_flags); - - vdc_stat = PSB_RVDC32(PSB_INT_IDENTITY_R); - - if (vdc_stat & _PSB_DISP_ALL_IRQ_FLAG) { - PSB_DEBUG_IRQ("Got DISP interrupt\n"); - dsp_int = 1; - } - - if (vdc_stat & _PSB_IRQ_SGX_FLAG) { - PSB_DEBUG_IRQ("Got SGX interrupt\n"); - sgx_int = 1; - } - - if (vdc_stat & _PSB_IRQ_MSVDX_FLAG) { - PSB_DEBUG_IRQ("Got MSVDX interrupt\n"); - msvdx_int = 1; - } - - if (vdc_stat & PSB_IRQ_DISP_HOTSYNC) { - PSB_DEBUG_IRQ("Got hotplug interrupt\n"); - hotplug_int = 1; - } - - vdc_stat &= dev_priv->vdc_irq_mask; - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irq_flags); - - if (dsp_int) { - psb_vdc_interrupt(dev, vdc_stat); - handled = 1; - } - - if (msvdx_int && ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) { - psb_msvdx_interrupt(dev); - handled = 1; - } - - if (sgx_int) { - if (SYSPVRServiceSGXInterrupt(dev) != 0) - handled = 1; - } - - if (hotplug_int) { - /* use system wq for now*/ - schedule_work(&dev_priv->hotplug_work); - REG_WRITE(PORT_HOTPLUG_STAT, REG_READ(PORT_HOTPLUG_STAT)); - handled = 1; - } - - PSB_WVDC32(vdc_stat, PSB_INT_IDENTITY_R); - (void) PSB_RVDC32(PSB_INT_IDENTITY_R); - DRM_READMEMORYBARRIER(); - - if (!handled) - return IRQ_NONE; - - return IRQ_HANDLED; -} - -void psb_irq_preinstall(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = (struct drm_psb_private *) dev->dev_private; - psb_irq_preinstall_islands(dev, OSPM_ALL_ISLANDS); - - INIT_WORK(&dev_priv->hotplug_work, psb_hotplug_work_func); - - REG_WRITE(PORT_HOTPLUG_EN, 0); - REG_WRITE(PORT_HOTPLUG_STAT, REG_READ(PORT_HOTPLUG_STAT)); -} - -/** - * FIXME: should I remove display irq enable here?? - */ -void psb_irq_preinstall_islands(struct drm_device *dev, int hw_islands) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - - /* PSB_DEBUG_ENTRY("\n"); */ - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - if (dev->vblank_enabled[0]) - dev_priv->vdc_irq_mask |= PSB_IRQ_PIPEA_EVENT; - if (dev->vblank_enabled[1]) - dev_priv->vdc_irq_mask |= PSB_IRQ_PIPEB_EVENT; - - if (hw_islands & OSPM_GRAPHICS_ISLAND) { - dev_priv->vdc_irq_mask |= _PSB_IRQ_SGX_FLAG; - } - - if (hw_islands & OSPM_VIDEO_DEC_ISLAND) - if (ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) - dev_priv->vdc_irq_mask |= _PSB_IRQ_MSVDX_FLAG; - - /* display hotplug */ - dev_priv->vdc_irq_mask |= PSB_IRQ_DISP_HOTSYNC; - - /* asle interrupt */ - dev_priv->vdc_irq_mask |= PSB_IRQ_ASLE; - - /*This register is safe even if display island is off*/ - /* unmask all */ - PSB_WVDC32(~dev_priv->vdc_irq_mask, PSB_INT_MASK_R); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); -} - -int psb_irq_postinstall(struct drm_device *dev) -{ - return psb_irq_postinstall_islands(dev, OSPM_ALL_ISLANDS); -} - -int psb_irq_postinstall_islands(struct drm_device *dev, int hw_islands) -{ - - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - u32 temp; - - /* PSB_DEBUG_ENTRY("\n"); */ - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - /*This register is safe even if display island is off*/ - PSB_WVDC32(dev_priv->vdc_irq_mask, PSB_INT_ENABLE_R); - - if (true/*powermgmt_is_hw_on(dev->pdev, PSB_DISPLAY_ISLAND)*/) { - if (dev->vblank_enabled[0]) - psb_enable_pipestat(dev_priv, 0, - PIPE_VBLANK_INTERRUPT_ENABLE); - else - psb_disable_pipestat(dev_priv, 0, - PIPE_VBLANK_INTERRUPT_ENABLE); - - if (dev->vblank_enabled[1]) - psb_enable_pipestat(dev_priv, 1, - PIPE_VBLANK_INTERRUPT_ENABLE); - else - psb_disable_pipestat(dev_priv, 1, - PIPE_VBLANK_INTERRUPT_ENABLE); - } - - /* Just enable all display ports for now. - * This can be optimized to only enable ports that really exists. - */ - temp = REG_READ(PORT_HOTPLUG_EN); - temp |= HDMIB_HOTPLUG_INT_EN; - temp |= HDMIC_HOTPLUG_INT_EN; - temp |= HDMID_HOTPLUG_INT_EN; - temp |= CRT_HOTPLUG_INT_EN; - REG_WRITE(PORT_HOTPLUG_EN, temp); - - if (hw_islands & OSPM_VIDEO_DEC_ISLAND) - if (true/*powermgmt_is_hw_on(dev->pdev, PSB_VIDEO_DEC_ISLAND)*/) - psb_msvdx_enableirq(dev); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); - - return 0; -} - -void psb_irq_uninstall(struct drm_device *dev) -{ - psb_irq_uninstall_islands(dev, OSPM_ALL_ISLANDS); -} - -void psb_irq_uninstall_islands(struct drm_device *dev, int hw_islands) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - - /* PSB_DEBUG_ENTRY("\n"); */ - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - if (true/*powermgmt_is_hw_on(dev->pdev, PSB_DISPLAY_ISLAND)*/) { - if (dev->vblank_enabled[0]) - psb_disable_pipestat(dev_priv, 0, - PIPE_VBLANK_INTERRUPT_ENABLE); - - if (dev->vblank_enabled[1]) - psb_disable_pipestat(dev_priv, 1, - PIPE_VBLANK_INTERRUPT_ENABLE); - - } - dev_priv->vdc_irq_mask &= _PSB_IRQ_SGX_FLAG | - _PSB_IRQ_MSVDX_FLAG; - - /*TODO: remove follwoing code*/ - if (hw_islands & OSPM_GRAPHICS_ISLAND) { - dev_priv->vdc_irq_mask &= ~_PSB_IRQ_SGX_FLAG; - } - - if ((hw_islands & OSPM_VIDEO_DEC_ISLAND)) - dev_priv->vdc_irq_mask &= ~_PSB_IRQ_MSVDX_FLAG; - - /*These two registers are safe even if display island is off*/ - PSB_WVDC32(~dev_priv->vdc_irq_mask, PSB_INT_MASK_R); - PSB_WVDC32(dev_priv->vdc_irq_mask, PSB_INT_ENABLE_R); - - wmb(); - - /*This register is safe even if display island is off*/ - PSB_WVDC32(PSB_RVDC32(PSB_INT_IDENTITY_R), PSB_INT_IDENTITY_R); - - if (hw_islands & OSPM_VIDEO_DEC_ISLAND) - if (ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) - psb_msvdx_disableirq(dev); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); -} - -void psb_irq_turn_on_dpst(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - u32 hist_reg; - u32 pwm_reg; - - PSB_WVDC32(BIT31, HISTOGRAM_LOGIC_CONTROL); - hist_reg = PSB_RVDC32(HISTOGRAM_LOGIC_CONTROL); - PSB_WVDC32(BIT31, HISTOGRAM_INT_CONTROL); - hist_reg = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - - PSB_WVDC32(0x80010100, PWM_CONTROL_LOGIC); - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); - PSB_WVDC32(pwm_reg | PWM_PHASEIN_ENABLE | PWM_PHASEIN_INT_ENABLE, - PWM_CONTROL_LOGIC); - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); - - /* pipe B */ - psb_enable_pipestat(dev_priv, 1, PIPE_DPST_EVENT_ENABLE); - - hist_reg = PSB_RVDC32(HISTOGRAM_INT_CONTROL); - PSB_WVDC32(hist_reg | HISTOGRAM_INT_CTRL_CLEAR,HISTOGRAM_INT_CONTROL); - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); - PSB_WVDC32(pwm_reg | 0x80010100 | PWM_PHASEIN_ENABLE, PWM_CONTROL_LOGIC); - -} - -int psb_irq_enable_dpst(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - - PSB_DEBUG_ENTRY("\n"); - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - /* enable DPST */ - /* DPST always on LVDS pipe B */ - mid_enable_pipe_event(dev_priv, 1); - psb_irq_turn_on_dpst(dev); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); - return 0; -} - -void psb_irq_turn_off_dpst(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - u32 pwm_reg; - - PSB_WVDC32(0x00000000, HISTOGRAM_INT_CONTROL); - - /* on pipe B */ - psb_disable_pipestat(dev_priv, 1, PIPE_DPST_EVENT_ENABLE); - - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); - PSB_WVDC32(pwm_reg & !(PWM_PHASEIN_INT_ENABLE), PWM_CONTROL_LOGIC); - pwm_reg = PSB_RVDC32(PWM_CONTROL_LOGIC); -} - -int psb_irq_disable_dpst(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - - PSB_DEBUG_ENTRY("\n"); - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - /* on pipe B */ - mid_disable_pipe_event(dev_priv, 1); - psb_irq_turn_off_dpst(dev); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); - - return 0; -} - -/* - * It is used to enable VBLANK interrupt - */ -int psb_enable_vblank(struct drm_device *dev, int pipe) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - uint32_t reg_val = 0; - uint32_t pipeconf_reg = psb_pipeconf(pipe); - - PSB_DEBUG_ENTRY("\n"); - - - reg_val = REG_READ(pipeconf_reg); - - if (!(reg_val & PIPEACONF_ENABLE)) - return -EINVAL; - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - mid_enable_pipe_event(dev_priv, pipe); - psb_enable_pipestat(dev_priv, pipe, PIPE_VBLANK_INTERRUPT_ENABLE); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); - - return 0; -} - -/* - * It is used to disable VBLANK interrupt - */ -void psb_disable_vblank(struct drm_device *dev, int pipe) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - unsigned long irqflags; - - PSB_DEBUG_ENTRY("\n"); - - spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags); - - mid_disable_pipe_event(dev_priv, pipe); - psb_disable_pipestat(dev_priv, pipe, PIPE_VBLANK_INTERRUPT_ENABLE); - - spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags); -} - -/* Called from drm generic code, passed a 'crtc', which - * we use as a pipe index - */ -u32 psb_get_vblank_counter(struct drm_device *dev, int pipe) -{ - uint32_t high_frame = PIPEAFRAMEHIGH; - uint32_t low_frame = PIPEAFRAMEPIXEL; - uint32_t pipeconf_reg = PIPEACONF; - uint32_t reg_val = 0; - uint32_t high1 = 0, high2 = 0, low = 0, count = 0; - - switch (pipe) { - case 0: - break; - case 1: - high_frame = PIPEBFRAMEHIGH; - low_frame = PIPEBFRAMEPIXEL; - pipeconf_reg = PIPEBCONF; - break; - case 2: - high_frame = PIPECFRAMEHIGH; - low_frame = PIPECFRAMEPIXEL; - pipeconf_reg = PIPECCONF; - break; - default: - DRM_ERROR("%s, invalded pipe. \n", __FUNCTION__); - return 0; - } - - reg_val = REG_READ(pipeconf_reg); - - if (!(reg_val & PIPEACONF_ENABLE)) { - DRM_ERROR("trying to get vblank count for disabled pipe %d\n", pipe); - goto psb_get_vblank_counter_exit; - } - - /* - * High & low register fields aren't synchronized, so make sure - * we get a low value that's stable across two reads of the high - * register. - */ - do { - high1 = ((REG_READ(high_frame) & PIPE_FRAME_HIGH_MASK) >> - PIPE_FRAME_HIGH_SHIFT); - low = ((REG_READ(low_frame) & PIPE_FRAME_LOW_MASK) >> - PIPE_FRAME_LOW_SHIFT); - high2 = ((REG_READ(high_frame) & PIPE_FRAME_HIGH_MASK) >> - PIPE_FRAME_HIGH_SHIFT); - } while (high1 != high2); - - count = (high1 << 8) | low; - -psb_get_vblank_counter_exit: - - return count; -} - -/* - * psb_intel_enable_asle - enable ASLE interrupt for OpRegion - */ -void psb_intel_enable_asle(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = (struct drm_psb_private *) dev->dev_private; - - psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); - psb_enable_pipestat(dev_priv, 1, PIPE_LEGACY_BLC_EVENT_ENABLE); -} - diff --git a/drivers/staging/cdv/drv/psb_irq.h b/drivers/staging/cdv/drv/psb_irq.h deleted file mode 100644 index c1ce91f..0000000 --- a/drivers/staging/cdv/drv/psb_irq.h +++ /dev/null @@ -1,49 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Benjamin Defnet - * Rajesh Poornachandran - * - **************************************************************************/ - -#ifndef _SYSIRQ_H_ -#define _SYSIRQ_H_ - -#include - -bool sysirq_init(struct drm_device *dev); -void sysirq_uninit(struct drm_device *dev); - -void psb_irq_preinstall(struct drm_device *dev); -int psb_irq_postinstall(struct drm_device *dev); -void psb_irq_uninstall(struct drm_device *dev); -irqreturn_t psb_irq_handler(DRM_IRQ_ARGS); - -void psb_irq_preinstall_islands(struct drm_device *dev, int hw_islands); -int psb_irq_postinstall_islands(struct drm_device *dev, int hw_islands); -void psb_irq_uninstall_islands(struct drm_device *dev, int hw_islands); - -int psb_irq_enable_dpst(struct drm_device *dev); -int psb_irq_disable_dpst(struct drm_device *dev); -void psb_irq_turn_on_dpst(struct drm_device *dev); -void psb_irq_turn_off_dpst(struct drm_device *dev); -int psb_enable_vblank(struct drm_device *dev, int pipe); -void psb_disable_vblank(struct drm_device *dev, int pipe); -u32 psb_get_vblank_counter(struct drm_device *dev, int pipe); - -#endif //_SYSIRQ_H_ diff --git a/drivers/staging/cdv/drv/psb_powermgmt.c b/drivers/staging/cdv/drv/psb_powermgmt.c deleted file mode 100644 index cfe1395..0000000 --- a/drivers/staging/cdv/drv/psb_powermgmt.c +++ /dev/null @@ -1,875 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Authors: - * Benjamin Defnet - * Rajesh Poornachandran - * - */ -#include "psb_powermgmt.h" -#include "psb_drv.h" -#include "psb_intel_reg.h" -#include "psb_msvdx.h" -#include -#include -#include - -extern IMG_UINT32 gui32SGXDeviceID; -extern IMG_UINT32 gui32MRSTDisplayDeviceID; -extern IMG_UINT32 gui32MRSTMSVDXDeviceID; -extern IMG_UINT32 gui32MRSTTOPAZDeviceID; - -struct drm_device *gpDrmDevice = NULL; -static struct mutex g_ospm_mutex; -static bool gbSuspendInProgress = false; -static bool gbResumeInProgress = false; -static int g_hw_power_status_mask; -static atomic_t g_graphics_access_count; -static atomic_t g_videodec_access_count; -int allow_runtime_pm = 0; - -void ospm_power_island_up(int hw_islands); -void ospm_power_island_down(int hw_islands); -static bool gbSuspended = false; -bool gbgfxsuspended = false; -extern int enter_dsr; - -#if 1 -static int ospm_runtime_check_msvdx_hw_busy(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int ret = 1; - - if (!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) { - /*printk(KERN_ALERT "%s VIDEO DEC HW is not on\n", __func__); */ - ret = -1; - goto out; - } - - msvdx_priv->msvdx_hw_busy = REG_READ(0x20D0) & (0x1 << 9); - if (psb_check_msvdx_idle(dev)){ - /*printk(KERN_ALERT "%s video decode hw busy\n", __func__); */ - ret = 1; - } - else { - /*printk(KERN_ALERT "%s video decode hw idle\n", __func__); */ - ret = 0; - } -out: - return ret; -} - -static int ospm_runtime_pm_msvdx_suspend(struct drm_device *dev) -{ - int ret = 0; - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - /*printk(KERN_ALERT "enter %s\n", __func__);*/ - - if (!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) { - /*printk(KERN_ALERT "%s VIDEO DEC HW is not on\n", __func__);*/ - goto out; - } - - if (atomic_read(&g_videodec_access_count)) { - /*printk(KERN_ALERT "%s videodec access count exit\n", __func__);*/ - ret = -1; - goto out; - } - - msvdx_priv->msvdx_hw_busy = REG_READ(0x20D0) & (0x1 << 9); - if (psb_check_msvdx_idle(dev)){ - /*printk(KERN_ALERT "%s video decode hw busy exit\n", __func__);*/ - ret = -2; - goto out; - } - - MSVDX_NEW_PMSTATE(dev, msvdx_priv, PSB_PMSTATE_POWERDOWN); - psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_DEC_ISLAND); - psb_msvdx_save_context(dev); - ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); - /*printk(KERN_ALERT "%s done\n", __func__);*/ -out: - return ret; -} - -static int ospm_runtime_pm_msvdx_resume(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - /*printk(KERN_ALERT "ospm_runtime_pm_msvdx_resume\n");*/ - - MSVDX_NEW_PMSTATE(dev, msvdx_priv, PSB_PMSTATE_POWERUP); - - psb_msvdx_restore_context(dev); - - return 0; -} - -#endif - -#ifdef FIX_OSPM_POWER_DOWN -void ospm_apm_power_down_msvdx(struct drm_device *dev) -{ - return; - mutex_lock(&g_ospm_mutex); - - if (atomic_read(&g_videodec_access_count)) - goto out; - if (psb_check_msvdx_idle(dev)) - goto out; - - gbSuspendInProgress = true; - psb_msvdx_save_context(dev); -#ifdef FIXME_MRST_VIDEO_DEC - ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); -#endif - gbSuspendInProgress = false; -out: - mutex_unlock(&g_ospm_mutex); - return; -} - -#else -void ospm_apm_power_down_msvdx(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - mutex_lock(&g_ospm_mutex); - if (!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) - goto out; - - if (atomic_read(&g_videodec_access_count)) - goto out; - if (psb_check_msvdx_idle(dev)) - goto out; - - gbSuspendInProgress = true; - psb_msvdx_save_context(dev); - ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); - gbSuspendInProgress = false; - MSVDX_NEW_PMSTATE(dev, msvdx_priv, PSB_PMSTATE_POWERDOWN); -out: - mutex_unlock(&g_ospm_mutex); - return; -} - -#endif -/* - * ospm_power_init - * - * Description: Initialize this ospm power management module - */ -void ospm_power_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = (struct drm_psb_private *)dev->dev_private; - - gpDrmDevice = dev; - - if (IS_CDV(dev)) - { - dev_priv->apm_reg = CDV_MSG_READ32(PSB_PUNIT_PORT, PSB_APMBA); - dev_priv->ospm_base = CDV_MSG_READ32(PSB_PUNIT_PORT, PSB_OSPMBA); - } - - DRM_DEBUG("CDV: power apm io base 0x%x, ospm io base 0x%x\n", dev_priv->apm_reg, - dev_priv->ospm_base); - - dev_priv->apm_base = dev_priv->apm_reg & 0xffff; - dev_priv->ospm_base &= 0xffff; - - mutex_init(&g_ospm_mutex); - g_hw_power_status_mask = OSPM_GRAPHICS_ISLAND | OSPM_VIDEO_DEC_ISLAND; - atomic_set(&g_graphics_access_count, 0); - atomic_set(&g_videodec_access_count, 0); - -#ifdef OSPM_STAT - dev_priv->graphics_state = PSB_PWR_STATE_ON; - dev_priv->gfx_last_mode_change = jiffies; - dev_priv->gfx_on_time = 0; - dev_priv->gfx_off_time = 0; -#endif -} - -/* - * ospm_power_uninit - * - * Description: Uninitialize this ospm power management module - */ -void ospm_power_uninit(void) -{ - mutex_destroy(&g_ospm_mutex); - pm_runtime_disable(&gpDrmDevice->pdev->dev); - pm_runtime_set_suspended(&gpDrmDevice->pdev->dev); -} - -/* - * helper function to turn on/off outputs. - */ -static void ospm_output_dpms(struct drm_device *dev, bool on) -{ - int state = on ? DRM_MODE_DPMS_ON : DRM_MODE_DPMS_OFF; - struct drm_connector *connector; - - list_for_each_entry(connector, &dev->mode_config.connector_list, head) - connector->funcs->dpms(connector, state); -} - -/* - * powermgmt_suspend_display - * - * Description: Suspend the display hardware saving state and disabling - * as necessary. - */ -void ospm_suspend_display(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - - DRM_DEBUG("\n"); - - pci_read_config_byte(dev->pdev, 0xF4, &dev_priv->saveLBB); - - mutex_lock(&dev->struct_mutex); - - dev_priv->saveDSPCLK_GATE_D = REG_READ(DSPCLK_GATE_D); - dev_priv->saveRAMCLK_GATE_D = REG_READ(RAMCLK_GATE_D); - - dev_priv->saveDSPARB = REG_READ(DSPARB); - dev_priv->saveDSPFW[0] = REG_READ(DSPFW1); - dev_priv->saveDSPFW[1] = REG_READ(DSPFW2); - dev_priv->saveDSPFW[2] = REG_READ(DSPFW3); - dev_priv->saveDSPFW[3] = REG_READ(DSPFW4); - dev_priv->saveDSPFW[4] = REG_READ(DSPFW5); - dev_priv->saveDSPFW[5] = REG_READ(DSPFW6); - - dev_priv->saveADPA = REG_READ(ADPA); - - dev_priv->savePP_CONTROL = REG_READ(PP_CONTROL); - dev_priv->savePFIT_PGM_RATIOS = REG_READ(PFIT_PGM_RATIOS); - dev_priv->saveBLC_PWM_CTL = REG_READ(BLC_PWM_CTL); - dev_priv->saveBLC_PWM_CTL2 = REG_READ(BLC_PWM_CTL2); - dev_priv->saveLVDS = REG_READ(LVDS); - - dev_priv->savePFIT_CONTROL = REG_READ(PFIT_CONTROL); - - dev_priv->savePP_ON_DELAYS = REG_READ(PP_ON_DELAYS); - dev_priv->savePP_OFF_DELAYS = REG_READ(PP_OFF_DELAYS); - dev_priv->savePP_DIVISOR = REG_READ(PP_DIVISOR); - - dev_priv->saveVGACNTRL = REG_READ(VGACNTRL); - - dev_priv->saveIER = REG_READ(PSB_INT_ENABLE_R); - dev_priv->saveIMR = REG_READ(PSB_INT_MASK_R); - - ospm_output_dpms(dev, false); - - mutex_unlock(&dev->struct_mutex); -} - -/* - * ospm_resume_display - * - * Description: Resume the display hardware restoring state and enabling - * as necessary. - */ -void ospm_resume_display(struct pci_dev *pdev) -{ - struct drm_device *dev = pci_get_drvdata(pdev); - struct drm_psb_private *dev_priv = dev->dev_private; - u32 temp; - - DRM_DEBUG("\n"); - - /* just restore page table ptr */ - PSB_WVDC32(dev_priv->pg->pge_ctl | _PSB_PGETBL_ENABLED, - PSB_PGETBL_CTL); - (void) PSB_RVDC32(PSB_PGETBL_CTL); - - pci_write_config_byte(dev->pdev, 0xF4, dev_priv->saveLBB); - - mutex_lock(&dev->struct_mutex); - - REG_WRITE(DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D); - REG_WRITE(RAMCLK_GATE_D, dev_priv->saveRAMCLK_GATE_D); - - /* BIOS does below anyway */ - REG_WRITE(DPIO_CFG, 0); - REG_WRITE(DPIO_CFG, DPIO_MODE_SELECT_0 | DPIO_CMN_RESET_N); - - temp = REG_READ(DPLL_A); - if ((temp & DPLL_SYNCLOCK_ENABLE) == 0) { - REG_WRITE(DPLL_A, temp | DPLL_SYNCLOCK_ENABLE); - REG_READ(DPLL_A); - } - - temp = REG_READ(DPLL_B); - if ((temp & DPLL_SYNCLOCK_ENABLE) == 0) { - REG_WRITE(DPLL_B, temp | DPLL_SYNCLOCK_ENABLE); - REG_READ(DPLL_B); - } - - udelay(500); - - REG_WRITE(DSPFW1, dev_priv->saveDSPFW[0]); - REG_WRITE(DSPFW2, dev_priv->saveDSPFW[1]); - REG_WRITE(DSPFW3, dev_priv->saveDSPFW[2]); - REG_WRITE(DSPFW4, dev_priv->saveDSPFW[3]); - REG_WRITE(DSPFW5, dev_priv->saveDSPFW[4]); - REG_WRITE(DSPFW6, dev_priv->saveDSPFW[5]); - - REG_WRITE(DSPARB, dev_priv->saveDSPARB); - REG_WRITE(ADPA, dev_priv->saveADPA); - - REG_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2); - REG_WRITE(LVDS, dev_priv->saveLVDS); - REG_WRITE(PFIT_CONTROL, dev_priv->savePFIT_CONTROL); - REG_WRITE(PFIT_PGM_RATIOS, dev_priv->savePFIT_PGM_RATIOS); - REG_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL); - REG_WRITE(PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS); - REG_WRITE(PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS); - REG_WRITE(PP_DIVISOR, dev_priv->savePP_DIVISOR); - REG_WRITE(PP_CONTROL, dev_priv->savePP_CONTROL); - - REG_WRITE(VGACNTRL, dev_priv->saveVGACNTRL); - - REG_WRITE(PSB_INT_ENABLE_R, dev_priv->saveIER); - REG_WRITE(PSB_INT_MASK_R, dev_priv->saveIMR); - - mutex_unlock(&dev->struct_mutex); - - drm_mode_config_reset(dev); - - ospm_output_dpms(dev, true); - - /* Resume the modeset for every activated CRTC */ - drm_helper_resume_force_mode(dev); -} - -/* - * ospm_suspend_pci - * - * Description: Suspend the pci device saving state and disabling - * as necessary. - */ -static void ospm_suspend_pci(struct pci_dev *pdev) -{ - - if (gbSuspended) - return; - - DRM_DEBUG("\n"); - - pci_save_state(pdev); - - pci_disable_device(pdev); - pci_set_power_state(pdev, PCI_D3hot); - - gbSuspended = true; - gbgfxsuspended = true; -} - -/* - * ospm_resume_pci - * - * Description: Resume the pci device restoring state and enabling - * as necessary. - */ -static bool ospm_resume_pci(struct pci_dev *pdev) -{ - int ret = 0; - - if (!gbSuspended) - return true; - - DRM_DEBUG("\n"); - - pci_set_power_state(pdev, PCI_D0); - pci_restore_state(pdev); - - ret = pci_enable_device(pdev); - - if (ret != 0) - DRM_ERROR("ospm_resume_pci: pci_enable_device failed: %d\n", ret); - else - gbSuspended = false; - - pci_set_master(pdev); - - return !gbSuspended; -} - -/* - * ospm_power_suspend - * - * Description: OSPM is telling our driver to suspend so save state - * and power down all hardware. - */ -int ospm_power_suspend(struct pci_dev *pdev, pm_message_t state) -{ - int ret = 0; - int graphics_access_count; - int videodec_access_count; - bool suspend_pci = true; - - if(gbSuspendInProgress || gbResumeInProgress) - { - DRM_ERROR("OSPM_GFX_DPK: %s system BUSY \n", __func__); - return -EBUSY; - } - - mutex_lock(&g_ospm_mutex); - - if (!gbSuspended) { - graphics_access_count = atomic_read(&g_graphics_access_count); - videodec_access_count = atomic_read(&g_videodec_access_count); - - if (!ret) { - gbSuspendInProgress = true; - - ospm_suspend_display(gpDrmDevice); - - drm_irq_uninstall(gpDrmDevice); - - /* Turn off PVR service and power */ - PVRSRVDriverSuspend(gpDrmDevice, state); - - /* FIXME: video driver support for Linux Runtime PM */ - if (ospm_runtime_pm_msvdx_suspend(gpDrmDevice) != 0) { - suspend_pci = false; - } - - if (suspend_pci == true) { - ospm_suspend_pci(pdev); - } - gbSuspendInProgress = false; - } else { - DRM_DEBUG("ospm_power_suspend: device busy: graphics %d videodec %d\n", - graphics_access_count, videodec_access_count); - } - } - - - mutex_unlock(&g_ospm_mutex); - return ret; -} - -static void ospm_power_island_wait(u32 reg, u32 mask, u32 target) -{ - int loop_count = 5; - u32 pwr_sts; - - while (loop_count--) { - pwr_sts = inl(reg); - - if ((pwr_sts & mask) == target) - break; - else - udelay(10); - } -} - -/* - * ospm_power_island_up - * - * Description: Restore power to the specified island(s) (powergating) - */ -void ospm_power_island_up(int hw_islands) -{ - u32 pwr_cnt = 0; - u32 pwr_mask = 0; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) gpDrmDevice->dev_private; - - if (hw_islands & ~(OSPM_GRAPHICS_ISLAND | OSPM_VIDEO_DEC_ISLAND)) - return; - - pwr_cnt = inl(dev_priv->apm_base + PSB_APM_CMD); - - pwr_mask = 0; - - if (hw_islands & OSPM_GRAPHICS_ISLAND) { - pwr_cnt &= ~PSB_PWRGT_GFX_MASK; - /* Only the BIT1 is used */ - pwr_cnt |= PSB_PWRGT_GFX_ON; - pwr_mask = PSB_PWRGT_GFX_MASK; - -#ifdef OSPM_STAT - if (dev_priv->graphics_state == PSB_PWR_STATE_OFF) { - dev_priv->gfx_off_time += (jiffies - dev_priv->gfx_last_mode_change) * 1000 / HZ; - dev_priv->gfx_last_mode_change = jiffies; - dev_priv->graphics_state = PSB_PWR_STATE_ON; - dev_priv->gfx_on_cnt++; - } -#endif - outl(pwr_cnt, dev_priv->apm_base + PSB_APM_CMD); - ospm_power_island_wait(dev_priv->apm_base + PSB_APM_STS, pwr_mask, PSB_PWRGT_GFX_D0); - } - - if (hw_islands & OSPM_VIDEO_DEC_ISLAND) { - pwr_cnt &= ~PSB_PWRGT_VID_DEC_MASK; - pwr_cnt |= PSB_PWRGT_VID_DEC_ON; - pwr_mask = PSB_PWRGT_VID_DEC_MASK; - - outl(pwr_cnt, dev_priv->apm_base + PSB_APM_CMD); - ospm_power_island_wait(dev_priv->apm_base + PSB_APM_STS, pwr_mask, PSB_PWRGT_VID_DEC_D0); - } - - g_hw_power_status_mask |= hw_islands; -} - -/* - * ospm_power_resume - */ -int ospm_power_resume(struct pci_dev *pdev) -{ - if(gbSuspendInProgress || gbResumeInProgress) - { - DRM_ERROR("OSPM_GFX_DPK: %s hw_island: Suspend || gbResumeInProgress!!!! \n", __func__); - return 0; - } - - mutex_lock(&g_ospm_mutex); - - DRM_DEBUG("\n"); - - gbResumeInProgress = true; - - ospm_resume_pci(pdev); - - /* resume PVR power island and service */ - PVRSRVDriverResume(gpDrmDevice); - - ospm_resume_display(gpDrmDevice->pdev); - - drm_irq_install(gpDrmDevice); - - gbResumeInProgress = false; - - mutex_unlock(&g_ospm_mutex); - - return 0; -} - - -/* - * ospm_power_island_down - * - * Description: Cut power to the specified island(s) (powergating) - */ -void ospm_power_island_down(int islands) -{ - u32 pwr_cnt = 0; - u32 pwr_mask = 0; - - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) gpDrmDevice->dev_private; - - if (islands & ~(OSPM_GRAPHICS_ISLAND | OSPM_VIDEO_DEC_ISLAND)) - return; - - pwr_cnt = inl(dev_priv->apm_base + PSB_APM_CMD); - - g_hw_power_status_mask &= ~islands; - - if (islands & OSPM_GRAPHICS_ISLAND) { - /* Turn off the SGX Power Island */ - pwr_cnt &= ~PSB_PWRGT_GFX_MASK; - pwr_cnt |= PSB_PWRGT_GFX_OFF; - pwr_mask = PSB_PWRGT_GFX_MASK; - -#ifdef OSPM_STAT - if (dev_priv->graphics_state == PSB_PWR_STATE_ON) { - dev_priv->gfx_on_time += (jiffies - dev_priv->gfx_last_mode_change) * 1000 / HZ; - dev_priv->gfx_last_mode_change = jiffies; - dev_priv->graphics_state = PSB_PWR_STATE_OFF; - dev_priv->gfx_off_cnt++; - } -#endif - outl(pwr_cnt, dev_priv->apm_base + PSB_APM_CMD); - - ospm_power_island_wait(dev_priv->apm_base + PSB_APM_STS, pwr_mask, PSB_PWRGT_GFX_D3); - - } - - if (islands & OSPM_VIDEO_DEC_ISLAND) { - /* Turn off the MSVDX power island */ - pwr_cnt &= ~PSB_PWRGT_VID_DEC_MASK; - pwr_cnt |= PSB_PWRGT_VID_DEC_OFF; - pwr_mask = PSB_PWRGT_VID_DEC_MASK; - - outl(pwr_cnt, dev_priv->apm_base + PSB_APM_CMD); - - ospm_power_island_wait(dev_priv->apm_base + PSB_APM_STS, pwr_mask, PSB_PWRGT_VID_DEC_D3); - } -} - - -/* - * ospm_power_is_hw_on - * - * Description: do an instantaneous check for if the specified islands - * are on. Only use this in cases where you know the g_state_change_mutex - * is already held such as in irq install/uninstall. Otherwise, use - * ospm_power_using_hw_begin(). - */ -bool ospm_power_is_hw_on(int hw_islands) -{ - return ((g_hw_power_status_mask & hw_islands) == hw_islands) ? true:false; -} - -/* - * ospm_power_using_hw_begin - * - * Description: Notify PowerMgmt module that you will be accessing the - * specified island's hw so don't power it off. If force_on is true, - * this will power on the specified island if it is off. - * Otherwise, this will return false and the caller is expected to not - * access the hw. - * - * NOTE *** If this is called from and interrupt handler or other atomic - * context, then it will return false if we are in the middle of a - * power state transition and the caller will be expected to handle that - * even if force_on is set to true. - */ -bool ospm_power_using_hw_begin(int hw_island, UHBUsage usage) -{ - bool ret = true; - bool island_is_off = false; - bool b_atomic = (in_interrupt() || in_atomic()); - bool locked = true; - struct pci_dev *pdev = gpDrmDevice->pdev; - bool force_on = usage ? true: false; - /*quick path, not 100% race safe, but should be enough comapre to current other code in this file */ - if (!force_on) { - if (hw_island & (OSPM_ALL_ISLANDS & ~g_hw_power_status_mask)) - return false; - else { - locked = false; - goto increase_count; - } - } - -#ifdef CONFIG_PM_RUNTIME - /* Anyway, increment pm_runtime_refcount firstly. - * If the return value is false, decrease pm_rumtime_refcount. - */ - pm_runtime_get(&pdev->dev); -#endif - if (!b_atomic) - mutex_lock(&g_ospm_mutex); - - island_is_off = hw_island & (OSPM_ALL_ISLANDS & ~g_hw_power_status_mask); - - if (b_atomic && (gbSuspendInProgress || gbResumeInProgress || gbSuspended) && force_on && island_is_off) - ret = false; - - if (ret && island_is_off && !force_on) - ret = false; - - if (ret && island_is_off && force_on) { - gbResumeInProgress = true; - - ret = ospm_resume_pci(pdev); - - if (ret) { - switch(hw_island) - { - case OSPM_GRAPHICS_ISLAND: - ospm_power_island_up(OSPM_GRAPHICS_ISLAND); - psb_irq_preinstall_islands(gpDrmDevice, OSPM_GRAPHICS_ISLAND); - psb_irq_postinstall_islands(gpDrmDevice, OSPM_GRAPHICS_ISLAND); - break; - case OSPM_VIDEO_DEC_ISLAND: - if(!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) { - /* printk(KERN_ALERT "%s power on video decode\n", __func__); */ - ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); - ospm_runtime_pm_msvdx_resume(gpDrmDevice); - psb_irq_preinstall_islands(gpDrmDevice, OSPM_VIDEO_DEC_ISLAND); - psb_irq_postinstall_islands(gpDrmDevice, OSPM_VIDEO_DEC_ISLAND); - } - else{ - /* printk(KERN_ALERT "%s video decode is already on\n", __func__); */ - } - - break; - default: - DRM_ERROR("unknown island !\n"); - break; - } - - } - - if (!ret) - DRM_ERROR("ospm_power_using_hw_begin: forcing on %d failed\n", hw_island); - - gbResumeInProgress = false; - } -increase_count: - if (ret) { - switch(hw_island) - { - case OSPM_GRAPHICS_ISLAND: - atomic_inc(&g_graphics_access_count); - break; - case OSPM_VIDEO_DEC_ISLAND: - atomic_inc(&g_videodec_access_count); - break; - } - } -#ifdef CONFIG_PM_RUNTIME - else { - /* decrement pm_runtime_refcount */ - pm_runtime_put(&pdev->dev); - } -#endif - - if (!b_atomic && locked) - mutex_unlock(&g_ospm_mutex); - - return ret; -} - - -/* - * ospm_power_using_hw_end - * - * Description: Notify PowerMgmt module that you are done accessing the - * specified island's hw so feel free to power it off. Note that this - * function doesn't actually power off the islands. - */ -void ospm_power_using_hw_end(int hw_island) -{ - switch(hw_island) - { - case OSPM_GRAPHICS_ISLAND: - atomic_dec(&g_graphics_access_count); - break; - case OSPM_VIDEO_DEC_ISLAND: - atomic_dec(&g_videodec_access_count); - break; - } - -#ifdef CONFIG_PM_RUNTIME - /* decrement runtime pm ref count */ - pm_runtime_put(&gpDrmDevice->pdev->dev); -#endif - - WARN_ON(atomic_read(&g_graphics_access_count) < 0); - WARN_ON(atomic_read(&g_videodec_access_count) < 0); -} - -int ospm_runtime_pm_allow(struct drm_device * dev) -{ - struct drm_psb_private * dev_priv = dev->dev_private; - - PSB_DEBUG_ENTRY("%s\n", __FUNCTION__); - - if(dev_priv->rpm_enabled) - return 0; - - return 0; -} - -void ospm_runtime_pm_forbid(struct drm_device * dev) -{ - struct drm_psb_private * dev_priv = dev->dev_private; - - DRM_INFO("%s\n", __FUNCTION__); - - pm_runtime_forbid(&dev->pdev->dev); - dev_priv->rpm_enabled = 0; -} - -int psb_runtime_suspend(struct device *dev) -{ - pm_message_t state; - int ret = 0; - state.event = 0; - - DRM_DEBUG("\n"); - - if (atomic_read(&g_graphics_access_count) - || atomic_read(&g_videodec_access_count)){ - DRM_ERROR("OSPM_GFX_DPK: GFX: %d VED: %d DSR: %d \n", atomic_read(&g_graphics_access_count), - atomic_read(&g_videodec_access_count), 0); - return -EBUSY; - } - else - ret = ospm_power_suspend(gpDrmDevice->pdev, state); - - return ret; -} - -int psb_runtime_resume(struct device *dev) -{ - /* Notify HDMI Audio sub-system about the resume. */ -#ifdef CONFIG_SND_INTELMID_HDMI_AUDIO - struct drm_psb_private* dev_priv = gpDrmDevice->dev_private; - - if(dev_priv->had_pvt_data) - dev_priv->had_interface->resume(dev_priv->had_pvt_data); -#endif - - /* Nop for GFX */ - return 0; -} - -int psb_runtime_idle(struct device *dev) -{ -#ifdef CONFIG_SND_INTELMID_HDMI_AUDIO - struct drm_psb_private* dev_priv = gpDrmDevice->dev_private; - int hdmi_audio_busy = 0; - pm_event_t hdmi_audio_event; -#endif - -#if 1 - int msvdx_hw_busy = 0; - - msvdx_hw_busy = ospm_runtime_check_msvdx_hw_busy(gpDrmDevice); -#endif - -#ifdef CONFIG_SND_INTELMID_HDMI_AUDIO - if(dev_priv->had_pvt_data){ - hdmi_audio_event.event = 0; - hdmi_audio_busy = dev_priv->had_interface->suspend(dev_priv->had_pvt_data, hdmi_audio_event); - } -#endif - /*printk (KERN_ALERT "lvds:%d,mipi:%d\n", dev_priv->is_lvds_on, dev_priv->is_mipi_on);*/ - if (atomic_read(&g_graphics_access_count) - || atomic_read(&g_videodec_access_count) -#ifdef CONFIG_SND_INTELMID_HDMI_AUDIO - || hdmi_audio_busy -#endif - -#if 1 - || (msvdx_hw_busy == 1)) -#endif - return 1; - else - return 0; -} - diff --git a/drivers/staging/cdv/drv/psb_powermgmt.h b/drivers/staging/cdv/drv/psb_powermgmt.h deleted file mode 100644 index 11f9154..0000000 --- a/drivers/staging/cdv/drv/psb_powermgmt.h +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Authors: - * Benjamin Defnet - * Rajesh Poornachandran - * - */ -#ifndef _PSB_POWERMGMT_H_ -#define _PSB_POWERMGMT_H_ - -#include -#include - -#define OSPM_GRAPHICS_ISLAND 0x1 -#define OSPM_VIDEO_DEC_ISLAND 0x2 -#define OSPM_VIDEO_ENC_ISLAND 0x4 -#define OSPM_ALL_ISLANDS 0x7 - -/* IPC message and command defines used to enable/disable mipi panel voltages */ -#define IPC_MSG_PANEL_ON_OFF 0xE9 -#define IPC_CMD_PANEL_ON 1 -#define IPC_CMD_PANEL_OFF 0 - -typedef enum _UHBUsage -{ - OSPM_UHB_ONLY_IF_ON = 0, - OSPM_UHB_FORCE_POWER_ON, -} UHBUsage; - -//extern int psb_check_msvdx_idle(struct drm_device *dev); -//extern int lnc_check_topaz_idle(struct drm_device *dev); -/* Use these functions to power down video HW for D0i3 purpose */ -void ospm_apm_power_down_msvdx(struct drm_device *dev); -void ospm_apm_power_down_topaz(struct drm_device *dev); - -void ospm_power_init(struct drm_device *dev); -void ospm_power_uninit(void); - - -/* - * OSPM will call these functions - */ -int ospm_power_suspend(struct pci_dev *pdev, pm_message_t state); -int ospm_power_resume(struct pci_dev *pdev); - -/* - * These are the functions the driver should use to wrap all hw access - * (i.e. register reads and writes) - */ -bool ospm_power_using_hw_begin(int hw_island, UHBUsage usage); -void ospm_power_using_hw_end(int hw_island); - -/* - * Use this function to do an instantaneous check for if the hw is on. - * Only use this in cases where you know the g_state_change_mutex - * is already held such as in irq install/uninstall and you need to - * prevent a deadlock situation. Otherwise use ospm_power_using_hw_begin(). - */ -bool ospm_power_is_hw_on(int hw_islands); - -/* - * Power up/down different hw component rails/islands - */ -void ospm_power_island_down(int hw_islands); -void ospm_power_island_up(int hw_islands); -void ospm_suspend_graphics(void); -/* - * GFX-Runtime PM callbacks - */ -int psb_runtime_suspend(struct device *dev); -int psb_runtime_resume(struct device *dev); -int psb_runtime_idle(struct device *dev); -int ospm_runtime_pm_allow(struct drm_device * dev); -void ospm_runtime_pm_forbid(struct drm_device * dev); - - -#endif /*_PSB_POWERMGMT_H_*/ diff --git a/drivers/staging/cdv/drv/psb_pvr_glue.c b/drivers/staging/cdv/drv/psb_pvr_glue.c deleted file mode 100644 index d20b676..0000000 --- a/drivers/staging/cdv/drv/psb_pvr_glue.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "psb_pvr_glue.h" - -/** - * FIXME: should NOT use these file under env/linux directly - */ -#include "mm.h" - -int psb_get_meminfo_by_handle(IMG_HANDLE hKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; - PVRSRV_PER_PROCESS_DATA *psPerProc = IMG_NULL; - PVRSRV_ERROR eError; - - psPerProc = PVRSRVPerProcessData(OSGetCurrentProcessIDKM()); - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID *)&psKernelMemInfo, - hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) { - DRM_ERROR("Cannot find kernel meminfo for handle 0x%x\n", - (IMG_UINT32)hKernelMemInfo); - return -EINVAL; - } - - *ppsKernelMemInfo = psKernelMemInfo; - - DRM_DEBUG("Got Kernel MemInfo for handle 0x%x\n", - (IMG_UINT32)hKernelMemInfo); - return 0; -} - -IMG_UINT32 psb_get_tgid(void) -{ - return OSGetCurrentProcessIDKM(); -} - -int psb_get_pages_by_mem_handle(IMG_HANDLE hOSMemHandle, struct page ***pages) -{ - LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - struct page **page_list; - - if (psLinuxMemArea->eAreaType != LINUX_MEM_AREA_ALLOC_PAGES) { - DRM_ERROR("MemArea type is not LINUX_MEM_AREA_ALLOC_PAGES\n"); - return -EINVAL; - } - - page_list = psLinuxMemArea->uData.sPageList.pvPageList; - if (!page_list) { - DRM_DEBUG("Page List is NULL\n"); - return -ENOMEM; - } - - *pages = page_list; - return 0; -} diff --git a/drivers/staging/cdv/drv/psb_pvr_glue.h b/drivers/staging/cdv/drv/psb_pvr_glue.h deleted file mode 100644 index 7c2762c..0000000 --- a/drivers/staging/cdv/drv/psb_pvr_glue.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "psb_drv.h" -#include "services_headers.h" - -extern int psb_get_meminfo_by_handle(IMG_HANDLE hKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo); -extern IMG_UINT32 psb_get_tgid(void); -extern int psb_get_pages_by_mem_handle(IMG_HANDLE hOSMemHandle, - struct page ***pages); diff --git a/drivers/staging/cdv/drv/psb_reg.h b/drivers/staging/cdv/drv/psb_reg.h deleted file mode 100644 index b9b01ae..0000000 --- a/drivers/staging/cdv/drv/psb_reg.h +++ /dev/null @@ -1,596 +0,0 @@ -/************************************************************************** - * - * Copyright (c) (2005-2007) Imagination Technologies Limited. - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.. - * - **************************************************************************/ - -#ifndef _PSB_REG_H_ -#define _PSB_REG_H_ - -#define PSB_CR_CLKGATECTL 0x0000 -#define _PSB_C_CLKGATECTL_AUTO_MAN_REG (1 << 24) -#define _PSB_C_CLKGATECTL_USE_CLKG_SHIFT (20) -#define _PSB_C_CLKGATECTL_USE_CLKG_MASK (0x3 << 20) -#define _PSB_C_CLKGATECTL_DPM_CLKG_SHIFT (16) -#define _PSB_C_CLKGATECTL_DPM_CLKG_MASK (0x3 << 16) -#define _PSB_C_CLKGATECTL_TA_CLKG_SHIFT (12) -#define _PSB_C_CLKGATECTL_TA_CLKG_MASK (0x3 << 12) -#define _PSB_C_CLKGATECTL_TSP_CLKG_SHIFT (8) -#define _PSB_C_CLKGATECTL_TSP_CLKG_MASK (0x3 << 8) -#define _PSB_C_CLKGATECTL_ISP_CLKG_SHIFT (4) -#define _PSB_C_CLKGATECTL_ISP_CLKG_MASK (0x3 << 4) -#define _PSB_C_CLKGATECTL_2D_CLKG_SHIFT (0) -#define _PSB_C_CLKGATECTL_2D_CLKG_MASK (0x3 << 0) -#define _PSB_C_CLKGATECTL_CLKG_ENABLED (0) -#define _PSB_C_CLKGATECTL_CLKG_DISABLED (1) -#define _PSB_C_CLKGATECTL_CLKG_AUTO (2) - -#define PSB_CR_CORE_ID 0x0010 -#define _PSB_CC_ID_ID_SHIFT (16) -#define _PSB_CC_ID_ID_MASK (0xFFFF << 16) -#define _PSB_CC_ID_CONFIG_SHIFT (0) -#define _PSB_CC_ID_CONFIG_MASK (0xFFFF << 0) - -#define PSB_CR_CORE_REVISION 0x0014 -#define _PSB_CC_REVISION_DESIGNER_SHIFT (24) -#define _PSB_CC_REVISION_DESIGNER_MASK (0xFF << 24) -#define _PSB_CC_REVISION_MAJOR_SHIFT (16) -#define _PSB_CC_REVISION_MAJOR_MASK (0xFF << 16) -#define _PSB_CC_REVISION_MINOR_SHIFT (8) -#define _PSB_CC_REVISION_MINOR_MASK (0xFF << 8) -#define _PSB_CC_REVISION_MAINTENANCE_SHIFT (0) -#define _PSB_CC_REVISION_MAINTENANCE_MASK (0xFF << 0) - -#define PSB_CR_DESIGNER_REV_FIELD1 0x0018 - -#define PSB_CR_SOFT_RESET 0x0080 -#define _PSB_CS_RESET_TSP_RESET (1 << 6) -#define _PSB_CS_RESET_ISP_RESET (1 << 5) -#define _PSB_CS_RESET_USE_RESET (1 << 4) -#define _PSB_CS_RESET_TA_RESET (1 << 3) -#define _PSB_CS_RESET_DPM_RESET (1 << 2) -#define _PSB_CS_RESET_TWOD_RESET (1 << 1) -#define _PSB_CS_RESET_BIF_RESET (1 << 0) - -#define PSB_CR_DESIGNER_REV_FIELD2 0x001C - -#define PSB_CR_EVENT_HOST_ENABLE2 0x0110 - -#define PSB_CR_EVENT_STATUS2 0x0118 - -#define PSB_CR_EVENT_HOST_CLEAR2 0x0114 -#define _PSB_CE2_BIF_REQUESTER_FAULT (1 << 4) - -#define PSB_CR_EVENT_STATUS 0x012C - -#define PSB_CR_EVENT_HOST_ENABLE 0x0130 - -#define PSB_CR_EVENT_HOST_CLEAR 0x0134 -#define _PSB_CE_MASTER_INTERRUPT (1 << 31) -#define _PSB_CE_TA_DPM_FAULT (1 << 28) -#define _PSB_CE_TWOD_COMPLETE (1 << 27) -#define _PSB_CE_DPM_OUT_OF_MEMORY_ZLS (1 << 25) -#define _PSB_CE_DPM_TA_MEM_FREE (1 << 24) -#define _PSB_CE_PIXELBE_END_RENDER (1 << 18) -#define _PSB_CE_SW_EVENT (1 << 14) -#define _PSB_CE_TA_FINISHED (1 << 13) -#define _PSB_CE_TA_TERMINATE (1 << 12) -#define _PSB_CE_DPM_REACHED_MEM_THRESH (1 << 3) -#define _PSB_CE_DPM_OUT_OF_MEMORY_GBL (1 << 2) -#define _PSB_CE_DPM_OUT_OF_MEMORY_MT (1 << 1) -#define _PSB_CE_DPM_3D_MEM_FREE (1 << 0) - - -#define PSB_USE_OFFSET_MASK 0x0007FFFF -#define PSB_USE_OFFSET_SIZE (PSB_USE_OFFSET_MASK + 1) -#define PSB_CR_USE_CODE_BASE0 0x0A0C -#define PSB_CR_USE_CODE_BASE1 0x0A10 -#define PSB_CR_USE_CODE_BASE2 0x0A14 -#define PSB_CR_USE_CODE_BASE3 0x0A18 -#define PSB_CR_USE_CODE_BASE4 0x0A1C -#define PSB_CR_USE_CODE_BASE5 0x0A20 -#define PSB_CR_USE_CODE_BASE6 0x0A24 -#define PSB_CR_USE_CODE_BASE7 0x0A28 -#define PSB_CR_USE_CODE_BASE8 0x0A2C -#define PSB_CR_USE_CODE_BASE9 0x0A30 -#define PSB_CR_USE_CODE_BASE10 0x0A34 -#define PSB_CR_USE_CODE_BASE11 0x0A38 -#define PSB_CR_USE_CODE_BASE12 0x0A3C -#define PSB_CR_USE_CODE_BASE13 0x0A40 -#define PSB_CR_USE_CODE_BASE14 0x0A44 -#define PSB_CR_USE_CODE_BASE15 0x0A48 -#define PSB_CR_USE_CODE_BASE(_i) (0x0A0C + ((_i) << 2)) -#define _PSB_CUC_BASE_DM_SHIFT (25) -#define _PSB_CUC_BASE_DM_MASK (0x3 << 25) -#define _PSB_CUC_BASE_ADDR_SHIFT (0) /* 1024-bit aligned address? */ -#define _PSB_CUC_BASE_ADDR_ALIGNSHIFT (7) -#define _PSB_CUC_BASE_ADDR_MASK (0x1FFFFFF << 0) -#define _PSB_CUC_DM_VERTEX (0) -#define _PSB_CUC_DM_PIXEL (1) -#define _PSB_CUC_DM_RESERVED (2) -#define _PSB_CUC_DM_EDM (3) - -#define PSB_CR_PDS_EXEC_BASE 0x0AB8 -#define _PSB_CR_PDS_EXEC_BASE_ADDR_SHIFT (20) /* 1MB aligned address */ -#define _PSB_CR_PDS_EXEC_BASE_ADDR_ALIGNSHIFT (20) - -#define PSB_CR_EVENT_KICKER 0x0AC4 -#define _PSB_CE_KICKER_ADDRESS_SHIFT (4) /* 128-bit aligned address */ - -#define PSB_CR_EVENT_KICK 0x0AC8 -#define _PSB_CE_KICK_NOW (1 << 0) - - -#define PSB_CR_BIF_DIR_LIST_BASE1 0x0C38 - -#define PSB_CR_BIF_CTRL 0x0C00 -#define _PSB_CB_CTRL_CLEAR_FAULT (1 << 4) -#define _PSB_CB_CTRL_INVALDC (1 << 3) -#define _PSB_CB_CTRL_FLUSH (1 << 2) - -#define PSB_CR_BIF_INT_STAT 0x0C04 - -#define PSB_CR_BIF_FAULT 0x0C08 -#define _PSB_CBI_STAT_PF_N_RW (1 << 14) -#define _PSB_CBI_STAT_FAULT_SHIFT (0) -#define _PSB_CBI_STAT_FAULT_MASK (0x3FFF << 0) -#define _PSB_CBI_STAT_FAULT_CACHE (1 << 1) -#define _PSB_CBI_STAT_FAULT_TA (1 << 2) -#define _PSB_CBI_STAT_FAULT_VDM (1 << 3) -#define _PSB_CBI_STAT_FAULT_2D (1 << 4) -#define _PSB_CBI_STAT_FAULT_PBE (1 << 5) -#define _PSB_CBI_STAT_FAULT_TSP (1 << 6) -#define _PSB_CBI_STAT_FAULT_ISP (1 << 7) -#define _PSB_CBI_STAT_FAULT_USSEPDS (1 << 8) -#define _PSB_CBI_STAT_FAULT_HOST (1 << 9) - -#define PSB_CR_BIF_BANK0 0x0C78 - -#define PSB_CR_BIF_BANK1 0x0C7C - -#define PSB_CR_BIF_DIR_LIST_BASE0 0x0C84 - -#define PSB_CR_BIF_TWOD_REQ_BASE 0x0C88 -#define PSB_CR_BIF_3D_REQ_BASE 0x0CAC - -#define PSB_CR_2D_SOCIF 0x0E18 -#define _PSB_C2_SOCIF_FREESPACE_SHIFT (0) -#define _PSB_C2_SOCIF_FREESPACE_MASK (0xFF << 0) -#define _PSB_C2_SOCIF_EMPTY (0x80 << 0) - -#define PSB_CR_2D_BLIT_STATUS 0x0E04 -#define _PSB_C2B_STATUS_BUSY (1 << 24) -#define _PSB_C2B_STATUS_COMPLETE_SHIFT (0) -#define _PSB_C2B_STATUS_COMPLETE_MASK (0xFFFFFF << 0) - -/* - * 2D defs. - */ - -/* - * 2D Slave Port Data : Block Header's Object Type - */ - -#define PSB_2D_CLIP_BH (0x00000000) -#define PSB_2D_PAT_BH (0x10000000) -#define PSB_2D_CTRL_BH (0x20000000) -#define PSB_2D_SRC_OFF_BH (0x30000000) -#define PSB_2D_MASK_OFF_BH (0x40000000) -#define PSB_2D_RESERVED1_BH (0x50000000) -#define PSB_2D_RESERVED2_BH (0x60000000) -#define PSB_2D_FENCE_BH (0x70000000) -#define PSB_2D_BLIT_BH (0x80000000) -#define PSB_2D_SRC_SURF_BH (0x90000000) -#define PSB_2D_DST_SURF_BH (0xA0000000) -#define PSB_2D_PAT_SURF_BH (0xB0000000) -#define PSB_2D_SRC_PAL_BH (0xC0000000) -#define PSB_2D_PAT_PAL_BH (0xD0000000) -#define PSB_2D_MASK_SURF_BH (0xE0000000) -#define PSB_2D_FLUSH_BH (0xF0000000) - -/* - * Clip Definition block (PSB_2D_CLIP_BH) - */ -#define PSB_2D_CLIPCOUNT_MAX (1) -#define PSB_2D_CLIPCOUNT_MASK (0x00000000) -#define PSB_2D_CLIPCOUNT_CLRMASK (0xFFFFFFFF) -#define PSB_2D_CLIPCOUNT_SHIFT (0) -/* clip rectangle min & max */ -#define PSB_2D_CLIP_XMAX_MASK (0x00FFF000) -#define PSB_2D_CLIP_XMAX_CLRMASK (0xFF000FFF) -#define PSB_2D_CLIP_XMAX_SHIFT (12) -#define PSB_2D_CLIP_XMIN_MASK (0x00000FFF) -#define PSB_2D_CLIP_XMIN_CLRMASK (0x00FFF000) -#define PSB_2D_CLIP_XMIN_SHIFT (0) -/* clip rectangle offset */ -#define PSB_2D_CLIP_YMAX_MASK (0x00FFF000) -#define PSB_2D_CLIP_YMAX_CLRMASK (0xFF000FFF) -#define PSB_2D_CLIP_YMAX_SHIFT (12) -#define PSB_2D_CLIP_YMIN_MASK (0x00000FFF) -#define PSB_2D_CLIP_YMIN_CLRMASK (0x00FFF000) -#define PSB_2D_CLIP_YMIN_SHIFT (0) - -/* - * Pattern Control (PSB_2D_PAT_BH) - */ -#define PSB_2D_PAT_HEIGHT_MASK (0x0000001F) -#define PSB_2D_PAT_HEIGHT_SHIFT (0) -#define PSB_2D_PAT_WIDTH_MASK (0x000003E0) -#define PSB_2D_PAT_WIDTH_SHIFT (5) -#define PSB_2D_PAT_YSTART_MASK (0x00007C00) -#define PSB_2D_PAT_YSTART_SHIFT (10) -#define PSB_2D_PAT_XSTART_MASK (0x000F8000) -#define PSB_2D_PAT_XSTART_SHIFT (15) - -/* - * 2D Control block (PSB_2D_CTRL_BH) - */ -/* Present Flags */ -#define PSB_2D_SRCCK_CTRL (0x00000001) -#define PSB_2D_DSTCK_CTRL (0x00000002) -#define PSB_2D_ALPHA_CTRL (0x00000004) -/* Colour Key Colour (SRC/DST)*/ -#define PSB_2D_CK_COL_MASK (0xFFFFFFFF) -#define PSB_2D_CK_COL_CLRMASK (0x00000000) -#define PSB_2D_CK_COL_SHIFT (0) -/* Colour Key Mask (SRC/DST)*/ -#define PSB_2D_CK_MASK_MASK (0xFFFFFFFF) -#define PSB_2D_CK_MASK_CLRMASK (0x00000000) -#define PSB_2D_CK_MASK_SHIFT (0) -/* Alpha Control (Alpha/RGB)*/ -#define PSB_2D_GBLALPHA_MASK (0x000FF000) -#define PSB_2D_GBLALPHA_CLRMASK (0xFFF00FFF) -#define PSB_2D_GBLALPHA_SHIFT (12) -#define PSB_2D_SRCALPHA_OP_MASK (0x00700000) -#define PSB_2D_SRCALPHA_OP_CLRMASK (0xFF8FFFFF) -#define PSB_2D_SRCALPHA_OP_SHIFT (20) -#define PSB_2D_SRCALPHA_OP_ONE (0x00000000) -#define PSB_2D_SRCALPHA_OP_SRC (0x00100000) -#define PSB_2D_SRCALPHA_OP_DST (0x00200000) -#define PSB_2D_SRCALPHA_OP_SG (0x00300000) -#define PSB_2D_SRCALPHA_OP_DG (0x00400000) -#define PSB_2D_SRCALPHA_OP_GBL (0x00500000) -#define PSB_2D_SRCALPHA_OP_ZERO (0x00600000) -#define PSB_2D_SRCALPHA_INVERT (0x00800000) -#define PSB_2D_SRCALPHA_INVERT_CLR (0xFF7FFFFF) -#define PSB_2D_DSTALPHA_OP_MASK (0x07000000) -#define PSB_2D_DSTALPHA_OP_CLRMASK (0xF8FFFFFF) -#define PSB_2D_DSTALPHA_OP_SHIFT (24) -#define PSB_2D_DSTALPHA_OP_ONE (0x00000000) -#define PSB_2D_DSTALPHA_OP_SRC (0x01000000) -#define PSB_2D_DSTALPHA_OP_DST (0x02000000) -#define PSB_2D_DSTALPHA_OP_SG (0x03000000) -#define PSB_2D_DSTALPHA_OP_DG (0x04000000) -#define PSB_2D_DSTALPHA_OP_GBL (0x05000000) -#define PSB_2D_DSTALPHA_OP_ZERO (0x06000000) -#define PSB_2D_DSTALPHA_INVERT (0x08000000) -#define PSB_2D_DSTALPHA_INVERT_CLR (0xF7FFFFFF) - -#define PSB_2D_PRE_MULTIPLICATION_ENABLE (0x10000000) -#define PSB_2D_PRE_MULTIPLICATION_CLRMASK (0xEFFFFFFF) -#define PSB_2D_ZERO_SOURCE_ALPHA_ENABLE (0x20000000) -#define PSB_2D_ZERO_SOURCE_ALPHA_CLRMASK (0xDFFFFFFF) - -/* - *Source Offset (PSB_2D_SRC_OFF_BH) - */ -#define PSB_2D_SRCOFF_XSTART_MASK ((0x00000FFF) << 12) -#define PSB_2D_SRCOFF_XSTART_SHIFT (12) -#define PSB_2D_SRCOFF_YSTART_MASK (0x00000FFF) -#define PSB_2D_SRCOFF_YSTART_SHIFT (0) - -/* - * Mask Offset (PSB_2D_MASK_OFF_BH) - */ -#define PSB_2D_MASKOFF_XSTART_MASK ((0x00000FFF) << 12) -#define PSB_2D_MASKOFF_XSTART_SHIFT (12) -#define PSB_2D_MASKOFF_YSTART_MASK (0x00000FFF) -#define PSB_2D_MASKOFF_YSTART_SHIFT (0) - -/* - * 2D Fence (see PSB_2D_FENCE_BH): bits 0:27 are ignored - */ - -/* - *Blit Rectangle (PSB_2D_BLIT_BH) - */ - -#define PSB_2D_ROT_MASK (3<<25) -#define PSB_2D_ROT_CLRMASK (~PSB_2D_ROT_MASK) -#define PSB_2D_ROT_NONE (0<<25) -#define PSB_2D_ROT_90DEGS (1<<25) -#define PSB_2D_ROT_180DEGS (2<<25) -#define PSB_2D_ROT_270DEGS (3<<25) - -#define PSB_2D_COPYORDER_MASK (3<<23) -#define PSB_2D_COPYORDER_CLRMASK (~PSB_2D_COPYORDER_MASK) -#define PSB_2D_COPYORDER_TL2BR (0<<23) -#define PSB_2D_COPYORDER_BR2TL (1<<23) -#define PSB_2D_COPYORDER_TR2BL (2<<23) -#define PSB_2D_COPYORDER_BL2TR (3<<23) - -#define PSB_2D_DSTCK_CLRMASK (0xFF9FFFFF) -#define PSB_2D_DSTCK_DISABLE (0x00000000) -#define PSB_2D_DSTCK_PASS (0x00200000) -#define PSB_2D_DSTCK_REJECT (0x00400000) - -#define PSB_2D_SRCCK_CLRMASK (0xFFE7FFFF) -#define PSB_2D_SRCCK_DISABLE (0x00000000) -#define PSB_2D_SRCCK_PASS (0x00080000) -#define PSB_2D_SRCCK_REJECT (0x00100000) - -#define PSB_2D_CLIP_ENABLE (0x00040000) - -#define PSB_2D_ALPHA_ENABLE (0x00020000) - -#define PSB_2D_PAT_CLRMASK (0xFFFEFFFF) -#define PSB_2D_PAT_MASK (0x00010000) -#define PSB_2D_USE_PAT (0x00010000) -#define PSB_2D_USE_FILL (0x00000000) -/* - * Tungsten Graphics note on rop codes: If rop A and rop B are - * identical, the mask surface will not be read and need not be - * set up. - */ - -#define PSB_2D_ROP3B_MASK (0x0000FF00) -#define PSB_2D_ROP3B_CLRMASK (0xFFFF00FF) -#define PSB_2D_ROP3B_SHIFT (8) -/* rop code A */ -#define PSB_2D_ROP3A_MASK (0x000000FF) -#define PSB_2D_ROP3A_CLRMASK (0xFFFFFF00) -#define PSB_2D_ROP3A_SHIFT (0) - -#define PSB_2D_ROP4_MASK (0x0000FFFF) -/* - * DWORD0: (Only pass if Pattern control == Use Fill Colour) - * Fill Colour RGBA8888 - */ -#define PSB_2D_FILLCOLOUR_MASK (0xFFFFFFFF) -#define PSB_2D_FILLCOLOUR_SHIFT (0) -/* - * DWORD1: (Always Present) - * X Start (Dest) - * Y Start (Dest) - */ -#define PSB_2D_DST_XSTART_MASK (0x00FFF000) -#define PSB_2D_DST_XSTART_CLRMASK (0xFF000FFF) -#define PSB_2D_DST_XSTART_SHIFT (12) -#define PSB_2D_DST_YSTART_MASK (0x00000FFF) -#define PSB_2D_DST_YSTART_CLRMASK (0xFFFFF000) -#define PSB_2D_DST_YSTART_SHIFT (0) -/* - * DWORD2: (Always Present) - * X Size (Dest) - * Y Size (Dest) - */ -#define PSB_2D_DST_XSIZE_MASK (0x00FFF000) -#define PSB_2D_DST_XSIZE_CLRMASK (0xFF000FFF) -#define PSB_2D_DST_XSIZE_SHIFT (12) -#define PSB_2D_DST_YSIZE_MASK (0x00000FFF) -#define PSB_2D_DST_YSIZE_CLRMASK (0xFFFFF000) -#define PSB_2D_DST_YSIZE_SHIFT (0) - -/* - * Source Surface (PSB_2D_SRC_SURF_BH) - */ -/* - * WORD 0 - */ - -#define PSB_2D_SRC_FORMAT_MASK (0x00078000) -#define PSB_2D_SRC_1_PAL (0x00000000) -#define PSB_2D_SRC_2_PAL (0x00008000) -#define PSB_2D_SRC_4_PAL (0x00010000) -#define PSB_2D_SRC_8_PAL (0x00018000) -#define PSB_2D_SRC_8_ALPHA (0x00020000) -#define PSB_2D_SRC_4_ALPHA (0x00028000) -#define PSB_2D_SRC_332RGB (0x00030000) -#define PSB_2D_SRC_4444ARGB (0x00038000) -#define PSB_2D_SRC_555RGB (0x00040000) -#define PSB_2D_SRC_1555ARGB (0x00048000) -#define PSB_2D_SRC_565RGB (0x00050000) -#define PSB_2D_SRC_0888ARGB (0x00058000) -#define PSB_2D_SRC_8888ARGB (0x00060000) -#define PSB_2D_SRC_8888UYVY (0x00068000) -#define PSB_2D_SRC_RESERVED (0x00070000) -#define PSB_2D_SRC_1555ARGB_LOOKUP (0x00078000) - - -#define PSB_2D_SRC_STRIDE_MASK (0x00007FFF) -#define PSB_2D_SRC_STRIDE_CLRMASK (0xFFFF8000) -#define PSB_2D_SRC_STRIDE_SHIFT (0) -/* - * WORD 1 - Base Address - */ -#define PSB_2D_SRC_ADDR_MASK (0x0FFFFFFC) -#define PSB_2D_SRC_ADDR_CLRMASK (0x00000003) -#define PSB_2D_SRC_ADDR_SHIFT (2) -#define PSB_2D_SRC_ADDR_ALIGNSHIFT (2) - -/* - * Pattern Surface (PSB_2D_PAT_SURF_BH) - */ -/* - * WORD 0 - */ - -#define PSB_2D_PAT_FORMAT_MASK (0x00078000) -#define PSB_2D_PAT_1_PAL (0x00000000) -#define PSB_2D_PAT_2_PAL (0x00008000) -#define PSB_2D_PAT_4_PAL (0x00010000) -#define PSB_2D_PAT_8_PAL (0x00018000) -#define PSB_2D_PAT_8_ALPHA (0x00020000) -#define PSB_2D_PAT_4_ALPHA (0x00028000) -#define PSB_2D_PAT_332RGB (0x00030000) -#define PSB_2D_PAT_4444ARGB (0x00038000) -#define PSB_2D_PAT_555RGB (0x00040000) -#define PSB_2D_PAT_1555ARGB (0x00048000) -#define PSB_2D_PAT_565RGB (0x00050000) -#define PSB_2D_PAT_0888ARGB (0x00058000) -#define PSB_2D_PAT_8888ARGB (0x00060000) - -#define PSB_2D_PAT_STRIDE_MASK (0x00007FFF) -#define PSB_2D_PAT_STRIDE_CLRMASK (0xFFFF8000) -#define PSB_2D_PAT_STRIDE_SHIFT (0) -/* - * WORD 1 - Base Address - */ -#define PSB_2D_PAT_ADDR_MASK (0x0FFFFFFC) -#define PSB_2D_PAT_ADDR_CLRMASK (0x00000003) -#define PSB_2D_PAT_ADDR_SHIFT (2) -#define PSB_2D_PAT_ADDR_ALIGNSHIFT (2) - -/* - * Destination Surface (PSB_2D_DST_SURF_BH) - */ -/* - * WORD 0 - */ - -#define PSB_2D_DST_FORMAT_MASK (0x00078000) -#define PSB_2D_DST_332RGB (0x00030000) -#define PSB_2D_DST_4444ARGB (0x00038000) -#define PSB_2D_DST_555RGB (0x00040000) -#define PSB_2D_DST_1555ARGB (0x00048000) -#define PSB_2D_DST_565RGB (0x00050000) -#define PSB_2D_DST_0888ARGB (0x00058000) -#define PSB_2D_DST_8888ARGB (0x00060000) -#define PSB_2D_DST_8888AYUV (0x00070000) - -#define PSB_2D_DST_STRIDE_MASK (0x00007FFF) -#define PSB_2D_DST_STRIDE_CLRMASK (0xFFFF8000) -#define PSB_2D_DST_STRIDE_SHIFT (0) -/* - * WORD 1 - Base Address - */ -#define PSB_2D_DST_ADDR_MASK (0x0FFFFFFC) -#define PSB_2D_DST_ADDR_CLRMASK (0x00000003) -#define PSB_2D_DST_ADDR_SHIFT (2) -#define PSB_2D_DST_ADDR_ALIGNSHIFT (2) - -/* - * Mask Surface (PSB_2D_MASK_SURF_BH) - */ -/* - * WORD 0 - */ -#define PSB_2D_MASK_STRIDE_MASK (0x00007FFF) -#define PSB_2D_MASK_STRIDE_CLRMASK (0xFFFF8000) -#define PSB_2D_MASK_STRIDE_SHIFT (0) -/* - * WORD 1 - Base Address - */ -#define PSB_2D_MASK_ADDR_MASK (0x0FFFFFFC) -#define PSB_2D_MASK_ADDR_CLRMASK (0x00000003) -#define PSB_2D_MASK_ADDR_SHIFT (2) -#define PSB_2D_MASK_ADDR_ALIGNSHIFT (2) - -/* - * Source Palette (PSB_2D_SRC_PAL_BH) - */ - -#define PSB_2D_SRCPAL_ADDR_SHIFT (0) -#define PSB_2D_SRCPAL_ADDR_CLRMASK (0xF0000007) -#define PSB_2D_SRCPAL_ADDR_MASK (0x0FFFFFF8) -#define PSB_2D_SRCPAL_BYTEALIGN (1024) - -/* - * Pattern Palette (PSB_2D_PAT_PAL_BH) - */ - -#define PSB_2D_PATPAL_ADDR_SHIFT (0) -#define PSB_2D_PATPAL_ADDR_CLRMASK (0xF0000007) -#define PSB_2D_PATPAL_ADDR_MASK (0x0FFFFFF8) -#define PSB_2D_PATPAL_BYTEALIGN (1024) - -/* - * Rop3 Codes (2 LS bytes) - */ - -#define PSB_2D_ROP3_SRCCOPY (0xCCCC) -#define PSB_2D_ROP3_PATCOPY (0xF0F0) -#define PSB_2D_ROP3_WHITENESS (0xFFFF) -#define PSB_2D_ROP3_BLACKNESS (0x0000) -#define PSB_2D_ROP3_SRC (0xCC) -#define PSB_2D_ROP3_PAT (0xF0) -#define PSB_2D_ROP3_DST (0xAA) - - -/* - * Sizes. - */ - -#define PSB_SCENE_HW_COOKIE_SIZE 16 -#define PSB_TA_MEM_HW_COOKIE_SIZE 16 - -/* - * Scene stuff. - */ - -#define PSB_NUM_HW_SCENES 2 - -/* - * Scheduler completion actions. - */ - -#define PSB_RASTER_BLOCK 0 -#define PSB_RASTER 1 -#define PSB_RETURN 2 -#define PSB_TA 3 - - -/*Power management*/ -#define PSB_PUNIT_PORT 0x04 -#define PSB_OSPMBA 0x78 -#define PSB_APMBA 0x7a -#define PSB_APM_CMD 0x0 -#define PSB_PWRGT_VID_ENC_MASK 0x30 -#define PSB_PWRGT_VID_DEC_MASK 0xc -#define PSB_PWRGT_VID_DEC_ON 0x08 -#define PSB_PWRGT_VID_DEC_OFF 0x04 -#define PSB_PWRGT_GFX_MASK 0x3 -#define PSB_PWRGT_GFX_ON 0x02 -#define PSB_PWRGT_GFX_OFF 0x01 -#define PSB_APM_STS 0x04 -#define PSB_PWRGT_GFX_D0 0x0 -#define PSB_PWRGT_GFX_D3 0x3 -#define PSB_PWRGT_VID_DEC_D0 0x0 -#define PSB_PWRGT_VID_DEC_D3 0x3 - - -#define PSB_PM_SSC 0x20 -#define PSB_PM_SSS 0x30 -#define PSB_PWRGT_DISPLAY_MASK 0xc /*on a different BA than video/gfx*/ -#define MDFLD_PWRGT_DISPLAY_A_CNTR 0x0000000c -#define MDFLD_PWRGT_DISPLAY_B_CNTR 0x0000c000 -#define MDFLD_PWRGT_DISPLAY_C_CNTR 0x00030000 -#define MDFLD_PWRGT_DISP_MIPI_CNTR 0x000c0000 -#define MDFLD_PWRGT_DISPLAY_CNTR (MDFLD_PWRGT_DISPLAY_A_CNTR | MDFLD_PWRGT_DISPLAY_B_CNTR | MDFLD_PWRGT_DISPLAY_C_CNTR | MDFLD_PWRGT_DISP_MIPI_CNTR)// 0x000fc00c -// Display SSS register bits are different in A0 vs. B0 -#define MDFLD_PWRGT_DISPLAY_A_STS 0x000000c0 -#define MDFLD_PWRGT_DISPLAY_B_STS 0x00000300 -#define MDFLD_PWRGT_DISPLAY_C_STS 0x00000c00 -#define PSB_PWRGT_GFX_MASK_B0 0xc3 -#define MDFLD_PWRGT_DISPLAY_A_STS_B0 0x0000000c -#define MDFLD_PWRGT_DISPLAY_B_STS_B0 0x0000c000 -#define MDFLD_PWRGT_DISPLAY_C_STS_B0 0x00030000 -#define MDFLD_PWRGT_DISP_MIPI_STS 0x000c0000 -#define MDFLD_PWRGT_DISPLAY_STS_A0 (MDFLD_PWRGT_DISPLAY_A_STS | MDFLD_PWRGT_DISPLAY_B_STS | MDFLD_PWRGT_DISPLAY_C_STS | MDFLD_PWRGT_DISP_MIPI_STS)// 0x000fc00c -#define MDFLD_PWRGT_DISPLAY_STS_B0 (MDFLD_PWRGT_DISPLAY_A_STS_B0 | MDFLD_PWRGT_DISPLAY_B_STS_B0 | MDFLD_PWRGT_DISPLAY_C_STS_B0 | MDFLD_PWRGT_DISP_MIPI_STS)// 0x000fc00c -#endif diff --git a/drivers/staging/cdv/drv/psb_reset.c b/drivers/staging/cdv/drv/psb_reset.c deleted file mode 100644 index 2f07be3..0000000 --- a/drivers/staging/cdv/drv/psb_reset.c +++ /dev/null @@ -1,144 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: Thomas Hellstrom - **************************************************************************/ - -#include -#include "psb_drv.h" -#include "psb_reg.h" -#include "psb_intel_reg.h" -#include "psb_msvdx.h" -#include - - -void psb_schedule_watchdog(struct drm_psb_private *dev_priv) -{ - struct timer_list *wt = &dev_priv->watchdog_timer; - unsigned long irq_flags; - - spin_lock_irqsave(&dev_priv->watchdog_lock, irq_flags); - if (dev_priv->timer_available && !timer_pending(wt)) { - wt->expires = jiffies + PSB_WATCHDOG_DELAY; - add_timer(wt); - } - spin_unlock_irqrestore(&dev_priv->watchdog_lock, irq_flags); -} - - -static void psb_watchdog_func(unsigned long data) -{ - struct drm_psb_private *dev_priv = (struct drm_psb_private *) data; - int msvdx_lockup; - int msvdx_idle; - unsigned long irq_flags; - - psb_msvdx_lockup(dev_priv, &msvdx_lockup, &msvdx_idle); - - if (msvdx_lockup) { - spin_lock_irqsave(&dev_priv->watchdog_lock, irq_flags); - dev_priv->timer_available = 0; - spin_unlock_irqrestore(&dev_priv->watchdog_lock, - irq_flags); - if (msvdx_lockup) - schedule_work(&dev_priv->msvdx_watchdog_wq); - } - if (!msvdx_idle) - psb_schedule_watchdog(dev_priv); -} - -void psb_msvdx_flush_cmd_queue(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_msvdx_cmd_queue *msvdx_cmd; - struct list_head *list, *next; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - /*Flush the msvdx cmd queue and signal all fences in the queue */ - list_for_each_safe(list, next, &msvdx_priv->msvdx_queue) { - msvdx_cmd = - list_entry(list, struct psb_msvdx_cmd_queue, head); - PSB_DEBUG_GENERAL("MSVDXQUE: flushing sequence:%d\n", - msvdx_cmd->sequence); - msvdx_priv->msvdx_current_sequence = msvdx_cmd->sequence; - psb_fence_error(dev, PSB_ENGINE_VIDEO, - msvdx_priv->msvdx_current_sequence, - _PSB_FENCE_TYPE_EXE, DRM_CMD_HANG); - list_del(list); - kfree(msvdx_cmd->cmd); - kfree(msvdx_cmd - ); - } -} - -static void psb_msvdx_reset_wq(struct work_struct *work) -{ - struct drm_psb_private *dev_priv = - container_of(work, struct drm_psb_private, msvdx_watchdog_wq); - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - struct psb_scheduler *scheduler = &dev_priv->scheduler; - unsigned long irq_flags; - - mutex_lock(&msvdx_priv->msvdx_mutex); - msvdx_priv->msvdx_needs_reset = 1; - msvdx_priv->msvdx_current_sequence++; - PSB_DEBUG_GENERAL - ("MSVDXFENCE: incremented msvdx_current_sequence to :%d\n", - msvdx_priv->msvdx_current_sequence); - - psb_fence_error(scheduler->dev, PSB_ENGINE_VIDEO, - msvdx_priv->msvdx_current_sequence, - _PSB_FENCE_TYPE_EXE, DRM_CMD_HANG); - - spin_lock_irqsave(&dev_priv->watchdog_lock, irq_flags); - dev_priv->timer_available = 1; - spin_unlock_irqrestore(&dev_priv->watchdog_lock, irq_flags); - - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - psb_msvdx_flush_cmd_queue(scheduler->dev); - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - - psb_schedule_watchdog(dev_priv); - mutex_unlock(&msvdx_priv->msvdx_mutex); -} - -void psb_watchdog_init(struct drm_psb_private *dev_priv) -{ - struct timer_list *wt = &dev_priv->watchdog_timer; - unsigned long irq_flags; - - spin_lock_init(&dev_priv->watchdog_lock); - spin_lock_irqsave(&dev_priv->watchdog_lock, irq_flags); - init_timer(wt); - INIT_WORK(&dev_priv->msvdx_watchdog_wq, &psb_msvdx_reset_wq); - wt->data = (unsigned long) dev_priv; - wt->function = &psb_watchdog_func; - dev_priv->timer_available = 1; - spin_unlock_irqrestore(&dev_priv->watchdog_lock, irq_flags); -} - -void psb_watchdog_takedown(struct drm_psb_private *dev_priv) -{ - unsigned long irq_flags; - - spin_lock_irqsave(&dev_priv->watchdog_lock, irq_flags); - dev_priv->timer_available = 0; - spin_unlock_irqrestore(&dev_priv->watchdog_lock, irq_flags); - (void) del_timer_sync(&dev_priv->watchdog_timer); -} - - diff --git a/drivers/staging/cdv/drv/psb_schedule.c b/drivers/staging/cdv/drv/psb_schedule.c deleted file mode 100644 index a8bf33b..0000000 --- a/drivers/staging/cdv/drv/psb_schedule.c +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: Thomas Hellstrom - **************************************************************************/ - -#include -#include "psb_drm.h" -#include "psb_drv.h" -#include "psb_reg.h" -#include "ttm/ttm_execbuf_util.h" - - -static void psb_powerdown_msvdx(struct work_struct *work) -{ - struct psb_scheduler *scheduler = - container_of(work, struct psb_scheduler, msvdx_suspend_wq.work); - - if (!mutex_trylock(&scheduler->msvdx_power_mutex)) - return; - - psb_try_power_down_msvdx(scheduler->dev); - mutex_unlock(&scheduler->msvdx_power_mutex); -} - -int psb_scheduler_init(struct drm_device *dev, - struct psb_scheduler *scheduler) -{ - memset(scheduler, 0, sizeof(*scheduler)); - scheduler->dev = dev; - mutex_init(&scheduler->msvdx_power_mutex); - - INIT_DELAYED_WORK(&scheduler->msvdx_suspend_wq, - &psb_powerdown_msvdx); - - return 0; -} - diff --git a/drivers/staging/cdv/drv/psb_schedule.h b/drivers/staging/cdv/drv/psb_schedule.h deleted file mode 100644 index 7616abe..0000000 --- a/drivers/staging/cdv/drv/psb_schedule.h +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: Thomas Hellstrom - **************************************************************************/ -#ifndef _PSB_SCHEDULE_H_ -#define _PSB_SCHEDULE_H_ - -#include - -struct psb_context; - -enum psb_task_type { - psb_flip_task -}; - -struct drm_psb_private; - -/*struct psb_scheduler_seq { - uint32_t sequence; - int reported; -};*/ - -struct psb_scheduler { - struct drm_device *dev; - /*struct psb_scheduler_seq seq[_PSB_ENGINE_TA_FENCE_TYPES]; - struct psb_hw_scene hs[PSB_NUM_HW_SCENES]; - struct mutex task_wq_mutex;*/ - struct mutex msvdx_power_mutex; - /*spinlock_t lock; - struct list_head hw_scenes; - struct list_head ta_queue; - struct list_head raster_queue; - struct list_head hp_raster_queue; - struct list_head task_done_queue; - struct psb_task *current_task[PSB_SCENE_NUM_ENGINES]; - struct psb_task *feedback_task; - int ta_state; - struct psb_hw_scene *pending_hw_scene; - uint32_t pending_hw_scene_seq; - struct delayed_work wq*/; - struct delayed_work msvdx_suspend_wq; - /*struct psb_scene_pool *pool; - uint32_t idle_count; - int idle; - wait_queue_head_t idle_queue; - unsigned long ta_end_jiffies; - unsigned long total_ta_jiffies; - unsigned long raster_end_jiffies; - unsigned long total_raster_jiffies;*/ -}; - -/*#define PSB_RF_FIRE_TA (1 << 0) -#define PSB_RF_OOM (1 << 1) -#define PSB_RF_OOM_REPLY (1 << 2) -#define PSB_RF_TERMINATE (1 << 3) -#define PSB_RF_TA_DONE (1 << 4) -#define PSB_RF_FIRE_RASTER (1 << 5) -#define PSB_RF_RASTER_DONE (1 << 6) -#define PSB_RF_DEALLOC (1 << 7) -*/ - -extern int psb_scheduler_init(struct drm_device *dev, - struct psb_scheduler *scheduler); - -#endif diff --git a/drivers/staging/cdv/drv/psb_sgx.c b/drivers/staging/cdv/drv/psb_sgx.c deleted file mode 100644 index 104fe4b..0000000 --- a/drivers/staging/cdv/drv/psb_sgx.c +++ /dev/null @@ -1,943 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * Copyright (c) 2008, Tungsten Graphics, Inc. Cedar Park, TX. USA. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#include -#include "psb_drv.h" -#include "psb_drm.h" -#include "psb_reg.h" -#include "psb_msvdx.h" -#include "ttm/ttm_bo_api.h" -#include "ttm/ttm_execbuf_util.h" -#include "psb_ttm_userobj_api.h" -#include "ttm/ttm_placement.h" -#include "psb_sgx.h" -#include "psb_intel_reg.h" -#include "psb_powermgmt.h" - - -static inline int psb_same_page(unsigned long offset, - unsigned long offset2) -{ - return (offset & PAGE_MASK) == (offset2 & PAGE_MASK); -} - -static inline unsigned long psb_offset_end(unsigned long offset, - unsigned long end) -{ - offset = (offset + PAGE_SIZE) & PAGE_MASK; - return (end < offset) ? end : offset; -} - -static void psb_idle_engine(struct drm_device *dev, int engine); - -struct psb_dstbuf_cache { - unsigned int dst; - struct ttm_buffer_object *dst_buf; - unsigned long dst_offset; - uint32_t *dst_page; - unsigned int dst_page_offset; - struct ttm_bo_kmap_obj dst_kmap; - bool dst_is_iomem; -}; - -struct psb_validate_buffer { - struct ttm_validate_buffer base; - struct psb_validate_req req; - int ret; - struct psb_validate_arg __user *user_val_arg; - uint32_t flags; - uint32_t offset; - int po_correct; -}; - -static int psb_check_presumed(struct psb_validate_req *req, - struct ttm_buffer_object *bo, - struct psb_validate_arg __user *data, - int *presumed_ok) -{ - struct psb_validate_req __user *user_req = &(data->d.req); - - *presumed_ok = 0; - - if (bo->mem.mem_type == TTM_PL_SYSTEM) { - *presumed_ok = 1; - return 0; - } - - if (unlikely(!(req->presumed_flags & PSB_USE_PRESUMED))) - return 0; - - if (bo->offset == req->presumed_gpu_offset) { - *presumed_ok = 1; - return 0; - } - - return __put_user(req->presumed_flags & ~PSB_USE_PRESUMED, - &user_req->presumed_flags); -} - - -static void psb_unreference_buffers(struct psb_context *context) -{ - struct ttm_validate_buffer *entry, *next; - struct list_head *list = &context->validate_list; - - list_for_each_entry_safe(entry, next, list, head) { - list_del(&entry->head); - ttm_bo_unref(&entry->bo); - } - - list = &context->kern_validate_list; - - list_for_each_entry_safe(entry, next, list, head) { - list_del(&entry->head); - ttm_bo_unref(&entry->bo); - } -} - - -static int psb_lookup_validate_buffer(struct drm_file *file_priv, - uint64_t data, - struct psb_validate_buffer *item) -{ - struct ttm_object_file *tfile = psb_fpriv(file_priv)->tfile; - - item->user_val_arg = - (struct psb_validate_arg __user *) (unsigned long) data; - - if (unlikely(copy_from_user(&item->req, &item->user_val_arg->d.req, - sizeof(item->req)) != 0)) { - DRM_ERROR("Lookup copy fault.\n"); - return -EFAULT; - } - - item->base.bo = - ttm_buffer_object_lookup(tfile, item->req.buffer_handle); - - if (unlikely(item->base.bo == NULL)) { - DRM_ERROR("Bo lookup fault.\n"); - return -EINVAL; - } - - return 0; -} - -static int psb_reference_buffers(struct drm_file *file_priv, - uint64_t data, - struct psb_context *context) -{ - struct psb_validate_buffer *item; - int ret; - - while (likely(data != 0)) { - if (unlikely(context->used_buffers >= - PSB_NUM_VALIDATE_BUFFERS)) { - DRM_ERROR("Too many buffers " - "on validate list.\n"); - ret = -EINVAL; - goto out_err0; - } - - item = &context->buffers[context->used_buffers]; - - ret = psb_lookup_validate_buffer(file_priv, data, item); - if (unlikely(ret != 0)) - goto out_err0; - - item->base.reserved = 0; - list_add_tail(&item->base.head, &context->validate_list); - context->used_buffers++; - data = item->req.next; - } - return 0; - -out_err0: - psb_unreference_buffers(context); - return ret; -} - -static int -psb_placement_fence_type(struct ttm_buffer_object *bo, - uint64_t set_val_flags, - uint64_t clr_val_flags, - uint32_t new_fence_class, - uint32_t *new_fence_type) -{ - int ret; - uint32_t n_fence_type; - /* - uint32_t set_flags = set_val_flags & 0xFFFFFFFF; - uint32_t clr_flags = clr_val_flags & 0xFFFFFFFF; - */ - struct ttm_fence_object *old_fence; - uint32_t old_fence_type; - struct ttm_placement placement; - - if (unlikely - (!(set_val_flags & - (PSB_GPU_ACCESS_READ | PSB_GPU_ACCESS_WRITE)))) { - DRM_ERROR - ("GPU access type (read / write) is not indicated.\n"); - return -EINVAL; - } - - /* User space driver doesn't set any TTM placement flags in set_val_flags or clr_val_flags */ - placement.num_placement = 0;/* FIXME */ - placement.num_busy_placement = 0; - placement.fpfn = 0; - placement.lpfn = 0; - ret = psb_ttm_bo_check_placement(bo, &placement); - if (unlikely(ret != 0)) - return ret; - - switch (new_fence_class) { - default: - n_fence_type = _PSB_FENCE_TYPE_EXE; - } - - *new_fence_type = n_fence_type; - old_fence = (struct ttm_fence_object *) bo->sync_obj; - old_fence_type = (uint32_t) (unsigned long) bo->sync_obj_arg; - - if (old_fence && ((new_fence_class != old_fence->fence_class) || - ((n_fence_type ^ old_fence_type) & - old_fence_type))) { - ret = ttm_bo_wait(bo, 0, 1, 0); - if (unlikely(ret != 0)) - return ret; - } - /* - bo->proposed_flags = (bo->proposed_flags | set_flags) - & ~clr_flags & TTM_PL_MASK_MEMTYPE; - */ - return 0; -} - -int psb_validate_kernel_buffer(struct psb_context *context, - struct ttm_buffer_object *bo, - uint32_t fence_class, - uint64_t set_flags, uint64_t clr_flags) -{ - struct psb_validate_buffer *item; - uint32_t cur_fence_type; - int ret; - - if (unlikely(context->used_buffers >= PSB_NUM_VALIDATE_BUFFERS)) { - DRM_ERROR("Out of free validation buffer entries for " - "kernel buffer validation.\n"); - return -ENOMEM; - } - - item = &context->buffers[context->used_buffers]; - item->user_val_arg = NULL; - item->base.reserved = 0; - - ret = ttm_bo_reserve(bo, 1, 0, 1, context->val_seq); - if (unlikely(ret != 0)) - goto out_unlock; - - spin_lock(&bo->bdev->fence_lock); - ret = psb_placement_fence_type(bo, set_flags, clr_flags, fence_class, - &cur_fence_type); - if (unlikely(ret != 0)) { - ttm_bo_unreserve(bo); - goto out_unlock; - } - - item->base.bo = ttm_bo_reference(bo); - item->base.new_sync_obj_arg = (void *) (unsigned long) cur_fence_type; - item->base.reserved = 1; - - list_add_tail(&item->base.head, &context->kern_validate_list); - context->used_buffers++; - /* - ret = ttm_bo_validate(bo, 1, 0, 0); - if (unlikely(ret != 0)) - goto out_unlock; - */ - item->offset = bo->offset; - item->flags = bo->mem.placement; - context->fence_types |= cur_fence_type; - -out_unlock: - spin_unlock(&bo->bdev->fence_lock); - return ret; -} - - -static int psb_validate_buffer_list(struct drm_file *file_priv, - uint32_t fence_class, - struct psb_context *context, - int *po_correct) -{ - struct psb_validate_buffer *item; - struct ttm_buffer_object *bo; - int ret; - struct psb_validate_req *req; - uint32_t fence_types = 0; - uint32_t cur_fence_type; - struct ttm_validate_buffer *entry; - struct list_head *list = &context->validate_list; - /* - struct ttm_placement placement; - uint32_t flags; - */ - - *po_correct = 1; - - list_for_each_entry(entry, list, head) { - item = - container_of(entry, struct psb_validate_buffer, base); - bo = entry->bo; - item->ret = 0; - req = &item->req; - - spin_lock(&bo->bdev->fence_lock); - ret = psb_placement_fence_type(bo, - req->set_flags, - req->clear_flags, - fence_class, - &cur_fence_type); - if (unlikely(ret != 0)) - goto out_err; - - /* - flags = item->req.pad64 | TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; - placement.num_placement = 1; - placement.placement = &flags; - placement.num_busy_placement = 0; - placement.fpfn = 0; - placement.lpfn = 0; - ret = ttm_bo_validate(bo, &placement, 1, 0, 0); - if (unlikely(ret != 0)) - goto out_err; - */ - fence_types |= cur_fence_type; - entry->new_sync_obj_arg = (void *) - (unsigned long) cur_fence_type; - - item->offset = bo->offset; - item->flags = bo->mem.placement; - spin_unlock(&bo->bdev->fence_lock); - - ret = - psb_check_presumed(&item->req, bo, item->user_val_arg, - &item->po_correct); - if (unlikely(ret != 0)) - goto out_err; - - if (unlikely(!item->po_correct)) - *po_correct = 0; - - item++; - } - - context->fence_types |= fence_types; - - return 0; -out_err: - spin_unlock(&bo->bdev->fence_lock); - item->ret = ret; - return ret; -} - -static void psb_clear_dstbuf_cache(struct psb_dstbuf_cache *dst_cache) -{ - if (dst_cache->dst_page) { - ttm_bo_kunmap(&dst_cache->dst_kmap); - dst_cache->dst_page = NULL; - } - dst_cache->dst_buf = NULL; - dst_cache->dst = ~0; -} - -static int psb_update_dstbuf_cache(struct psb_dstbuf_cache *dst_cache, - struct psb_validate_buffer *buffers, - unsigned int dst, - unsigned long dst_offset) -{ - int ret; - - PSB_DEBUG_GENERAL("Destination buffer is %d.\n", dst); - - if (unlikely(dst != dst_cache->dst || NULL == dst_cache->dst_buf)) { - psb_clear_dstbuf_cache(dst_cache); - dst_cache->dst = dst; - dst_cache->dst_buf = buffers[dst].base.bo; - } - - if (unlikely - (dst_offset >= dst_cache->dst_buf->num_pages * PAGE_SIZE)) { - DRM_ERROR("Relocation destination out of bounds.\n"); - return -EINVAL; - } - - if (!psb_same_page(dst_cache->dst_offset, dst_offset) || - NULL == dst_cache->dst_page) { - if (NULL != dst_cache->dst_page) { - ttm_bo_kunmap(&dst_cache->dst_kmap); - dst_cache->dst_page = NULL; - } - - ret = - ttm_bo_kmap(dst_cache->dst_buf, - dst_offset >> PAGE_SHIFT, 1, - &dst_cache->dst_kmap); - if (ret) { - DRM_ERROR("Could not map destination buffer for " - "relocation.\n"); - return ret; - } - - dst_cache->dst_page = - ttm_kmap_obj_virtual(&dst_cache->dst_kmap, - &dst_cache->dst_is_iomem); - dst_cache->dst_offset = dst_offset & PAGE_MASK; - dst_cache->dst_page_offset = dst_cache->dst_offset >> 2; - } - return 0; -} - -static int psb_apply_reloc(struct drm_psb_private *dev_priv, - uint32_t fence_class, - const struct drm_psb_reloc *reloc, - struct psb_validate_buffer *buffers, - int num_buffers, - struct psb_dstbuf_cache *dst_cache, - int no_wait, int interruptible) -{ - uint32_t val; - uint32_t background; - unsigned int index; - int ret; - unsigned int shift; - unsigned int align_shift; - struct ttm_buffer_object *reloc_bo; - - - PSB_DEBUG_GENERAL("Reloc type %d\n" - "\t where 0x%04x\n" - "\t buffer 0x%04x\n" - "\t mask 0x%08x\n" - "\t shift 0x%08x\n" - "\t pre_add 0x%08x\n" - "\t background 0x%08x\n" - "\t dst_buffer 0x%08x\n" - "\t arg0 0x%08x\n" - "\t arg1 0x%08x\n", - reloc->reloc_op, - reloc->where, - reloc->buffer, - reloc->mask, - reloc->shift, - reloc->pre_add, - reloc->background, - reloc->dst_buffer, reloc->arg0, reloc->arg1); - - if (unlikely(reloc->buffer >= num_buffers)) { - DRM_ERROR("Illegal relocation buffer %d.\n", - reloc->buffer); - return -EINVAL; - } - - if (buffers[reloc->buffer].po_correct) - return 0; - - if (unlikely(reloc->dst_buffer >= num_buffers)) { - DRM_ERROR - ("Illegal destination buffer for relocation %d.\n", - reloc->dst_buffer); - return -EINVAL; - } - - ret = - psb_update_dstbuf_cache(dst_cache, buffers, reloc->dst_buffer, - reloc->where << 2); - if (ret) - return ret; - - reloc_bo = buffers[reloc->buffer].base.bo; - - if (unlikely(reloc->pre_add >= (reloc_bo->num_pages << PAGE_SHIFT))) { - DRM_ERROR("Illegal relocation offset add.\n"); - return -EINVAL; - } - - switch (reloc->reloc_op) { - case PSB_RELOC_OP_OFFSET: - val = reloc_bo->offset + reloc->pre_add; - break; - default: - DRM_ERROR("Unimplemented relocation.\n"); - return -EINVAL; - } - - shift = - (reloc->shift & PSB_RELOC_SHIFT_MASK) >> PSB_RELOC_SHIFT_SHIFT; - align_shift = - (reloc-> - shift & PSB_RELOC_ALSHIFT_MASK) >> PSB_RELOC_ALSHIFT_SHIFT; - - val = ((val >> align_shift) << shift); - index = reloc->where - dst_cache->dst_page_offset; - - background = reloc->background; - val = (background & ~reloc->mask) | (val & reloc->mask); - dst_cache->dst_page[index] = val; - - PSB_DEBUG_GENERAL("Reloc buffer %d index 0x%08x, value 0x%08x\n", - reloc->dst_buffer, index, - dst_cache->dst_page[index]); - - return 0; -} - -static int psb_ok_to_map_reloc(struct drm_psb_private *dev_priv, - unsigned int num_pages) -{ - int ret = 0; - - spin_lock(&dev_priv->reloc_lock); - if (dev_priv->rel_mapped_pages + num_pages <= PSB_MAX_RELOC_PAGES) { - dev_priv->rel_mapped_pages += num_pages; - ret = 1; - } - spin_unlock(&dev_priv->reloc_lock); - return ret; -} - -static int psb_fixup_relocs(struct drm_file *file_priv, - uint32_t fence_class, - unsigned int num_relocs, - unsigned int reloc_offset, - uint32_t reloc_handle, - struct psb_context *context, - int no_wait, int interruptible) -{ - struct drm_device *dev = file_priv->minor->dev; - struct ttm_object_file *tfile = psb_fpriv(file_priv)->tfile; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) dev->dev_private; - struct ttm_buffer_object *reloc_buffer = NULL; - unsigned int reloc_num_pages; - unsigned int reloc_first_page; - unsigned int reloc_last_page; - struct psb_dstbuf_cache dst_cache; - struct drm_psb_reloc *reloc; - struct ttm_bo_kmap_obj reloc_kmap; - bool reloc_is_iomem; - int count; - int ret = 0; - int registered = 0; - uint32_t num_buffers = context->used_buffers; - - if (num_relocs == 0) - return 0; - - memset(&dst_cache, 0, sizeof(dst_cache)); - memset(&reloc_kmap, 0, sizeof(reloc_kmap)); - - reloc_buffer = ttm_buffer_object_lookup(tfile, reloc_handle); - if (!reloc_buffer) - goto out; - - if (unlikely(atomic_read(&reloc_buffer->reserved) != 1)) { - DRM_ERROR("Relocation buffer was not on validate list.\n"); - ret = -EINVAL; - goto out; - } - - reloc_first_page = reloc_offset >> PAGE_SHIFT; - reloc_last_page = - (reloc_offset + - num_relocs * sizeof(struct drm_psb_reloc)) >> PAGE_SHIFT; - reloc_num_pages = reloc_last_page - reloc_first_page + 1; - reloc_offset &= ~PAGE_MASK; - - if (reloc_num_pages > PSB_MAX_RELOC_PAGES) { - DRM_ERROR("Relocation buffer is too large\n"); - ret = -EINVAL; - goto out; - } - - DRM_WAIT_ON(ret, dev_priv->rel_mapped_queue, 3 * DRM_HZ, - (registered = - psb_ok_to_map_reloc(dev_priv, reloc_num_pages))); - - if (ret == -EINTR) { - ret = -ERESTART; - goto out; - } - if (ret) { - DRM_ERROR("Error waiting for space to map " - "relocation buffer.\n"); - goto out; - } - - ret = ttm_bo_kmap(reloc_buffer, reloc_first_page, - reloc_num_pages, &reloc_kmap); - - if (ret) { - DRM_ERROR("Could not map relocation buffer.\n" - "\tReloc buffer id 0x%08x.\n" - "\tReloc first page %d.\n" - "\tReloc num pages %d.\n", - reloc_handle, reloc_first_page, reloc_num_pages); - goto out; - } - - reloc = (struct drm_psb_reloc *) - ((unsigned long) - ttm_kmap_obj_virtual(&reloc_kmap, - &reloc_is_iomem) + reloc_offset); - - for (count = 0; count < num_relocs; ++count) { - ret = psb_apply_reloc(dev_priv, fence_class, - reloc, context->buffers, - num_buffers, &dst_cache, - no_wait, interruptible); - if (ret) - goto out1; - reloc++; - } - -out1: - ttm_bo_kunmap(&reloc_kmap); -out: - if (registered) { - spin_lock(&dev_priv->reloc_lock); - dev_priv->rel_mapped_pages -= reloc_num_pages; - spin_unlock(&dev_priv->reloc_lock); - DRM_WAKEUP(&dev_priv->rel_mapped_queue); - } - - psb_clear_dstbuf_cache(&dst_cache); - if (reloc_buffer) - ttm_bo_unref(&reloc_buffer); - return ret; -} - -void psb_fence_or_sync(struct drm_file *file_priv, - uint32_t engine, - uint32_t fence_types, - uint32_t fence_flags, - struct list_head *list, - struct psb_ttm_fence_rep *fence_arg, - struct ttm_fence_object **fence_p) -{ - struct drm_device *dev = file_priv->minor->dev; - struct drm_psb_private *dev_priv = psb_priv(dev); - struct ttm_fence_device *fdev = &dev_priv->fdev; - int ret; - struct ttm_fence_object *fence; - struct ttm_object_file *tfile = psb_fpriv(file_priv)->tfile; - uint32_t handle; - - ret = ttm_fence_user_create(fdev, tfile, - engine, fence_types, - TTM_FENCE_FLAG_EMIT, &fence, &handle); - if (ret) { - - /* - * Fence creation failed. - * Fall back to synchronous operation and idle the engine. - */ - - psb_idle_engine(dev, engine); - if (!(fence_flags & DRM_PSB_FENCE_NO_USER)) { - - /* - * Communicate to user-space that - * fence creation has failed and that - * the engine is idle. - */ - - fence_arg->handle = ~0; - fence_arg->error = ret; - } - - ttm_eu_backoff_reservation(list); - if (fence_p) - *fence_p = NULL; - return; - } - - ttm_eu_fence_buffer_objects(list, fence); - if (!(fence_flags & DRM_PSB_FENCE_NO_USER)) { - struct ttm_fence_info info = ttm_fence_get_info(fence); - fence_arg->handle = handle; - fence_arg->fence_class = ttm_fence_class(fence); - fence_arg->fence_type = ttm_fence_types(fence); - fence_arg->signaled_types = info.signaled_types; - fence_arg->error = 0; - } else { - ret = - ttm_ref_object_base_unref(tfile, handle, - ttm_fence_type); - BUG_ON(ret); - } - - if (fence_p) - *fence_p = fence; - else if (fence) - ttm_fence_object_unref(&fence); -} - - -#if 0 -static int psb_dump_page(struct ttm_buffer_object *bo, - unsigned int page_offset, unsigned int num) -{ - struct ttm_bo_kmap_obj kmobj; - int is_iomem; - uint32_t *p; - int ret; - unsigned int i; - - ret = ttm_bo_kmap(bo, page_offset, 1, &kmobj); - if (ret) - return ret; - - p = ttm_kmap_obj_virtual(&kmobj, &is_iomem); - for (i = 0; i < num; ++i) - PSB_DEBUG_GENERAL("0x%04x: 0x%08x\n", i, *p++); - - ttm_bo_kunmap(&kmobj); - return 0; -} -#endif - -static void psb_idle_engine(struct drm_device *dev, int engine) -{ - /*Fix me add video engile support*/ - return; -} - -static int psb_handle_copyback(struct drm_device *dev, - struct psb_context *context, - int ret) -{ - int err = ret; - struct ttm_validate_buffer *entry; - struct psb_validate_arg arg; - struct list_head *list = &context->validate_list; - - if (ret) { - ttm_eu_backoff_reservation(list); - ttm_eu_backoff_reservation(&context->kern_validate_list); - } - - - if (ret != -EAGAIN && ret != -EINTR && ret != -ERESTART) { - list_for_each_entry(entry, list, head) { - struct psb_validate_buffer *vbuf = - container_of(entry, struct psb_validate_buffer, - base); - arg.handled = 1; - arg.ret = vbuf->ret; - if (!arg.ret) { - struct ttm_buffer_object *bo = entry->bo; - spin_lock(&bo->bdev->fence_lock); - arg.d.rep.gpu_offset = bo->offset; - arg.d.rep.placement = bo->mem.placement; - arg.d.rep.fence_type_mask = - (uint32_t) (unsigned long) - entry->new_sync_obj_arg; - spin_unlock(&bo->bdev->fence_lock); - } - - if (__copy_to_user(vbuf->user_val_arg, - &arg, sizeof(arg))) - err = -EFAULT; - - if (arg.ret) - break; - } - } - - return err; -} - -int psb_cmdbuf_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_cmdbuf_arg *arg = data; - int ret = 0; - struct ttm_object_file *tfile = psb_fpriv(file_priv)->tfile; - struct ttm_buffer_object *cmd_buffer = NULL; - struct psb_ttm_fence_rep fence_arg; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)file_priv->minor->dev->dev_private; - struct psb_video_ctx *pos, *n; - int engine; - int po_correct; - struct psb_context *context; - - ((struct msvdx_private*)dev_priv->msvdx_private)->tfile = tfile; - - ret = ttm_read_lock(&dev_priv->ttm_lock, true); - if (unlikely(ret != 0)) - return ret; - - if (arg->engine == PSB_ENGINE_VIDEO) { - if (!ospm_power_using_hw_begin(OSPM_VIDEO_DEC_ISLAND, - OSPM_UHB_FORCE_POWER_ON)) - return -EBUSY; - } - - ret = mutex_lock_interruptible(&dev_priv->cmdbuf_mutex); - if (unlikely(ret != 0)) - goto out_err0; - - - context = &dev_priv->context; - context->used_buffers = 0; - context->fence_types = 0; - BUG_ON(!list_empty(&context->validate_list)); - BUG_ON(!list_empty(&context->kern_validate_list)); - - if (unlikely(context->buffers == NULL)) { - context->buffers = vmalloc(PSB_NUM_VALIDATE_BUFFERS * - sizeof(*context->buffers)); - if (unlikely(context->buffers == NULL)) { - ret = -ENOMEM; - goto out_err1; - } - } - - ret = psb_reference_buffers(file_priv, - arg->buffer_list, - context); - - if (unlikely(ret != 0)) - goto out_err1; - - context->val_seq = atomic_add_return(1, &dev_priv->val_seq); - -/* - ret = ttm_eu_reserve_buffers(&context->validate_list, - context->val_seq); -*/ - /* XXX new TTM removed driver managed sequence number, - * check if this has other side effects! */ - ret = ttm_eu_reserve_buffers(&context->validate_list); - - if (unlikely(ret != 0)) - goto out_err2; - - engine = arg->engine; - ret = psb_validate_buffer_list(file_priv, engine, - context, &po_correct); - if (unlikely(ret != 0)) - goto out_err3; - - if (!po_correct) { - ret = psb_fixup_relocs(file_priv, engine, arg->num_relocs, - arg->reloc_offset, - arg->reloc_handle, context, 0, 1); - if (unlikely(ret != 0)) - goto out_err3; - - } - - cmd_buffer = ttm_buffer_object_lookup(tfile, arg->cmdbuf_handle); - if (unlikely(cmd_buffer == NULL)) { - ret = -EINVAL; - goto out_err4; - } - - list_for_each_entry_safe(pos, n, &dev_priv->video_ctx, head) { - if (pos->filp == file_priv->filp) { - int entrypoint = pos->ctx_type & 0xff; - - PSB_DEBUG_GENERAL("Video:commands for profile %d, entrypoint %d", - (pos->ctx_type >> 8), (pos->ctx_type & 0xff)); - - if (entrypoint != VAEntrypointEncSlice && - entrypoint != VAEntrypointEncPicture) - dev_priv->msvdx_ctx = pos; - - break; - } - } - - switch (arg->engine) { - case PSB_ENGINE_VIDEO: - if (arg->cmdbuf_size == (16 + 32)) { - /* Identify deblock msg cmdbuf */ - /* according to cmdbuf_size */ - struct ttm_bo_kmap_obj cmd_kmap; - struct ttm_buffer_object *deblock; - uint32_t *cmd; - bool is_iomem; - - /* write regIO BO's address after deblcok msg */ - ret = ttm_bo_kmap(cmd_buffer, 0, 1, &cmd_kmap); - if (unlikely(ret != 0)) - goto out_err4; - cmd = (uint32_t *)(ttm_kmap_obj_virtual(&cmd_kmap, - &is_iomem) + 16); - deblock = ttm_buffer_object_lookup(tfile, - (uint32_t)(*cmd)); - *cmd = (uint32_t)deblock; - ttm_bo_unref(&deblock); /* FIXME Should move this to interrupt handler? */ - ttm_bo_kunmap(&cmd_kmap); - } - - ret = psb_cmdbuf_video(file_priv, &context->validate_list, - context->fence_types, arg, - cmd_buffer, &fence_arg); - - if (unlikely(ret != 0)) - goto out_err4; - break; - default: - DRM_ERROR - ("Unimplemented command submission mechanism (%x).\n", - arg->engine); - ret = -EINVAL; - goto out_err4; - } - - if (!(arg->fence_flags & DRM_PSB_FENCE_NO_USER)) { - ret = copy_to_user((void __user *) - ((unsigned long) arg->fence_arg), - &fence_arg, sizeof(fence_arg)); - } - -out_err4: - if (cmd_buffer) - ttm_bo_unref(&cmd_buffer); -out_err3: - ret = psb_handle_copyback(dev, context, ret); -out_err2: - psb_unreference_buffers(context); -out_err1: - mutex_unlock(&dev_priv->cmdbuf_mutex); -out_err0: - ttm_read_unlock(&dev_priv->ttm_lock); - - if (arg->engine == PSB_ENGINE_VIDEO) - ospm_power_using_hw_end(OSPM_VIDEO_DEC_ISLAND); - - return ret; -} - diff --git a/drivers/staging/cdv/drv/psb_sgx.h b/drivers/staging/cdv/drv/psb_sgx.h deleted file mode 100644 index e83ca94..0000000 --- a/drivers/staging/cdv/drv/psb_sgx.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Eric Anholt - * - **/ -#ifndef _PSB_SGX_H_ -#define _PSB_SGX_H_ - -extern int psb_submit_video_cmdbuf(struct drm_device *dev, - struct ttm_buffer_object *cmd_buffer, - unsigned long cmd_offset, - unsigned long cmd_size, - struct ttm_fence_object *fence); - -extern int drm_idle_check_interval; - -#endif diff --git a/drivers/staging/cdv/drv/psb_socket.c b/drivers/staging/cdv/drv/psb_socket.c deleted file mode 100644 index 7cc9a7b..0000000 --- a/drivers/staging/cdv/drv/psb_socket.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright (C) 2004 Red Hat, Inc. All rights reserved. - * Copyright (C) 2004 Novell, Inc. All rights reserved. - * Copyright (C) 2004 IBM, Inc. All rights reserved. - * Copyright (C) 2011 Intel Corporation. All rights reserved. - * - * Licensed under the GNU GPL v2. - * - * Authors: - * Robert Love - * Kay Sievers - * Arjan van de Ven - * Greg Kroah-Hartman - * - * Notes: - * Adapted from existing kobj event socket code to enable - * mutlicast usermode communication for gfx driver to mutiple - * usermode threads via different socket broadcast groups. - * Original kobject uevent code does not allow for different - * broadcast groups. Due to the frequency of usermode events - * generated by some gfx subsystems it is necessary to open - * a new dedicated socket with multicast group support. In - * the future it is hoped that this code can be removed - * and either a new netlink protocol type added for graphics - * or conversely to simply enable group routing to be leveraged - * on the existing kobject uevent infrastructure. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "psb_umevents.h" - -#define NETLINK_PSB_KOBJECT_UEVENT 31 - -u64 psb_uevent_seqnum; -char psb_uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH; -static DEFINE_SPINLOCK(sequence_lock); -#if defined(CONFIG_NET) -static struct sock *uevent_sock; -#endif - -/* the strings here must match the enum in include/linux/kobject.h */ -static const char *psb_kobject_actions[] = { - [KOBJ_ADD] = "add", - [KOBJ_REMOVE] = "remove", - [KOBJ_CHANGE] = "change", - [KOBJ_MOVE] = "move", - [KOBJ_ONLINE] = "online", - [KOBJ_OFFLINE] = "offline", -}; - -/** - * kobject_action_type - translate action string to numeric type - * - * @buf: buffer containing the action string, newline is ignored - * @len: length of buffer - * @type: pointer to the location to store the action type - * - * Returns 0 if the action string was recognized. - */ -int psb_kobject_action_type(const char *buf, size_t count, - enum kobject_action *type) -{ - enum kobject_action action; - int ret = -EINVAL; - - if (count && (buf[count-1] == '\n' || buf[count-1] == '\0')) - count--; - - if (!count) - goto out; - - for (action = 0; action < ARRAY_SIZE(psb_kobject_actions); action++) { - if (strncmp(psb_kobject_actions[action], buf, count) != 0) - continue; - if (psb_kobject_actions[action][count] != '\0') - continue; - *type = action; - ret = 0; - break; - } -out: - return ret; -} - -/** - * psb_kobject_uevent_env - send an uevent with environmental data - * - * @action: action that is happening - * @kobj: struct kobject that the action is happening to - * @envp_ext: pointer to environmental data - * - * Returns 0 if kobject_uevent() is completed with success or the - * corresponding error when it fails. - */ -int psb_kobject_uevent_env(struct kobject *kobj, enum kobject_action action, - char *envp_ext[], int dst_group_id) -{ - struct kobj_uevent_env *env; - const char *action_string = psb_kobject_actions[action]; - const char *devpath = NULL; - const char *subsystem; - struct kobject *top_kobj; - struct kset *kset; - struct kset_uevent_ops *uevent_ops; - u64 seq; - int i = 0; - int retval = 0; - - pr_debug("kobject: '%s' (%p): %s\n", - kobject_name(kobj), kobj, __func__); - - /* search the kset we belong to */ - top_kobj = kobj; - while (!top_kobj->kset && top_kobj->parent) - top_kobj = top_kobj->parent; - - if (!top_kobj->kset) { - pr_debug("kobject: '%s' (%p): %s: attempted to send uevent " - "without kset!\n", kobject_name(kobj), kobj, - __func__); - return -EINVAL; - } - - kset = top_kobj->kset; - uevent_ops = (struct kset_uevent_ops *)kset->uevent_ops; - - /* skip the event, if uevent_suppress is set*/ - if (kobj->uevent_suppress) { - pr_debug("kobject: '%s' (%p): %s: uevent_suppress " - "caused the event to drop!\n", - kobject_name(kobj), kobj, __func__); - return 0; - } - /* skip the event, if the filter returns zero. */ - if (uevent_ops && uevent_ops->filter) - if (!uevent_ops->filter(kset, kobj)) { - pr_debug("kobject: '%s' (%p): %s: filter function " - "caused the event to drop!\n", - kobject_name(kobj), kobj, __func__); - return 0; - } - - /* originating subsystem */ - if (uevent_ops && uevent_ops->name) - subsystem = uevent_ops->name(kset, kobj); - else - subsystem = kobject_name(&kset->kobj); - if (!subsystem) { - pr_debug("kobject: '%s' (%p): %s: unset subsystem caused the " - "event to drop!\n", kobject_name(kobj), kobj, - __func__); - return 0; - } - - /* environment buffer */ - env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL); - if (!env) - return -ENOMEM; - - /* complete object path */ - devpath = kobject_get_path(kobj, GFP_KERNEL); - if (!devpath) { - retval = -ENOENT; - goto exit; - } - - /* default keys */ - retval = add_uevent_var(env, "ACTION=%s", action_string); - if (retval) - goto exit; - retval = add_uevent_var(env, "DEVPATH=%s", devpath); - if (retval) - goto exit; - retval = add_uevent_var(env, "SUBSYSTEM=%s", subsystem); - if (retval) - goto exit; - - /* keys passed in from the caller */ - if (envp_ext) { - for (i = 0; envp_ext[i]; i++) { - retval = add_uevent_var(env, "%s", envp_ext[i]); - if (retval) - goto exit; - } - } - - /* let the kset specific function add its stuff */ - if (uevent_ops && uevent_ops->uevent) { - retval = uevent_ops->uevent(kset, kobj, env); - if (retval) { - pr_debug("kobject: '%s' (%p): %s: uevent() returned " - "%d\n", kobject_name(kobj), kobj, - __func__, retval); - goto exit; - } - } - - /* - * Mark "add" and "remove" events in the object to ensure proper - * events to userspace during automatic cleanup. If the object did - * send an "add" event, "remove" will automatically generated by - * the core, if not already done by the caller. - */ - if (action == KOBJ_ADD) - kobj->state_add_uevent_sent = 1; - else if (action == KOBJ_REMOVE) - kobj->state_remove_uevent_sent = 1; - - /* we will send an event, so request a new sequence number */ - spin_lock(&sequence_lock); - seq = ++psb_uevent_seqnum; - spin_unlock(&sequence_lock); - retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq); - if (retval) - goto exit; - -#if defined(CONFIG_NET) - /* send netlink message */ - if (uevent_sock) { - struct sk_buff *skb; - size_t len; - - /* allocate message with the maximum possible size */ - len = strlen(action_string) + strlen(devpath) + 2; - skb = alloc_skb(len + env->buflen, GFP_KERNEL); - if (skb) { - char *scratch; - - /* add header */ - scratch = skb_put(skb, len); - sprintf(scratch, "%s@%s", action_string, devpath); - - /* copy keys to our continuous event payload buffer */ - for (i = 0; i < env->envp_idx; i++) { - len = strlen(env->envp[i]) + 1; - scratch = skb_put(skb, len); - strcpy(scratch, env->envp[i]); - } - - NETLINK_CB(skb).dst_group = dst_group_id; - retval = netlink_broadcast(uevent_sock, skb, 0, - dst_group_id, - GFP_KERNEL); - - /* ENOBUFS should be handled in userspace */ - if (retval == -ENOBUFS) - retval = 0; - } else - retval = -ENOMEM; - } -#endif - - /* call psb_uevent_helper, usually only enabled during early boot */ - if (psb_uevent_helper[0]) { - char *argv[3]; - - argv[0] = psb_uevent_helper; - argv[1] = (char *)subsystem; - argv[2] = NULL; - retval = add_uevent_var(env, "HOME=/"); - if (retval) - goto exit; - retval = add_uevent_var(env, - "PATH=/sbin:/bin:/usr/sbin:/usr/bin"); - if (retval) - goto exit; - - retval = call_usermodehelper(argv[0], argv, - env->envp, UMH_WAIT_EXEC); - } - -exit: - kfree(devpath); - kfree(env); - return retval; -} -/*EXPORT_SYMBOL_GPL(psb_kobject_uevent_env); */ - -/** - * psb_kobject_uevent - notify userspace by ending an uevent - * - * @action: action that is happening - * @kobj: struct kobject that the action is happening to - * - * Returns 0 if psb_kobject_uevent() is completed with success or the - * corresponding error when it fails. - */ -int psb_kobject_uevent(struct kobject *kobj, enum kobject_action action, - int dst_group_id) -{ - return psb_kobject_uevent_env(kobj, action, NULL, dst_group_id); -} -/*EXPORT_SYMBOL_GPL(psb_kobject_uevent); */ - -/** - * psb_add_uevent_var - add key value string to the environment buffer - * @env: environment buffer structure - * @format: printf format for the key=value pair - * - * Returns 0 if environment variable was added successfully or -ENOMEM - * if no space was available. - */ -int psb_add_uevent_var(struct kobj_uevent_env *env, const char *format, ...) -{ - va_list args; - int len; - - if (env->envp_idx >= ARRAY_SIZE(env->envp)) { - WARN(1, KERN_ERR "psb_add_uevent_var: too many keys\n"); - return -ENOMEM; - } - - va_start(args, format); - len = vsnprintf(&env->buf[env->buflen], - sizeof(env->buf) - env->buflen, - format, args); - va_end(args); - - if (len >= (sizeof(env->buf) - env->buflen)) { - WARN(1, - KERN_ERR "psb_add_uevent_var: buffer size too small\n"); - return -ENOMEM; - } - - env->envp[env->envp_idx++] = &env->buf[env->buflen]; - env->buflen += len + 1; - return 0; -} -/*EXPORT_SYMBOL_GPL(psb_add_uevent_var);*/ - -#if defined(CONFIG_NET) -int psb_kobject_uevent_init(void) -{ - /* This should be the 15, but 3 seems to work better. Why? WHY!? */ - /* uevent_sock = netlink_kernel_create(&init_net, - NETLINK_PSB_KOBJECT_UEVENT, - DRM_GFX_SOCKET_GROUPS, - NULL, NULL, THIS_MODULE); */ - uevent_sock = netlink_kernel_create(&init_net, - NETLINK_PSB_KOBJECT_UEVENT, - 0x3, /* 3 is for hotplug & dpst */ - NULL, NULL, THIS_MODULE); - - if (!uevent_sock) { - printk(KERN_ERR "psb_kobject_uevent: failed create socket!\n"); - return -ENODEV; - } - netlink_set_nonroot(NETLINK_PSB_KOBJECT_UEVENT, NL_NONROOT_RECV); - - return 0; -} -#endif diff --git a/drivers/staging/cdv/drv/psb_umevents.c b/drivers/staging/cdv/drv/psb_umevents.c deleted file mode 100644 index 932d7d3..0000000 --- a/drivers/staging/cdv/drv/psb_umevents.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ -#include "psb_umevents.h" -/** - * define sysfs operations supported by umevent objects. - * - */ -static struct sysfs_ops umevent_obj_sysfs_ops = { - .show = psb_umevent_attr_show, - .store = psb_umevent_attr_store, -}; -/** - * define the data attributes we will expose through sysfs. - * - */ -static struct umevent_attribute data_0 = - __ATTR(data_0_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_1 = - __ATTR(data_1_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_2 = - __ATTR(data_2_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_3 = - __ATTR(data_3_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_4 = - __ATTR(data_4_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_5 = - __ATTR(data_5_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_6 = - __ATTR(data_6_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -static struct umevent_attribute data_7 = - __ATTR(data_7_val, 0666, psb_umevent_attr_show_imp, - psb_umevent_attr_store_imp); -/** - * define the structure used to seed our ktype. - * - */ -static struct attribute *umevent_obj_default_attrs[] = { - &data_0.attr, - &data_1.attr, - &data_2.attr, - &data_3.attr, - &data_4.attr, - &data_5.attr, - &data_6.attr, - &data_7.attr, - NULL, /* need to NULL terminate the list of attributes */ -}; -/** - * specify the ktype for our kobjects. - * - */ -static struct kobj_type umevent_obj_ktype = { - .sysfs_ops = &umevent_obj_sysfs_ops, - .release = psb_umevent_obj_release, - .default_attrs = umevent_obj_default_attrs, -}; -/** - * psb_umevent_attr_show - default kobject show function - * - * @kobj: kobject associated with the show operation - * @attr: attribute being requested - * @buf: pointer to the return buffer - * - */ -ssize_t psb_umevent_attr_show(struct kobject *kobj, - struct attribute *attr, - char *buf) -{ - struct umevent_attribute *attribute; - struct umevent_obj *any_umevent_obj; - attribute = to_umevent_attr(attr); - any_umevent_obj = to_umevent_obj(kobj); - if (!attribute->show) - return -EIO; - - return attribute->show(any_umevent_obj, attribute, buf); -} -/** - * psb_umevent_attr_store - default kobject store function - * - * @kobj: kobject associated with the store operation - * @attr: attribute being requested - * @buf: input data to write to attribute - * @len: character count - * - */ -ssize_t psb_umevent_attr_store(struct kobject *kobj, - struct attribute *attr, - const char *buf, size_t len) -{ - struct umevent_attribute *attribute; - struct umevent_obj *any_umevent_obj; - attribute = to_umevent_attr(attr); - any_umevent_obj = to_umevent_obj(kobj); - if (!attribute->store) - return -EIO; - - return attribute->store(any_umevent_obj, attribute, buf, len); -} -/** - * psb_umevent_obj_release - kobject release funtion - * - * @kobj: kobject to be released. - */ -void psb_umevent_obj_release(struct kobject *kobj) -{ - struct umevent_obj *any_umevent_obj; - any_umevent_obj = to_umevent_obj(kobj); - kfree(any_umevent_obj); -} -/** - * psb_umevent_attr_show_imp - attribute show implementation - * - * @any_umevent_obj: kobject managed data to read from - * @attr: attribute being requested - * @buf: pointer to the return buffer - * - */ -ssize_t psb_umevent_attr_show_imp(struct umevent_obj - *any_umevent_obj, - struct umevent_attribute *attr, - char *buf) -{ - int var; - - if (strcmp(attr->attr.name, "data_0_val") == 0) - var = any_umevent_obj->data_0_val; - else if (strcmp(attr->attr.name, "data_1_val") == 0) - var = any_umevent_obj->data_1_val; - else if (strcmp(attr->attr.name, "data_2_val") == 0) - var = any_umevent_obj->data_2_val; - else if (strcmp(attr->attr.name, "data_3_val") == 0) - var = any_umevent_obj->data_3_val; - else if (strcmp(attr->attr.name, "data_4_val") == 0) - var = any_umevent_obj->data_4_val; - else if (strcmp(attr->attr.name, "data_5_val") == 0) - var = any_umevent_obj->data_5_val; - else if (strcmp(attr->attr.name, "data_6_val") == 0) - var = any_umevent_obj->data_6_val; - else - var = any_umevent_obj->data_7_val; - - return sprintf(buf, "%d\n", var); -} -/** - * psb_umevent_attr_store_imp - attribute store implementation - * - * @any_umevent_obj: kobject managed data to write to - * @attr: attribute being requested - * @buf: input data to write to attribute - * @count: character count - * - */ -ssize_t psb_umevent_attr_store_imp(struct umevent_obj - *any_umevent_obj, - struct umevent_attribute *attr, - const char *buf, size_t count) -{ - int var; - - sscanf(buf, "%du", &var); - if (strcmp(attr->attr.name, "data_0_val") == 0) - any_umevent_obj->data_0_val = var; - else if (strcmp(attr->attr.name, "data_1_val") == 0) - any_umevent_obj->data_1_val = var; - else if (strcmp(attr->attr.name, "data_2_val") == 0) - any_umevent_obj->data_2_val = var; - else if (strcmp(attr->attr.name, "data_3_val") == 0) - any_umevent_obj->data_3_val = var; - else if (strcmp(attr->attr.name, "data_4_val") == 0) - any_umevent_obj->data_4_val = var; - else if (strcmp(attr->attr.name, "data_5_val") == 0) - any_umevent_obj->data_5_val = var; - else if (strcmp(attr->attr.name, "data_6_val") == 0) - any_umevent_obj->data_6_val = var; - else - any_umevent_obj->data_7_val = var; - return count; -} -/** - * psb_create_umevent_obj - create and track new event objects - * - * @name: name to give to new sysfs / kobject entry - * @list: event object list to track the kobject in - */ -struct umevent_obj *psb_create_umevent_obj(const char *name, - struct umevent_list - *list) -{ - struct umevent_obj *new_umevent_obj; - int retval; - new_umevent_obj = kzalloc(sizeof(*new_umevent_obj), - GFP_KERNEL); - if (!new_umevent_obj) - return NULL; - - new_umevent_obj->kobj.kset = list->umevent_disp_pool; - retval = kobject_init_and_add(&new_umevent_obj->kobj, - &umevent_obj_ktype, NULL, - "%s", name); - if (retval) { - kobject_put(&new_umevent_obj->kobj); - kfree(new_umevent_obj); - return NULL; - } - psb_umevent_add_to_list(list, new_umevent_obj); - return new_umevent_obj; -} -/*EXPORT_SYMBOL(psb_create_umevent_obj); */ -/** - * psb_umevent_notify - info user mode of a new device - * - * @notify_disp_obj: event object to perform notification for - * - */ -void psb_umevent_notify(struct umevent_obj *notify_disp_obj) -{ - kobject_uevent(¬ify_disp_obj->kobj, KOBJ_ADD); -} -/*EXPORT_SYMBOL(psb_umevent_notify); */ - -void psb_umevent_notify_gfxsock(struct umevent_obj *notify_disp_obj, - int dst_group_id) -{ - psb_kobject_uevent(¬ify_disp_obj->kobj, KOBJ_ADD, dst_group_id); -} -/*EXPORT_SYMBOL(psb_umevent_notify_gfxsock);*/ -/** - * psb_umevent_notify_change - notify user mode of a change to a device - * - * @notify_disp_obj: event object to perform notification for - * - */ -void psb_umevent_notify_change(struct umevent_obj *notify_disp_obj) -{ - kobject_uevent(¬ify_disp_obj->kobj, KOBJ_CHANGE); -} -/*EXPORT_SYMBOL(psb_umevent_notify_change); */ -/** - * psb_umevent_notify_change - notify user mode of a change to a device - * - * @notify_disp_obj: event object to perform notification for - * - */ -void psb_umevent_notify_change_gfxsock(struct umevent_obj *notify_disp_obj, - int dst_group_id) -{ - psb_kobject_uevent(¬ify_disp_obj->kobj, KOBJ_CHANGE, dst_group_id); -} -/*EXPORT_SYMBOL(psb_umevent_notify_change_gfxsock); */ -/** - * psb_destroy_umvent_obj - decrement ref count on event so kernel can kill it - * - * @any_umevent_obj: event object to destroy - * - */ -void psb_destroy_umevent_obj(struct umevent_obj - *any_umevent_obj) -{ - kobject_put(&any_umevent_obj->kobj); -} -/** - * - * psb_umevent_init - init the event pool - * - * @parent_kobj: parent kobject to associate new kset with - * @new_umevent_list: event list to associate kset with - * @name: name to give to new sysfs entry - * - */ -int psb_umevent_init(struct kobject *parent_kobj, - struct umevent_list *new_umevent_list, - const char *name) -{ - psb_umevent_init_list(new_umevent_list); - new_umevent_list->umevent_disp_pool = kset_create_and_add(name, NULL, - parent_kobj); - if (!new_umevent_list->umevent_disp_pool) - return -ENOMEM; - - return 0; -} -/*EXPORT_SYMBOL(psb_umevent_init); */ -/** - * - * psb_umevent_cleanup - cleanup all event objects - * - * @kill_list: list of events to destroy - * - */ -void psb_umevent_cleanup(struct umevent_list *kill_list) -{ - psb_umevent_destroy_list(kill_list); -} -/*EXPORT_SYMBOL(psb_umevent_cleanup); */ -/** - * psb_umevent_add_to_list - add an event to the event list - * - * @list: list to add the event to - * @umevent_obj_to_add: event to add - * - */ -void psb_umevent_add_to_list(struct umevent_list *list, - struct umevent_obj *umevent_obj_to_add) -{ - unsigned long flags; - spin_lock_irqsave(&list->list_lock, flags); - list_add(&umevent_obj_to_add->head, &list->head); - spin_unlock_irqrestore(&list->list_lock, flags); -} -/** - * psb_umevent_init_list - initialize event list - * - * @list: list to initialize - * - */ -void psb_umevent_init_list(struct umevent_list *list) -{ - spin_lock_init(&list->list_lock); - INIT_LIST_HEAD(&list->head); -} -/** - * psb_umevent_create_list - allocate an event list - * - */ -struct umevent_list *psb_umevent_create_list() -{ - struct umevent_list *new_umevent_list; - new_umevent_list = NULL; - new_umevent_list = kmalloc(sizeof(struct umevent_list), - GFP_ATOMIC); - return new_umevent_list; -} -/*EXPORT_SYMBOL(psb_umevent_create_list); */ -/** - * psb_umevent_destroy_list - destroy a list and clean up all mem - * - * @list: list to destroy and clean up after - * - */ -void psb_umevent_destroy_list(struct umevent_list *list) -{ - struct umevent_obj *umevent_obj_curr; - struct list_head *node; - struct list_head *node_kill; - int i; - i = 0; - node = NULL; - node_kill = NULL; - node = list->head.next; - while (node != (&list->head)) { - umevent_obj_curr = list_entry(node, - struct umevent_obj, - head); - node_kill = node; - node = umevent_obj_curr->head.next; - list_del(node_kill); - psb_destroy_umevent_obj(umevent_obj_curr); - umevent_obj_curr = NULL; - i++; - } - kset_unregister(list->umevent_disp_pool); - kfree(list); -} -/** - * psb_umevent_remove_from_list - remove an event from tracking list - * - * @list: list to remove the event from - * @disp_to_remove: name of event to remove. - * - */ -void psb_umevent_remove_from_list(struct umevent_list *list, - const char *disp_to_remove) -{ - struct umevent_obj *umevent_obj_curr = NULL; - struct list_head *node = NULL; - struct list_head *node_kill = NULL; - int i = 0; - int found_match = 0; - i = 0; - node = NULL; - node_kill = NULL; - node = list->head.next; - while (node != (&list->head)) { - umevent_obj_curr = list_entry(node, - struct umevent_obj, head); - if (strcmp(umevent_obj_curr->kobj.name, - disp_to_remove) == 0) { - found_match = 1; - break; - } - node = NULL; - node = umevent_obj_curr->head.next; - i++; - } - if (found_match == 1) { - node_kill = node; - node = umevent_obj_curr->head.next; - list_del(node_kill); - psb_destroy_umevent_obj(umevent_obj_curr); - umevent_obj_curr = NULL; - } -} -/*EXPORT_SYMBOL(psb_umevent_remove_from_list); */ -/** - * psb_umevent_find_obj - find an event in a tracking list - * - * @name: name of the event to find - * @list: list to find the event in - * - */ -struct umevent_obj *psb_umevent_find_obj(const char *name, - struct umevent_list *list) -{ - struct umevent_obj *umevent_obj_curr = NULL; - struct list_head *node = NULL; - int i = 0; - int found_match = 0; - - node = NULL; - node = list->head.next; - while (node != (&list->head)) { - umevent_obj_curr = list_entry(node, - struct umevent_obj, head); - if (strcmp(umevent_obj_curr->kobj.name, - name) == 0) { - found_match = 1; - break; - } - node = NULL; - node = umevent_obj_curr->head.next; - i++; - } - if (found_match == 1) - return umevent_obj_curr; - - return NULL; -} -/*EXPORT_SYMBOL(psb_umevent_find_obj); */ -/** - * psb_umevent_debug_dump_list - debug list dump - * - * @list: list to dump - * - */ -void psb_umevent_debug_dump_list(struct umevent_list *list) -{ - struct umevent_obj *umevent_obj_curr; - unsigned long flags; - struct list_head *node; - int i; - spin_lock_irqsave(&list->list_lock, flags); - i = 0; - node = NULL; - node = list->head.next; - while (node != (&list->head)) { - umevent_obj_curr = list_entry(node, - struct umevent_obj, - head); - /*TBD: DUMP ANY REQUIRED VALUES WITH PRINTK*/ - node = NULL; - node = umevent_obj_curr->head.next; - i++; - } - spin_unlock_irqrestore(&list->list_lock, flags); -} diff --git a/drivers/staging/cdv/drv/psb_umevents.h b/drivers/staging/cdv/drv/psb_umevents.h deleted file mode 100644 index 0b9b57d..0000000 --- a/drivers/staging/cdv/drv/psb_umevents.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * James C. Gualario - * - */ -#ifndef _PSB_UMEVENT_H_ -#define _PSB_UMEVENT_H_ -/** - * required includes - * - */ -#include -#include -#include -#include -#include -#include -#include -/** - * event groups for routing to different user mode threads - * - */ -#define DRM_DPST_SOCKET_GROUP_ID 1 -#define DRM_HOTPLUG_SOCKET_GROUP_ID 2 -#define DRM_HDMI_AUDIO_SOCKET_GROUP 4 -#define DRM_HDMI_HDCP_SOCKET_GROUP 8 -#define DRM_GFX_SOCKET_GROUPS 15 -/** - * event structure managed by kobjects - * - */ -struct umevent_obj { - struct kobject kobj; - struct list_head head; - int data_0_val; - int data_1_val; - int data_2_val; - int data_3_val; - int data_4_val; - int data_5_val; - int data_6_val; - int data_7_val; -}; -/** - * event tracking list element - * - */ -struct umevent_list{ - struct list_head head; - struct kset *umevent_disp_pool; - spinlock_t list_lock; -}; -/** - * to go back and forth between kobjects and their main container - * - */ -#define to_umevent_obj(x) \ - container_of(x, struct umevent_obj, kobj) - -/** - * event attributes exposed via sysfs - * - */ -struct umevent_attribute { - struct attribute attr; - ssize_t (*show)(struct umevent_obj *any_umevent_obj, - struct umevent_attribute *attr, char *buf); - ssize_t (*store)(struct umevent_obj *any_umevent_obj, - struct umevent_attribute *attr, - const char *buf, size_t count); -}; -/** - * to go back and forth between the attribute passed to us by the OS - * and the umevent_attribute - * - */ -#define to_umevent_attr(x) \ - container_of(x, struct umevent_attribute, \ - attr) - -/** - * umevent function prototypes - * - */ -extern struct umevent_obj *psb_create_umevent_obj(const char *name, - struct umevent_list - *list); -extern ssize_t psb_umevent_attr_show(struct kobject *kobj, - struct attribute *attr, char *buf); -extern ssize_t psb_umevent_attr_store(struct kobject *kobj, - struct attribute *attr, - const char *buf, size_t len); -extern ssize_t psb_umevent_attr_show_imp(struct umevent_obj - *any_umevent_obj, - struct umevent_attribute *attr, - char *buf); -extern ssize_t psb_umevent_attr_store_imp(struct umevent_obj - *any_umevent_obj, - struct umevent_attribute *attr, - const char *buf, size_t count); -extern void psb_umevent_cleanup(struct umevent_list *kill_list); -extern int psb_umevent_init(struct kobject *parent_kobj, - struct umevent_list *new_umevent_list, - const char *name); -extern void psb_umevent_init_list(struct umevent_list *list); -extern void psb_umevent_debug_dump_list(struct umevent_list *list); -extern void psb_umevent_add_to_list(struct umevent_list *list, - struct umevent_obj - *umevent_obj_to_add); -extern void psb_umevent_destroy_list(struct umevent_list *list); -extern struct umevent_list *psb_umevent_create_list(void); -extern void psb_umevent_notify(struct umevent_obj *notify_disp_obj); -extern void psb_umevent_notify_gfxsock(struct umevent_obj *notify_disp_obj, - int dst_group_id); -extern void psb_umevent_obj_release(struct kobject *kobj); -extern void psb_umevent_remove_from_list(struct umevent_list *list, - const char *disp_to_remove); -extern void psb_umevent_workqueue_dispatch(int work_type, const char *name, - struct umevent_list *list); -extern void psb_umevent_notify_change(struct umevent_obj *notify_disp_obj); -extern void psb_umevent_notify_change_gfxsock(struct umevent_obj - *notify_disp_obj, - int dst_group_id); -extern struct umevent_obj *psb_umevent_find_obj(const char *name, - struct umevent_list - *list); -/** - * socket function prototypes - * - */ -extern int psb_kobject_uevent(struct kobject *kobj, - enum kobject_action action, int dst_group_id); -extern int psb_kobject_uevent_env(struct kobject *kobj, - enum kobject_action action, - char *envp[], int dst_group_id); -int psb_add_uevent_var(struct kobj_uevent_env *env, - const char *format, ...) - __attribute__((format (printf, 2, 3))); -int psb_kobject_action_type(const char *buf, - size_t count, enum kobject_action *type); - -#if defined(CONFIG_NET) -int psb_kobject_uevent_init(void); -#endif - -#endif diff --git a/drivers/staging/cdv/imgv/msvdx_power.c b/drivers/staging/cdv/imgv/msvdx_power.c deleted file mode 100644 index 7782a51..0000000 --- a/drivers/staging/cdv/imgv/msvdx_power.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: binglin.chen@intel.com> - * - */ - -#include "msvdx_power.h" -#include "psb_msvdx.h" -#include "psb_drv.h" - -#include "services_headers.h" -#include "sysconfig.h" - -static PVRSRV_ERROR DevInitMSVDXPart1(IMG_VOID *pvDeviceNode) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvDeviceNode; - PVRSRV_ERROR eError; - PVRSRV_DEV_POWER_STATE eDefaultPowerState; - - /* register power operation function */ - /* FIXME: this should be in part2 init function, but - * currently here only OSPM needs IMG device... */ - eDefaultPowerState = PVRSRV_DEV_POWER_STATE_OFF; - eError = PVRSRVRegisterPowerDevice(psDeviceNode->sDevId.ui32DeviceIndex, - MSVDXPrePowerState, - MSVDXPostPowerState, - MSVDXPreClockSpeedChange, - MSVDXPostClockSpeedChange, - (IMG_HANDLE)psDeviceNode, - PVRSRV_DEV_POWER_STATE_ON, - eDefaultPowerState); - if (eError != PVRSRV_OK) { - PVR_DPF((PVR_DBG_ERROR, "DevInitMSVDXPart1: failed to " - "register device with power manager")); - return eError; - } - - return PVRSRV_OK; -} - -static PVRSRV_ERROR DevDeInitMSVDX(IMG_VOID *pvDeviceNode) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvDeviceNode; - PVRSRV_ERROR eError; - - /* should deinit all resource */ - - eError = PVRSRVRemovePowerDevice(psDeviceNode->sDevId.ui32DeviceIndex); - if (eError != PVRSRV_OK) - return eError; - - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - /* version check */ - - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXRegisterDevice(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - psDeviceNode->sDevId.eDeviceType = PVRSRV_DEVICE_TYPE_MSVDX; - psDeviceNode->sDevId.eDeviceClass = PVRSRV_DEVICE_CLASS_VIDEO; - - psDeviceNode->pfnInitDevice = DevInitMSVDXPart1; - psDeviceNode->pfnDeInitDevice = DevDeInitMSVDX; - - psDeviceNode->pfnInitDeviceCompatCheck = MSVDXDevInitCompatCheck; - - psDeviceNode->pfnDeviceISR = psb_msvdx_interrupt; - psDeviceNode->pvISRData = (IMG_VOID *)gpDrmDevice; - - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXPrePowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ -#if 1 - /* ask for a change not power on*/ - if ((eNewPowerState != eCurrentPowerState) && - (eNewPowerState != PVRSRV_DEV_POWER_STATE_ON)) { - struct drm_psb_private *dev_priv = gpDrmDevice->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - MSVDX_NEW_PMSTATE(gpDrmDevice, msvdx_priv, PSB_PMSTATE_POWERDOWN); - - /* context save */ - psb_msvdx_save_context(gpDrmDevice); - - /* internally close the device */ - - /* ask for power off */ - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF) { - /* here will deinitialize the driver if needed */ - } else { - PVR_DPF((PVR_DBG_MESSAGE, - "%s no action for transform from %d to %d", - __func__, - eCurrentPowerState, - eNewPowerState)); - } - } -#endif - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXPostPowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ -#if 1 - /* if ask for change & current status is not on */ - if ((eNewPowerState != eCurrentPowerState) && - (eCurrentPowerState != PVRSRV_DEV_POWER_STATE_ON)) { - /* internally open device */ - struct drm_psb_private *dev_priv = gpDrmDevice->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - MSVDX_NEW_PMSTATE(gpDrmDevice, msvdx_priv, PSB_PMSTATE_POWERUP); - - /* context restore */ - psb_msvdx_restore_context(gpDrmDevice); - - if (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF) { - /* here will initialize the driver if needed */ - } else { - PVR_DPF((PVR_DBG_MESSAGE, - "%s no action for transform from %d to %d", - __func__, - eCurrentPowerState, - eNewPowerState)); - } - } -#endif - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXPreClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - return PVRSRV_OK; -} - -PVRSRV_ERROR MSVDXPostClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - return PVRSRV_OK; -} diff --git a/drivers/staging/cdv/imgv/msvdx_power.h b/drivers/staging/cdv/imgv/msvdx_power.h deleted file mode 100644 index 580f93f..0000000 --- a/drivers/staging/cdv/imgv/msvdx_power.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: binglin.chen@intel.com> - * - */ - -#ifndef MSVDX_POWER_H_ -#define MSVDX_POWER_H_ - -#include "services_headers.h" -#include "sysconfig.h" - -extern struct drm_device *gpDrmDevice; - -/* function define */ -PVRSRV_ERROR MSVDXRegisterDevice(PVRSRV_DEVICE_NODE *psDeviceNode); -PVRSRV_ERROR MSVDXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode); - -/* power function define */ -PVRSRV_ERROR MSVDXPrePowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -PVRSRV_ERROR MSVDXPostPowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -PVRSRV_ERROR MSVDXPreClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -PVRSRV_ERROR MSVDXPostClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -PVRSRV_ERROR MSVDXInitOSPM(PVRSRV_DEVICE_NODE *psDeviceNode); - -#endif /* !MSVDX_POWER_H_ */ diff --git a/drivers/staging/cdv/imgv/psb_buffer.c b/drivers/staging/cdv/imgv/psb_buffer.c deleted file mode 100644 index 263cd7c..0000000 --- a/drivers/staging/cdv/imgv/psb_buffer.c +++ /dev/null @@ -1,442 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ -#include "ttm/ttm_placement.h" -#include "ttm/ttm_execbuf_util.h" -#include "psb_ttm_fence_api.h" -#include -#include "psb_drv.h" -#include "psb_schedule.h" - -#define DRM_MEM_TTM 26 - -struct drm_psb_ttm_backend { - struct ttm_backend base; - struct page **pages; - unsigned int desired_tile_stride; - unsigned int hw_tile_stride; - int mem_type; - unsigned long offset; - unsigned long num_pages; -}; - -/* - * MSVDX/TOPAZ GPU virtual space looks like this - * (We currently use only one MMU context). - * PSB_MEM_MMU_START: from 0x00000000~0xe000000, for generic buffers - * TTM_PL_CI: from 0xe0000000+half GTT space, for camear/video buffer sharing - * TTM_PL_RAR: from TTM_PL_CI+CI size, for RAR/video buffer sharing - * TTM_PL_TT: from TTM_PL_RAR+RAR size, for buffers need to mapping into GTT - */ -static int psb_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, - struct ttm_mem_type_manager *man) -{ - - struct drm_psb_private *dev_priv = - container_of(bdev, struct drm_psb_private, bdev); - struct psb_gtt *pg = dev_priv->pg; - - switch (type) { - case TTM_PL_SYSTEM: - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; - man->available_caching = TTM_PL_FLAG_CACHED | - TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; - man->default_caching = TTM_PL_FLAG_CACHED; - break; - case DRM_PSB_MEM_MMU: - man->func = &ttm_bo_manager_func; - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | - TTM_MEMTYPE_FLAG_CMA; - man->gpu_offset = PSB_MEM_MMU_START; - man->available_caching = TTM_PL_FLAG_CACHED | - TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; - man->default_caching = TTM_PL_FLAG_WC; - break; - case TTM_PL_CI: - man->func = &ttm_bo_manager_func; - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | - TTM_MEMTYPE_FLAG_FIXED; - man->gpu_offset = pg->mmu_gatt_start + (pg->ci_start); - man->available_caching = TTM_PL_FLAG_UNCACHED; - man->default_caching = TTM_PL_FLAG_UNCACHED; - break; - case TTM_PL_RAR: /* Unmappable RAR memory */ - man->func = &ttm_bo_manager_func; - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | - TTM_MEMTYPE_FLAG_FIXED; - man->available_caching = TTM_PL_FLAG_UNCACHED; - man->default_caching = TTM_PL_FLAG_UNCACHED; - man->gpu_offset = pg->mmu_gatt_start + (pg->rar_start); - break; - case TTM_PL_TT: /* Mappable GATT memory */ - man->func = &ttm_bo_manager_func; -#ifdef PSB_WORKING_HOST_MMU_ACCESS - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; -#else - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | - TTM_MEMTYPE_FLAG_CMA; -#endif - man->available_caching = TTM_PL_FLAG_CACHED | - TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; - man->default_caching = TTM_PL_FLAG_WC; - man->gpu_offset = pg->mmu_gatt_start + (pg->rar_start + dev_priv->rar_region_size); - break; - default: - DRM_ERROR("Unsupported memory type %u\n", (unsigned) type); - return -EINVAL; - } - return 0; -} - - -static void psb_evict_mask(struct ttm_buffer_object *bo, struct ttm_placement* placement) -{ - static uint32_t cur_placement; - - cur_placement = bo->mem.placement & ~TTM_PL_MASK_MEM; - cur_placement |= TTM_PL_FLAG_SYSTEM; - - placement->fpfn = 0; - placement->lpfn = 0; - placement->num_placement = 1; - placement->placement = &cur_placement; - placement->num_busy_placement = 0; - placement->busy_placement = NULL; - - /* all buffers evicted to system memory */ - /* return cur_placement | TTM_PL_FLAG_SYSTEM; */ -} - -static int psb_invalidate_caches(struct ttm_bo_device *bdev, - uint32_t placement) -{ - return 0; -} - -static int psb_move_blit(struct ttm_buffer_object *bo, - bool evict, bool no_wait, - struct ttm_mem_reg *new_mem) -{ - BUG(); - return 0; -} - -/* - * Flip destination ttm into GATT, - * then blit and subsequently move out again. - */ - -static int psb_move_flip(struct ttm_buffer_object *bo, - bool evict, bool interruptible, bool no_wait, - struct ttm_mem_reg *new_mem) -{ - /*struct ttm_bo_device *bdev = bo->bdev;*/ - struct ttm_mem_reg tmp_mem; - int ret; - struct ttm_placement placement; - uint32_t flags = TTM_PL_FLAG_TT; - - tmp_mem = *new_mem; - tmp_mem.mm_node = NULL; - - placement.fpfn = 0; - placement.lpfn = 0; - placement.num_placement = 1; - placement.placement = &flags; - placement.num_busy_placement = 0; /* FIXME */ - placement.busy_placement = NULL; - - ret = ttm_bo_mem_space(bo, &placement, &tmp_mem, interruptible, false, no_wait); - if (ret) - return ret; - ret = ttm_tt_bind(bo->ttm, &tmp_mem); - if (ret) - goto out_cleanup; - ret = psb_move_blit(bo, true, no_wait, &tmp_mem); - if (ret) - goto out_cleanup; - - ret = ttm_bo_move_ttm(bo, evict, false, no_wait, new_mem); -out_cleanup: - if (tmp_mem.mm_node) { - /*spin_lock(&bdev->lru_lock);*/ // lru_lock is removed from upstream TTM - drm_mm_put_block(tmp_mem.mm_node); - tmp_mem.mm_node = NULL; - /*spin_unlock(&bdev->lru_lock);*/ - } - return ret; -} - -static int psb_move(struct ttm_buffer_object *bo, - bool evict, bool interruptible, bool no_wait_reserve, - bool no_wait, struct ttm_mem_reg *new_mem) -{ - struct ttm_mem_reg *old_mem = &bo->mem; - - if ((old_mem->mem_type == TTM_PL_RAR) || - (new_mem->mem_type == TTM_PL_RAR)) { - if(old_mem->mm_node) { - spin_lock(&bo->glob->lru_lock); - drm_mm_put_block(old_mem->mm_node); - spin_unlock(&bo->glob->lru_lock); - } - old_mem->mm_node = NULL; - *old_mem = *new_mem; - } else if (old_mem->mem_type == TTM_PL_SYSTEM) { - return ttm_bo_move_memcpy(bo, evict, false, no_wait, new_mem); - } else if (new_mem->mem_type == TTM_PL_SYSTEM) { - int ret = psb_move_flip(bo, evict, interruptible, - no_wait, new_mem); - if (unlikely(ret != 0)) { - if (ret == -ERESTART) - return ret; - else - return ttm_bo_move_memcpy(bo, evict, false, no_wait, - new_mem); - } - } else { - if (psb_move_blit(bo, evict, no_wait, new_mem)) - return ttm_bo_move_memcpy(bo, evict, false, no_wait, - new_mem); - } - return 0; -} - -static int drm_psb_tbe_populate(struct ttm_backend *backend, - unsigned long num_pages, - struct page **pages, - struct page *dummy_read_page, - dma_addr_t *dma_addrs) -{ - struct drm_psb_ttm_backend *psb_be = - container_of(backend, struct drm_psb_ttm_backend, base); - - psb_be->pages = pages; - return 0; -} - -static int drm_psb_tbe_unbind(struct ttm_backend *backend) -{ - struct ttm_bo_device *bdev = backend->bdev; - struct drm_psb_private *dev_priv = - container_of(bdev, struct drm_psb_private, bdev); - struct drm_psb_ttm_backend *psb_be = - container_of(backend, struct drm_psb_ttm_backend, base); - struct psb_mmu_pd *pd = psb_mmu_get_default_pd(dev_priv->mmu); - /* struct ttm_mem_type_manager *man = &bdev->man[psb_be->mem_type]; */ - - if (psb_be->mem_type == TTM_PL_TT) { - uint32_t gatt_p_offset = - (psb_be->offset - dev_priv->pg->mmu_gatt_start) >> PAGE_SHIFT; - - (void) psb_gtt_remove_pages(dev_priv->pg, gatt_p_offset, - psb_be->num_pages, - psb_be->desired_tile_stride, - psb_be->hw_tile_stride, 0); - } - - psb_mmu_remove_pages(pd, psb_be->offset, - psb_be->num_pages, - psb_be->desired_tile_stride, - psb_be->hw_tile_stride); - - return 0; -} - -static int drm_psb_tbe_bind(struct ttm_backend *backend, - struct ttm_mem_reg *bo_mem) -{ - struct ttm_bo_device *bdev = backend->bdev; - struct drm_psb_private *dev_priv = - container_of(bdev, struct drm_psb_private, bdev); - struct drm_psb_ttm_backend *psb_be = - container_of(backend, struct drm_psb_ttm_backend, base); - struct psb_mmu_pd *pd = psb_mmu_get_default_pd(dev_priv->mmu); - struct ttm_mem_type_manager *man = &bdev->man[bo_mem->mem_type]; - int type; - int ret = 0; - - psb_be->mem_type = bo_mem->mem_type; - psb_be->num_pages = bo_mem->num_pages; - psb_be->desired_tile_stride = 0; - psb_be->hw_tile_stride = 0; - psb_be->offset = (bo_mem->start << PAGE_SHIFT) + - man->gpu_offset; - - type = - (bo_mem-> - placement & TTM_PL_FLAG_CACHED) ? PSB_MMU_CACHED_MEMORY : 0; - - if (psb_be->mem_type == TTM_PL_TT) { - uint32_t gatt_p_offset = - (psb_be->offset - dev_priv->pg->mmu_gatt_start) >> PAGE_SHIFT; - - ret = psb_gtt_insert_pages(dev_priv->pg, psb_be->pages, - gatt_p_offset, - psb_be->num_pages, - psb_be->desired_tile_stride, - psb_be->hw_tile_stride, type); - } - - ret = psb_mmu_insert_pages(pd, psb_be->pages, - psb_be->offset, psb_be->num_pages, - psb_be->desired_tile_stride, - psb_be->hw_tile_stride, type); - if (ret) - goto out_err; - - return 0; -out_err: - drm_psb_tbe_unbind(backend); - return ret; - -} - -static void drm_psb_tbe_clear(struct ttm_backend *backend) -{ - struct drm_psb_ttm_backend *psb_be = - container_of(backend, struct drm_psb_ttm_backend, base); - - psb_be->pages = NULL; - return; -} - -static void drm_psb_tbe_destroy(struct ttm_backend *backend) -{ - struct drm_psb_ttm_backend *psb_be = - container_of(backend, struct drm_psb_ttm_backend, base); - - if (backend) - kfree(psb_be); -} - -static struct ttm_backend_func psb_ttm_backend = { - .populate = drm_psb_tbe_populate, - .clear = drm_psb_tbe_clear, - .bind = drm_psb_tbe_bind, - .unbind = drm_psb_tbe_unbind, - .destroy = drm_psb_tbe_destroy, -}; - -static struct ttm_backend *drm_psb_tbe_init(struct ttm_bo_device *bdev) -{ - struct drm_psb_ttm_backend *psb_be; - - psb_be = kzalloc(sizeof(*psb_be), GFP_KERNEL); - if (!psb_be) - return NULL; - psb_be->pages = NULL; - psb_be->base.func = &psb_ttm_backend; - psb_be->base.bdev = bdev; - return &psb_be->base; -} - -static int psb_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) -{ - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; - struct drm_psb_private *dev_priv = - container_of(bdev, struct drm_psb_private, bdev); - struct psb_gtt *pg = dev_priv->pg; - - mem->bus.addr = NULL; - mem->bus.offset = 0; - mem->bus.size = mem->num_pages << PAGE_SHIFT; - mem->bus.base = 0; - mem->bus.is_iomem = false; - if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE)) - return -EINVAL; - switch (mem->mem_type) { - case TTM_PL_SYSTEM: - /* system memory */ - return 0; - case TTM_PL_TT: - mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = pg->gatt_start; - mem->bus.is_iomem = false; /* Don't know whether it is IO_MEM, this flag used in vm_fault handle */ - break; - case DRM_PSB_MEM_MMU: - mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = 0x00000000; - break; - case TTM_PL_CI: - mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = dev_priv->ci_region_start;; - mem->bus.is_iomem = true; - break; - case TTM_PL_RAR: - mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = dev_priv->rar_region_start;; - mem->bus.is_iomem = true; - break; - default: - return -EINVAL; - } - return 0; -} - -static void psb_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) -{ -} - -/* - * Use this memory type priority if no eviction is needed. - */ -/* -static uint32_t psb_mem_prios[] = { - TTM_PL_CI, - TTM_PL_RAR, - TTM_PL_TT, - DRM_PSB_MEM_MMU, - TTM_PL_SYSTEM -}; -*/ -/* - * Use this memory type priority if need to evict. - */ -/* -static uint32_t psb_busy_prios[] = { - TTM_PL_TT, - TTM_PL_CI, - TTM_PL_RAR, - DRM_PSB_MEM_MMU, - TTM_PL_SYSTEM -}; -*/ -struct ttm_bo_driver psb_ttm_bo_driver = { -/* - .mem_type_prio = psb_mem_prios, - .mem_busy_prio = psb_busy_prios, - .num_mem_type_prio = ARRAY_SIZE(psb_mem_prios), - .num_mem_busy_prio = ARRAY_SIZE(psb_busy_prios), -*/ - .create_ttm_backend_entry = &drm_psb_tbe_init, - .invalidate_caches = &psb_invalidate_caches, - .init_mem_type = &psb_init_mem_type, - .evict_flags = &psb_evict_mask, - .move = &psb_move, - .verify_access = &psb_verify_access, - .sync_obj_signaled = &ttm_fence_sync_obj_signaled, - .sync_obj_wait = &ttm_fence_sync_obj_wait, - .sync_obj_flush = &ttm_fence_sync_obj_flush, - .sync_obj_unref = &ttm_fence_sync_obj_unref, - .sync_obj_ref = &ttm_fence_sync_obj_ref, - .io_mem_reserve = &psb_ttm_io_mem_reserve, - .io_mem_free = &psb_ttm_io_mem_free -}; diff --git a/drivers/staging/cdv/imgv/psb_fence.c b/drivers/staging/cdv/imgv/psb_fence.c deleted file mode 100644 index aa3268b..0000000 --- a/drivers/staging/cdv/imgv/psb_fence.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * Authors: Thomas Hellstrom - */ - -#include -#include "psb_drv.h" -#include "psb_msvdx.h" - - -static void psb_fence_poll(struct ttm_fence_device *fdev, - uint32_t fence_class, uint32_t waiting_types) -{ - struct drm_psb_private *dev_priv = - container_of(fdev, struct drm_psb_private, fdev); - uint32_t sequence = 0; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - - if (unlikely(!dev_priv)) - return; - - if (waiting_types == 0) - return; - - switch (fence_class) { - case PSB_ENGINE_VIDEO: - sequence = msvdx_priv->msvdx_current_sequence; - break; - default: - break; - } - - /* DRM_ERROR("Polling fence sequence, got 0x%08x\n", sequence); */ - ttm_fence_handler(fdev, fence_class, sequence, - _PSB_FENCE_TYPE_EXE, 0); -} - -void psb_fence_error(struct drm_device *dev, - uint32_t fence_class, - uint32_t sequence, uint32_t type, int error) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct ttm_fence_device *fdev = &dev_priv->fdev; - unsigned long irq_flags; - struct ttm_fence_class_manager *fc = - &fdev->fence_class[fence_class]; - - BUG_ON(fence_class >= PSB_NUM_ENGINES); - write_lock_irqsave(&fc->lock, irq_flags); - ttm_fence_handler(fdev, fence_class, sequence, type, error); - write_unlock_irqrestore(&fc->lock, irq_flags); -} - -int psb_fence_emit_sequence(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t flags, uint32_t *sequence, - unsigned long *timeout_jiffies) -{ - struct drm_psb_private *dev_priv = - container_of(fdev, struct drm_psb_private, fdev); - uint32_t seq = 0; - - if (!dev_priv) - return -EINVAL; - - if (fence_class >= PSB_NUM_ENGINES) - return -EINVAL; - - switch (fence_class) { - case PSB_ENGINE_VIDEO: - spin_lock(&dev_priv->sequence_lock); - seq = dev_priv->sequence[fence_class]++; - spin_unlock(&dev_priv->sequence_lock); - break; - default: - DRM_ERROR("Unexpected fence class\n"); - return -EINVAL; - } - - *sequence = seq; - *timeout_jiffies = jiffies + DRM_HZ * 3; - - return 0; -} - -static void psb_fence_lockup(struct ttm_fence_object *fence, - uint32_t fence_types) -{ - struct ttm_fence_device *fdev = fence->fdev; - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - struct drm_psb_private *dev_priv = - container_of(fdev, struct drm_psb_private, fdev); - struct drm_device *dev = (struct drm_device *)dev_priv->dev; - - if (fence->fence_class == PSB_ENGINE_VIDEO) { - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - DRM_ERROR("MSVDX timeout (probable lockup) detected, flush queued cmdbuf"); - - psb_msvdx_flush_cmd_queue(dev); - - write_lock(&fc->lock); - ttm_fence_handler(fence->fdev, fence->fence_class, - fence->sequence, fence_types, -EBUSY); - write_unlock(&fc->lock); - - msvdx_priv->msvdx_needs_reset = 1; - } else - DRM_ERROR("Unsupported fence class\n"); -} - -void psb_fence_handler(struct drm_device *dev, uint32_t fence_class) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct ttm_fence_device *fdev = &dev_priv->fdev; - struct ttm_fence_class_manager *fc = - &fdev->fence_class[fence_class]; - unsigned long irq_flags; - - write_lock_irqsave(&fc->lock, irq_flags); - psb_fence_poll(fdev, fence_class, fc->waiting_types); - write_unlock_irqrestore(&fc->lock, irq_flags); -} - - -static struct ttm_fence_driver psb_ttm_fence_driver = { - .has_irq = NULL, - .emit = psb_fence_emit_sequence, - .flush = NULL, - .poll = psb_fence_poll, - .needed_flush = NULL, - .wait = NULL, - .signaled = NULL, - .lockup = psb_fence_lockup, -}; - -int psb_ttm_fence_device_init(struct ttm_fence_device *fdev) -{ - struct drm_psb_private *dev_priv = - container_of(fdev, struct drm_psb_private, fdev); - struct ttm_fence_class_init fci = {.wrap_diff = (1 << 30), - .flush_diff = (1 << 29), - .sequence_mask = 0xFFFFFFFF - }; - - return ttm_fence_device_init(PSB_NUM_ENGINES, - dev_priv->mem_global_ref.object, - fdev, &fci, 1, - &psb_ttm_fence_driver); -} diff --git a/drivers/staging/cdv/imgv/psb_mmu.c b/drivers/staging/cdv/imgv/psb_mmu.c deleted file mode 100644 index aa32627..0000000 --- a/drivers/staging/cdv/imgv/psb_mmu.c +++ /dev/null @@ -1,1041 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -#include -#include "psb_drv.h" -#include "psb_reg.h" - -/* - * Code for the SGX MMU: - */ - -/* - * clflush on one processor only: - * clflush should apparently flush the cache line on all processors in an - * SMP system. - */ - -/* - * kmap atomic: - * The usage of the slots must be completely encapsulated within a spinlock, and - * no other functions that may be using the locks for other purposed may be - * called from within the locked region. - * Since the slots are per processor, this will guarantee that we are the only - * user. - */ - -/* - * TODO: Inserting ptes from an interrupt handler: - * This may be desirable for some SGX functionality where the GPU can fault in - * needed pages. For that, we need to make an atomic insert_pages function, that - * may fail. - * If it fails, the caller need to insert the page using a workqueue function, - * but on average it should be fast. - */ - -struct psb_mmu_driver { - /* protects driver- and pd structures. Always take in read mode - * before taking the page table spinlock. - */ - struct rw_semaphore sem; - - /* protects page tables, directory tables and pt tables. - * and pt structures. - */ - spinlock_t lock; - - atomic_t needs_tlbflush; - - uint8_t __iomem *register_map; - struct psb_mmu_pd *default_pd; - /*uint32_t bif_ctrl;*/ - int has_clflush; - int clflush_add; - unsigned long clflush_mask; - - struct drm_psb_private *dev_priv; -}; - -struct psb_mmu_pd; - -struct psb_mmu_pt { - struct psb_mmu_pd *pd; - uint32_t index; - uint32_t count; - struct page *p; - uint32_t *v; -}; - -struct psb_mmu_pd { - struct psb_mmu_driver *driver; - int hw_context; - struct psb_mmu_pt **tables; - struct page *p; - struct page *dummy_pt; - struct page *dummy_page; - uint32_t pd_mask; - uint32_t invalid_pde; - uint32_t invalid_pte; -}; - -static inline uint32_t psb_mmu_pt_index(uint32_t offset) -{ - return (offset >> PSB_PTE_SHIFT) & 0x3FF; -} - -static inline uint32_t psb_mmu_pd_index(uint32_t offset) -{ - return offset >> PSB_PDE_SHIFT; -} - -#if defined(CONFIG_X86) -static inline void psb_clflush(void *addr) -{ - __asm__ __volatile__("clflush (%0)\n" : : "r"(addr) : "memory"); -} - -static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, - void *addr) -{ - if (!driver->has_clflush) - return; - - mb(); - psb_clflush(addr); - mb(); -} - -static void psb_page_clflush(struct psb_mmu_driver *driver, struct page* page) -{ - uint32_t clflush_add = driver->clflush_add >> PAGE_SHIFT; - uint32_t clflush_count = PAGE_SIZE / clflush_add; - int i; - uint8_t *clf; - - clf = kmap_atomic(page, KM_USER0); - mb(); - for (i = 0; i < clflush_count; ++i) { - psb_clflush(clf); - clf += clflush_add; - } - mb(); - kunmap_atomic(clf, KM_USER0); -} - -static void psb_pages_clflush(struct psb_mmu_driver *driver, struct page *page[], unsigned long num_pages) -{ - int i; - - if (!driver->has_clflush) - return ; - - for(i = 0; i < num_pages; i++ ) - psb_page_clflush(driver, *page++); -} -#else - -static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, - void *addr) -{; -} - -static void psb_pages_clflush(struct psb_mmu_driver *driver, struct page *page[], unsigned long num_pages) -{ - printk("Dumy psb_pages_clflush\n"); -} - -#endif - -static void psb_mmu_flush_pd_locked(struct psb_mmu_driver *driver, - int force) -{ - if (atomic_read(&driver->needs_tlbflush) || force) { - if (driver->dev_priv) - atomic_set(&driver->dev_priv->msvdx_mmu_invaldc, 1); - } - atomic_set(&driver->needs_tlbflush, 0); -} - -static void psb_mmu_flush_pd(struct psb_mmu_driver *driver, int force) -{ - down_write(&driver->sem); - psb_mmu_flush_pd_locked(driver, force); - up_write(&driver->sem); -} - -void psb_mmu_flush(struct psb_mmu_driver *driver, int rc_prot) -{ - if (rc_prot) - down_write(&driver->sem); - - if (driver->dev_priv) - atomic_set(&driver->dev_priv->msvdx_mmu_invaldc, 1); - - if (rc_prot) - up_write(&driver->sem); -} - -void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context) -{ - /*ttm_tt_cache_flush(&pd->p, 1);*/ - psb_pages_clflush(pd->driver, &pd->p, 1); - down_write(&pd->driver->sem); - wmb(); - psb_mmu_flush_pd_locked(pd->driver, 1); - pd->hw_context = hw_context; - up_write(&pd->driver->sem); - -} - -static inline unsigned long psb_pd_addr_end(unsigned long addr, - unsigned long end) -{ - - addr = (addr + PSB_PDE_MASK + 1) & ~PSB_PDE_MASK; - return (addr < end) ? addr : end; -} - -static inline uint32_t psb_mmu_mask_pte(uint32_t pfn, int type) -{ - uint32_t mask = PSB_PTE_VALID; - - if (type & PSB_MMU_CACHED_MEMORY) - mask |= PSB_PTE_CACHED; - if (type & PSB_MMU_RO_MEMORY) - mask |= PSB_PTE_RO; - if (type & PSB_MMU_WO_MEMORY) - mask |= PSB_PTE_WO; - - return (pfn << PAGE_SHIFT) | mask; -} - -struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver, - int trap_pagefaults, int invalid_type) -{ - struct psb_mmu_pd *pd = kmalloc(sizeof(*pd), GFP_KERNEL); - uint32_t *v; - int i; - - if (!pd) - return NULL; - - pd->p = alloc_page(GFP_DMA32); - if (!pd->p) - goto out_err1; - pd->dummy_pt = alloc_page(GFP_DMA32); - if (!pd->dummy_pt) - goto out_err2; - pd->dummy_page = alloc_page(GFP_DMA32); - if (!pd->dummy_page) - goto out_err3; - - if (!trap_pagefaults) { - pd->invalid_pde = - psb_mmu_mask_pte(page_to_pfn(pd->dummy_pt), - invalid_type); - pd->invalid_pte = - psb_mmu_mask_pte(page_to_pfn(pd->dummy_page), - invalid_type); - } else { - pd->invalid_pde = 0; - pd->invalid_pte = 0; - } - - v = kmap(pd->dummy_pt); - for (i = 0; i < (PAGE_SIZE / sizeof(uint32_t)); ++i) - v[i] = pd->invalid_pte; - - kunmap(pd->dummy_pt); - - v = kmap(pd->p); - for (i = 0; i < (PAGE_SIZE / sizeof(uint32_t)); ++i) - v[i] = pd->invalid_pde; - - kunmap(pd->p); - - clear_page(kmap(pd->dummy_page)); - kunmap(pd->dummy_page); - - pd->tables = vmalloc_user(sizeof(struct psb_mmu_pt *) * 1024); - if (!pd->tables) - goto out_err4; - - pd->hw_context = -1; - pd->pd_mask = PSB_PTE_VALID; - pd->driver = driver; - - return pd; - -out_err4: - __free_page(pd->dummy_page); -out_err3: - __free_page(pd->dummy_pt); -out_err2: - __free_page(pd->p); -out_err1: - kfree(pd); - return NULL; -} - -void psb_mmu_free_pt(struct psb_mmu_pt *pt) -{ - __free_page(pt->p); - kfree(pt); -} - -void psb_mmu_free_pagedir(struct psb_mmu_pd *pd) -{ - struct psb_mmu_driver *driver = pd->driver; - struct psb_mmu_pt *pt; - int i; - - down_write(&driver->sem); - if (pd->hw_context != -1) - psb_mmu_flush_pd_locked(driver, 1); - - /* Should take the spinlock here, but we don't need to do that - since we have the semaphore in write mode. */ - - for (i = 0; i < 1024; ++i) { - pt = pd->tables[i]; - if (pt) - psb_mmu_free_pt(pt); - } - - vfree(pd->tables); - __free_page(pd->dummy_page); - __free_page(pd->dummy_pt); - __free_page(pd->p); - kfree(pd); - up_write(&driver->sem); -} - -static struct psb_mmu_pt *psb_mmu_alloc_pt(struct psb_mmu_pd *pd) -{ - struct psb_mmu_pt *pt = kmalloc(sizeof(*pt), GFP_KERNEL); - void *v; - uint32_t clflush_add = pd->driver->clflush_add >> PAGE_SHIFT; - uint32_t clflush_count = PAGE_SIZE / clflush_add; - spinlock_t *lock = &pd->driver->lock; - uint8_t *clf; - uint32_t *ptes; - int i; - - if (!pt) - return NULL; - - pt->p = alloc_page(GFP_DMA32); - if (!pt->p) { - kfree(pt); - return NULL; - } - - spin_lock(lock); - - v = kmap_atomic(pt->p, KM_USER0); - clf = (uint8_t *) v; - ptes = (uint32_t *) v; - for (i = 0; i < (PAGE_SIZE / sizeof(uint32_t)); ++i) - *ptes++ = pd->invalid_pte; - - -#if defined(CONFIG_X86) - if (pd->driver->has_clflush && pd->hw_context != -1) { - mb(); - for (i = 0; i < clflush_count; ++i) { - psb_clflush(clf); - clf += clflush_add; - } - mb(); - } -#endif - kunmap_atomic(v, KM_USER0); - spin_unlock(lock); - - pt->count = 0; - pt->pd = pd; - pt->index = 0; - - return pt; -} - -struct psb_mmu_pt *psb_mmu_pt_alloc_map_lock(struct psb_mmu_pd *pd, - unsigned long addr) -{ - uint32_t index = psb_mmu_pd_index(addr); - struct psb_mmu_pt *pt; - uint32_t *v; - spinlock_t *lock = &pd->driver->lock; - - spin_lock(lock); - pt = pd->tables[index]; - while (!pt) { - spin_unlock(lock); - pt = psb_mmu_alloc_pt(pd); - if (!pt) - return NULL; - spin_lock(lock); - - if (pd->tables[index]) { - spin_unlock(lock); - psb_mmu_free_pt(pt); - spin_lock(lock); - pt = pd->tables[index]; - continue; - } - - v = kmap_atomic(pd->p, KM_USER0); - pd->tables[index] = pt; - v[index] = (page_to_pfn(pt->p) << 12) | pd->pd_mask; - pt->index = index; - kunmap_atomic((void *) v, KM_USER0); - - if (pd->hw_context != -1) { - psb_mmu_clflush(pd->driver, (void *) &v[index]); - atomic_set(&pd->driver->needs_tlbflush, 1); - } - } - pt->v = kmap_atomic(pt->p, KM_USER0); - return pt; -} - -static struct psb_mmu_pt *psb_mmu_pt_map_lock(struct psb_mmu_pd *pd, - unsigned long addr) -{ - uint32_t index = psb_mmu_pd_index(addr); - struct psb_mmu_pt *pt; - spinlock_t *lock = &pd->driver->lock; - - spin_lock(lock); - pt = pd->tables[index]; - if (!pt) { - spin_unlock(lock); - return NULL; - } - pt->v = kmap_atomic(pt->p, KM_USER0); - return pt; -} - -static void psb_mmu_pt_unmap_unlock(struct psb_mmu_pt *pt) -{ - struct psb_mmu_pd *pd = pt->pd; - uint32_t *v; - - kunmap_atomic(pt->v, KM_USER0); - if (pt->count == 0) { - v = kmap_atomic(pd->p, KM_USER0); - v[pt->index] = pd->invalid_pde; - pd->tables[pt->index] = NULL; - - if (pd->hw_context != -1) { - psb_mmu_clflush(pd->driver, - (void *) &v[pt->index]); - atomic_set(&pd->driver->needs_tlbflush, 1); - } - kunmap_atomic(pt->v, KM_USER0); - spin_unlock(&pd->driver->lock); - psb_mmu_free_pt(pt); - return; - } - spin_unlock(&pd->driver->lock); -} - -static inline void psb_mmu_set_pte(struct psb_mmu_pt *pt, - unsigned long addr, uint32_t pte) -{ - pt->v[psb_mmu_pt_index(addr)] = pte; -} - -static inline void psb_mmu_invalidate_pte(struct psb_mmu_pt *pt, - unsigned long addr) -{ - pt->v[psb_mmu_pt_index(addr)] = pt->pd->invalid_pte; -} - -#if 0 -static uint32_t psb_mmu_check_pte_locked(struct psb_mmu_pd *pd, - uint32_t mmu_offset) -{ - uint32_t *v; - uint32_t pfn; - - v = kmap_atomic(pd->p, KM_USER0); - if (!v) { - printk(KERN_INFO "Could not kmap pde page.\n"); - return 0; - } - pfn = v[psb_mmu_pd_index(mmu_offset)]; - /* printk(KERN_INFO "pde is 0x%08x\n",pfn); */ - kunmap_atomic(v, KM_USER0); - if (((pfn & 0x0F) != PSB_PTE_VALID)) { - printk(KERN_INFO "Strange pde at 0x%08x: 0x%08x.\n", - mmu_offset, pfn); - } - v = ioremap(pfn & 0xFFFFF000, 4096); - if (!v) { - printk(KERN_INFO "Could not kmap pte page.\n"); - return 0; - } - pfn = v[psb_mmu_pt_index(mmu_offset)]; - /* printk(KERN_INFO "pte is 0x%08x\n",pfn); */ - iounmap(v); - if (((pfn & 0x0F) != PSB_PTE_VALID)) { - printk(KERN_INFO "Strange pte at 0x%08x: 0x%08x.\n", - mmu_offset, pfn); - } - return pfn >> PAGE_SHIFT; -} - -static void psb_mmu_check_mirrored_gtt(struct psb_mmu_pd *pd, - uint32_t mmu_offset, - uint32_t gtt_pages) -{ - uint32_t start; - uint32_t next; - - printk(KERN_INFO "Checking mirrored gtt 0x%08x %d\n", - mmu_offset, gtt_pages); - down_read(&pd->driver->sem); - start = psb_mmu_check_pte_locked(pd, mmu_offset); - mmu_offset += PAGE_SIZE; - gtt_pages -= 1; - while (gtt_pages--) { - next = psb_mmu_check_pte_locked(pd, mmu_offset); - if (next != start + 1) { - printk(KERN_INFO - "Ptes out of order: 0x%08x, 0x%08x.\n", - start, next); - } - start = next; - mmu_offset += PAGE_SIZE; - } - up_read(&pd->driver->sem); -} - -#endif - -void psb_mmu_mirror_gtt(struct psb_mmu_pd *pd, - uint32_t mmu_offset, uint32_t gtt_start, - uint32_t gtt_pages) -{ - uint32_t *v; - uint32_t start = psb_mmu_pd_index(mmu_offset); - struct psb_mmu_driver *driver = pd->driver; - int num_pages = gtt_pages; - - down_read(&driver->sem); - spin_lock(&driver->lock); - - v = kmap_atomic(pd->p, KM_USER0); - v += start; - - while (gtt_pages--) { - *v++ = gtt_start | pd->pd_mask; - gtt_start += PAGE_SIZE; - } - - /*ttm_tt_cache_flush(&pd->p, num_pages);*/ - psb_pages_clflush(pd->driver, &pd->p, num_pages); - kunmap_atomic(v, KM_USER0); - spin_unlock(&driver->lock); - - if (pd->hw_context != -1) - atomic_set(&pd->driver->needs_tlbflush, 1); - - up_read(&pd->driver->sem); - psb_mmu_flush_pd(pd->driver, 0); -} - -struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver *driver) -{ - struct psb_mmu_pd *pd; - - /* down_read(&driver->sem); */ - pd = driver->default_pd; - /* up_read(&driver->sem); */ - - return pd; -} - -/* Returns the physical address of the PD shared by sgx/msvdx */ -uint32_t psb_get_default_pd_addr(struct psb_mmu_driver *driver) -{ - struct psb_mmu_pd *pd; - - pd = psb_mmu_get_default_pd(driver); - return page_to_pfn(pd->p) << PAGE_SHIFT; -} - -void psb_mmu_driver_takedown(struct psb_mmu_driver *driver) -{ - psb_mmu_free_pagedir(driver->default_pd); - kfree(driver); -} - -struct psb_mmu_driver *psb_mmu_driver_init(uint8_t __iomem * registers, - int trap_pagefaults, - int invalid_type, - struct drm_psb_private *dev_priv) -{ - struct psb_mmu_driver *driver; - - driver = kmalloc(sizeof(*driver), GFP_KERNEL); - - if (!driver) - return NULL; - driver->dev_priv = dev_priv; - - driver->default_pd = psb_mmu_alloc_pd(driver, trap_pagefaults, - invalid_type); - if (!driver->default_pd) - goto out_err1; - - spin_lock_init(&driver->lock); - init_rwsem(&driver->sem); - down_write(&driver->sem); - driver->register_map = registers; - atomic_set(&driver->needs_tlbflush, 1); - - driver->has_clflush = 0; - -#if defined(CONFIG_X86) - if (boot_cpu_has(X86_FEATURE_CLFLSH)) { - uint32_t tfms, misc, cap0, cap4, clflush_size; - - /* - * clflush size is determined at kernel setup for x86_64 - * but not for i386. We have to do it here. - */ - - cpuid(0x00000001, &tfms, &misc, &cap0, &cap4); - clflush_size = ((misc >> 8) & 0xff) * 8; - driver->has_clflush = 1; - driver->clflush_add = PAGE_SIZE * clflush_size / sizeof(uint32_t); - driver->clflush_mask = driver->clflush_add - 1; - driver->clflush_mask = ~driver->clflush_mask; - } -#endif - - up_write(&driver->sem); - return driver; - -out_err1: - kfree(driver); - return NULL; -} - -#if defined(CONFIG_X86) -static void psb_mmu_flush_ptes(struct psb_mmu_pd *pd, - unsigned long address, uint32_t num_pages, - uint32_t desired_tile_stride, - uint32_t hw_tile_stride) -{ - struct psb_mmu_pt *pt; - uint32_t rows = 1; - uint32_t i; - unsigned long addr; - unsigned long end; - unsigned long next; - unsigned long add; - unsigned long row_add; - unsigned long clflush_add = pd->driver->clflush_add; - unsigned long clflush_mask = pd->driver->clflush_mask; - - if (!pd->driver->has_clflush) { - /*ttm_tt_cache_flush(&pd->p, num_pages);*/ - psb_pages_clflush(pd->driver, &pd->p, num_pages); - return; - } - - if (hw_tile_stride) - rows = num_pages / desired_tile_stride; - else - desired_tile_stride = num_pages; - - add = desired_tile_stride << PAGE_SHIFT; - row_add = hw_tile_stride << PAGE_SHIFT; - mb(); - for (i = 0; i < rows; ++i) { - - addr = address; - end = addr + add; - - do { - next = psb_pd_addr_end(addr, end); - pt = psb_mmu_pt_map_lock(pd, addr); - if (!pt) - continue; - do { - psb_clflush(&pt->v - [psb_mmu_pt_index(addr)]); - } while (addr += - clflush_add, - (addr & clflush_mask) < next); - - psb_mmu_pt_unmap_unlock(pt); - } while (addr = next, next != end); - address += row_add; - } - mb(); -} -#else -static void psb_mmu_flush_ptes(struct psb_mmu_pd *pd, - unsigned long address, uint32_t num_pages, - uint32_t desired_tile_stride, - uint32_t hw_tile_stride) -{ - drm_ttm_cache_flush(&pd->p, num_pages); -} -#endif - -void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd, - unsigned long address, uint32_t num_pages) -{ - struct psb_mmu_pt *pt; - unsigned long addr; - unsigned long end; - unsigned long next; - unsigned long f_address = address; - - down_read(&pd->driver->sem); - - addr = address; - end = addr + (num_pages << PAGE_SHIFT); - - do { - next = psb_pd_addr_end(addr, end); - pt = psb_mmu_pt_alloc_map_lock(pd, addr); - if (!pt) - goto out; - do { - psb_mmu_invalidate_pte(pt, addr); - --pt->count; - } while (addr += PAGE_SIZE, addr < next); - psb_mmu_pt_unmap_unlock(pt); - - } while (addr = next, next != end); - -out: - if (pd->hw_context != -1) - psb_mmu_flush_ptes(pd, f_address, num_pages, 1, 1); - - up_read(&pd->driver->sem); - - if (pd->hw_context != -1) - psb_mmu_flush(pd->driver, 0); - - return; -} - -void psb_mmu_remove_pages(struct psb_mmu_pd *pd, unsigned long address, - uint32_t num_pages, uint32_t desired_tile_stride, - uint32_t hw_tile_stride) -{ - struct psb_mmu_pt *pt; - uint32_t rows = 1; - uint32_t i; - unsigned long addr; - unsigned long end; - unsigned long next; - unsigned long add; - unsigned long row_add; - unsigned long f_address = address; - - if (hw_tile_stride) - rows = num_pages / desired_tile_stride; - else - desired_tile_stride = num_pages; - - add = desired_tile_stride << PAGE_SHIFT; - row_add = hw_tile_stride << PAGE_SHIFT; - - /* down_read(&pd->driver->sem); */ - - /* Make sure we only need to flush this processor's cache */ - - for (i = 0; i < rows; ++i) { - - addr = address; - end = addr + add; - - do { - next = psb_pd_addr_end(addr, end); - pt = psb_mmu_pt_map_lock(pd, addr); - if (!pt) - continue; - do { - psb_mmu_invalidate_pte(pt, addr); - --pt->count; - - } while (addr += PAGE_SIZE, addr < next); - psb_mmu_pt_unmap_unlock(pt); - - } while (addr = next, next != end); - address += row_add; - } - if (pd->hw_context != -1) - psb_mmu_flush_ptes(pd, f_address, num_pages, - desired_tile_stride, hw_tile_stride); - - /* up_read(&pd->driver->sem); */ - - if (pd->hw_context != -1) - psb_mmu_flush(pd->driver, 0); -} - -int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd, uint32_t start_pfn, - unsigned long address, uint32_t num_pages, - int type) -{ - struct psb_mmu_pt *pt; - uint32_t pte; - unsigned long addr; - unsigned long end; - unsigned long next; - unsigned long f_address = address; - int ret = 0; - - down_read(&pd->driver->sem); - - addr = address; - end = addr + (num_pages << PAGE_SHIFT); - - do { - next = psb_pd_addr_end(addr, end); - pt = psb_mmu_pt_alloc_map_lock(pd, addr); - if (!pt) { - ret = -ENOMEM; - goto out; - } - do { - pte = psb_mmu_mask_pte(start_pfn++, type); - psb_mmu_set_pte(pt, addr, pte); - pt->count++; - } while (addr += PAGE_SIZE, addr < next); - psb_mmu_pt_unmap_unlock(pt); - - } while (addr = next, next != end); - -out: - if (pd->hw_context != -1) - psb_mmu_flush_ptes(pd, f_address, num_pages, 1, 1); - - up_read(&pd->driver->sem); - - if (pd->hw_context != -1) - psb_mmu_flush(pd->driver, 1); - - return ret; -} - -int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages, - unsigned long address, uint32_t num_pages, - uint32_t desired_tile_stride, - uint32_t hw_tile_stride, int type) -{ - struct psb_mmu_pt *pt; - uint32_t rows = 1; - uint32_t i; - uint32_t pte; - unsigned long addr; - unsigned long end; - unsigned long next; - unsigned long add; - unsigned long row_add; - unsigned long f_address = address; - int ret = 0; - - if (hw_tile_stride) { - if (num_pages % desired_tile_stride != 0) - return -EINVAL; - rows = num_pages / desired_tile_stride; - } else { - desired_tile_stride = num_pages; - } - - add = desired_tile_stride << PAGE_SHIFT; - row_add = hw_tile_stride << PAGE_SHIFT; - - down_read(&pd->driver->sem); - - for (i = 0; i < rows; ++i) { - - addr = address; - end = addr + add; - - do { - next = psb_pd_addr_end(addr, end); - pt = psb_mmu_pt_alloc_map_lock(pd, addr); - if (!pt) { - ret = -ENOMEM; - goto out; - } - do { - pte = - psb_mmu_mask_pte(page_to_pfn(*pages++), - type); - psb_mmu_set_pte(pt, addr, pte); - pt->count++; - } while (addr += PAGE_SIZE, addr < next); - psb_mmu_pt_unmap_unlock(pt); - - } while (addr = next, next != end); - - address += row_add; - } -out: - if (pd->hw_context != -1) - psb_mmu_flush_ptes(pd, f_address, num_pages, - desired_tile_stride, hw_tile_stride); - - up_read(&pd->driver->sem); - - if (pd->hw_context != -1) - psb_mmu_flush(pd->driver, 1); - - return ret; -} -#if 0 /*comented out, only used in mmu test now*/ -void psb_mmu_enable_requestor(struct psb_mmu_driver *driver, uint32_t mask) -{ - mask &= _PSB_MMU_ER_MASK; - psb_iowrite32(driver, - psb_ioread32(driver, PSB_CR_BIF_CTRL) & ~mask, - PSB_CR_BIF_CTRL); - (void) psb_ioread32(driver, PSB_CR_BIF_CTRL); -} - -void psb_mmu_disable_requestor(struct psb_mmu_driver *driver, - uint32_t mask) -{ - mask &= _PSB_MMU_ER_MASK; - psb_iowrite32(driver, psb_ioread32(driver, PSB_CR_BIF_CTRL) | mask, - PSB_CR_BIF_CTRL); - (void) psb_ioread32(driver, PSB_CR_BIF_CTRL); -} -#endif -int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual, - unsigned long *pfn) -{ - int ret; - struct psb_mmu_pt *pt; - uint32_t tmp; - spinlock_t *lock = &pd->driver->lock; - - down_read(&pd->driver->sem); - pt = psb_mmu_pt_map_lock(pd, virtual); - if (!pt) { - uint32_t *v; - - spin_lock(lock); - v = kmap_atomic(pd->p, KM_USER0); - tmp = v[psb_mmu_pd_index(virtual)]; - kunmap_atomic(v, KM_USER0); - spin_unlock(lock); - - if (tmp != pd->invalid_pde || !(tmp & PSB_PTE_VALID) || - !(pd->invalid_pte & PSB_PTE_VALID)) { - ret = -EINVAL; - goto out; - } - ret = 0; - *pfn = pd->invalid_pte >> PAGE_SHIFT; - goto out; - } - tmp = pt->v[psb_mmu_pt_index(virtual)]; - if (!(tmp & PSB_PTE_VALID)) { - ret = -EINVAL; - } else { - ret = 0; - *pfn = tmp >> PAGE_SHIFT; - } - psb_mmu_pt_unmap_unlock(pt); -out: - up_read(&pd->driver->sem); - return ret; -} -#if 0 -void psb_mmu_test(struct psb_mmu_driver *driver, uint32_t offset) -{ - struct page *p; - unsigned long pfn; - int ret = 0; - struct psb_mmu_pd *pd; - uint32_t *v; - uint32_t *vmmu; - - pd = driver->default_pd; - if (!pd) - printk(KERN_WARNING "Could not get default pd\n"); - - - p = alloc_page(GFP_DMA32); - - if (!p) { - printk(KERN_WARNING "Failed allocating page\n"); - return; - } - - v = kmap(p); - memset(v, 0x67, PAGE_SIZE); - - pfn = (offset >> PAGE_SHIFT); - - ret = psb_mmu_insert_pages(pd, &p, pfn << PAGE_SHIFT, 1, 0, 0, 0); - if (ret) { - printk(KERN_WARNING "Failed inserting mmu page\n"); - goto out_err1; - } - - /* Ioremap the page through the GART aperture */ - - vmmu = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE); - if (!vmmu) { - printk(KERN_WARNING "Failed ioremapping page\n"); - goto out_err2; - } - - /* Read from the page with mmu disabled. */ - printk(KERN_INFO "Page first dword is 0x%08x\n", ioread32(vmmu)); - - /* Enable the mmu for host accesses and read again. */ - psb_mmu_enable_requestor(driver, _PSB_MMU_ER_HOST); - - printk(KERN_INFO "MMU Page first dword is (0x67676767) 0x%08x\n", - ioread32(vmmu)); - *v = 0x15243705; - printk(KERN_INFO "MMU Page new dword is (0x15243705) 0x%08x\n", - ioread32(vmmu)); - iowrite32(0x16243355, vmmu); - (void) ioread32(vmmu); - printk(KERN_INFO "Page new dword is (0x16243355) 0x%08x\n", *v); - - printk(KERN_INFO "Int stat is 0x%08x\n", - psb_ioread32(driver, PSB_CR_BIF_INT_STAT)); - printk(KERN_INFO "Fault is 0x%08x\n", - psb_ioread32(driver, PSB_CR_BIF_FAULT)); - - /* Disable MMU for host accesses and clear page fault register */ - psb_mmu_disable_requestor(driver, _PSB_MMU_ER_HOST); - iounmap(vmmu); -out_err2: - psb_mmu_remove_pages(pd, pfn << PAGE_SHIFT, 1, 0, 0); -out_err1: - kunmap(p); - __free_page(p); -} -#endif diff --git a/drivers/staging/cdv/imgv/psb_msvdx.c b/drivers/staging/cdv/imgv/psb_msvdx.c deleted file mode 100644 index 8a50f4b..0000000 --- a/drivers/staging/cdv/imgv/psb_msvdx.c +++ /dev/null @@ -1,1451 +0,0 @@ -/************************************************************************** - * MSVDX I/O operations and IRQ handling - * - * Copyright (c) 2011 Intel Corporation, Hillsboro, OR, USA - * Copyright (c) Imagination Technologies Limited, UK - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#include -#include "psb_drm.h" -#include "psb_drv.h" -#include "psb_msvdx.h" -#include "psb_powermgmt.h" -#include -#include - -#ifndef list_first_entry -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->next, type, member) -#endif - -#define DRM_MPEG2_DELAY 125 - -static int psb_msvdx_send(struct drm_device *dev, void *cmd, - unsigned long cmd_size); - -static int psb_msvdx_dequeue_send(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_msvdx_cmd_queue *msvdx_cmd = NULL; - int ret = 0; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - if (list_empty(&msvdx_priv->msvdx_queue)) { - PSB_DEBUG_GENERAL("MSVDXQUE: msvdx list empty.\n"); - msvdx_priv->msvdx_busy = 0; - return -EINVAL; - } - msvdx_cmd = list_first_entry(&msvdx_priv->msvdx_queue, - struct psb_msvdx_cmd_queue, head); - PSB_DEBUG_GENERAL("MSVDXQUE: Queue has id %08x\n", msvdx_cmd->sequence); - ret = psb_msvdx_send(dev, msvdx_cmd->cmd, msvdx_cmd->cmd_size); - if (ret) { - DRM_ERROR("MSVDXQUE: psb_msvdx_send failed\n"); - ret = -EINVAL; - } - list_del(&msvdx_cmd->head); - kfree(msvdx_cmd->cmd); - kfree(msvdx_cmd); - - return ret; -} - -static int psb_msvdx_map_command(struct drm_device *dev, - struct ttm_buffer_object *cmd_buffer, - unsigned long cmd_offset, unsigned long cmd_size, - void **msvdx_cmd, uint32_t sequence, int copy_cmd) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int ret = 0; - unsigned long cmd_page_offset = cmd_offset & ~PAGE_MASK; - unsigned long cmd_size_remaining; - struct ttm_bo_kmap_obj cmd_kmap, regio_kmap; - void *cmd, *cmd_copy, *cmd_start; - bool is_iomem; - int i; - struct HOST_BE_OPP_PARAMS * oppParam; - drm_psb_msvdx_frame_info_t * current_frame = NULL; - int first_empty = -1; - - - /* command buffers may not exceed page boundary */ - if (cmd_size + cmd_page_offset > PAGE_SIZE) - return -EINVAL; - - ret = ttm_bo_kmap(cmd_buffer, cmd_offset >> PAGE_SHIFT, 1, &cmd_kmap); - if (ret) { - DRM_ERROR("MSVDXQUE:ret:%d\n", ret); - return ret; - } - - cmd_start = (void *)ttm_kmap_obj_virtual(&cmd_kmap, &is_iomem) - + cmd_page_offset; - cmd = cmd_start; - cmd_size_remaining = cmd_size; - - while (cmd_size_remaining > 0) { - uint32_t cur_cmd_size = MEMIO_READ_FIELD(cmd, FWRK_GENMSG_SIZE); - uint32_t cur_cmd_id = MEMIO_READ_FIELD(cmd, FWRK_GENMSG_ID); - uint32_t mmu_ptd = 0, msvdx_mmu_invalid = 0; - struct psb_msvdx_deblock_queue *msvdx_deblock; - unsigned long irq_flags; - - PSB_DEBUG_GENERAL("cmd start at %08x cur_cmd_size = %d" - " cur_cmd_id = %02x fence = %08x\n", - (uint32_t) cmd, cur_cmd_size, cur_cmd_id, sequence); - if ((cur_cmd_size % sizeof(uint32_t)) - || (cur_cmd_size > cmd_size_remaining)) { - ret = -EINVAL; - DRM_ERROR("MSVDX: ret:%d\n", ret); - goto out; - } - - switch (cur_cmd_id) { - case VA_MSGID_RENDER: - PSB_DEBUG_MSVDX("MSVDX_DEBUG: send render message. \n"); - - /* Fence ID */ - if((IS_CDV(dev)) && IS_FW_UPDATED) - MEMIO_WRITE_FIELD(cmd, FW_VA_DECODE_MSG_ID, sequence); - else - MEMIO_WRITE_FIELD(cmd, FW_VA_RENDER_FENCE_VALUE, sequence); - - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - msvdx_mmu_invalid = atomic_cmpxchg(&dev_priv->msvdx_mmu_invaldc, - 1, 0); - if (msvdx_mmu_invalid == 1) { - if(!(IS_CDV(dev) && IS_FW_UPDATED)) - mmu_ptd |= 1; - else { - uint32_t flags; - flags = MEMIO_READ_FIELD(cmd, FW_DEVA_DECODE_FLAGS); - flags |= FW_DEVA_INVALIDATE_MMU; - MEMIO_WRITE_FIELD(cmd, FW_DEVA_DECODE_FLAGS, flags); - } - - PSB_DEBUG_GENERAL("MSVDX:Set MMU invalidate\n"); - } - - /* PTD */ - if((IS_CDV(dev) ) && IS_FW_UPDATED) { - uint32_t context_id; - context_id = MEMIO_READ_FIELD(cmd, FW_VA_DECODE_MMUPTD); - mmu_ptd = mmu_ptd | (context_id & 0xff); - MEMIO_WRITE_FIELD(cmd, FW_VA_DECODE_MMUPTD, mmu_ptd); - } - else - MEMIO_WRITE_FIELD(cmd, FW_VA_RENDER_MMUPTD, mmu_ptd); - break; - - case VA_MSGID_OOLD: - MEMIO_WRITE_FIELD(cmd, FW_DXVA_OOLD_FENCE_VALUE, - sequence); - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - msvdx_mmu_invalid = atomic_cmpxchg(&dev_priv->msvdx_mmu_invaldc, - 1, 0); - if (msvdx_mmu_invalid == 1) { - mmu_ptd |= 1; - PSB_DEBUG_GENERAL("MSVDX:Set MMU invalidate\n"); - } - - /* PTD */ - MEMIO_WRITE_FIELD(cmd, FW_DXVA_OOLD_MMUPTD, mmu_ptd); - - PSB_DEBUG_GENERAL("MSVDX:Get oold cmd\n"); - - break; - - case VA_MSGID_OOLD_MFLD: - case VA_MSGID_DEBLOCK_MFLD: { - FW_VA_DEBLOCK_MSG * deblock_msg; - - PSB_DEBUG_GENERAL("MSVDX:Get deblock cmd for medfield\n"); - - deblock_msg = (FW_VA_DEBLOCK_MSG *)cmd; - - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - msvdx_mmu_invalid = atomic_cmpxchg(&dev_priv->msvdx_mmu_invaldc, - 1, 0); - if (msvdx_mmu_invalid == 1) { - uint32_t flags; - flags = deblock_msg->flags; - flags |= FW_DEVA_INVALIDATE_MMU; - deblock_msg->flags = flags; - - PSB_DEBUG_GENERAL("MSVDX:Set MMU invalidate\n"); - } - - - deblock_msg->header.bits.msg_type = cur_cmd_id - VA_MSGID_DEBLOCK_MFLD + VA_MSGID_DEBLOCK; /* patch to right cmd type */ - deblock_msg->header.bits.msg_fence = (uint16_t)(sequence & 0xffff); - deblock_msg->mmu_context.bits.mmu_ptd = (mmu_ptd >> 8); - - } - break; - - case VA_MSGID_DEBLOCK: - msvdx_priv->deblock_enabled = 1; - /* Fence ID */ - MEMIO_WRITE_FIELD(cmd, FW_DXVA_DEBLOCK_FENCE_VALUE, - sequence); - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - msvdx_mmu_invalid = atomic_cmpxchg(&dev_priv->msvdx_mmu_invaldc, - 1, 0); - if (msvdx_mmu_invalid == 1) { - mmu_ptd |= 1; - PSB_DEBUG_GENERAL("MSVDX:Set MMU invalidate\n"); - } - - /* PTD */ - MEMIO_WRITE_FIELD(cmd, - FW_DXVA_DEBLOCK_MMUPTD, - mmu_ptd); - - /* printk("Got deblock msg\n"); */ - /* Deblock message is followed by 32 */ - /* bytes of deblock params */ - msvdx_deblock = kmalloc( - sizeof(struct psb_msvdx_deblock_queue), - GFP_KERNEL); - - if (msvdx_deblock == NULL) { - DRM_ERROR("DEBLOCK QUE: Out of memory...\n"); - ret = -ENOMEM; - goto out; - } - - memcpy(&msvdx_deblock->dbParams, cmd + 16, sizeof(struct DEBLOCKPARAMS)); - - ret = ttm_bo_kmap( - (struct ttm_buffer_object *) - msvdx_deblock->dbParams.handle, - 0, - (msvdx_deblock->dbParams.buffer_size + - PAGE_SIZE - 1) >> PAGE_SHIFT, - ®io_kmap); - - /* printk("deblock regio buffer size is 0x%x\n", - msvdx_deblock->dbParams.buffer_size); */ - - if (likely(!ret)) { - msvdx_deblock->dbParams.pPicparams = kmalloc( - msvdx_deblock->dbParams.buffer_size, - GFP_KERNEL); - - if (msvdx_deblock->dbParams.pPicparams != NULL) - memcpy( - msvdx_deblock->dbParams.pPicparams, - regio_kmap.virtual, - msvdx_deblock->dbParams.buffer_size); - ttm_bo_kunmap(®io_kmap); - } - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - list_add_tail(&msvdx_deblock->head, - &msvdx_priv->deblock_queue); - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, - irq_flags); - - cmd += sizeof(struct DEBLOCKPARAMS); - cmd_size_remaining -= sizeof(struct DEBLOCKPARAMS); - break; - - case VA_MSGID_HOST_BE_OPP: - - PSB_DEBUG_MSVDX("MSVDX_DEBUG: send host_be_opp message. \n"); - - msvdx_priv->host_be_opp_enabled = 1; - /* Fence ID */ - MEMIO_WRITE_FIELD(cmd, FW_VA_HOST_BE_OPP_FENCE_VALUE, - sequence); - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - msvdx_mmu_invalid = atomic_cmpxchg(&dev_priv->msvdx_mmu_invaldc, - 1, 0); - if (msvdx_mmu_invalid == 1) { - mmu_ptd |= 1; - PSB_DEBUG_GENERAL("MSVDX:Set MMU invalidate\n"); - } - - /* PTD */ - MEMIO_WRITE_FIELD(cmd, - FW_VA_HOST_BE_OPP_MMUPTD, - mmu_ptd); - - /* HostBeOpp message is followed by 32 bytes of host_be_opp params */ - oppParam = kmalloc( - sizeof(struct HOST_BE_OPP_PARAMS), - GFP_KERNEL); - - if (oppParam == NULL) { - DRM_ERROR("DEBLOCK QUE: Out of memory...\n"); - ret = -ENOMEM; - goto out; - } - - memcpy(oppParam, cmd + 16, sizeof(struct HOST_BE_OPP_PARAMS)); - /*get the right frame_info struct for current surface*/ - for (i = 0; i < MAX_DECODE_BUFFERS; i++) { - if (msvdx_priv->frame_info[i].handle == oppParam->handle) { - current_frame = &(msvdx_priv->frame_info[i]); - break; - } - if ((first_empty == -1) && (msvdx_priv->frame_info[i].handle == 0)) - first_empty = i; - } - - /*if didn't find the struct for current surface, use the earliest empty one*/ - if (!current_frame) { - if (first_empty == -1) { - DRM_ERROR("failed find the struct for current surface and also there is no empty one.\n"); - ret = -EFAULT; - goto out; - } - current_frame = &(msvdx_priv->frame_info[first_empty]); - } - - memset(current_frame, 0, sizeof(drm_psb_msvdx_frame_info_t)); - current_frame->handle = oppParam->handle; - current_frame->buffer_stride = oppParam->buffer_stride; - current_frame->buffer_size = oppParam->buffer_size; - current_frame->picture_width_mb = oppParam->picture_width_mb; - current_frame->size_mb = oppParam->size_mb; - current_frame->fence = sequence; - - - cmd += sizeof(struct HOST_BE_OPP_PARAMS); - cmd_size_remaining -= sizeof(struct HOST_BE_OPP_PARAMS); - - break; - - default: - /* Msg not supported */ - ret = -EINVAL; - PSB_DEBUG_GENERAL("MSVDX: ret:%d\n", ret); - goto out; - } - - cmd += cur_cmd_size; - cmd_size_remaining -= cur_cmd_size; - } - - if (copy_cmd) { - PSB_DEBUG_GENERAL("MSVDXQUE:copying command\n"); - - cmd_copy = kzalloc(cmd_size, GFP_KERNEL); - if (cmd_copy == NULL) { - ret = -ENOMEM; - DRM_ERROR("MSVDX: fail to callc,ret=:%d\n", ret); - goto out; - } - memcpy(cmd_copy, cmd_start, cmd_size); - *msvdx_cmd = cmd_copy; - } else { - PSB_DEBUG_GENERAL("MSVDXQUE:did NOT copy command\n"); - ret = psb_msvdx_send(dev, cmd_start, cmd_size); - if (ret) { - DRM_ERROR("MSVDXQUE: psb_msvdx_send failed\n"); - ret = -EINVAL; - } - } - -out: - ttm_bo_kunmap(&cmd_kmap); - - return ret; -} - -int psb_submit_video_cmdbuf(struct drm_device *dev, - struct ttm_buffer_object *cmd_buffer, - unsigned long cmd_offset, unsigned long cmd_size, - struct ttm_fence_object *fence) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - uint32_t sequence = dev_priv->sequence[PSB_ENGINE_VIDEO]; - unsigned long irq_flags; - int ret = 0; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int offset = 0; - /* psb_schedule_watchdog(dev_priv); */ - - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - - /* expected msvdx_needs_reset is set after previous session exited - * but msvdx_hw_busy is always 1, and caused powerdown not excuted - * so reload the firmware for every new context - */ - - dev_priv->last_msvdx_ctx = dev_priv->msvdx_ctx; - - if (msvdx_priv->msvdx_needs_reset) { - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - PSB_DEBUG_GENERAL("MSVDX: will reset msvdx\n"); - if (psb_msvdx_reset(dev_priv)) { - ret = -EBUSY; - DRM_ERROR("MSVDX: Reset failed\n"); - return ret; - } - msvdx_priv->msvdx_needs_reset = 0; - msvdx_priv->msvdx_busy = 0; - - if(psb_msvdx_init(dev)) { - ret = -EIO; - DRM_ERROR("MSVDX: failed in MSVDX Initialization\n"); - return ret; - } - - /* restore vec local mem if needed */ - if (msvdx_priv->vec_local_mem_saved && - msvdx_priv->vec_local_mem_data) { - for (offset = 0; offset < VEC_LOCAL_MEM_BYTE_SIZE / 4; ++offset) - PSB_WMSVDX32(msvdx_priv->vec_local_mem_data[offset], - VEC_LOCAL_MEM_OFFSET + offset * 4); - - msvdx_priv->vec_local_mem_saved = 0; - } - - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - } - - if (!msvdx_priv->msvdx_fw_loaded) { - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - PSB_DEBUG_GENERAL("MSVDX:reload FW to MTX\n"); - - ret = psb_setup_fw(dev); - if (ret) { - DRM_ERROR("MSVDX:fail to load FW\n"); - /* FIXME: find a proper return value */ - return -EFAULT; - } - msvdx_priv->msvdx_fw_loaded = 1; - - PSB_DEBUG_GENERAL("MSVDX: load firmware successfully\n"); - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - } - - if (!msvdx_priv->msvdx_busy) { - msvdx_priv->msvdx_busy = 1; - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - PSB_DEBUG_GENERAL("MSVDX: commit command to HW,seq=0x%08x\n", - sequence); - ret = psb_msvdx_map_command(dev, cmd_buffer, cmd_offset, - cmd_size, NULL, sequence, 0); - if (ret) { - DRM_ERROR("MSVDXQUE: Failed to extract cmd\n"); - return ret; - } - } else { - struct psb_msvdx_cmd_queue *msvdx_cmd; - void *cmd = NULL; - - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - /* queue the command to be sent when the h/w is ready */ - PSB_DEBUG_GENERAL("MSVDXQUE: queueing sequence:%08x..\n", - sequence); - msvdx_cmd = kzalloc(sizeof(struct psb_msvdx_cmd_queue), - GFP_KERNEL); - if (msvdx_cmd == NULL) { - DRM_ERROR("MSVDXQUE: Out of memory...\n"); - return -ENOMEM; - } - - ret = psb_msvdx_map_command(dev, cmd_buffer, cmd_offset, - cmd_size, &cmd, sequence, 1); - if (ret) { - DRM_ERROR("MSVDXQUE: Failed to extract cmd\n"); - kfree(msvdx_cmd - ); - return ret; - } - msvdx_cmd->cmd = cmd; - msvdx_cmd->cmd_size = cmd_size; - msvdx_cmd->sequence = sequence; - spin_lock_irqsave(&msvdx_priv->msvdx_lock, irq_flags); - list_add_tail(&msvdx_cmd->head, &msvdx_priv->msvdx_queue); - if (!msvdx_priv->msvdx_busy) { - msvdx_priv->msvdx_busy = 1; - PSB_DEBUG_GENERAL("MSVDXQUE: Need immediate dequeue\n"); - psb_msvdx_dequeue_send(dev); - } - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, irq_flags); - } - - return ret; -} - -int psb_cmdbuf_video(struct drm_file *priv, - struct list_head *validate_list, - uint32_t fence_type, - struct drm_psb_cmdbuf_arg *arg, - struct ttm_buffer_object *cmd_buffer, - struct psb_ttm_fence_rep *fence_arg) -{ - struct drm_device *dev = priv->minor->dev; - struct ttm_fence_object *fence; - int ret; - - /* - * Check this. Doesn't seem right. Have fencing done AFTER command - * submission and make sure drm_psb_idle idles the MSVDX completely. - */ - ret = - psb_submit_video_cmdbuf(dev, cmd_buffer, arg->cmdbuf_offset, - arg->cmdbuf_size, NULL); - if (ret) - return ret; - - - /* DRM_ERROR("Intel: Fix video fencing!!\n"); */ - psb_fence_or_sync(priv, PSB_ENGINE_VIDEO, fence_type, - arg->fence_flags, validate_list, fence_arg, - &fence); - - ttm_fence_object_unref(&fence); - spin_lock(&cmd_buffer->bdev->fence_lock); - if (cmd_buffer->sync_obj != NULL) - ttm_fence_sync_obj_unref(&cmd_buffer->sync_obj); - spin_unlock(&cmd_buffer->bdev->fence_lock); - - return 0; -} - - -static int psb_msvdx_send(struct drm_device *dev, void *cmd, - unsigned long cmd_size) -{ - int ret = 0; - struct drm_psb_private *dev_priv = dev->dev_private; - struct psb_video_ctx *msvdx_ctx = NULL; - int ctx_type; - - while (cmd_size > 0) { - uint32_t cur_cmd_size = MEMIO_READ_FIELD(cmd, FWRK_GENMSG_SIZE); - uint32_t cur_cmd_id = MEMIO_READ_FIELD(cmd, FWRK_GENMSG_ID); - if (cur_cmd_size > cmd_size) { - ret = -EINVAL; - DRM_ERROR("MSVDX:cmd_size %lu cur_cmd_size %lu\n", - cmd_size, (unsigned long)cur_cmd_size); - goto out; - } - - /* Send the message to h/w */ - ret = psb_mtx_send(dev_priv, cmd); - if (ret) { - PSB_DEBUG_GENERAL("MSVDX: ret:%d\n", ret); - goto out; - } - cmd += cur_cmd_size; - cmd_size -= cur_cmd_size; - if (cur_cmd_id == VA_MSGID_DEBLOCK && (!IS_CDV(dev) && IS_FW_UPDATED)) { - cmd += sizeof(struct DEBLOCKPARAMS); - cmd_size -= sizeof(struct DEBLOCKPARAMS); - } - if (cur_cmd_id == VA_MSGID_HOST_BE_OPP) { - cmd += sizeof(struct HOST_BE_OPP_PARAMS); - cmd_size -= sizeof(struct HOST_BE_OPP_PARAMS); - } - if(cmd_size && IS_CDV(dev)) { - msvdx_ctx = dev_priv->msvdx_ctx; - /* Get the Profile for the current video context */ - ctx_type = msvdx_ctx->ctx_type >> 8; - if (ctx_type == VAProfileMPEG2Simple || ctx_type == VAProfileMPEG2Main) - udelay(DRM_MPEG2_DELAY); - else - udelay(drm_msvdx_delay); - } - } - -out: - PSB_DEBUG_GENERAL("MSVDX: ret:%d\n", ret); - return ret; -} - -int psb_mtx_send(struct drm_psb_private *dev_priv, const void *msg) -{ - static uint32_t pad_msg[FWRK_PADMSG_SIZE]; - const uint32_t *p_msg = (uint32_t *) msg; - uint32_t msg_num, words_free, ridx, widx, buf_size, buf_offset; - int ret = 0; - - PSB_DEBUG_GENERAL("MSVDX: psb_mtx_send\n"); - - /* we need clocks enabled before we touch VEC local ram */ - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - msg_num = (MEMIO_READ_FIELD(msg, FWRK_GENMSG_SIZE) + 3) / 4; - -/* - { - int i; - printk("MSVDX: psb_mtx_send is %dDW\n", msg_num); - - for(i = 0; i < msg_num; i++) - printk("0x%08x ", p_msg[i]); - printk("\n"); - } -*/ - buf_size = PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_BUF_SIZE) & ((1 << 16) - 1); - - if (msg_num > buf_size) { - ret = -EINVAL; - DRM_ERROR("MSVDX: message exceed maximum,ret:%d\n", ret); - goto out; - } - - ridx = PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_RD_INDEX); - widx = PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_WRT_INDEX); - - - buf_size = PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_BUF_SIZE) & ((1 << 16) - 1); - /*0x2000 is VEC Local Ram offset*/ - buf_offset = - (PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_BUF_SIZE) >> 16) + 0x2000; - - /* message would wrap, need to send a pad message */ - if (widx + msg_num > buf_size) { - /* Shouldn't happen for a PAD message itself */ - BUG_ON(MEMIO_READ_FIELD(msg, FWRK_GENMSG_ID) - == FWRK_MSGID_PADDING); - - /* if the read pointer is at zero then we must wait for it to - * change otherwise the write pointer will equal the read - * pointer,which should only happen when the buffer is empty - * - * This will only happens if we try to overfill the queue, - * queue management should make - * sure this never happens in the first place. - */ - BUG_ON(0 == ridx); - if (0 == ridx) { - ret = -EINVAL; - DRM_ERROR("MSVDX: RIndex=0, ret:%d\n", ret); - goto out; - } - - /* Send a pad message */ - MEMIO_WRITE_FIELD(pad_msg, FWRK_GENMSG_SIZE, - (buf_size - widx) << 2); - MEMIO_WRITE_FIELD(pad_msg, FWRK_GENMSG_ID, - FWRK_MSGID_PADDING); - psb_mtx_send(dev_priv, pad_msg); - widx = PSB_RMSVDX32(MSVDX_COMMS_TO_MTX_WRT_INDEX); - } - - if (widx >= ridx) - words_free = buf_size - (widx - ridx) - 1; - else - words_free = ridx - widx - 1; - - BUG_ON(msg_num > words_free); - if (msg_num > words_free) { - ret = -EINVAL; - DRM_ERROR("MSVDX: msg_num > words_free, ret:%d\n", ret); - goto out; - } - while (msg_num > 0) { - PSB_WMSVDX32(*p_msg++, buf_offset + (widx << 2)); - msg_num--; - widx++; - if (buf_size == widx) - widx = 0; - } - - PSB_WMSVDX32(widx, MSVDX_COMMS_TO_MTX_WRT_INDEX); - - /* Make sure clocks are enabled before we kick */ - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - /* signal an interrupt to let the mtx know there is a new message */ - /* PSB_WMSVDX32(1, MSVDX_MTX_KICKI); */ - PSB_WMSVDX32(1, MSVDX_MTX_KICK); - - /* Read MSVDX Register several times in case Idle signal assert */ - PSB_RMSVDX32(MSVDX_INTERRUPT_STATUS); - PSB_RMSVDX32(MSVDX_INTERRUPT_STATUS); - PSB_RMSVDX32(MSVDX_INTERRUPT_STATUS); - PSB_RMSVDX32(MSVDX_INTERRUPT_STATUS); - - -out: - return ret; -} - -static int psb_msvdx_towpass_deblock(struct drm_device *dev, - uint32_t *pPicparams) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)dev->dev_private; - uint32_t cmd_size, cmd_count = 0; - uint32_t cmd_id, reg, value, wait, reg_value, read = 0, ret = 0; - - cmd_size = *pPicparams++; - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: deblock get cmd size %d\n", cmd_size); - /* printk("MSVDX DEBLOCK: deblock get cmd size %d\n", cmd_size); */ - - do { - cmd_id = (*pPicparams) & 0xf0000000; - reg = (*pPicparams++) & 0x0fffffff; - switch (cmd_id) { - case MSVDX_DEBLOCK_REG_SET: { - value = *pPicparams++; - PSB_WMSVDX32(value, reg); - cmd_count += 2; - break; - } - case MSVDX_DEBLOCK_REG_GET: { - read = PSB_RMSVDX32(reg); - cmd_count += 1; - break; - } - case MSVDX_DEBLOCK_REG_POLLn: { - value = *pPicparams++; - wait = 0; - - do { - reg_value = PSB_RMSVDX32(reg); - } while ((wait++ < 20000) && (value > reg_value)); - - if (wait >= 20000) { - ret = 1; - PSB_DEBUG_GENERAL( - "MSVDX DEBLOCK: polln cmd space time out!\n"); - goto finish_deblock; - } - cmd_count += 2; - break; - } - case MSVDX_DEBLOCK_REG_POLLx: { - wait = 0; - - do { - reg_value = PSB_RMSVDX32(reg); - } while ((wait++ < 20000) && (read > reg_value)); - - if (wait >= 20000) { - ret = 1; - PSB_DEBUG_GENERAL( - "MSVDX DEBLOCK: pollx cmd space time out!\n"); - goto finish_deblock; - } - - cmd_count += 1; - break; - } - default: - ret = 1; - PSB_DEBUG_GENERAL( - "MSVDX DEBLOCK: get error cmd_id: 0x%x!\n", - cmd_id); - PSB_DEBUG_GENERAL( - "MSVDX DEBLOCK: execute cmd num is %d\n", - cmd_count); - /* printk("MSVDX DEBLOCK: get error cmd_id: 0x%x!\n", - cmd_id); */ - /* printk("MSVDX DEBLOCK: execute cmd num is %d\n", - cmd_count); */ - goto finish_deblock; - } - } while (cmd_count < cmd_size); - - -finish_deblock: - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: execute cmd num is %d\n", cmd_count); - return ret; -} - -/* - * MSVDX MTX interrupt - */ -static void psb_msvdx_mtx_interrupt(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)dev->dev_private; - static uint32_t buf[128]; /* message buffer */ - uint32_t ridx, widx, buf_size, buf_offset; - uint32_t num, ofs; /* message num and offset */ - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int i; - - PSB_DEBUG_GENERAL("MSVDX:Got a MSVDX MTX interrupt\n"); - - /* Are clocks enabled - If not enable before - * attempting to read from VLR - */ - if (PSB_RMSVDX32(MSVDX_MAN_CLK_ENABLE) != (clk_enable_all)) { - PSB_DEBUG_GENERAL("MSVDX:Clocks disabled when Interupt set\n"); - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - } - -loop: /* just for coding style check */ - ridx = PSB_RMSVDX32(MSVDX_COMMS_TO_HOST_RD_INDEX); - widx = PSB_RMSVDX32(MSVDX_COMMS_TO_HOST_WRT_INDEX); - - /* Get out of here if nothing */ - if (ridx == widx) - goto done; - - buf_size = PSB_RMSVDX32(MSVDX_COMMS_TO_HOST_BUF_SIZE) & ((1 << 16) - 1); - /*0x2000 is VEC Local Ram offset*/ - buf_offset = - (PSB_RMSVDX32(MSVDX_COMMS_TO_HOST_BUF_SIZE) >> 16) + 0x2000; - - ofs = 0; - buf[ofs] = PSB_RMSVDX32(buf_offset + (ridx << 2)); - - /* round to nearest word */ - num = (MEMIO_READ_FIELD(buf, FWRK_GENMSG_SIZE) + 3) / 4; - - /* ASSERT(num <= sizeof(buf) / sizeof(uint32_t)); */ - - if (++ridx >= buf_size) - ridx = 0; - - for (ofs++; ofs < num; ofs++) { - buf[ofs] = PSB_RMSVDX32(buf_offset + (ridx << 2)); - - if (++ridx >= buf_size) - ridx = 0; - } - - /* Update the Read index */ - PSB_WMSVDX32(ridx, MSVDX_COMMS_TO_HOST_RD_INDEX); - - if (msvdx_priv->msvdx_needs_reset) - goto loop; - - switch (MEMIO_READ_FIELD(buf, FWRK_GENMSG_ID)) { - case VA_MSGID_CMD_HW_PANIC: - case VA_MSGID_CMD_FAILED: { - /* For VXD385 firmware, fence value is not validate here */ - uint32_t msg_id = MEMIO_READ_FIELD(buf, FWRK_GENMSG_ID); - uint32_t diff = 0; - uint32_t fence, fault = 0; - drm_psb_msvdx_frame_info_t *failed_frame = NULL; - - if (msg_id == VA_MSGID_CMD_HW_PANIC) - PSB_DEBUG_MSVDX("MSVDX_DEBUG: get panic message.\n"); - else - PSB_DEBUG_MSVDX("MSVDX_DEBUG: get failed message.\n"); - - if (msg_id == VA_MSGID_CMD_HW_PANIC) { - fence = MEMIO_READ_FIELD(buf, - FW_VA_HW_PANIC_FENCE_VALUE); - printk("jiangfei debug: fence in panic message is %d.\n", fence); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE fence is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FENCE_VALUE)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE first mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FIRST_MB_NUM)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE fault mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FAULT_MB_NUM)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE fe status is 0x%x.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FESTATUS)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE be status is 0x%x.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_BESTATUS)); - } else { - fence = MEMIO_READ_FIELD(buf, - FW_VA_CMD_FAILED_FENCE_VALUE); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: FAILED MESSAGE fence is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FIRST_MB_NUM)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: FAILED MESSAGE flag is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_CMD_FAILED_FLAGS)); - } - - if(IS_CDV(dev) && IS_FW_UPDATED) { - fence = MEMIO_READ_FIELD(buf, FW_DEVA_CMD_FAILED_MSG_ID); - fault = MEMIO_READ_FIELD(buf, FW_DEVA_CMD_FAILED_FLAGS); - } - - if (msg_id == VA_MSGID_CMD_HW_PANIC) - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_CMD_HW_PANIC:" - "Fault detected" - " - Fence: %08x" - " - Flags: %08x" - " - resetting and ignoring error\n", - fence, fault); - else - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_CMD_FAILED:" - "Fault detected" - " - Fence: %08x" - " - Flags: %08x" - " - resetting and ignoring error\n", - fence, fault); - - msvdx_priv->msvdx_needs_reset = 1; - - if (msg_id == VA_MSGID_CMD_HW_PANIC) { - diff = msvdx_priv->msvdx_current_sequence - - dev_priv->sequence[PSB_ENGINE_VIDEO]; - - if (diff > 0x0FFFFFFF) - msvdx_priv->msvdx_current_sequence++; - - PSB_DEBUG_GENERAL("MSVDX: Fence ID missing, " - "assuming %08x\n", - msvdx_priv->msvdx_current_sequence); - } else { - msvdx_priv->msvdx_current_sequence = fence; - } - - psb_fence_error(dev, PSB_ENGINE_VIDEO, - msvdx_priv->msvdx_current_sequence, - _PSB_FENCE_TYPE_EXE, DRM_CMD_FAILED); - - /* Flush the command queue */ - psb_msvdx_flush_cmd_queue(dev); - - if (msvdx_priv->host_be_opp_enabled) { - /*get the frame_info struct for error concealment frame*/ - for (i = 0; i < MAX_DECODE_BUFFERS; i++) { - /*by default the fence is 0, so there is problem here???*/ - if (msvdx_priv->frame_info[i].fence == fence) { - failed_frame = &msvdx_priv->frame_info[i]; - break; - } - } - if (!failed_frame) { - DRM_ERROR("MSVDX: didn't find frame_info which matched the fence %d in failed/panic message\n", fence); - goto done; - } - - failed_frame->fw_status = 1; /* set ERROR flag */ - } else - msvdx_priv->fw_status = 1; /* set ERROR flag */ - - goto done; - } - case VA_MSGID_CMD_COMPLETED: { - uint32_t fence; - uint32_t flags = MEMIO_READ_FIELD(buf, FW_VA_CMD_COMPLETED_FLAGS); - /* uint32_t last_mb = MEMIO_READ_FIELD(buf, - FW_VA_CMD_COMPLETED_LASTMB); - */ - - if(IS_CDV(dev) && IS_FW_UPDATED) - fence = MEMIO_READ_FIELD(buf, FW_VA_CMD_COMPLETED_MSG_ID); - else - fence = MEMIO_READ_FIELD(buf, FW_VA_CMD_COMPLETED_FENCE_VALUE); - - PSB_DEBUG_GENERAL("MSVDX:VA_MSGID_CMD_COMPLETED: " - "FenceID: %08x, flags: 0x%x\n", - fence, flags); - - msvdx_priv->msvdx_current_sequence = fence; - msvdx_priv->ref_pic_fence = fence; - - psb_fence_handler(dev, PSB_ENGINE_VIDEO); - - if (flags & FW_VA_RENDER_HOST_INT) { - /*Now send the next command from the msvdx cmd queue */ - psb_msvdx_dequeue_send(dev); - goto done; - } - - break; - } - case VA_MSGID_CMD_COMPLETED_BATCH: { - uint32_t fence = MEMIO_READ_FIELD(buf, - FW_VA_CMD_COMPLETED_FENCE_VALUE); - uint32_t tickcnt = MEMIO_READ_FIELD(buf, - FW_VA_CMD_COMPLETED_NO_TICKS); - (void)tickcnt; - /* we have the fence value in the message */ - PSB_DEBUG_GENERAL("MSVDX:VA_MSGID_CMD_COMPLETED_BATCH:" - " FenceID: %08x, TickCount: %08x\n", - fence, tickcnt); - msvdx_priv->msvdx_current_sequence = fence; - - break; - } - case VA_MSGID_ACK: - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_ACK\n"); - break; - - case VA_MSGID_TEST1: - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_TEST1\n"); - break; - - /* Penwell deblock is not implemented here */ - case VA_MSGID_DEBLOCK_REQUIRED: { - uint32_t ctxid = MEMIO_READ_FIELD(buf, - FW_VA_DEBLOCK_REQUIRED_CONTEXT); - struct psb_msvdx_deblock_queue *msvdx_deblock; - uint32_t fence = MEMIO_READ_FIELD(buf, - FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE); - - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_DEBLOCK_REQUIRED" - " Context=%08x\n", ctxid); - - - /*deblock and on-be-opp use the same message, there is difficulty to distinguish them*/ - /*now I just let user space use cpu copy error mb*/ - if ((msvdx_priv->deblock_enabled == 1) && (msvdx_priv->host_be_opp_enabled == 1)) { - DRM_ERROR("MSVDX: should not support both deblock and host_be_opp message. \n"); - goto done; - } else if (msvdx_priv->deblock_enabled == 1) { - PSB_DEBUG_MSVDX("MSVDX_DEBUG: get deblock required message for deblock operation.\n"); - if (list_empty(&msvdx_priv->deblock_queue)) { - PSB_DEBUG_GENERAL( - "DEBLOCKQUE: deblock param list is empty\n"); - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - goto done; - } - msvdx_deblock = list_first_entry(&msvdx_priv->deblock_queue, - struct psb_msvdx_deblock_queue, head); - - if (0) { - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: by pass \n"); - /* try to unblock rendec */ - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - kfree(msvdx_deblock->dbParams.pPicparams); - list_del(&msvdx_deblock->head); - goto done; - } - - - if (ctxid != msvdx_deblock->dbParams.ctxid) { - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: wrong ctxid, may " - "caused by multiple context since " - "it's not supported yet\n"); - /* try to unblock rendec */ - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - kfree(msvdx_deblock->dbParams.pPicparams); - list_del(&msvdx_deblock->head); - goto done; - } - - if (msvdx_deblock->dbParams.pPicparams) { - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: start deblocking\n"); - /* printk("MSVDX DEBLOCK: start deblocking\n"); */ - - if (psb_msvdx_towpass_deblock(dev, - msvdx_deblock->dbParams.pPicparams)) { - - PSB_DEBUG_GENERAL( - "MSVDX DEBLOCK: deblock fail!\n"); - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - } - kfree(msvdx_deblock->dbParams.pPicparams); - } else { - PSB_DEBUG_GENERAL("MSVDX DEBLOCK: deblock abort!\n"); - /* printk("MSVDX DEBLOCK: deblock abort!\n"); */ - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - } - - list_del(&msvdx_deblock->head); - kfree(msvdx_deblock); - } else if (msvdx_priv->host_be_opp_enabled == 1) { - PSB_DEBUG_MSVDX("MSVDX_DEBUG: get deblock required message for error concealment.\n"); - - /* try to unblock rendec */ - PSB_WMSVDX32(0, MSVDX_CMDS_END_SLICE_PICTURE); - PSB_WMSVDX32(1, MSVDX_CMDS_END_SLICE_PICTURE); - - /*do error concealment with hw*/ - msvdx_priv->ec_fence = fence; - schedule_work(&msvdx_priv->ec_work); - } - - break; - } - - case VA_MSGID_CMD_CONTIGUITY_WARNING: { - drm_psb_msvdx_frame_info_t *ec_frame = NULL; - drm_psb_msvdx_decode_status_t *fault_region = NULL; - - /*get erro info*/ - uint32_t fence = MEMIO_READ_FIELD(buf, - FW_VA_CONTIGUITY_WARNING_FENCE_VALUE); - uint32_t ui32Start = MEMIO_READ_FIELD(buf, - FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM); - uint32_t ui32End = MEMIO_READ_FIELD(buf, - FW_VA_CONTIGUITY_WARNING_END_MB_NUM); - PSB_DEBUG_GENERAL("MSVDX: VA_MSGID_CMD_CONTIGUITY_WARNING\n"); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: get contiguity warning message.\n"); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: CONTIGUITY_WARNING MESSAGE fence is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_CONTIGUITY_WARNING_FENCE_VALUE)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: CONTIGUITY_WARNING MESSAGE end mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_CONTIGUITY_WARNING_END_MB_NUM)); - PSB_DEBUG_MSVDX("MSVDX_DEBUG: CONTIGUITY_WARNING MESSAGE begin mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM)); - - /*get the frame_info struct for error concealment frame*/ - for (i = 0; i < MAX_DECODE_BUFFERS; i++) { - if (msvdx_priv->frame_info[i].fence == fence) { - ec_frame = &msvdx_priv->frame_info[i]; - break; - } - } - if (!ec_frame) { - DRM_ERROR("MSVDX: didn't find frame_info which matched the fence %d when get contiguity warning.\n", fence); - goto done; - } - else if (msvdx_priv->host_be_opp_enabled){ - ec_frame->fw_status = 1; - fault_region = &ec_frame->decode_status; - if (ui32Start == 0xffff) { - if (fault_region->num_error_slice == 0) { - fault_region->start_error_mb_list[fault_region->num_error_slice] = 0; - fault_region->end_error_mb_list[fault_region->num_error_slice] = ui32End; - fault_region->num_error_slice++; - } - else if (fault_region->end_error_mb_list[fault_region->num_error_slice - 1] == 0xffff) { - fault_region->end_error_mb_list[fault_region->num_error_slice - 1] = ui32End; - } - } - else if (ui32Start < ui32End) { - fault_region->start_error_mb_list[fault_region->num_error_slice] = ui32Start; - fault_region->end_error_mb_list[fault_region->num_error_slice] = ui32End; - fault_region->num_error_slice++; - } - else { - DRM_ERROR("msvdx error: start mb counter should not be larger than end mb counter.\n"); - goto done; - } - } - - break; - - } - default: - DRM_ERROR("ERROR: msvdx Unknown message from MTX, ID:0x%08x\n", MEMIO_READ_FIELD(buf, FWRK_GENMSG_ID)); - goto done; - } - -done: - if (ridx != widx) { - PSB_DEBUG_GENERAL("MSVDX Interrupt: there are more message to be read\n"); - goto loop; - } - /* we get a frame/slice done, try to save some power*/ - if (drm_msvdx_pmpolicy != PSB_PMPOLICY_NOPM) - schedule_delayed_work(&dev_priv->scheduler.msvdx_suspend_wq, 0); - - DRM_MEMORYBARRIER(); /* TBD check this... */ -} - - -/* - * MSVDX interrupt. - */ -IMG_BOOL psb_msvdx_interrupt(IMG_VOID *pvData) -{ - struct drm_device *dev; - struct drm_psb_private *dev_priv; - struct msvdx_private *msvdx_priv; - uint32_t msvdx_stat; - - if (pvData == IMG_NULL) { - DRM_ERROR("ERROR: msvdx %s, Invalid params\n", __func__); - return IMG_FALSE; - } - - dev = (struct drm_device *)pvData; - - - dev_priv = (struct drm_psb_private *) dev->dev_private; - msvdx_priv = dev_priv->msvdx_private; - - msvdx_priv->msvdx_hw_busy = REG_READ(0x20D0) & (0x1 << 9); - - msvdx_stat = PSB_RMSVDX32(MSVDX_INTERRUPT_STATUS); - - if (msvdx_stat & MSVDX_INTERRUPT_STATUS_CR_MMU_FAULT_IRQ_MASK) { - /*Ideally we should we should never get to this */ - PSB_DEBUG_IRQ("MSVDX:MMU Fault:0x%x\n", msvdx_stat); - - /* Pause MMU */ - PSB_WMSVDX32(MSVDX_MMU_CONTROL0_CR_MMU_PAUSE_MASK, - MSVDX_MMU_CONTROL0); - DRM_WRITEMEMORYBARRIER(); - - /* Clear this interupt bit only */ - PSB_WMSVDX32(MSVDX_INTERRUPT_STATUS_CR_MMU_FAULT_IRQ_MASK, - MSVDX_INTERRUPT_CLEAR); - PSB_RMSVDX32(MSVDX_INTERRUPT_CLEAR); - DRM_READMEMORYBARRIER(); - - msvdx_priv->msvdx_needs_reset = 1; - } else if (msvdx_stat & MSVDX_INTERRUPT_STATUS_CR_MTX_IRQ_MASK) { - PSB_DEBUG_IRQ - ("MSVDX: msvdx_stat: 0x%x(MTX)\n", msvdx_stat); - - /* Clear all interupt bits */ - PSB_WMSVDX32(0xffff, MSVDX_INTERRUPT_CLEAR); - PSB_RMSVDX32(MSVDX_INTERRUPT_CLEAR); - DRM_READMEMORYBARRIER(); - - psb_msvdx_mtx_interrupt(dev); - } - - return IMG_TRUE; -} - - -void psb_msvdx_lockup(struct drm_psb_private *dev_priv, - int *msvdx_lockup, int *msvdx_idle) -{ - int diff; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - *msvdx_lockup = 0; - *msvdx_idle = 1; - -#if 0 - PSB_DEBUG_GENERAL("MSVDXTimer: current_sequence:%d " - "last_sequence:%d and last_submitted_sequence :%d\n", - msvdx_priv->msvdx_current_sequence, - msvdx_priv->msvdx_last_sequence, - dev_priv->sequence[PSB_ENGINE_VIDEO]); -#endif - - diff = msvdx_priv->msvdx_current_sequence - - dev_priv->sequence[PSB_ENGINE_VIDEO]; - - if (diff > 0x0FFFFFFF) { - if (msvdx_priv->msvdx_current_sequence == - msvdx_priv->msvdx_last_sequence) { - DRM_ERROR("MSVDXTimer:locked-up for sequence:%d\n", - msvdx_priv->msvdx_current_sequence); - *msvdx_lockup = 1; - } else { - PSB_DEBUG_GENERAL("MSVDXTimer: " - "msvdx responded fine so far\n"); - msvdx_priv->msvdx_last_sequence = - msvdx_priv->msvdx_current_sequence; - *msvdx_idle = 0; - } - } -} - -int psb_check_msvdx_idle(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - /* drm_psb_msvdx_frame_info_t *current_frame = NULL; */ - - if (msvdx_priv->msvdx_fw_loaded == 0) - return 0; - - if (msvdx_priv->msvdx_busy) { - PSB_DEBUG_PM("MSVDX: psb_check_msvdx_idle returns busy\n"); - return -EBUSY; - } -/* - if (msvdx_priv->msvdx_hw_busy) { - PSB_DEBUG_PM("MSVDX: %s, HW is busy\n", __func__); - return -EBUSY; - } -*/ - return 0; -} - - -int psb_remove_videoctx(struct drm_psb_private *dev_priv, struct file *filp) -{ - struct psb_video_ctx *pos, *n; - - list_for_each_entry_safe(pos, n, &dev_priv->video_ctx, head) { - if (pos->filp == filp) { - PSB_DEBUG_GENERAL("Video:remove context profile %d," - " entrypoint %d", - (pos->ctx_type >> 8), - (pos->ctx_type & 0xff)); - - if (dev_priv->msvdx_ctx == pos) - dev_priv->msvdx_ctx = NULL; - if (dev_priv->last_msvdx_ctx == pos) - dev_priv->last_msvdx_ctx = NULL; - - list_del(&pos->head); - kfree(pos); - } - } - return 0; -} - - -int lnc_video_getparam(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_lnc_video_getparam_arg *arg = data; - int ret = 0; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)file_priv->minor->dev->dev_private; - drm_psb_msvdx_frame_info_t *current_frame = NULL; - uint32_t handle, i; - - void *rar_handler; - uint32_t offset = 0; - uint32_t device_info = 0; - uint32_t ctx_type = 0; - struct psb_video_ctx *video_ctx = NULL; - uint32_t rar_ci_info[2]; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - switch (arg->key) { - case LNC_VIDEO_GETPARAM_RAR_INFO: - rar_ci_info[0] = dev_priv->rar_region_start; - rar_ci_info[1] = dev_priv->rar_region_size; - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - &rar_ci_info[0], - sizeof(rar_ci_info)); - break; - case LNC_VIDEO_GETPARAM_CI_INFO: - rar_ci_info[0] = dev_priv->ci_region_start; - rar_ci_info[1] = dev_priv->ci_region_size; - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - &rar_ci_info[0], - sizeof(rar_ci_info)); - break; - case LNC_VIDEO_GETPARAM_RAR_HANDLER_OFFSET: - ret = copy_from_user(&rar_handler, - (void __user *)((unsigned long)arg->arg), - sizeof(rar_handler)); - if (ret) - break; - - ret = copy_to_user((void __user *)((unsigned long)arg->value), - &offset, - sizeof(offset)); - break; - case LNC_VIDEO_FRAME_SKIP: - if(IS_CDV(dev)) /* CDV should not call it */ - ret = -EFAULT; - break; - case LNC_VIDEO_DEVICE_INFO: - device_info = 0xffff & dev_priv->video_device_fuse; - device_info |= (0xffff & dev->pci_device) << 16; - - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - &device_info, sizeof(device_info)); - break; - case IMG_VIDEO_NEW_CONTEXT: - /* add video decode/encode context */ - ret = copy_from_user(&ctx_type, (void __user *) ((unsigned long)arg->value), - sizeof(ctx_type)); - /* Failure in copy */ - if (ret) { - DRM_ERROR("lnc_video_nex_context copy_from_user error.\n"); - break; - } - - video_ctx = kmalloc(sizeof(struct psb_video_ctx), GFP_KERNEL); - if (video_ctx == NULL) { - ret = -ENOMEM; - break; - } - INIT_LIST_HEAD(&video_ctx->head); - video_ctx->ctx_type = ctx_type; - video_ctx->filp = file_priv->filp; - list_add(&video_ctx->head, &dev_priv->video_ctx); - PSB_DEBUG_GENERAL("Video:add context profile %d, entrypoint %d", - (ctx_type >> 8), (ctx_type & 0xff)); - break; - - case IMG_VIDEO_RM_CONTEXT: - psb_remove_videoctx(dev_priv, file_priv->filp); - break; - case IMG_VIDEO_DECODE_STATUS: - if (msvdx_priv->host_be_opp_enabled) { - /*get the right frame_info struct for current surface*/ - ret = copy_from_user(&handle, - (void __user *)((unsigned long)arg->arg), 4); - if (ret) { - DRM_ERROR("MSVDX in lnc_video_getparam, copy_from_user failed.\n"); - break; - } - - for (i = 0; i < MAX_DECODE_BUFFERS; i++) { - if (msvdx_priv->frame_info[i].handle == handle) { - current_frame = &msvdx_priv->frame_info[i]; - break; - } - } - if (!current_frame) { - DRM_ERROR("MSVDX: didn't find frame_info which matched the surface_id. \n"); - return -EFAULT; - } - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - ¤t_frame->fw_status, sizeof(current_frame->fw_status)); - } else - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - &msvdx_priv->fw_status, sizeof(msvdx_priv->fw_status)); - break; - - case IMG_VIDEO_MB_ERROR: - /*get the right frame_info struct for current surface*/ - ret = copy_from_user(&handle, - (void __user *)((unsigned long)arg->arg), 4); - if (ret) - break; - - for (i = 0; i < MAX_DECODE_BUFFERS; i++) { - if (msvdx_priv->frame_info[i].handle == handle) { - current_frame = &msvdx_priv->frame_info[i]; - break; - } - } - if (!current_frame) { - DRM_ERROR("MSVDX: didn't find frame_info which matched the surface_id. \n"); - return -EFAULT; - } - ret = copy_to_user((void __user *) ((unsigned long)arg->value), - &(current_frame->decode_status), sizeof(drm_psb_msvdx_decode_status_t)); - if (ret) { - DRM_ERROR("lnc_video_getparam copy_to_user error.\n"); - return -EFAULT; - } - break; - - - default: - ret = -EFAULT; - break; - } - - if (ret) - return -EFAULT; - - return 0; -} - -inline int psb_try_power_down_msvdx(struct drm_device *dev) -{ - ospm_apm_power_down_msvdx(dev); - return 0; -} - -int psb_msvdx_save_context(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *)dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int offset = 0; - - msvdx_priv->msvdx_needs_reset = 1; - - if (msvdx_priv->vec_local_mem_data) { - for (offset = 0; offset < VEC_LOCAL_MEM_BYTE_SIZE / 4; ++offset) - msvdx_priv->vec_local_mem_data[offset] = - PSB_RMSVDX32(VEC_LOCAL_MEM_OFFSET + offset * 4); - - msvdx_priv->vec_local_mem_saved = 1; - } - return 0; -} - -int psb_msvdx_restore_context(struct drm_device *dev) -{ - return 0; -} diff --git a/drivers/staging/cdv/imgv/psb_msvdx.h b/drivers/staging/cdv/imgv/psb_msvdx.h deleted file mode 100644 index 6392c0f..0000000 --- a/drivers/staging/cdv/imgv/psb_msvdx.h +++ /dev/null @@ -1,1388 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2011 Intel Corporation, Hillsboro, OR, USA - * Copyright (c) Imagination Technologies Limited, UK - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#ifndef _PSB_MSVDX_H_ -#define _PSB_MSVDX_H_ - -#include "psb_drv.h" -#include "img_types.h" - - -extern int drm_msvdx_pmpolicy; -extern int drm_msvdx_delay; - -typedef enum -{ - PSB_DMAC_BSWAP_NO_SWAP = 0x0, //!< No byte swapping will be performed. - PSB_DMAC_BSWAP_REVERSE = 0x1, //!< Byte order will be reversed. - -} DMAC_eBSwap; - -typedef enum -{ - PSB_DMAC_DIR_MEM_TO_PERIPH = 0x0, //!< Data from memory to peripheral. - PSB_DMAC_DIR_PERIPH_TO_MEM = 0x1, //!< Data from peripheral to memory. - -} DMAC_eDir; - -typedef enum -{ - PSB_DMAC_ACC_DEL_0 = 0x0, //!< Access delay zero clock cycles - PSB_DMAC_ACC_DEL_256 = 0x1, //!< Access delay 256 clock cycles - PSB_DMAC_ACC_DEL_512 = 0x2, //!< Access delay 512 clock cycles - PSB_DMAC_ACC_DEL_768 = 0x3, //!< Access delay 768 clock cycles - PSB_DMAC_ACC_DEL_1024 = 0x4, //!< Access delay 1024 clock cycles - PSB_DMAC_ACC_DEL_1280 = 0x5, //!< Access delay 1280 clock cycles - PSB_DMAC_ACC_DEL_1536 = 0x6, //!< Access delay 1536 clock cycles - PSB_DMAC_ACC_DEL_1792 = 0x7, //!< Access delay 1792 clock cycles - -} DMAC_eAccDel; - -typedef enum -{ - PSB_DMAC_INCR_OFF = 0, //!< Static peripheral address. - PSB_DMAC_INCR_ON = 1 //!< Incrementing peripheral address. - -} DMAC_eIncr; - -typedef enum -{ - PSB_DMAC_BURST_0 = 0x0, //!< burst size of 0 - PSB_DMAC_BURST_1 = 0x1, //!< burst size of 1 - PSB_DMAC_BURST_2 = 0x2, //!< burst size of 2 - PSB_DMAC_BURST_3 = 0x3, //!< burst size of 3 - PSB_DMAC_BURST_4 = 0x4, //!< burst size of 4 - PSB_DMAC_BURST_5 = 0x5, //!< burst size of 5 - PSB_DMAC_BURST_6 = 0x6, //!< burst size of 6 - PSB_DMAC_BURST_7 = 0x7, //!< burst size of 7 - -} DMAC_eBurst; - -int psb_wait_for_register(struct drm_psb_private *dev_priv, - uint32_t offset, - uint32_t value, - uint32_t enable); - -IMG_BOOL psb_msvdx_interrupt(IMG_VOID *pvData); - -int psb_msvdx_init(struct drm_device *dev); -int psb_msvdx_uninit(struct drm_device *dev); -int psb_msvdx_reset(struct drm_psb_private *dev_priv); -uint32_t psb_get_default_pd_addr(struct psb_mmu_driver *driver); -int psb_mtx_send(struct drm_psb_private *dev_priv, const void *pvMsg); -void psb_msvdx_flush_cmd_queue(struct drm_device *dev); -void psb_msvdx_lockup(struct drm_psb_private *dev_priv, - int *msvdx_lockup, int *msvdx_idle); -int psb_setup_fw(struct drm_device *dev); -int psb_check_msvdx_idle(struct drm_device *dev); -int psb_wait_msvdx_idle(struct drm_device *dev); -int psb_cmdbuf_video(struct drm_file *priv, - struct list_head *validate_list, - uint32_t fence_type, - struct drm_psb_cmdbuf_arg *arg, - struct ttm_buffer_object *cmd_buffer, - struct psb_ttm_fence_rep *fence_arg); -int psb_msvdx_save_context(struct drm_device *dev); -int psb_msvdx_restore_context(struct drm_device *dev); - -bool -psb_host_second_pass(struct drm_device *dev, - uint32_t ui32OperatingModeCmd, - void *pvParamBase, - uint32_t PicWidthInMbs, - uint32_t FrameHeightInMbs, - uint32_t ui32DeblockSourceY, - uint32_t ui32DeblockSourceUV); - -/* Non-Optimal Invalidation is not default */ -#define MSVDX_DEVICE_NODE_FLAGS_MMU_NONOPT_INV 2 -#define MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK (0x00000100) - -#define FW_VA_RENDER_HOST_INT 0x00004000 -#define MSVDX_DEVICE_NODE_FLAGS_MMU_HW_INVALIDATION 0x00000020 - -/* There is no work currently underway on the hardware */ -#define MSVDX_FW_STATUS_HW_IDLE 0x00000001 -#define MSVDX_DEVICE_NODE_FLAG_BRN23154_BLOCK_ON_FE 0x00000200 -#define MSVDX_DEVICE_NODE_FLAGS_DEFAULT_D0 \ - (MSVDX_DEVICE_NODE_FLAGS_MMU_NONOPT_INV | \ - MSVDX_DEVICE_NODE_FLAGS_MMU_HW_INVALIDATION | \ - MSVDX_DEVICE_NODE_FLAG_BRN23154_BLOCK_ON_FE) - -#define MSVDX_DEVICE_NODE_FLAGS_DEFAULT_D1 \ - (MSVDX_DEVICE_NODE_FLAGS_MMU_HW_INVALIDATION | \ - MSVDX_DEVICE_NODE_FLAG_BRN23154_BLOCK_ON_FE) - -#define POULSBO_D0 0x5 -#define POULSBO_D1 0x6 -#define PSB_REVID_OFFSET 0x8 - -#define MTX_CODE_BASE (0x80900000) -#define MTX_DATA_BASE (0x82880000) -#define PC_START_ADDRESS (0x80900000) - -#define MTX_CORE_CODE_MEM (0x10) -#define MTX_CORE_DATA_MEM (0x18) - -#define MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK (0x00000100) -#define MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_SHIFT (8) -#define MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_FE_SOFT_RESET_MASK \ - (0x00010000) -#define MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_BE_SOFT_RESET_MASK \ - (0x00100000) -#define MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_VEC_MEMIF_SOFT_RESET_MASK \ - (0x01000000) -#define MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_VEC_RENDEC_DEC_SOFT_RESET_MASK \ - (0x10000000) - -#define clk_enable_all \ -(MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_PROCESS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_ACCESS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDMC_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ENTDEC_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ITRANS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK) - -#define clk_enable_minimal \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK - -#define clk_enable_auto \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_PROCESS_AUTO_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_ACCESS_AUTO_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDMC_AUTO_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ENTDEC_AUTO_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ITRANS_AUTO_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK - -#define msvdx_sw_reset_all \ -(MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK | \ -MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_FE_SOFT_RESET_MASK | \ -MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_BE_SOFT_RESET_MASK | \ -MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_VEC_MEMIF_SOFT_RESET_MASK | \ -MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_VEC_RENDEC_DEC_SOFT_RESET_MASK) - -#define MTX_INTERNAL_REG(R_SPECIFIER , U_SPECIFIER) \ - (((R_SPECIFIER)<<4) | (U_SPECIFIER)) -#define MTX_PC MTX_INTERNAL_REG(0, 5) - -#define RENDEC_A_SIZE (4 * 1024 * 1024) -#define RENDEC_B_SIZE (1024 * 1024) - -#define MEMIO_READ_FIELD(vpMem, field) \ - ((uint32_t)(((*((field##_TYPE*)(((uint32_t)vpMem) + field##_OFFSET))) \ - & field##_MASK) >> field##_SHIFT)) - -#define MEMIO_WRITE_FIELD(vpMem, field, value) \ - (*((field##_TYPE*)(((uint32_t)vpMem) + field##_OFFSET))) = \ - ((*((field##_TYPE*)(((uint32_t)vpMem) + field##_OFFSET))) \ - & (field##_TYPE)~field##_MASK) | \ - (field##_TYPE)(((uint32_t)(value) << field##_SHIFT) & field##_MASK) - -#define MEMIO_WRITE_FIELD_LITE(vpMem, field, value) \ - (*((field##_TYPE*)(((uint32_t)vpMem) + field##_OFFSET))) = \ - ((*((field##_TYPE*)(((uint32_t)vpMem) + field##_OFFSET))) | \ - (field##_TYPE)(((uint32_t)(value) << field##_SHIFT))); - -#define REGIO_READ_FIELD(reg_val, reg, field) \ - ((reg_val & reg##_##field##_MASK) >> reg##_##field##_SHIFT) - -#define REGIO_WRITE_FIELD(reg_val, reg, field, value) \ - (reg_val) = \ - ((reg_val) & ~(reg##_##field##_MASK)) | \ - (((value) << (reg##_##field##_SHIFT)) & (reg##_##field##_MASK)); - -#define REGIO_WRITE_FIELD_LITE(reg_val, reg, field, value) \ - (reg_val) = \ - ((reg_val) | ((value) << (reg##_##field##_SHIFT))); - -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK \ - (0x00000001) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_PROCESS_MAN_CLK_ENABLE_MASK \ - (0x00000002) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_ACCESS_MAN_CLK_ENABLE_MASK \ - (0x00000004) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDMC_MAN_CLK_ENABLE_MASK \ - (0x00000008) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ENTDEC_MAN_CLK_ENABLE_MASK \ - (0x00000010) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ITRANS_MAN_CLK_ENABLE_MASK \ - (0x00000020) -#define MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK \ - (0x00000040) - -#define clk_enable_all \ - (MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_PROCESS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDEB_ACCESS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VDMC_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ENTDEC_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_VEC_ITRANS_MAN_CLK_ENABLE_MASK | \ -MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK) - -#define clk_enable_minimal \ - MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_CORE_MAN_CLK_ENABLE_MASK | \ - MSVDX_CORE_CR_MSVDX_MAN_CLK_ENABLE_CR_MTX_MAN_CLK_ENABLE_MASK - -/* MTX registers */ -#define MSVDX_MTX_ENABLE (0x0000) -#define MSVDX_MTX_KICKI (0x0088) -#define MSVDX_MTX_KICK (0x0080) -#define MSVDX_MTX_REGISTER_READ_WRITE_REQUEST (0x00FC) -#define MSVDX_MTX_REGISTER_READ_WRITE_DATA (0x00F8) -#define MSVDX_MTX_RAM_ACCESS_DATA_TRANSFER (0x0104) -#define MSVDX_MTX_RAM_ACCESS_CONTROL (0x0108) -#define MSVDX_MTX_RAM_ACCESS_STATUS (0x010C) -#define MSVDX_MTX_SOFT_RESET (0x0200) -#define MSVDX_MTX_SYSC_TIMERDIV (0x0208) -#define MTX_CORE_CR_MTX_SYSC_CDMAS0_OFFSET (0x0348) -#define MTX_CORE_CR_MTX_SYSC_CDMAA_OFFSET (0x0344) -#define MTX_CORE_CR_MTX_SYSC_CDMAT_OFFSET (0x0350) -#define MTX_CORE_CR_MTX_SYSC_CDMAC_OFFSET (0x0340) - -/* MSVDX registers */ -#define MSVDX_CONTROL (0x0600) -#define MSVDX_INTERRUPT_CLEAR (0x060C) -#define MSVDX_INTERRUPT_STATUS (0x0608) -#define MSVDX_HOST_INTERRUPT_ENABLE (0x0610) -#define MSVDX_CORE_REV (0x0640) -#define MSVDX_MMU_CONTROL0 (0x0680) -#define MSVDX_MMU_MEM_REQ (0x06D0) -#define MSVDX_MTX_RAM_BANK (0x06F0) -#define MSVDX_MTX_DEBUG MSVDX_MTX_RAM_BANK -#define MSVDX_MAN_CLK_ENABLE (0x0620) -#define MSVDX_CORE_CR_MSVDX_CONTROL_OFFSET (0x0600) -#define MSVDX_CORE_CR_MMU_BANK_INDEX_OFFSET (0x0688) -#define MSVDX_CORE_CR_MMU_DIR_LIST_BASE_OFFSET (0x0694) -#define MSVDX_CORE_CR_MMU_CONTROL0_OFFSET MSVDX_MMU_CONTROL0 -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH (0x66c) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH (0x678) - -/* RENDEC registers */ -#define MSVDX_RENDEC_CONTROL0 (0x0868) -#define MSVDX_RENDEC_CONTROL1 (0x086C) -#define MSVDX_RENDEC_BUFFER_SIZE (0x0870) -#define MSVDX_RENDEC_BASE_ADDR0 (0x0874) -#define MSVDX_RENDEC_BASE_ADDR1 (0x0878) -#define MSVDX_RENDEC_READ_DATA (0x0898) -#define MSVDX_RENDEC_CONTEXT0 (0x0950) -#define MSVDX_RENDEC_CONTEXT1 (0x0954) -#define MSVDX_RENDEC_CONTEXT2 (0x0958) -#define MSVDX_RENDEC_CONTEXT3 (0x095C) -#define MSVDX_RENDEC_CONTEXT4 (0x0960) -#define MSVDX_RENDEC_CONTEXT5 (0x0964) - -/* VEC registers */ -#define MSVDX_VEC_SHIFTREG_CONTROL (0x0818) - -/* DMAC registers */ -#define DMAC_DMAC_SETUP_OFFSET (0x0500) -#define DMAC_DMAC_COUNT_OFFSET (0x0504) -#define DMAC_DMAC_PERIPH_OFFSET (0x0508) -#define DMAC_DMAC_IRQ_STAT_OFFSET (0x050C) -#define DMAC_DMAC_PERIPHERAL_ADDR_OFFSET (0x0514) - -/* DMAC control */ -#define PSB_DMAC_VALUE_COUNT(BSWAP,PW,DIR,PERIPH_INCR,COUNT) \ - \ - (((BSWAP) & DMAC_DMAC_COUNT_BSWAP_LSBMASK) << DMAC_DMAC_COUNT_BSWAP_SHIFT) | \ - (((PW) & DMAC_DMAC_COUNT_PW_LSBMASK) << DMAC_DMAC_COUNT_PW_SHIFT) | \ - (((DIR) & DMAC_DMAC_COUNT_DIR_LSBMASK) << DMAC_DMAC_COUNT_DIR_SHIFT) | \ - (((PERIPH_INCR) & DMAC_DMAC_COUNT_PI_LSBMASK) << DMAC_DMAC_COUNT_PI_SHIFT) | \ - (((COUNT) & DMAC_DMAC_COUNT_CNT_LSBMASK) << DMAC_DMAC_COUNT_CNT_SHIFT) - -#define PSB_DMAC_VALUE_PERIPH_PARAM(ACC_DEL,INCR,BURST) \ - \ - (((ACC_DEL) & DMAC_DMAC_PERIPH_ACC_DEL_LSBMASK) << DMAC_DMAC_PERIPH_ACC_DEL_SHIFT) | \ - (((INCR) & DMAC_DMAC_PERIPH_INCR_LSBMASK) << DMAC_DMAC_PERIPH_INCR_SHIFT) | \ - (((BURST) & DMAC_DMAC_PERIPH_BURST_LSBMASK) << DMAC_DMAC_PERIPH_BURST_SHIFT) - - -/* CMD */ -#define MSVDX_CMDS_END_SLICE_PICTURE (0x1404) - -/* - * This defines the MSVDX communication buffer - */ -#define MSVDX_COMMS_SIGNATURE_VALUE (0xA5A5A5A5) /*!< Signature value */ -/*!< Host buffer size (in 32-bit words) */ -#define NUM_WORDS_HOST_BUF (100) -/*!< MTX buffer size (in 32-bit words) */ -#define NUM_WORDS_MTX_BUF (100) - -/* There is no work currently underway on the hardware */ -#define MSVDX_FW_STATUS_HW_IDLE 0x00000001 - -#define MSVDX_EXT_FW_ERROR_STATE (0x2884) -#define MSVDX_COMMS_AREA_ADDR (0x02fe0) - -#define MSVDX_COMMS_CORE_WTD (MSVDX_COMMS_AREA_ADDR - 0x08) -#define MSVDX_COMMS_ERROR_TRIG (MSVDX_COMMS_AREA_ADDR - 0x08) -#define MSVDX_COMMS_FIRMWARE_ID (MSVDX_COMMS_AREA_ADDR - 0x0C) -#define MSVDX_COMMS_OFFSET_FLAGS (MSVDX_COMMS_AREA_ADDR + 0x18) -#define MSVDX_COMMS_MSG_COUNTER (MSVDX_COMMS_AREA_ADDR - 0x04) -#define MSVDX_COMMS_FW_STATUS (MSVDX_COMMS_AREA_ADDR - 0x10) -#define MSVDX_COMMS_SIGNATURE (MSVDX_COMMS_AREA_ADDR + 0x00) -#define MSVDX_COMMS_TO_HOST_BUF_SIZE (MSVDX_COMMS_AREA_ADDR + 0x04) -#define MSVDX_COMMS_TO_HOST_RD_INDEX (MSVDX_COMMS_AREA_ADDR + 0x08) -#define MSVDX_COMMS_TO_HOST_WRT_INDEX (MSVDX_COMMS_AREA_ADDR + 0x0C) -#define MSVDX_COMMS_TO_MTX_BUF_SIZE (MSVDX_COMMS_AREA_ADDR + 0x10) -#define MSVDX_COMMS_TO_MTX_RD_INDEX (MSVDX_COMMS_AREA_ADDR + 0x14) -#define MSVDX_COMMS_TO_MTX_CB_RD_INDEX (MSVDX_COMMS_AREA_ADDR + 0x18) -#define MSVDX_COMMS_TO_MTX_WRT_INDEX (MSVDX_COMMS_AREA_ADDR + 0x1C) -#define MSVDX_COMMS_TO_HOST_BUF (MSVDX_COMMS_AREA_ADDR + 0x20) -#define MSVDX_COMMS_TO_MTX_BUF \ - (MSVDX_COMMS_TO_HOST_BUF + (NUM_WORDS_HOST_BUF << 2)) - -#define DSIABLE_FW_WDT 0x0008 -#define ABORT_ON_ERRORS_IMMEDIATE 0x0010 -#define ABORT_FAULTED_SLICE_IMMEDIATE 0x0020 -#define RETURN_VDEB_DATA_IN_COMPLETION 0x0800 -#define DSIABLE_Auto_CLOCK_GATING 0x1000 -#define DSIABLE_IDLE_GPIO_SIG 0x2000 -/* -#define MSVDX_COMMS_AREA_END \ - (MSVDX_COMMS_TO_MTX_BUF + (NUM_WORDS_HOST_BUF << 2)) -*/ -#define MSVDX_COMMS_AREA_END 0x03000 - -#if (MSVDX_COMMS_AREA_END != 0x03000) -#error -#endif - -#define MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK (0x80000000) -#define MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_SHIFT (31) - -#define MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_RNW_MASK (0x00010000) -#define MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_RNW_SHIFT (16) - -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMID_MASK (0x0FF00000) -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMID_SHIFT (20) - -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCM_ADDR_MASK (0x000FFFFC) -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCM_ADDR_SHIFT (2) - -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMAI_MASK (0x00000002) -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMAI_SHIFT (1) - -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMR_MASK (0x00000001) -#define MSVDX_MTX_RAM_ACCESS_CONTROL_MTX_MCMR_SHIFT (0) - -#define MSVDX_MTX_SOFT_RESET_MTX_RESET_MASK (0x00000001) -#define MSVDX_MTX_SOFT_RESET_MTX_RESET_SHIFT (0) - -#define MSVDX_MTX_ENABLE_MTX_ENABLE_MASK (0x00000001) -#define MSVDX_MTX_ENABLE_MTX_ENABLE_SHIFT (0) - -#define MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK (0x00000100) -#define MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_SHIFT (8) - -#define MSVDX_INTERRUPT_STATUS_CR_MMU_FAULT_IRQ_MASK (0x00000F00) -#define MSVDX_INTERRUPT_STATUS_CR_MMU_FAULT_IRQ_SHIFT (8) - -#define MSVDX_INTERRUPT_STATUS_CR_MTX_IRQ_MASK (0x00004000) -#define MSVDX_INTERRUPT_STATUS_CR_MTX_IRQ_SHIFT (14) - -#define MSVDX_MMU_CONTROL0_CR_MMU_PAUSE_MASK (0x00000002) -#define MSVDX_MMU_CONTROL0_CR_MMU_PAUSE_SHIFT (1) - -#define MSVDX_MTX_RAM_BANK_CR_MTX_RAM_BANK_SIZE_MASK (0x000F0000) -#define MSVDX_MTX_RAM_BANK_CR_MTX_RAM_BANK_SIZE_SHIFT (16) - -#define MSVDX_MTX_DEBUG_MTX_DBG_IS_SLAVE_MASK (0x00000004) -#define MSVDX_MTX_DEBUG_MTX_DBG_IS_SLAVE_LSBMASK (0x00000001) -#define MSVDX_MTX_DEBUG_MTX_DBG_IS_SLAVE_SHIFT (2) - -#define MSVDX_MTX_DEBUG_MTX_DBG_GPIO_IN_MASK (0x00000003) -#define MSVDX_MTX_DEBUG_MTX_DBG_GPIO_IN_LSBMASK (0x00000003) -#define MSVDX_MTX_DEBUG_MTX_DBG_GPIO_IN_SHIFT (0) - -#define MSVDX_RENDEC_BUFFER_SIZE_RENDEC_BUFFER_SIZE0_MASK (0x0000FFFF) -#define MSVDX_RENDEC_BUFFER_SIZE_RENDEC_BUFFER_SIZE0_SHIFT (0) - -#define MSVDX_RENDEC_BUFFER_SIZE_RENDEC_BUFFER_SIZE1_MASK (0xFFFF0000) -#define MSVDX_RENDEC_BUFFER_SIZE_RENDEC_BUFFER_SIZE1_SHIFT (16) - -#define MSVDX_RENDEC_CONTROL1_RENDEC_DECODE_START_SIZE_MASK (0x000000FF) -#define MSVDX_RENDEC_CONTROL1_RENDEC_DECODE_START_SIZE_SHIFT (0) - -#define MSVDX_RENDEC_CONTROL1_RENDEC_BURST_SIZE_W_MASK (0x000C0000) -#define MSVDX_RENDEC_CONTROL1_RENDEC_BURST_SIZE_W_SHIFT (18) - -#define MSVDX_RENDEC_CONTROL1_RENDEC_BURST_SIZE_R_MASK (0x00030000) -#define MSVDX_RENDEC_CONTROL1_RENDEC_BURST_SIZE_R_SHIFT (16) - -#define MSVDX_RENDEC_CONTROL1_RENDEC_EXTERNAL_MEMORY_MASK (0x01000000) -#define MSVDX_RENDEC_CONTROL1_RENDEC_EXTERNAL_MEMORY_SHIFT (24) - -#define MSVDX_RENDEC_CONTROL0_RENDEC_INITIALISE_MASK (0x00000001) -#define MSVDX_RENDEC_CONTROL0_RENDEC_INITIALISE_SHIFT (0) - -#define VEC_SHIFTREG_CONTROL_SR_MASTER_SELECT_MASK (0x00000300) -#define VEC_SHIFTREG_CONTROL_SR_MASTER_SELECT_SHIFT (8) - -#define MTX_CORE_CR_MTX_SYSC_CDMAC_BURSTSIZE_MASK (0x07000000) -#define MTX_CORE_CR_MTX_SYSC_CDMAC_BURSTSIZE_SHIFT (24) - -#define MTX_CORE_CR_MTX_SYSC_CDMAC_RNW_MASK (0x00020000) -#define MTX_CORE_CR_MTX_SYSC_CDMAC_RNW_SHIFT (17) - -#define MTX_CORE_CR_MTX_SYSC_CDMAC_ENABLE_MASK (0x00010000) -#define MTX_CORE_CR_MTX_SYSC_CDMAC_ENABLE_SHIFT (16) - -#define MTX_CORE_CR_MTX_SYSC_CDMAC_LENGTH_MASK (0x0000FFFF) -#define MTX_CORE_CR_MTX_SYSC_CDMAC_LENGTH_SHIFT (0) - -#define MSVDX_CORE_CR_MSVDX_CONTROL_DMAC_CH0_SELECT_MASK (0x00001000) -#define MSVDX_CORE_CR_MSVDX_CONTROL_DMAC_CH0_SELECT_SHIFT (12) - -#define MSVDX_CORE_CR_MMU_CONTROL0_CR_MMU_INVALDC_MASK (0x00000008) -#define MSVDX_CORE_CR_MMU_CONTROL0_CR_MMU_INVALDC_SHIFT (3) - -#define DMAC_DMAC_COUNT_BSWAP_LSBMASK (0x00000001) -#define DMAC_DMAC_COUNT_BSWAP_SHIFT (30) - -#define DMAC_DMAC_COUNT_PW_LSBMASK (0x00000003) -#define DMAC_DMAC_COUNT_PW_SHIFT (27) - -#define DMAC_DMAC_COUNT_DIR_LSBMASK (0x00000001) -#define DMAC_DMAC_COUNT_DIR_SHIFT (26) - -#define DMAC_DMAC_COUNT_PI_LSBMASK (0x00000003) -#define DMAC_DMAC_COUNT_PI_SHIFT (24) - -#define DMAC_DMAC_COUNT_CNT_LSBMASK (0x0000FFFF) -#define DMAC_DMAC_COUNT_CNT_SHIFT (0) - -#define DMAC_DMAC_PERIPH_ACC_DEL_LSBMASK (0x00000007) -#define DMAC_DMAC_PERIPH_ACC_DEL_SHIFT (29) - -#define DMAC_DMAC_PERIPH_INCR_LSBMASK (0x00000001) -#define DMAC_DMAC_PERIPH_INCR_SHIFT (27) - -#define DMAC_DMAC_PERIPH_BURST_LSBMASK (0x00000007) -#define DMAC_DMAC_PERIPH_BURST_SHIFT (24) - -#define DMAC_DMAC_PERIPHERAL_ADDR_ADDR_MASK (0x007FFFFF) -#define DMAC_DMAC_PERIPHERAL_ADDR_ADDR_LSBMASK (0x007FFFFF) -#define DMAC_DMAC_PERIPHERAL_ADDR_ADDR_SHIFT (0) - -#define DMAC_DMAC_COUNT_EN_MASK (0x00010000) -#define DMAC_DMAC_COUNT_EN_SHIFT (16) - -#define DMAC_DMAC_IRQ_STAT_TRANSFER_FIN_MASK (0x00020000) - -/*watch dog for FE and BE*/ -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_OFFSET (0x0064) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CNT_CTRL -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CNT_CTRL_MASK (0x00060000) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CNT_CTRL_LSBMASK (0x00000003) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CNT_CTRL_SHIFT (17) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_ENABLE -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ENABLE_MASK (0x00010000) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ENABLE_LSBMASK (0x00000001) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ENABLE_SHIFT (16) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_ACTION1 -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION1_MASK (0x00003000) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION1_LSBMASK (0x00000003) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION1_SHIFT (12) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_ACTION0 -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION0_MASK (0x00000100) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION0_LSBMASK (0x00000001) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_ACTION0_SHIFT (8) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CLEAR_SELECT -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLEAR_SELECT_MASK (0x00000030) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLEAR_SELECT_LSBMASK (0x00000003) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLEAR_SELECT_SHIFT (4) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CLKDIV_SELECT -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLKDIV_SELECT_MASK (0x00000007) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLKDIV_SELECT_LSBMASK (0x00000007) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL_FE_WDT_CLKDIV_SELECT_SHIFT (0) - -#define MSVDX_CORE_CR_FE_MSVDX_WDTIMER_OFFSET (0x0068) - -// MSVDX_CORE, CR_FE_MSVDX_WDTIMER, FE_WDT_COUNTER -#define MSVDX_CORE_CR_FE_MSVDX_WDTIMER_FE_WDT_COUNTER_MASK (0x0000FFFF) -#define MSVDX_CORE_CR_FE_MSVDX_WDTIMER_FE_WDT_COUNTER_LSBMASK (0x0000FFFF) -#define MSVDX_CORE_CR_FE_MSVDX_WDTIMER_FE_WDT_COUNTER_SHIFT (0) - -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_OFFSET (0x006C) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_COMPAREMATCH, FE_WDT_CM1 -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM1_MASK (0xFFFF0000) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM1_LSBMASK (0x0000FFFF) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM1_SHIFT (16) - -// MSVDX_CORE, CR_FE_MSVDX_WDT_COMPAREMATCH, FE_WDT_CM0 -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM0_MASK (0x0000FFFF) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM0_LSBMASK (0x0000FFFF) -#define MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH_FE_WDT_CM0_SHIFT (0) - -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_OFFSET (0x0070) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CNT_CTRL -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CNT_CTRL_MASK (0x001E0000) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CNT_CTRL_LSBMASK (0x0000000F) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CNT_CTRL_SHIFT (17) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL, BE_WDT_ENABLE -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ENABLE_MASK (0x00010000) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ENABLE_LSBMASK (0x00000001) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ENABLE_SHIFT (16) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL, BE_WDT_ACTION0 -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ACTION0_MASK (0x00000100) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ACTION0_LSBMASK (0x00000001) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_ACTION0_SHIFT (8) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CLEAR_SELECT -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLEAR_SELECT_MASK (0x000000F0) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLEAR_SELECT_LSBMASK (0x0000000F) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLEAR_SELECT_SHIFT (4) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CLKDIV_SELECT -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLKDIV_SELECT_MASK (0x00000007) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLKDIV_SELECT_LSBMASK (0x00000007) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL_BE_WDT_CLKDIV_SELECT_SHIFT (0) - -#define MSVDX_CORE_CR_BE_MSVDX_WDTIMER_OFFSET (0x0074) - -// MSVDX_CORE, CR_BE_MSVDX_WDTIMER, BE_WDT_COUNTER -#define MSVDX_CORE_CR_BE_MSVDX_WDTIMER_BE_WDT_COUNTER_MASK (0x0000FFFF) -#define MSVDX_CORE_CR_BE_MSVDX_WDTIMER_BE_WDT_COUNTER_LSBMASK (0x0000FFFF) -#define MSVDX_CORE_CR_BE_MSVDX_WDTIMER_BE_WDT_COUNTER_SHIFT (0) - -#define MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH_OFFSET (0x0078) - -// MSVDX_CORE, CR_BE_MSVDX_WDT_COMPAREMATCH, BE_WDT_CM0 -#define MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH_BE_WDT_CM0_MASK (0x0000FFFF) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH_BE_WDT_CM0_LSBMASK (0x0000FFFF) -#define MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH_BE_WDT_CM0_SHIFT (0) -/*watch dog end*/ - -/* Start of parser specific Host->MTX messages. */ -#define FWRK_MSGID_START_PSR_HOSTMTX_MSG (0x80) - -/* Start of parser specific MTX->Host messages. */ -#define FWRK_MSGID_START_PSR_MTXHOST_MSG (0xC0) - -/* Host defined msg, just for host use, MTX not recgnize */ -#define FWRK_MSGID_HOST_EMULATED (0x40) - -#define FWRK_MSGID_PADDING (0) - -#define FWRK_GENMSG_SIZE_TYPE uint8_t -#define FWRK_GENMSG_SIZE_MASK (0xFF) -#define FWRK_GENMSG_SIZE_SHIFT (0) -#define FWRK_GENMSG_SIZE_OFFSET (0x0000) -#define FWRK_GENMSG_ID_TYPE uint8_t -#define FWRK_GENMSG_ID_MASK (0xFF) -#define FWRK_GENMSG_ID_SHIFT (0) -#define FWRK_GENMSG_ID_OFFSET (0x0001) -#define FWRK_PADMSG_SIZE (2) - -/* Deblock CMD_ID */ -#define MSVDX_DEBLOCK_REG_SET 0x10000000 -#define MSVDX_DEBLOCK_REG_GET 0x20000000 -#define MSVDX_DEBLOCK_REG_POLLn 0x30000000 -#define MSVDX_DEBLOCK_REG_POLLx 0x40000000 - -/* vec local MEM save/restore */ -#define VEC_LOCAL_MEM_BYTE_SIZE (4 * 1024) -#define VEC_LOCAL_MEM_OFFSET 0x2000 - -/* This type defines the framework specified message ids */ -enum { - /* ! Sent by the DXVA driver on the host to the mtx firmware. - */ - VA_MSGID_INIT = FWRK_MSGID_START_PSR_HOSTMTX_MSG, - VA_MSGID_RENDER, - VA_MSGID_DEBLOCK, - VA_MSGID_OOLD, - - /* Test Messages */ - VA_MSGID_TEST1, - VA_MSGID_HOST_BE_OPP, - - /*! Sent by the mtx firmware to itself. - */ - VA_MSGID_RENDER_MC_INTERRUPT, - - VA_MSGID_DEBLOCK_MFLD = FWRK_MSGID_HOST_EMULATED, - VA_MSGID_OOLD_MFLD, - /*! Sent by the DXVA firmware on the MTX to the host. - */ - VA_MSGID_CMD_COMPLETED = FWRK_MSGID_START_PSR_MTXHOST_MSG, - VA_MSGID_CMD_COMPLETED_BATCH, - VA_MSGID_DEBLOCK_REQUIRED, - VA_MSGID_TEST_RESPONCE, - VA_MSGID_ACK, - - VA_MSGID_CMD_FAILED, - VA_MSGID_CMD_CONTIGUITY_WARNING, - VA_MSGID_CMD_HW_PANIC, -}; - -/* Deblock parameters */ -struct DEBLOCKPARAMS { - uint32_t handle; /* struct ttm_buffer_object * of REGIO */ - uint32_t buffer_size; - uint32_t ctxid; - - uint32_t *pPicparams; - struct ttm_bo_kmap_obj *regio_kmap; /* virtual of regio */ - uint32_t pad[3]; -}; - -/* HOST_BE_OPP parameters */ -struct HOST_BE_OPP_PARAMS { - uint32_t handle; /* struct ttm_buffer_object * of REGIO */ - uint32_t buffer_stride; - uint32_t buffer_size; - uint32_t picture_width_mb; - uint32_t size_mb; -}; -struct psb_msvdx_deblock_queue { - - struct list_head head; - struct DEBLOCKPARAMS dbParams; -}; - -typedef struct { - union { - struct { - uint32_t msg_size : 8; - uint32_t msg_type : 8; - uint32_t msg_fence : 16; - } bits; - uint32_t value; - } header; - uint32_t flags; - uint32_t operating_mode; - union { - struct { - uint32_t context : 8; - uint32_t mmu_ptd : 24; - } bits; - uint32_t value; - } mmu_context; - union { - struct { - uint32_t frame_height_mb : 16; - uint32_t pic_width_mb : 16; - } bits; - uint32_t value; - } pic_size; - uint32_t address_a0; - uint32_t address_a1; - uint32_t mb_param_address; - uint32_t address_b0; - uint32_t address_b1; - uint32_t rotation_flags; -} FW_VA_DEBLOCK_MSG; - -typedef struct drm_psb_msvdx_frame_info { - uint32_t handle; - uint32_t surface_id; - uint32_t fence; - uint32_t buffer_stride; - uint32_t buffer_size; - uint32_t picture_width_mb; - uint32_t fw_status; - uint32_t size_mb; - drm_psb_msvdx_decode_status_t decode_status; -} drm_psb_msvdx_frame_info_t; - -#define MAX_DECODE_BUFFERS 24 -/* MSVDX private structure */ -struct msvdx_private { - int msvdx_needs_reset; - - unsigned int pmstate; - - struct sysfs_dirent *sysfs_pmstate; - - uint32_t msvdx_current_sequence; - uint32_t msvdx_last_sequence; - - /* - *MSVDX Rendec Memory - */ - struct ttm_buffer_object *ccb0; - uint32_t base_addr0; - struct ttm_buffer_object *ccb1; - uint32_t base_addr1; - - struct ttm_buffer_object *fw; - uint32_t is_load; - uint32_t mtx_mem_size; - - /* - *msvdx command queue - */ - spinlock_t msvdx_lock; - struct mutex msvdx_mutex; - struct list_head msvdx_queue; - int msvdx_busy; - int msvdx_fw_loaded; - void *msvdx_fw; - int msvdx_fw_size; - - struct list_head deblock_queue; /* deblock parameter list */ - - uint32_t msvdx_hw_busy; - - uint32_t *vec_local_mem_data; - uint32_t vec_local_mem_size; - uint32_t vec_local_mem_saved; - uint32_t psb_dash_access_ctrl; - uint32_t fw_status; - - drm_psb_msvdx_frame_info_t frame_info[MAX_DECODE_BUFFERS]; - drm_psb_msvdx_decode_status_t decode_status; - uint32_t deblock_enabled; - uint32_t host_be_opp_enabled; - - uint32_t ec_fence; - uint32_t ref_pic_fence; - /*work for error concealment*/ - struct work_struct ec_work; - struct ttm_object_file *tfile; -}; - -#define REGISTER(__group__, __reg__ ) (__group__##_##__reg__##_OFFSET) -/* MSVDX Firmware interface */ -#define FW_VA_INIT_SIZE (8) -#define FW_VA_DEBUG_TEST2_SIZE (4) - -/*MESSAGE SENT FROM HOST TO FW*/ -/*FW_VA_RENDER MESSAGE*/ -/* FW_VA_RENDER BUFFER_SIZE */ -#define FW_VA_RENDER_BUFFER_SIZE_TYPE uint16_t -#define FW_VA_RENDER_BUFFER_SIZE_MASK (0x0FFF) -#define FW_VA_RENDER_BUFFER_SIZE_OFFSET (0x0002) -#define FW_VA_RENDER_BUFFER_SIZE_SHIFT (0) - -/* FW_VA_RENDER MMUPTD */ -#define FW_VA_RENDER_MMUPTD_TYPE uint32_t -#define FW_VA_RENDER_MMUPTD_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_MMUPTD_OFFSET (0x0004) -#define FW_VA_RENDER_MMUPTD_SHIFT (0) - -/* FW_VA_RENDER LLDMA_ADDRESS */ -#define FW_VA_RENDER_LLDMA_ADDRESS_START_BIT 0 -#define FW_VA_RENDER_LLDMA_ADDRESS_END_BIT 31 -#define FW_VA_RENDER_LLDMA_ADDRESS_ALIGNMENT (4) -#define FW_VA_RENDER_LLDMA_ADDRESS_TYPE uint32_t -#define FW_VA_RENDER_LLDMA_ADDRESS_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_LLDMA_ADDRESS_LSBMASK (0xFFFFFFFF) -#define FW_VA_RENDER_LLDMA_ADDRESS_OFFSET (0x0008) -#define FW_VA_RENDER_LLDMA_ADDRESS_SHIFT (0) -#define FW_VA_RENDER_LLDMA_ADDRESS_SIGNED_FIELD (0) - -/* FW_VA_RENDER CONTEXT */ -#define FW_VA_RENDER_CONTEXT_START_BIT 0 -#define FW_VA_RENDER_CONTEXT_END_BIT 31 -#define FW_VA_RENDER_CONTEXT_ALIGNMENT (4) -#define FW_VA_RENDER_CONTEXT_TYPE uint32_t -#define FW_VA_RENDER_CONTEXT_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_CONTEXT_LSBMASK (0xFFFFFFFF) -#define FW_VA_RENDER_CONTEXT_OFFSET (0x000C) -#define FW_VA_RENDER_CONTEXT_SHIFT (0) -#define FW_VA_RENDER_CONTEXT_SIGNED_FIELD (0) - - -/* FW_VA_RENDER FENCE_VALUE_NO_EC */ -#define FW_VA_RENDER_FENCE_VALUE_TYPE uint32_t -#define FW_VA_RENDER_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_FENCE_VALUE_OFFSET (0x0010) -#define FW_VA_RENDER_FENCE_VALUE_SHIFT (0) - -/* FW_VA_RENDER OPERATING_MODE */ -#define FW_VA_RENDER_OPERATING_MODE_ALIGNMENT (4) -#define FW_VA_RENDER_OPERATING_MODE_TYPE uint32_t -#define FW_VA_RENDER_OPERATING_MODE_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_OPERATING_MODE_LSBMASK (0xFFFFFFFF) -#define FW_VA_RENDER_OPERATING_MODE_OFFSET (0x0014) -#define FW_VA_RENDER_OPERATING_MODE_SHIFT (0) -#define FW_VA_RENDER_OPERATING_MODE_SIGNED_FIELD (0) - -/* FW_VA_RENDER FIRST_MB_IN_SLICE */ -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_START_BIT 0 -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_END_BIT 15 -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_ALIGNMENT (2) -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_TYPE uint16_t -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_MASK (0xFFFF) -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_LSBMASK (0xFFFF) -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_OFFSET (0x0018) -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_SHIFT (0) -#define FW_VA_RENDER_FIRST_MB_IN_SLICE_SIGNED_FIELD (0) - -/* FW_VA_RENDER LAST_MB_IN_FRAME */ -#define FW_VA_RENDER_LAST_MB_IN_FRAME_START_BIT 16 -#define FW_VA_RENDER_LAST_MB_IN_FRAME_END_BIT 31 -#define FW_VA_RENDER_LAST_MB_IN_FRAME_ALIGNMENT (2) -#define FW_VA_RENDER_LAST_MB_IN_FRAME_TYPE uint16_t -#define FW_VA_RENDER_LAST_MB_IN_FRAME_MASK (0xFFFF) -#define FW_VA_RENDER_LAST_MB_IN_FRAME_LSBMASK (0xFFFF) -#define FW_VA_RENDER_LAST_MB_IN_FRAME_OFFSET (0x001A) -#define FW_VA_RENDER_LAST_MB_IN_FRAME_SHIFT (0) -#define FW_VA_RENDER_LAST_MB_IN_FRAME_SIGNED_FIELD (0) - -/* FW_VA_RENDER FLAGS */ -#define FW_VA_RENDER_FLAGS_START_BIT 0 -#define FW_VA_RENDER_FLAGS_END_BIT 31 -#define FW_VA_RENDER_FLAGS_ALIGNMENT (4) -#define FW_VA_RENDER_FLAGS_TYPE uint32_t -#define FW_VA_RENDER_FLAGS_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_FLAGS_LSBMASK (0xFFFFFFFF) -#define FW_VA_RENDER_FLAGS_OFFSET (0x001C) -#define FW_VA_RENDER_FLAGS_SHIFT (0) -#define FW_VA_RENDER_FLAGS_SIGNED_FIELD (0) -/* FW_VA_DEBUG_TEST2 MSG_SIZE */ -#define FW_VA_DEBUG_TEST2_MSG_SIZE_TYPE uint8_t -#define FW_VA_DEBUG_TEST2_MSG_SIZE_MASK (0xFF) -#define FW_VA_DEBUG_TEST2_MSG_SIZE_OFFSET (0x0000) -#define FW_VA_DEBUG_TEST2_MSG_SIZE_SHIFT (0) - -/* FW_VA_DEBUG_TEST2 ID */ -#define FW_VA_DEBUG_TEST2_ID_TYPE uint8_t -#define FW_VA_DEBUG_TEST2_ID_MASK (0xFF) -#define FW_VA_DEBUG_TEST2_ID_OFFSET (0x0001) -#define FW_VA_DEBUG_TEST2_ID_SHIFT (0) - -/* FW_VA_CMD_FAILED FENCE_VALUE */ -#define FW_VA_CMD_FAILED_FENCE_VALUE_TYPE uint32_t -#define FW_VA_CMD_FAILED_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_FENCE_VALUE_OFFSET (0x0004) -#define FW_VA_CMD_FAILED_FENCE_VALUE_SHIFT (0) - -/* FW_VA_CMD_FAILED IRQSTATUS */ -#define FW_VA_CMD_FAILED_IRQSTATUS_TYPE uint32_t -#define FW_VA_CMD_FAILED_IRQSTATUS_MASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_IRQSTATUS_OFFSET (0x0008) -#define FW_VA_CMD_FAILED_IRQSTATUS_SHIFT (0) -/*FW_DXVA_DEBLOCK MESSAGE*/ -/* FW_DXVA_DEBLOCK MSG_SIZE */ -#define FW_DXVA_DEBLOCK_MSG_SIZE_ALIGNMENT (1) -#define FW_DXVA_DEBLOCK_MSG_SIZE_TYPE uint8_t -#define FW_DXVA_DEBLOCK_MSG_SIZE_MASK (0xFF) -#define FW_DXVA_DEBLOCK_MSG_SIZE_LSBMASK (0xFF) -#define FW_DXVA_DEBLOCK_MSG_SIZE_OFFSET (0x0000) -#define FW_DXVA_DEBLOCK_MSG_SIZE_SHIFT (0) - -/* FW_DXVA_DEBLOCK ID */ -#define FW_DXVA_DEBLOCK_ID_ALIGNMENT (1) -#define FW_DXVA_DEBLOCK_ID_TYPE uint8_t -#define FW_DXVA_DEBLOCK_ID_MASK (0xFF) -#define FW_DXVA_DEBLOCK_ID_LSBMASK (0xFF) -#define FW_DXVA_DEBLOCK_ID_OFFSET (0x0001) -#define FW_DXVA_DEBLOCK_ID_SHIFT (0) - -// FW_DXVA_DEBLOCK FLAGS -#define FW_DXVA_DEBLOCK_FLAGS_START_BIT 16 -#define FW_DXVA_DEBLOCK_FLAGS_END_BIT 31 -#define FW_DXVA_DEBLOCK_FLAGS_ALIGNMENT (2) -#define FW_DXVA_DEBLOCK_FLAGS_TYPE uint16_t -#define FW_DXVA_DEBLOCK_FLAGS_MASK (0xFFFF) -#define FW_DXVA_DEBLOCK_FLAGS_LSBMASK (0xFFFF) -#define FW_DXVA_DEBLOCK_FLAGS_OFFSET (0x0002) -#define FW_DXVA_DEBLOCK_FLAGS_SHIFT (0) -#define FW_DXVA_DEBLOCK_FLAGS_SIGNED_FIELD (0) - -/* FW_DXVA_DEBLOCK CONTEXT */ -#define FW_DXVA_DEBLOCK_CONTEXT_START_BIT 0 -#define FW_DXVA_DEBLOCK_CONTEXT_END_BIT 11 -#define FW_DXVA_DEBLOCK_CONTEXT_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_CONTEXT_TYPE uint16_t -#define FW_DXVA_DEBLOCK_CONTEXT_MASK (0xFFF) -#define FW_DXVA_DEBLOCK_CONTEXT_LSBMASK (0xFFF) -#define FW_DXVA_DEBLOCK_CONTEXT_OFFSET (0x0004) -#define FW_DXVA_DEBLOCK_CONTEXT_SHIFT (0) -#define FW_DXVA_DEBLOCK_CONTEXT_SIGNED_FIELD (0) - - -/* FW_DXVA_DEBLOCK CONTEXT_NO_EC */ -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_START_BIT 0 -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_END_BIT 31 -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_TYPE uint32_t -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_MASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_CONTEXT_NO_EC_OFFSET (0x0004) -#define FW_DXVA_DEBLOCK_CONTEXT_SHIFT (0) -#define FW_DXVA_DEBLOCK_CONTEXT_SIGNED_FIELD (0) - -/* FW_DXVA_DEBLOCK FENCE_VALUE_NO_EC */ -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_START_BIT 0 -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_END_BIT 31 -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_TYPE uint32_t -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_MASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_OFFSET (0x0008) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_SHIFT (0) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_NO_EC_SIGNED_FIELD (0) - - -/* FW_DXVA_DEBLOCK MMUPTD */ -#define FW_DXVA_DEBLOCK_MMUPTD_START_BIT 0 -#define FW_DXVA_DEBLOCK_MMUPTD_END_BIT 31 -#define FW_DXVA_DEBLOCK_MMUPTD_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_MMUPTD_TYPE uint32_t -#define FW_DXVA_DEBLOCK_MMUPTD_MASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_MMUPTD_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_MMUPTD_OFFSET (0x000C) -#define FW_DXVA_DEBLOCK_MMUPTD_SHIFT (0) -#define FW_DXVA_DEBLOCK_MMUPTD_SIGNED_FIELD (0) - - -/* FW_VA_HOST_BE_OPP MMUPTD */ -#define FW_VA_HOST_BE_OPP_MMUPTD_ALIGNMENT (4) -#define FW_VA_HOST_BE_OPP_MMUPTD_TYPE uint32_t -#define FW_VA_HOST_BE_OPP_MMUPTD_MASK (0xFFFFFFFF) -#define FW_VA_HOST_BE_OPP_MMUPTD_LSBMASK (0xFFFFFFFF) -#define FW_VA_HOST_BE_OPP_MMUPTD_OFFSET (0x000C) -#define FW_VA_HOST_BE_OPP_MMUPTD_SHIFT (0) - - -/*MESSAGE SENT FROM FW TO HOST*/ - -/* FW_VA_CMD_COMPLETED MESSAGE*/ -/* FW_VA_CMD_COMPLETED LASTMB */ -#define FW_VA_CMD_COMPLETED_LASTMB_ALIGNMENT (2) -#define FW_VA_CMD_COMPLETED_LASTMB_TYPE uint16_t -#define FW_VA_CMD_COMPLETED_LASTMB_MASK (0xFFFF) -#define FW_VA_CMD_COMPLETED_LASTMB_LSBMASK (0xFFFF) -#define FW_VA_CMD_COMPLETED_LASTMB_OFFSET (0x0002) -#define FW_VA_CMD_COMPLETED_LASTMB_SHIFT (0) -#define FW_VA_CMD_COMPLETED_LASTMB_SIGNED_FIELD (0) - -/* FW_VA_CMD_COMPLETED NO_TICKSNO_EC */ -#define FW_VA_CMD_COMPLETED_NO_TICKS_NO_EC_TYPE uint16_t -#define FW_VA_CMD_COMPLETED_NO_TICKS_NO_EC_MASK (0xFFFF) -#define FW_VA_CMD_COMPLETED_NO_TICKS_NO_EC_OFFSET (0x0002) -#define FW_VA_CMD_COMPLETED_NO_TICKS_NO_EC_SHIFT (0) -/* FW_VA_CMD_COMPLETED FENCE_VALUE */ -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_TYPE uint32_t -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_OFFSET (0x0004) -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_SHIFT (0) - -/* FW_VA_CMD_COMPLETED FENCE_VALUE_NO_EC */ -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_NO_EC_TYPE uint32_t -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_NO_EC_MASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_NO_EC_OFFSET (0x0004) -#define FW_VA_CMD_COMPLETED_FENCE_VALUE_NO_EC_SHIFT (0) - -/* FW_VA_CMD_COMPLETED FLAGS */ -#define FW_VA_CMD_COMPLETED_FLAGS_ALIGNMENT (4) -#define FW_VA_CMD_COMPLETED_FLAGS_TYPE uint32_t -#define FW_VA_CMD_COMPLETED_FLAGS_MASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_FLAGS_LSBMASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_FLAGS_OFFSET (0x0008) -#define FW_VA_CMD_COMPLETED_FLAGS_SHIFT (0) - -/* FW_VA_CMD_COMPLETED NO_TICKS */ -#define FW_VA_CMD_COMPLETED_NO_TICKS_TYPE uint16_t -#define FW_VA_CMD_COMPLETED_NO_TICKS_MASK (0xFFFF) -#define FW_VA_CMD_COMPLETED_NO_TICKS_OFFSET (0x0002) -#define FW_VA_CMD_COMPLETED_NO_TICKS_SHIFT (0) - - -/* FW_VA_DEBLOCK_REQUIRED CONTEXT */ -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_TYPE uint16_t -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_MASK (0xFFF) -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_OFFSET (0x0004) -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_SHIFT (0) - -/* FW_VA_INIT GLOBAL_PTD */ -#define FW_VA_INIT_GLOBAL_PTD_TYPE uint32_t -#define FW_VA_INIT_GLOBAL_PTD_MASK (0xFFFFFFFF) -#define FW_VA_INIT_GLOBAL_PTD_OFFSET (0x0004) -#define FW_VA_INIT_GLOBAL_PTD_SHIFT (0) - -/* FW_VA_RENDER FENCE_VALUE */ -#define FW_VA_RENDER_FENCE_VALUE_TYPE uint32_t -#define FW_VA_RENDER_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_FENCE_VALUE_OFFSET (0x0010) -#define FW_VA_RENDER_FENCE_VALUE_SHIFT (0) - -/* FW_DXVA_OOLD FENCE_VALUE */ -#define FW_DXVA_OOLD_FENCE_VALUE_ALIGNMENT (4) -#define FW_DXVA_OOLD_FENCE_VALUE_TYPE uint32_t -#define FW_DXVA_OOLD_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_FENCE_VALUE_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_FENCE_VALUE_OFFSET (0x0008) -#define FW_DXVA_OOLD_FENCE_VALUE_SHIFT (0) - - -/* FW_VA_RENDER MMUPTD */ -#define FW_VA_RENDER_MMUPTD_TYPE uint32_t -#define FW_VA_RENDER_MMUPTD_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_MMUPTD_OFFSET (0x0004) -#define FW_VA_RENDER_MMUPTD_SHIFT (0) - -/* FW_VA_RENDER BUFFER_ADDRESS */ -#define FW_VA_RENDER_BUFFER_ADDRESS_TYPE uint32_t -#define FW_VA_RENDER_BUFFER_ADDRESS_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_BUFFER_ADDRESS_OFFSET (0x0008) -#define FW_VA_RENDER_BUFFER_ADDRESS_SHIFT (0) - -/* FW_VA_RENDER BUFFER_SIZE */ -#define FW_VA_RENDER_BUFFER_SIZE_TYPE uint16_t -#define FW_VA_RENDER_BUFFER_SIZE_MASK (0x0FFF) -#define FW_VA_RENDER_BUFFER_SIZE_OFFSET (0x0002) -#define FW_VA_RENDER_BUFFER_SIZE_SHIFT (0) - -/* FW_VA_RENDER FLAGS */ -#define FW_VA_RENDER_FLAGS_TYPE uint32_t -#define FW_VA_RENDER_FLAGS_MASK (0xFFFFFFFF) -#define FW_VA_RENDER_FLAGS_OFFSET (0x001C) -#define FW_VA_RENDER_FLAGS_SHIFT (0) - -/* FW_DEVA_DECODE MMUPTD */ -#define FW_VA_DECODE_MMUPTD_TYPE uint32_t -#define FW_VA_DECODE_MMUPTD_MASK (0xFFFFFF00) -#define FW_VA_DECODE_MMUPTD_OFFSET (0x000C) -#define FW_VA_DECODE_MMUPTD_SHIFT (0) - -/* FW_DEVA_DECODE MSG_ID */ -#define FW_VA_DECODE_MSG_ID_TYPE uint16_t -#define FW_VA_DECODE_MSG_ID_MASK (0xFFFF) -#define FW_VA_DECODE_MSG_ID_OFFSET (0x0002) -#define FW_VA_DECODE_MSG_ID_SHIFT (0) - -/* FW_DEVA_DECODE FLAGS */ -#define FW_DEVA_DECODE_FLAGS_TYPE uint16_t -#define FW_DEVA_DECODE_FLAGS_MASK (0xFFFF) -#define FW_DEVA_DECODE_FLAGS_OFFSET (0x0004) -#define FW_DEVA_DECODE_FLAGS_SHIFT (0) - -#define FW_DEVA_INVALIDATE_MMU (0x00000010) - -/* FW_DEVA_CMD_COMPLETED MSG_ID */ -#define FW_VA_CMD_COMPLETED_MSG_ID_TYPE uint16_t -#define FW_VA_CMD_COMPLETED_MSG_ID_MASK (0xFFFF) -#define FW_VA_CMD_COMPLETED_MSG_ID_OFFSET (0x0002) -#define FW_VA_CMD_COMPLETED_MSG_ID_SHIFT (0) - -/* FW_DEVA_CMD_FAILED MSG_ID */ -#define FW_DEVA_CMD_FAILED_MSG_ID_TYPE uint16_t -#define FW_DEVA_CMD_FAILED_MSG_ID_MASK (0xFFFF) -#define FW_DEVA_CMD_FAILED_MSG_ID_OFFSET (0x0002) -#define FW_DEVA_CMD_FAILED_MSG_ID_SHIFT (0) - -/* FW_DEVA_CMD_FAILED FLAGS */ -#define FW_DEVA_CMD_FAILED_FLAGS_TYPE uint32_t -#define FW_DEVA_CMD_FAILED_FLAGS_MASK (0xFFFFFFFF) -#define FW_DEVA_CMD_FAILED_FLAGS_OFFSET (0x0004) -#define FW_DEVA_CMD_FAILED_FLAGS_SHIFT (0) - -/* FW_DXVA_DEBLOCK MSG_SIZE */ -#define FW_DXVA_DEBLOCK_MSG_SIZE_ALIGNMENT (1) -#define FW_DXVA_DEBLOCK_MSG_SIZE_TYPE uint8_t -#define FW_DXVA_DEBLOCK_MSG_SIZE_MASK (0xFF) -#define FW_DXVA_DEBLOCK_MSG_SIZE_LSBMASK (0xFF) -#define FW_DXVA_DEBLOCK_MSG_SIZE_OFFSET (0x0000) -#define FW_DXVA_DEBLOCK_MSG_SIZE_SHIFT (0) - -/* FW_DXVA_DEBLOCK ID */ -#define FW_DXVA_DEBLOCK_ID_ALIGNMENT (1) -#define FW_DXVA_DEBLOCK_ID_TYPE uint8_t -#define FW_DXVA_DEBLOCK_ID_MASK (0xFF) -#define FW_DXVA_DEBLOCK_ID_LSBMASK (0xFF) -#define FW_DXVA_DEBLOCK_ID_OFFSET (0x0001) -#define FW_DXVA_DEBLOCK_ID_SHIFT (0) - -/* FW_DXVA_DEBLOCK FENCE_VALUE */ -#define FW_DXVA_DEBLOCK_FENCE_VALUE_START_BIT 0 -#define FW_DXVA_DEBLOCK_FENCE_VALUE_END_BIT 15 -#define FW_DXVA_DEBLOCK_FENCE_VALUE_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_TYPE uint16_t -#define FW_DXVA_DEBLOCK_FENCE_VALUE_MASK (0xFFFF) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_LSBMASK (0xFFFF) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_OFFSET (0x0008) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_SHIFT (0) -#define FW_DXVA_DEBLOCK_FENCE_VALUE_SIGNED_FIELD (0) - -/* FW_VA_HOST_BE_OPP MESSAGE */ -/* FW_VA_HOST_BE_OPP FENCE_VALUE */ -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_ALIGNMENT (4) -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_TYPE uint16_t -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_MASK (0xFFFF) -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_LSBMASK (0xFFFF) -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_OFFSET (0x0008) -#define FW_VA_HOST_BE_OPP_FENCE_VALUE_SHIFT (0) - - -/* FW_VA_HOST_BE_OPP MMUPTD */ -#define FW_VA_HOST_BE_OPP_MMUPTD_ALIGNMENT (4) -#define FW_VA_HOST_BE_OPP_MMUPTD_TYPE uint32_t -#define FW_VA_HOST_BE_OPP_MMUPTD_MASK (0xFFFFFFFF) -#define FW_VA_HOST_BE_OPP_MMUPTD_LSBMASK (0xFFFFFFFF) -#define FW_VA_HOST_BE_OPP_MMUPTD_OFFSET (0x000C) -#define FW_VA_HOST_BE_OPP_MMUPTD_SHIFT (0) - - -/* FW_DXVA_DEBLOCK MMUPTD */ -#define FW_DXVA_DEBLOCK_MMUPTD_ALIGNMENT (4) -#define FW_DXVA_DEBLOCK_MMUPTD_TYPE uint32_t -#define FW_DXVA_DEBLOCK_MMUPTD_MASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_MMUPTD_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_DEBLOCK_MMUPTD_OFFSET (0x000C) -#define FW_DXVA_DEBLOCK_MMUPTD_SHIFT (0) - -#define FW_DXVA_OOLD_SIZE (40) - - -// FW_VA_CMD_COMPLETED VDEBCR -#define FW_VA_CMD_COMPLETED_VDEBCR_START_BIT 0 -#define FW_VA_CMD_COMPLETED_VDEBCR_END_BIT 31 -#define FW_VA_CMD_COMPLETED_VDEBCR_ALIGNMENT (4) -#define FW_VA_CMD_COMPLETED_VDEBCR_TYPE uint32_t -#define FW_VA_CMD_COMPLETED_VDEBCR_MASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_VDEBCR_LSBMASK (0xFFFFFFFF) -#define FW_VA_CMD_COMPLETED_VDEBCR_OFFSET (0x000C) -#define FW_VA_CMD_COMPLETED_VDEBCR_SHIFT (0) -#define FW_VA_CMD_COMPLETED_VDEBCR_SIGNED_FIELD (0) - -/* FW_VA_CMD_FAILED FLAGS */ -#define FW_VA_CMD_FAILED_FLAGS_ALIGNMENT (4) -#define FW_VA_CMD_FAILED_FLAGS_TYPE uint32_t -#define FW_VA_CMD_FAILED_FLAGS_MASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_FLAGS_LSBMASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_FLAGS_OFFSET (0x0004) -#define FW_VA_CMD_FAILED_FLAGS_SHIFT (0) -#define FW_VA_CMD_FAILED_FLAGS_SIGNED_FIELD (0) - -/* FW_VA_CMD_FAILED_NO_EC FENCE_VALUE */ -#define FW_VA_CMD_FAILED_FENCE_VALUE_NO_EC_TYPE uint32_t -#define FW_VA_CMD_FAILED_FENCE_VALUE_NO_EC_MASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_FENCE_VALUE_NO_EC_OFFSET (0x0004) -#define FW_VA_CMD_FAILED_FENCE_VALUE_NO_EC_SHIFT (0) - -/* FW_VA_CMD_FAILED_NO_EC IRQSTATUS */ -#define FW_VA_CMD_FAILED_IRQSTATUS_NO_EC_TYPE uint32_t -#define FW_VA_CMD_FAILED_IRQSTATUS_NO_EC_MASK (0xFFFFFFFF) -#define FW_VA_CMD_FAILED_IRQSTATUS_NO_EC_OFFSET (0x0008) -#define FW_VA_CMD_FAILED_IRQSTATUS_NO_EC_SHIFT (0) - -/* PANIC MESSAGE */ -// FW_VA_HW_PANIC FENCE_VALUE -#define FW_VA_HW_PANIC_FENCE_VALUE_START_BIT 16 -#define FW_VA_HW_PANIC_FENCE_VALUE_END_BIT 31 -#define FW_VA_HW_PANIC_FENCE_VALUE_ALIGNMENT (2) -#define FW_VA_HW_PANIC_FENCE_VALUE_TYPE uint16_t -#define FW_VA_HW_PANIC_FENCE_VALUE_MASK (0xFFFF) -#define FW_VA_HW_PANIC_FENCE_VALUE_LSBMASK (0xFFFF) -#define FW_VA_HW_PANIC_FENCE_VALUE_OFFSET (0x0002) -#define FW_VA_HW_PANIC_FENCE_VALUE_SHIFT (0) -#define FW_VA_HW_PANIC_FENCE_VALUE_SIGNED_FIELD (0) - -/* FW_VA_HW_PANIC FIRST_MB_NUM */ -#define FW_VA_HW_PANIC_FIRST_MB_NUM_START_BIT 0 -#define FW_VA_HW_PANIC_FIRST_MB_NUM_END_BIT 15 -#define FW_VA_HW_PANIC_FIRST_MB_NUM_ALIGNMENT (2) -#define FW_VA_HW_PANIC_FIRST_MB_NUM_TYPE uint16_t -#define FW_VA_HW_PANIC_FIRST_MB_NUM_MASK (0xFFFF) -#define FW_VA_HW_PANIC_FIRST_MB_NUM_LSBMASK (0xFFFF) -#define FW_VA_HW_PANIC_FIRST_MB_NUM_OFFSET (0x0004) -#define FW_VA_HW_PANIC_FIRST_MB_NUM_SHIFT (0) -#define FW_VA_HW_PANIC_FIRST_MB_NUM_SIGNED_FIELD (0) - -/* FW_VA_HW_PANIC FAULT_MB_NUM */ -#define FW_VA_HW_PANIC_FAULT_MB_NUM_START_BIT 16 -#define FW_VA_HW_PANIC_FAULT_MB_NUM_END_BIT 31 -#define FW_VA_HW_PANIC_FAULT_MB_NUM_ALIGNMENT (2) -#define FW_VA_HW_PANIC_FAULT_MB_NUM_TYPE uint16_t -#define FW_VA_HW_PANIC_FAULT_MB_NUM_MASK (0xFFFF) -#define FW_VA_HW_PANIC_FAULT_MB_NUM_LSBMASK (0xFFFF) -#define FW_VA_HW_PANIC_FAULT_MB_NUM_OFFSET (0x0006) -#define FW_VA_HW_PANIC_FAULT_MB_NUM_SHIFT (0) -#define FW_VA_HW_PANIC_FAULT_MB_NUM_SIGNED_FIELD (0) - -/* FW_VA_HW_PANIC FESTATUS */ -#define FW_VA_HW_PANIC_FESTATUS_START_BIT 0 -#define FW_VA_HW_PANIC_FESTATUS_END_BIT 31 -#define FW_VA_HW_PANIC_FESTATUS_ALIGNMENT (4) -#define FW_VA_HW_PANIC_FESTATUS_TYPE uint32_t -#define FW_VA_HW_PANIC_FESTATUS_MASK (0xFFFFFFFF) -#define FW_VA_HW_PANIC_FESTATUS_LSBMASK (0xFFFFFFFF) -#define FW_VA_HW_PANIC_FESTATUS_OFFSET (0x0008) -#define FW_VA_HW_PANIC_FESTATUS_SHIFT (0) -#define FW_VA_HW_PANIC_FESTATUS_SIGNED_FIELD (0) - -/* FW_VA_HW_PANIC BESTATUS */ -#define FW_VA_HW_PANIC_BESTATUS_START_BIT 0 -#define FW_VA_HW_PANIC_BESTATUS_END_BIT 31 -#define FW_VA_HW_PANIC_BESTATUS_ALIGNMENT (4) -#define FW_VA_HW_PANIC_BESTATUS_TYPE uint32_t -#define FW_VA_HW_PANIC_BESTATUS_MASK (0xFFFFFFFF) -#define FW_VA_HW_PANIC_BESTATUS_LSBMASK (0xFFFFFFFF) -#define FW_VA_HW_PANIC_BESTATUS_OFFSET (0x000C) -#define FW_VA_HW_PANIC_BESTATUS_SHIFT (0) -#define FW_VA_HW_PANIC_BESTATUS_SIGNED_FIELD (0) - -/* FW_VA_DEBLOCK_REQUIRED MESSAGE*/ -/* FW_VA_DEBLOCK_REQUIRED FENCE_VALUE */ -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_ALIGNMENT (2) -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_TYPE uint16_t -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_MASK (0xFFFF) -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_LSBMASK (0xFFFF) -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_OFFSET (0x0002) -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_SHIFT (0) -#define FW_VA_DEBLOCK_REQUIRED_FENCE_VALUE_SIGNED_FIELD (0) - - -/* FW_VA_DEBLOCK_REQUIRED CONTEXTNO_EC */ -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_NO_EC_TYPE uint32_t -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_NO_EC_MASK (0xFFFFFFFF) -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_NO_EC_OFFSET (0x0004) -#define FW_VA_DEBLOCK_REQUIRED_CONTEXT_NO_EC_SHIFT (0) - -/* FW_VA_CONTIGUITY_WARNING MESSAGE */ -#define FW_VA_CONTIGUITY_WARNING_SIZE (8) - -/* FW_VA_CONTIGUITY_WARNING FENCE_VALUE */ -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_START_BIT 16 -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_END_BIT 31 -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_ALIGNMENT (2) -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_TYPE uint16_t -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_MASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_LSBMASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_OFFSET (0x0002) -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_SHIFT (0) -#define FW_VA_CONTIGUITY_WARNING_FENCE_VALUE_SIGNED_FIELD (0) - -/* FW_VA_CONTIGUITY_WARNING ID */ -#define FW_VA_CONTIGUITY_WARNING_ID_START_BIT 8 -#define FW_VA_CONTIGUITY_WARNING_ID_END_BIT 15 -#define FW_VA_CONTIGUITY_WARNING_ID_ALIGNMENT (1) -#define FW_VA_CONTIGUITY_WARNING_ID_TYPE uint8_t -#define FW_VA_CONTIGUITY_WARNING_ID_MASK (0xFF) -#define FW_VA_CONTIGUITY_WARNING_ID_LSBMASK (0xFF) -#define FW_VA_CONTIGUITY_WARNING_ID_OFFSET (0x0001) -#define FW_VA_CONTIGUITY_WARNING_ID_SHIFT (0) -#define FW_VA_CONTIGUITY_WARNING_ID_SIGNED_FIELD (0) - -/* FW_VA_CONTIGUITY_WARNING MSG_SIZE */ -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_START_BIT 0 -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_END_BIT 7 -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_ALIGNMENT (1) -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_TYPE uint8_t -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_MASK (0xFF) -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_LSBMASK (0xFF) -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_OFFSET (0x0000) -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_SHIFT (0) -#define FW_VA_CONTIGUITY_WARNING_MSG_SIZE_SIGNED_FIELD (0) - -/* FW_VA_CONTIGUITY_WARNING END_MB_NUM */ -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_START_BIT 0 -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_END_BIT 15 -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_ALIGNMENT (2) -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_TYPE uint16_t -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_MASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_LSBMASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_OFFSET (0x0004) -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_SHIFT (0) -#define FW_VA_CONTIGUITY_WARNING_END_MB_NUM_SIGNED_FIELD (0) - -/* FW_VA_CONTIGUITY_WARNING BEGIN_MB_NUM */ -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_START_BIT 16 -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_END_BIT 31 -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_ALIGNMENT (2) -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_TYPE uint16_t -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_MASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_LSBMASK (0xFFFF) -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_OFFSET (0x0006) -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_SHIFT (0) -#define FW_VA_CONTIGUITY_WARNING_BEGIN_MB_NUM_SIGNED_FIELD (0) - -/* FW_DXVA_OOLD FENCE_VALUE */ -#define FW_DXVA_OOLD_FENCE_VALUE_ALIGNMENT (4) -#define FW_DXVA_OOLD_FENCE_VALUE_TYPE uint32_t -#define FW_DXVA_OOLD_FENCE_VALUE_MASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_FENCE_VALUE_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_FENCE_VALUE_OFFSET (0x0008) -#define FW_DXVA_OOLD_FENCE_VALUE_SHIFT (0) - -/* FW_DXVA_OOLD MMUPTD */ -#define FW_DXVA_OOLD_MMUPTD_ALIGNMENT (4) -#define FW_DXVA_OOLD_MMUPTD_TYPE IMG_UINT32 -#define FW_DXVA_OOLD_MMUPTD_MASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_MMUPTD_LSBMASK (0xFFFFFFFF) -#define FW_DXVA_OOLD_MMUPTD_OFFSET (0x0004) -#define FW_DXVA_OOLD_MMUPTD_SHIFT (0) - -#define FW_VA_LAST_SLICE_OF_EXT_DMA 0x00001000 - -static inline void psb_msvdx_clearirq(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - unsigned long mtx_int = 0; - - PSB_DEBUG_IRQ("MSVDX: clear IRQ\n"); - - /* Clear MTX interrupt */ - REGIO_WRITE_FIELD_LITE(mtx_int, MSVDX_INTERRUPT_STATUS, CR_MTX_IRQ, - 1); - PSB_WMSVDX32(mtx_int, MSVDX_INTERRUPT_CLEAR); -} - - -static inline void psb_msvdx_disableirq(struct drm_device *dev) -{ - /* nothing */ -} - - -static inline void psb_msvdx_enableirq(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - unsigned long enables = 0; - - PSB_DEBUG_IRQ("MSVDX: enable MSVDX MTX IRQ\n"); - REGIO_WRITE_FIELD_LITE(enables, MSVDX_INTERRUPT_STATUS, CR_MTX_IRQ, - 1); - PSB_WMSVDX32(enables, MSVDX_HOST_INTERRUPT_ENABLE); -} - -#define MSVDX_NEW_PMSTATE(drm_dev, msvdx_priv, new_state) \ -do { \ - msvdx_priv->pmstate = new_state; \ - sysfs_notify_dirent(msvdx_priv->sysfs_pmstate); \ - PSB_DEBUG_PM("MSVDX: %s\n", \ - (new_state == PSB_PMSTATE_POWERUP) ? "powerup" \ - : ((new_state == PSB_PMSTATE_POWERDOWN) ? "powerdown" \ - : "clockgated")); \ -} while (0) - -#endif - -#define IS_FW_UPDATED 1 diff --git a/drivers/staging/cdv/imgv/psb_msvdxinit.c b/drivers/staging/cdv/imgv/psb_msvdxinit.c deleted file mode 100644 index 5ea5c83..0000000 --- a/drivers/staging/cdv/imgv/psb_msvdxinit.c +++ /dev/null @@ -1,1164 +0,0 @@ -/************************************************************************** - * psb_msvdxinit.c - * MSVDX initialization and mtx-firmware upload - * - * Copyright (c) 2011 Intel Corporation, Hillsboro, OR, USA - * Copyright (c) Imagination Technologies Limited, UK - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - -#include -#include -#include "psb_drv.h" -#include "psb_msvdx.h" -#include - -#define MSVDX_REG (dev_priv->msvdx_reg) -#define UPLOAD_FW_BY_DMA 1 -#define STACKGUARDWORD ( 0x10101010 ) -#define MSVDX_MTX_DATA_LOCATION ( 0x82880000 ) -#define UNINITILISE_MEM ( 0xcdcdcdcd ) -#define FIRMWAREID ( 0x014d42ab ) - -uint8_t psb_rev_id; -/*MSVDX FW header*/ -struct msvdx_fw { - uint32_t ver; - uint32_t text_size; - uint32_t data_size; - uint32_t data_location; -}; - -int psb_wait_for_register(struct drm_psb_private *dev_priv, - uint32_t offset, uint32_t value, uint32_t enable) -{ - uint32_t reg_value; - uint32_t poll_cnt = 10000; - while (poll_cnt) { - reg_value = PSB_RMSVDX32(offset); - if (value == (reg_value & enable)) /* All the bits are reset */ - return 0; /* So exit */ - - /* Wait a bit */ - DRM_UDELAY(1000); - poll_cnt--; - } - DRM_ERROR("MSVDX: Timeout while waiting for register %08x:" - " expecting %08x (mask %08x), got %08x\n", - offset, value, enable, reg_value); - - return 1; -} - -int psb_poll_mtx_irq(struct drm_psb_private *dev_priv) -{ - int ret = 0; - uint32_t mtx_int = 0; - - REGIO_WRITE_FIELD_LITE(mtx_int, MSVDX_INTERRUPT_STATUS, CR_MTX_IRQ, - 1); - - ret = psb_wait_for_register(dev_priv, MSVDX_INTERRUPT_STATUS, - /* Required value */ - mtx_int, - /* Enabled bits */ - mtx_int); - - if (ret) { - DRM_ERROR("MSVDX: Error Mtx did not return" - " int within a resonable time\n"); - return ret; - } - - PSB_DEBUG_IRQ("MSVDX: Got MTX Int\n"); - - /* Got it so clear the bit */ - PSB_WMSVDX32(mtx_int, MSVDX_INTERRUPT_CLEAR); - - return ret; -} - -void psb_write_mtx_core_reg(struct drm_psb_private *dev_priv, - const uint32_t core_reg, const uint32_t val) -{ - uint32_t reg = 0; - - /* Put data in MTX_RW_DATA */ - PSB_WMSVDX32(val, MSVDX_MTX_REGISTER_READ_WRITE_DATA); - - /* DREADY is set to 0 and request a write */ - reg = core_reg; - REGIO_WRITE_FIELD_LITE(reg, MSVDX_MTX_REGISTER_READ_WRITE_REQUEST, - MTX_RNW, 0); - REGIO_WRITE_FIELD_LITE(reg, MSVDX_MTX_REGISTER_READ_WRITE_REQUEST, - MTX_DREADY, 0); - PSB_WMSVDX32(reg, MSVDX_MTX_REGISTER_READ_WRITE_REQUEST); - - psb_wait_for_register(dev_priv, - MSVDX_MTX_REGISTER_READ_WRITE_REQUEST, - MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK, - MSVDX_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK); -} - -#if UPLOAD_FW_BY_DMA - -static void psb_get_mtx_control_from_dash(struct drm_psb_private *dev_priv) -{ - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int count = 0; - uint32_t reg_val = 0; - - REGIO_WRITE_FIELD(reg_val, MSVDX_MTX_DEBUG, MTX_DBG_IS_SLAVE, 1); - REGIO_WRITE_FIELD(reg_val, MSVDX_MTX_DEBUG, MTX_DBG_GPIO_IN, 0x02); - PSB_WMSVDX32(reg_val, MSVDX_MTX_DEBUG); - - do - { - reg_val = PSB_RMSVDX32(MSVDX_MTX_DEBUG); - count++; - } while (((reg_val & 0x18) != 0) && count < 50000); - - if(count >= 50000) - PSB_DEBUG_GENERAL("TOPAZ: timeout in get_mtx_control_from_dash\n"); - - /* Save the access control register...*/ - msvdx_priv->psb_dash_access_ctrl = PSB_RMSVDX32(MSVDX_MTX_RAM_ACCESS_CONTROL); - -} - -static void psb_release_mtx_control_from_dash(struct drm_psb_private *dev_priv) -{ - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - /* restore access control */ - PSB_WMSVDX32(msvdx_priv->psb_dash_access_ctrl, MSVDX_MTX_RAM_ACCESS_CONTROL); - /* release bus */ - PSB_WMSVDX32(0x4, MSVDX_MTX_DEBUG); -} - - - -static void psb_upload_fw(struct drm_psb_private *dev_priv, - uint32_t address, const unsigned int words, int fw_sel) -{ - uint32_t reg_val=0; - uint32_t cmd; - uint32_t uCountReg, offset, mmu_ptd; - uint32_t size = (words*4 ); /* byte count */ - uint32_t dma_channel = 0; /* Setup a Simple DMA for Ch0 */ - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - PSB_DEBUG_GENERAL("MSVDX: Upload firmware by DMA\n"); - psb_get_mtx_control_from_dash(dev_priv); - - // dma transfers to/from the mtx have to be 32-bit aligned and in multiples of 32 bits - PSB_WMSVDX32(address, REGISTER(MTX_CORE, CR_MTX_SYSC_CDMAA)); - - REGIO_WRITE_FIELD_LITE(reg_val, MTX_CORE_CR_MTX_SYSC_CDMAC, BURSTSIZE, 4 );// burst size in multiples of 64 bits (allowed values are 2 or 4) - REGIO_WRITE_FIELD_LITE(reg_val, MTX_CORE_CR_MTX_SYSC_CDMAC, RNW, 0); // false means write to mtx mem, true means read from mtx mem - REGIO_WRITE_FIELD_LITE(reg_val, MTX_CORE_CR_MTX_SYSC_CDMAC, ENABLE, 1); // begin transfer - REGIO_WRITE_FIELD_LITE(reg_val, MTX_CORE_CR_MTX_SYSC_CDMAC, LENGTH, words ); // This specifies the transfer size of the DMA operation in terms of 32-bit words - PSB_WMSVDX32(reg_val, REGISTER(MTX_CORE, CR_MTX_SYSC_CDMAC)); - - // toggle channel 0 usage between mtx and other msvdx peripherals - { - reg_val = PSB_RMSVDX32(REGISTER( MSVDX_CORE, CR_MSVDX_CONTROL)); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_MSVDX_CONTROL, DMAC_CH0_SELECT, 0 ); - PSB_WMSVDX32(reg_val, REGISTER( MSVDX_CORE, CR_MSVDX_CONTROL)); - } - - - /* Clear the DMAC Stats */ - PSB_WMSVDX32(0 , REGISTER(DMAC, DMAC_IRQ_STAT ) + dma_channel); - - offset = msvdx_priv->fw->offset; - - if(fw_sel) - offset += ((msvdx_priv->mtx_mem_size + 8192) & ~0xfff); - - /* use bank 0 */ - cmd = 0; - PSB_WMSVDX32(cmd, REGISTER(MSVDX_CORE, CR_MMU_BANK_INDEX)); - - /* Write PTD to mmu base 0*/ - mmu_ptd = psb_get_default_pd_addr(dev_priv->mmu); - PSB_WMSVDX32(mmu_ptd, REGISTER( MSVDX_CORE, CR_MMU_DIR_LIST_BASE) + 0); - - /* Invalidate */ - reg_val = PSB_RMSVDX32(REGISTER(MSVDX_CORE, CR_MMU_CONTROL0)); - reg_val &= ~0xf; - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_MMU_CONTROL0, CR_MMU_INVALDC, 1 ); - PSB_WMSVDX32(reg_val, REGISTER(MSVDX_CORE, CR_MMU_CONTROL0 )); - - PSB_WMSVDX32(offset, REGISTER(DMAC, DMAC_SETUP ) + dma_channel); - - /* Only use a single dma - assert that this is valid */ - if( (size / 4 ) >= (1<<15) ) { - DRM_ERROR("psb: DMA size beyond limited, aboart firmware uploading\n"); - return; - } - - - uCountReg = PSB_DMAC_VALUE_COUNT(PSB_DMAC_BSWAP_NO_SWAP, - 0, /* 32 bits */ - PSB_DMAC_DIR_MEM_TO_PERIPH, - 0, - (size / 4 ) ); - /* Set the number of bytes to dma*/ - PSB_WMSVDX32(uCountReg, REGISTER(DMAC, DMAC_COUNT ) + dma_channel); - - cmd = PSB_DMAC_VALUE_PERIPH_PARAM(PSB_DMAC_ACC_DEL_0, PSB_DMAC_INCR_OFF, PSB_DMAC_BURST_2); - PSB_WMSVDX32(cmd, REGISTER(DMAC, DMAC_PERIPH ) + dma_channel); - - /* Set destination port for dma */ - cmd = 0; - REGIO_WRITE_FIELD(cmd, DMAC_DMAC_PERIPHERAL_ADDR, ADDR, MTX_CORE_CR_MTX_SYSC_CDMAT_OFFSET); - PSB_WMSVDX32(cmd, REGISTER(DMAC, DMAC_PERIPHERAL_ADDR ) + dma_channel); - - - /* Finally, rewrite the count register with the enable bit set*/ - PSB_WMSVDX32(uCountReg | DMAC_DMAC_COUNT_EN_MASK, REGISTER(DMAC, DMAC_COUNT ) + dma_channel); - - /* Wait for all to be done */ - if(psb_wait_for_register(dev_priv, - REGISTER(DMAC, DMAC_IRQ_STAT ) + dma_channel, - DMAC_DMAC_IRQ_STAT_TRANSFER_FIN_MASK, - DMAC_DMAC_IRQ_STAT_TRANSFER_FIN_MASK )) { - psb_release_mtx_control_from_dash(dev_priv); - return; - } - - /* Assert that the MTX DMA port is all done aswell */ - if(psb_wait_for_register(dev_priv, REGISTER(MTX_CORE, CR_MTX_SYSC_CDMAS0), 1, 1)) { - psb_release_mtx_control_from_dash(dev_priv); - return; - } - - psb_release_mtx_control_from_dash(dev_priv); - PSB_DEBUG_GENERAL("MSVDX: Upload done\n"); -} - -#else - -static void psb_upload_fw(struct drm_psb_private *dev_priv, - const uint32_t data_mem, uint32_t ram_bank_size, - uint32_t address, const unsigned int words, - const uint32_t * const data) -{ - uint32_t loop, ctrl, ram_id, addr, cur_bank = (uint32_t) ~0; - uint32_t access_ctrl; - - PSB_DEBUG_GENERAL("MSVDX: Upload firmware by register interface\n"); - /* Save the access control register... */ - access_ctrl = PSB_RMSVDX32(MSVDX_MTX_RAM_ACCESS_CONTROL); - - /* Wait for MCMSTAT to become be idle 1 */ - psb_wait_for_register(dev_priv, MSVDX_MTX_RAM_ACCESS_STATUS, - 1, /* Required Value */ - 0xffffffff /* Enables */); - - for (loop = 0; loop < words; loop++) { - ram_id = data_mem + (address / ram_bank_size); - if (ram_id != cur_bank) { - addr = address >> 2; - ctrl = 0; - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCMID, ram_id); - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCM_ADDR, addr); - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCMAI, 1); - PSB_WMSVDX32(ctrl, MSVDX_MTX_RAM_ACCESS_CONTROL); - cur_bank = ram_id; - } - address += 4; - - PSB_WMSVDX32(data[loop], - MSVDX_MTX_RAM_ACCESS_DATA_TRANSFER); - - /* Wait for MCMSTAT to become be idle 1 */ - psb_wait_for_register(dev_priv, MSVDX_MTX_RAM_ACCESS_STATUS, - 1, /* Required Value */ - 0xffffffff /* Enables */); - } - PSB_DEBUG_GENERAL("MSVDX: Upload done\n"); - - /* Restore the access control register... */ - PSB_WMSVDX32(access_ctrl, MSVDX_MTX_RAM_ACCESS_CONTROL); -} - -#endif - -static int psb_verify_fw(struct drm_psb_private *dev_priv, - const uint32_t ram_bank_size, - const uint32_t data_mem, uint32_t address, - const uint32_t words, const uint32_t * const data) -{ - uint32_t loop, ctrl, ram_id, addr, cur_bank = (uint32_t) ~0; - uint32_t access_ctrl; - int ret = 0; - - /* Save the access control register... */ - access_ctrl = PSB_RMSVDX32(MSVDX_MTX_RAM_ACCESS_CONTROL); - - /* Wait for MCMSTAT to become be idle 1 */ - psb_wait_for_register(dev_priv, MSVDX_MTX_RAM_ACCESS_STATUS, - 1, /* Required Value */ - 0xffffffff /* Enables */); - - for (loop = 0; loop < words; loop++) { - uint32_t reg_value; - ram_id = data_mem + (address / ram_bank_size); - - if (ram_id != cur_bank) { - addr = address >> 2; - ctrl = 0; - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCMID, ram_id); - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCM_ADDR, addr); - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCMAI, 1); - REGIO_WRITE_FIELD_LITE(ctrl, - MSVDX_MTX_RAM_ACCESS_CONTROL, - MTX_MCMR, 1); - - PSB_WMSVDX32(ctrl, MSVDX_MTX_RAM_ACCESS_CONTROL); - - cur_bank = ram_id; - } - address += 4; - - /* Wait for MCMSTAT to become be idle 1 */ - psb_wait_for_register(dev_priv, MSVDX_MTX_RAM_ACCESS_STATUS, - 1, /* Required Value */ - 0xffffffff /* Enables */); - - reg_value = PSB_RMSVDX32(MSVDX_MTX_RAM_ACCESS_DATA_TRANSFER); - if (data[loop] != reg_value) { - DRM_ERROR("psb: Firmware validation fails" - " at index=%08x\n", loop); - ret = 1; - break; - } - } - - /* Restore the access control register... */ - PSB_WMSVDX32(access_ctrl, MSVDX_MTX_RAM_ACCESS_CONTROL); - - return ret; -} - -static int msvdx_get_fw_bo(struct drm_device *dev, - const struct firmware **raw, uint8_t *name) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - int rc, fw_size; - void *ptr = NULL; - struct ttm_bo_kmap_obj tmp_kmap; - bool is_iomem; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - void *gpu_addr; - - rc = request_firmware(raw, name, &dev->pdev->dev); - if (rc < 0) { - DRM_ERROR("MSVDX: %s request_firmware failed: Reason %d\n", - name, rc); - return 1; - } - - if ((*raw)->size < sizeof(struct msvdx_fw)) { - DRM_ERROR("MSVDX: %s is is not correct size(%zd)\n", - name, (*raw)->size); - return 1; - } - - ptr = (void *) ((*raw))->data; - - if (!ptr) { - DRM_ERROR("MSVDX: Failed to load %s\n", name); - return 1; - } - - /* another sanity check... */ - fw_size = sizeof(struct msvdx_fw) + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->text_size + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->data_size; - if ((*raw)->size < fw_size) { - DRM_ERROR("MSVDX: %s is is not correct size(%zd)\n", - name, (*raw)->size); - return 1; - } - - rc = ttm_bo_kmap(msvdx_priv->fw, 0, (msvdx_priv->fw)->num_pages, &tmp_kmap); - if (rc) { - PSB_DEBUG_GENERAL("drm_bo_kmap failed: %d\n", rc); - ttm_bo_unref(&msvdx_priv->fw); - ttm_bo_kunmap(&tmp_kmap); - return 1; - } - else { - uint32_t *last_word; - gpu_addr = ttm_kmap_obj_virtual(&tmp_kmap, &is_iomem); - - memset(gpu_addr, UNINITILISE_MEM, msvdx_priv->mtx_mem_size); - - memcpy(gpu_addr, ptr + sizeof(struct msvdx_fw), - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->text_size); - - memcpy(gpu_addr + (((struct msvdx_fw *) ptr)->data_location - MSVDX_MTX_DATA_LOCATION), - (void *)ptr + sizeof(struct msvdx_fw) + sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->text_size, - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->data_size); - - last_word = (uint32_t *) (gpu_addr + msvdx_priv->mtx_mem_size -4); - /* Write a know value to last word in mtx memory*/ - /* Usefull for detection of stack overrun */ - *last_word = STACKGUARDWORD; - } - - ttm_bo_kunmap(&tmp_kmap); - PSB_DEBUG_GENERAL("MSVDX: releasing firmware resouces\n"); - PSB_DEBUG_GENERAL("MSVDX: Load firmware into BO successfully\n"); - release_firmware(*raw); - return rc; -} - - -static uint32_t *msvdx_get_fw(struct drm_device *dev, - const struct firmware **raw, uint8_t *name) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - int rc, fw_size; - void *ptr = NULL; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - rc = request_firmware(raw, name, &dev->pdev->dev); - if (rc < 0) { - DRM_ERROR("MSVDX: %s request_firmware failed: Reason %d\n", - name, rc); - return NULL; - } - - if ((*raw)->size < sizeof(struct msvdx_fw)) { - DRM_ERROR("MSVDX: %s is is not correct size(%zd)\n", - name, (*raw)->size); - return NULL; - } - - ptr = (int *) ((*raw))->data; - - if (!ptr) { - DRM_ERROR("MSVDX: Failed to load %s\n", name); - return NULL; - } - - /* another sanity check... */ - fw_size = sizeof(struct msvdx_fw) + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->text_size + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->data_size; - if ((*raw)->size < fw_size) { - DRM_ERROR("MSVDX: %s is is not correct size(%zd)\n", - name, (*raw)->size); - return NULL; - } - else if((*raw)->size > fw_size) { /* there is ec firmware */ - ptr += ((fw_size + 0xfff) & ~0xfff); - fw_size += (sizeof(struct msvdx_fw) + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->text_size + - sizeof(uint32_t) * ((struct msvdx_fw *) ptr)->data_size); - - ptr = (int *) ((*raw))->data; /* Resotre ptr to start of the firmware file */ - } - - msvdx_priv->msvdx_fw = kzalloc(fw_size, GFP_KERNEL); - if (msvdx_priv->msvdx_fw == NULL) - DRM_ERROR("MSVDX: allocate FW buffer failed\n"); - else { - memcpy(msvdx_priv->msvdx_fw, ptr, fw_size); - msvdx_priv->msvdx_fw_size = fw_size; - } - - PSB_DEBUG_GENERAL("MSVDX: releasing firmware resouces\n"); - release_firmware(*raw); - - return msvdx_priv->msvdx_fw; -} - -int psb_setup_fw(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - uint32_t ram_bank_size; - struct msvdx_fw *fw; - uint32_t *fw_ptr = NULL; - uint32_t *text_ptr = NULL; - uint32_t *data_ptr = NULL; - const struct firmware *raw = NULL; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - int ec_firmware = 0, ret = 0; - - /* todo : Assert the clock is on - if not turn it on to upload code */ - PSB_DEBUG_GENERAL("MSVDX: psb_setup_fw\n"); - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - /* Reset MTX */ - PSB_WMSVDX32(MSVDX_MTX_SOFT_RESET_MTX_RESET_MASK, - MSVDX_MTX_SOFT_RESET); - - /* Initialses Communication controll area to 0 */ -/* - if (psb_rev_id >= POULSBO_D1) { - PSB_DEBUG_GENERAL("MSVDX: Detected Poulsbo D1" - " or later revision.\n"); - PSB_WMSVDX32(MSVDX_DEVICE_NODE_FLAGS_DEFAULT_D1, - MSVDX_COMMS_OFFSET_FLAGS); - } else { - PSB_DEBUG_GENERAL("MSVDX: Detected Poulsbo D0" - " or earlier revision.\n"); - PSB_WMSVDX32(MSVDX_DEVICE_NODE_FLAGS_DEFAULT_D0, - MSVDX_COMMS_OFFSET_FLAGS); - } -*/ - - if(IS_CDV(dev)) { - PSB_WMSVDX32(FIRMWAREID, MSVDX_COMMS_FIRMWARE_ID); - } - - PSB_WMSVDX32(0, MSVDX_COMMS_ERROR_TRIG); - PSB_WMSVDX32(199, MSVDX_MTX_SYSC_TIMERDIV); /* MTX_SYSC_TIMERDIV */ - PSB_WMSVDX32(0, MSVDX_EXT_FW_ERROR_STATE); /* EXT_FW_ERROR_STATE */ - - PSB_WMSVDX32(0, MSVDX_COMMS_MSG_COUNTER); - PSB_WMSVDX32(0, MSVDX_COMMS_SIGNATURE); - PSB_WMSVDX32(0, MSVDX_COMMS_TO_HOST_RD_INDEX); - PSB_WMSVDX32(0, MSVDX_COMMS_TO_HOST_WRT_INDEX); - PSB_WMSVDX32(0, MSVDX_COMMS_TO_MTX_RD_INDEX); - PSB_WMSVDX32(0, MSVDX_COMMS_TO_MTX_WRT_INDEX); - PSB_WMSVDX32(0, MSVDX_COMMS_FW_STATUS); - PSB_WMSVDX32(DSIABLE_IDLE_GPIO_SIG | DSIABLE_Auto_CLOCK_GATING | RETURN_VDEB_DATA_IN_COMPLETION | DSIABLE_FW_WDT, - MSVDX_COMMS_OFFSET_FLAGS); - PSB_WMSVDX32(0, MSVDX_COMMS_SIGNATURE); - /* read register bank size */ - { - uint32_t bank_size, reg; - reg = PSB_RMSVDX32(MSVDX_MTX_RAM_BANK); - bank_size = - REGIO_READ_FIELD(reg, MSVDX_MTX_RAM_BANK, - CR_MTX_RAM_BANK_SIZE); - ram_bank_size = (uint32_t) (1 << (bank_size + 2)); - } - - PSB_DEBUG_GENERAL("MSVDX: RAM bank size = %d bytes\n", - ram_bank_size); - - /* if FW already loaded from storage */ - if (msvdx_priv->msvdx_fw) - fw_ptr = msvdx_priv->msvdx_fw; - else { - if (IS_CDV(dev)) { - if(IS_FW_UPDATED) - fw_ptr = msvdx_get_fw(dev, &raw, "msvdx_fw_mfld_DE2.0.bin"); - else - fw_ptr = msvdx_get_fw(dev, &raw, "msvdx_fw_mfld.bin"); - - PSB_DEBUG_GENERAL("MSVDX:load msvdx_fw_mfld_DE2.0.bin by udevd\n"); - } - else - DRM_ERROR("MSVDX:HW is neither mrst nor mfld\n"); - } - - if (!fw_ptr) { - DRM_ERROR("MSVDX:load msvdx_fw.bin failed,is udevd running?\n"); - ret = 1; - goto out; - } - - if (!msvdx_priv->is_load) {/* Load firmware into BO */ - PSB_DEBUG_GENERAL("MSVDX:load msvdx_fw.bin by udevd into BO\n"); - if(IS_CDV(dev)) { - if(IS_FW_UPDATED) - ret = msvdx_get_fw_bo(dev, &raw, "msvdx_fw_mfld_DE2.0.bin"); - else - ret = msvdx_get_fw_bo(dev, &raw, "msvdx_fw_mfld.bin"); - } - else - DRM_ERROR("MSVDX:HW is neither mrst nor mfld\n"); - msvdx_priv->is_load = 1; - } - - - fw = (struct msvdx_fw *) fw_ptr; - - if(ec_firmware) { - fw_ptr += (((sizeof(struct msvdx_fw) + (fw->text_size + fw->data_size)*4 + 0xfff) & ~0xfff)/sizeof(uint32_t)); - fw = (struct msvdx_fw *) fw_ptr; - } - - /* - if (fw->ver != 0x02) { - DRM_ERROR("psb: msvdx_fw.bin firmware version mismatch," - "got version=%02x expected version=%02x\n", - fw->ver, 0x02); - ret = 1; - goto out; - } - */ - text_ptr = - (uint32_t *) ((uint8_t *) fw_ptr + sizeof(struct msvdx_fw)); - data_ptr = text_ptr + fw->text_size; - - if (fw->text_size == 2858) - PSB_DEBUG_GENERAL( - "MSVDX: FW ver 1.00.10.0187 of SliceSwitch variant\n"); - else if (fw->text_size == 3021) - PSB_DEBUG_GENERAL( - "MSVDX: FW ver 1.00.10.0187 of FrameSwitch variant\n"); - else if (fw->text_size == 2841) - PSB_DEBUG_GENERAL("MSVDX: FW ver 1.00.10.0788\n"); - else if (fw->text_size == 3147) - PSB_DEBUG_GENERAL("MSVDX: FW ver BUILD_DXVA_FW1.00.10.1042 of SliceSwitch variant\n"); - else if (fw->text_size == 3097) - PSB_DEBUG_GENERAL("MSVDX: FW ver BUILD_DXVA_FW1.00.10.0963.02.0011 of FrameSwitch variant\n"); - else - PSB_DEBUG_GENERAL("MSVDX: FW ver unknown\n"); - - - PSB_DEBUG_GENERAL("MSVDX: Retrieved pointers for firmware\n"); - PSB_DEBUG_GENERAL("MSVDX: text_size: %d\n", fw->text_size); - PSB_DEBUG_GENERAL("MSVDX: data_size: %d\n", fw->data_size); - PSB_DEBUG_GENERAL("MSVDX: data_location: 0x%x\n", - fw->data_location); - PSB_DEBUG_GENERAL("MSVDX: First 4 bytes of text: 0x%x\n", - *text_ptr); - PSB_DEBUG_GENERAL("MSVDX: First 4 bytes of data: 0x%x\n", - *data_ptr); - - PSB_DEBUG_GENERAL("MSVDX: Uploading firmware\n"); -#if UPLOAD_FW_BY_DMA - psb_upload_fw(dev_priv, 0, msvdx_priv->mtx_mem_size/4, ec_firmware); -#else - psb_upload_fw(dev_priv, MTX_CORE_CODE_MEM, ram_bank_size, - PC_START_ADDRESS - MTX_CODE_BASE, fw->text_size, - text_ptr); - psb_upload_fw(dev_priv, MTX_CORE_DATA_MEM, ram_bank_size, - fw->data_location - MTX_DATA_BASE, fw->data_size, - data_ptr); -#endif -#if 0 - /* todo : Verify code upload possibly only in debug */ - ret = psb_verify_fw(dev_priv, ram_bank_size, - MTX_CORE_CODE_MEM, - PC_START_ADDRESS - MTX_CODE_BASE, - fw->text_size, text_ptr); - if (ret) { - /* Firmware code upload failed */ - ret = 1; - goto out; - } - - ret = psb_verify_fw(dev_priv, ram_bank_size, MTX_CORE_DATA_MEM, - fw->data_location - MTX_DATA_BASE, - fw->data_size, data_ptr); - if (ret) { - /* Firmware data upload failed */ - ret = 1; - goto out; - } -#else - (void)psb_verify_fw; -#endif - /* -- Set starting PC address */ - psb_write_mtx_core_reg(dev_priv, MTX_PC, PC_START_ADDRESS); - - /* -- Turn on the thread */ - PSB_WMSVDX32(MSVDX_MTX_ENABLE_MTX_ENABLE_MASK, MSVDX_MTX_ENABLE); - - /* Wait for the signature value to be written back */ - ret = psb_wait_for_register(dev_priv, MSVDX_COMMS_SIGNATURE, - MSVDX_COMMS_SIGNATURE_VALUE, /*Required value*/ - 0xffffffff /* Enabled bits */); - if (ret) { - DRM_ERROR("MSVDX: firmware fails to initialize.\n"); - goto out; - } - - PSB_DEBUG_GENERAL("MSVDX: MTX Initial indications OK\n"); - PSB_DEBUG_GENERAL("MSVDX: MSVDX_COMMS_AREA_ADDR = %08x\n", - MSVDX_COMMS_AREA_ADDR); -#if 0 - - /* Send test message */ - { - uint32_t msg_buf[FW_VA_DEBUG_TEST2_SIZE >> 2]; - - MEMIO_WRITE_FIELD(msg_buf, FW_VA_DEBUG_TEST2_MSG_SIZE, - FW_VA_DEBUG_TEST2_SIZE); - MEMIO_WRITE_FIELD(msg_buf, FW_VA_DEBUG_TEST2_ID, - VA_MSGID_TEST2); - - ret = psb_mtx_send(dev_priv, msg_buf); - if (ret) { - DRM_ERROR("psb: MSVDX sending fails.\n"); - goto out; - } - - /* Wait for Mtx to ack this message */ - psb_poll_mtx_irq(dev_priv); - - } -#endif -out: - - return ret; -} - - -static void psb_free_ccb(struct ttm_buffer_object **ccb) -{ - ttm_bo_unref(ccb); - *ccb = NULL; -} - -/** - * Reset chip and disable interrupts. - * Return 0 success, 1 failure - */ -int psb_msvdx_reset(struct drm_psb_private *dev_priv) -{ - int ret = 0; - - if(IS_PENWELL(dev_priv->dev)) { - int loop; - /* Enable Clocks */ - PSB_DEBUG_GENERAL("Enabling clocks\n"); - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - /* Always pause the MMU as the core may be still active when resetting. It is very bad to have memory - activity at the same time as a reset - Very Very bad */ - PSB_WMSVDX32(2, MSVDX_MMU_CONTROL0); - - for(loop = 0; loop < 50; loop++) - ret = psb_wait_for_register(dev_priv, MSVDX_MMU_MEM_REQ, 0, - 0xff); - if(ret) - return ret; - } - /* Issue software reset */ - /* PSB_WMSVDX32(msvdx_sw_reset_all, MSVDX_CONTROL); */ - PSB_WMSVDX32(MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK, MSVDX_CONTROL); - - ret = psb_wait_for_register(dev_priv, MSVDX_CONTROL, 0, - MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK); - - if (!ret) { - /* Clear interrupt enabled flag */ - PSB_WMSVDX32(0, MSVDX_HOST_INTERRUPT_ENABLE); - - /* Clear any pending interrupt flags */ - PSB_WMSVDX32(0xFFFFFFFF, MSVDX_INTERRUPT_CLEAR); - } - - /* mutex_destroy(&msvdx_priv->msvdx_mutex); */ - - return ret; -} - -static int psb_allocate_ccb(struct drm_device *dev, - struct ttm_buffer_object **ccb, - uint32_t *base_addr, unsigned long size) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - struct ttm_bo_device *bdev = &dev_priv->bdev; - int ret; - struct ttm_bo_kmap_obj tmp_kmap; - bool is_iomem; - - PSB_DEBUG_INIT("MSVDX: allocate CCB\n"); - - ret = ttm_buffer_object_create(bdev, size, - ttm_bo_type_kernel, - DRM_PSB_FLAG_MEM_MMU | - TTM_PL_FLAG_NO_EVICT, 0, 0, 0, - NULL, ccb); - if (ret) { - DRM_ERROR("MSVDX:failed to allocate CCB.\n"); - *ccb = NULL; - return 1; - } - - ret = ttm_bo_kmap(*ccb, 0, (*ccb)->num_pages, &tmp_kmap); - if (ret) { - PSB_DEBUG_GENERAL("ttm_bo_kmap failed ret: %d\n", ret); - ttm_bo_unref(ccb); - *ccb = NULL; - return 1; - } -/* - memset(ttm_kmap_obj_virtual(&tmp_kmap, &is_iomem), 0, - RENDEC_A_SIZE); -*/ - memset(ttm_kmap_obj_virtual(&tmp_kmap, &is_iomem), 0, - size); - ttm_bo_kunmap(&tmp_kmap); - - *base_addr = (*ccb)->offset; - return 0; -} - -static ssize_t psb_msvdx_pmstate_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct drm_device *drm_dev = dev_get_drvdata(dev); - struct drm_psb_private *dev_priv; - struct msvdx_private *msvdx_priv; - unsigned int pmstate; - unsigned long flags; - int ret = -EINVAL; - - if (drm_dev == NULL) - return 0; - - dev_priv = drm_dev->dev_private; - msvdx_priv = dev_priv->msvdx_private; - pmstate = msvdx_priv->pmstate; - - spin_lock_irqsave(&msvdx_priv->msvdx_lock, flags); - ret = snprintf(buf, 64, "%s\n", - (pmstate == PSB_PMSTATE_POWERUP) ? "powerup" - : ((pmstate == PSB_PMSTATE_POWERDOWN) ? "powerdown" - : "clockgated")); - spin_unlock_irqrestore(&msvdx_priv->msvdx_lock, flags); - - return ret; -} - -static DEVICE_ATTR(msvdx_pmstate, 0444, psb_msvdx_pmstate_show, NULL); - -int psb_msvdx_init(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - /* uint32_t clk_gate_ctrl = clk_enable_all; */ - uint32_t cmd; - int ret; - struct msvdx_private *msvdx_priv; -/* - uint32_t reg_value; - uint32_t reg_val; -*/ - if (!dev_priv->msvdx_private) { - msvdx_priv = kmalloc(sizeof(struct msvdx_private), GFP_KERNEL); - if (msvdx_priv == NULL) - goto err_exit; - - dev_priv->msvdx_private = msvdx_priv; - memset(msvdx_priv, 0, sizeof(struct msvdx_private)); - - /* get device --> drm_device --> drm_psb_private --> msvdx_priv - * for psb_msvdx_pmstate_show: msvdx_pmpolicy - * if not pci_set_drvdata, can't get drm_device from device - */ - /* pci_set_drvdata(dev->pdev, dev); */ - if (device_create_file(&dev->pdev->dev, - &dev_attr_msvdx_pmstate)) - DRM_ERROR("MSVDX: could not create sysfs file\n"); - msvdx_priv->sysfs_pmstate = sysfs_get_dirent( - dev->pdev->dev.kobj.sd, - NULL, - "msvdx_pmstate"); - } - - msvdx_priv = dev_priv->msvdx_private; - if (!msvdx_priv->ccb0) { /* one for the first time */ - /* Initialize comand msvdx queueing */ - INIT_LIST_HEAD(&msvdx_priv->msvdx_queue); - INIT_LIST_HEAD(&msvdx_priv->deblock_queue); - mutex_init(&msvdx_priv->msvdx_mutex); - spin_lock_init(&msvdx_priv->msvdx_lock); - /*figure out the stepping */ - pci_read_config_byte(dev->pdev, PSB_REVID_OFFSET, &psb_rev_id); - } - - msvdx_priv->vec_local_mem_size = VEC_LOCAL_MEM_BYTE_SIZE; - if (!msvdx_priv->vec_local_mem_data) { - msvdx_priv->vec_local_mem_data = - kzalloc(msvdx_priv->vec_local_mem_size, GFP_KERNEL); - if (msvdx_priv->vec_local_mem_data == NULL) { - PSB_DEBUG_GENERAL("Vec local memory fail\n"); - goto err_exit; - } - } - - msvdx_priv->msvdx_busy = 0; - msvdx_priv->msvdx_hw_busy = 1; - - /* Enable Clocks */ - PSB_DEBUG_GENERAL("Enabling clocks\n"); - PSB_WMSVDX32(clk_enable_all, MSVDX_MAN_CLK_ENABLE); - - /* Issue software reset for all but core*/ -/* - PSB_WMSVDX32((uint32_t) ~MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK, REGISTER(MSVDX_CORE, CR_MSVDX_CONTROL)); - reg_value = PSB_RMSVDX32(REGISTER(MSVDX_CORE, CR_MSVDX_CONTROL)); - PSB_WMSVDX32(0, REGISTER(MSVDX_CORE, CR_MSVDX_CONTROL)); - PSB_WMSVDX32(MSVDX_CORE_CR_MSVDX_CONTROL_CR_MSVDX_SOFT_RESET_MASK, REGISTER(MSVDX_CORE, CR_MSVDX_CONTROL)); - - reg_val = 0; - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CNT_CTRL, 0x3); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL, FE_WDT_ENABLE, 0); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL, FE_WDT_ACTION0, 1); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CLEAR_SELECT, 1); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_FE_MSVDX_WDT_CONTROL, FE_WDT_CLKDIV_SELECT, 7); - PSB_WMSVDX32(820, REGISTER( MSVDX_CORE, CR_FE_MSVDX_WDT_COMPAREMATCH )); - PSB_WMSVDX32(reg_val, REGISTER( MSVDX_CORE, CR_FE_MSVDX_WDT_CONTROL )); - - reg_val = 0; - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CNT_CTRL, 0x7); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL, BE_WDT_ENABLE, 0); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL, BE_WDT_ACTION0, 1); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CLEAR_SELECT, 0xd); - REGIO_WRITE_FIELD(reg_val, MSVDX_CORE_CR_BE_MSVDX_WDT_CONTROL, BE_WDT_CLKDIV_SELECT, 7); - PSB_WMSVDX32(8200, REGISTER(MSVDX_CORE, CR_BE_MSVDX_WDT_COMPAREMATCH)); - PSB_WMSVDX32(reg_val, REGISTER(MSVDX_CORE, CR_BE_MSVDX_WDT_CONTROL)); -*/ - /* Enable MMU by removing all bypass bits */ - PSB_WMSVDX32(0, MSVDX_MMU_CONTROL0); - - /* move firmware loading to the place receiving first command buffer */ - - PSB_DEBUG_GENERAL("MSVDX: Setting up RENDEC,allocate CCB 0/1\n"); - /* Allocate device virtual memory as required by rendec.... */ - if (!msvdx_priv->ccb0) { - ret = psb_allocate_ccb(dev, &msvdx_priv->ccb0, - &msvdx_priv->base_addr0, - RENDEC_A_SIZE); - if (ret) { - PSB_DEBUG_GENERAL("Allocate Rendec A fail\n"); - goto err_exit; - } - } - - if (!msvdx_priv->ccb1) { - ret = psb_allocate_ccb(dev, &msvdx_priv->ccb1, - &msvdx_priv->base_addr1, - RENDEC_B_SIZE); - if (ret) - goto err_exit; - } - - if(!msvdx_priv->fw) { - uint32_t core_rev; - uint32_t fw_bo_size; - - core_rev = PSB_RMSVDX32(MSVDX_CORE_REV); - - if( (core_rev&0xffffff ) < 0x020000 ) - msvdx_priv->mtx_mem_size = 16*1024; - else - msvdx_priv->mtx_mem_size = 40*1024; - - if(IS_CDV(dev)) - fw_bo_size = msvdx_priv->mtx_mem_size + 4096; - else - fw_bo_size = ((msvdx_priv->mtx_mem_size + 8192) & ~0xfff)*2; /* fw + ec_fw */ - - PSB_DEBUG_INIT("MSVDX: MTX mem size is 0x%08xbytes allocate firmware BO size 0x%08x\n", msvdx_priv->mtx_mem_size, - fw_bo_size); - - ret = ttm_buffer_object_create(&dev_priv->bdev, fw_bo_size, /* DMA may run over a page */ - ttm_bo_type_kernel, - DRM_PSB_FLAG_MEM_MMU | TTM_PL_FLAG_NO_EVICT, - 0, 0, 0, NULL, &msvdx_priv->fw); - - if (ret) { - PSB_DEBUG_GENERAL("Allocate firmware BO fail\n"); - goto err_exit; - } - } - - PSB_DEBUG_GENERAL("MSVDX: RENDEC A: %08x RENDEC B: %08x\n", - msvdx_priv->base_addr0, msvdx_priv->base_addr1); - - PSB_WMSVDX32(msvdx_priv->base_addr0, MSVDX_RENDEC_BASE_ADDR0); - PSB_WMSVDX32(msvdx_priv->base_addr1, MSVDX_RENDEC_BASE_ADDR1); - - cmd = 0; - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_BUFFER_SIZE, - RENDEC_BUFFER_SIZE0, RENDEC_A_SIZE / 4096); - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_BUFFER_SIZE, - RENDEC_BUFFER_SIZE1, RENDEC_B_SIZE / 4096); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_BUFFER_SIZE); - - if(!msvdx_priv->fw) { - uint32_t core_rev; - - core_rev = PSB_RMSVDX32(MSVDX_CORE_REV); - - if( (core_rev&0xffffff ) < 0x020000 ) - msvdx_priv->mtx_mem_size = 16*1024; - else - msvdx_priv->mtx_mem_size = 40*1024; - - PSB_DEBUG_INIT("MSVDX: MTX mem size is 0x%08xbytes allocate firmware BO size 0x%08x\n", msvdx_priv->mtx_mem_size, - msvdx_priv->mtx_mem_size + 4096); - - ret = ttm_buffer_object_create(&dev_priv->bdev, msvdx_priv->mtx_mem_size + 4096, /* DMA may run over a page */ - ttm_bo_type_kernel, - DRM_PSB_FLAG_MEM_MMU | TTM_PL_FLAG_NO_EVICT, - 0, 0, 0, NULL, &msvdx_priv->fw); - - if (ret) { - PSB_DEBUG_GENERAL("Allocate firmware BO fail\n"); - goto err_exit; - } - } - - cmd = 0; - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_CONTROL1, - RENDEC_DECODE_START_SIZE, 0); - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_CONTROL1, - RENDEC_BURST_SIZE_W, 1); - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_CONTROL1, - RENDEC_BURST_SIZE_R, 1); - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_CONTROL1, - RENDEC_EXTERNAL_MEMORY, 1); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTROL1); - - cmd = 0x00101010; - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT0); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT1); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT2); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT3); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT4); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTEXT5); - - cmd = 0; - REGIO_WRITE_FIELD(cmd, MSVDX_RENDEC_CONTROL0, RENDEC_INITIALISE, - 1); - PSB_WMSVDX32(cmd, MSVDX_RENDEC_CONTROL0); - - /* PSB_WMSVDX32(clk_enable_minimal, MSVDX_MAN_CLK_ENABLE); */ - PSB_DEBUG_INIT("MSVDX:defer firmware loading to the" - " place when receiving user space commands\n"); - - msvdx_priv->msvdx_fw_loaded = 0; /* need to load firware */ - - PSB_WMSVDX32(820, MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH); - PSB_WMSVDX32(8200, MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH); - - PSB_WMSVDX32(820, MSVDX_CORE_CR_FE_MSVDX_WDT_COMPAREMATCH); - PSB_WMSVDX32(8200, MSVDX_CORE_CR_BE_MSVDX_WDT_COMPAREMATCH); - - psb_msvdx_clearirq(dev); - psb_msvdx_enableirq(dev); - - if (IS_MSVDX(dev)) { - PSB_DEBUG_INIT("MSDVX:old clock gating disable = 0x%08x\n", - PSB_RVDC32(PSB_MSVDX_CLOCKGATING)); - } - - { - cmd = 0; - cmd = PSB_RMSVDX32(MSVDX_VEC_SHIFTREG_CONTROL); /* VEC_SHIFTREG_CONTROL */ - REGIO_WRITE_FIELD(cmd, - VEC_SHIFTREG_CONTROL, - SR_MASTER_SELECT, - 1); /* Host */ - PSB_WMSVDX32(cmd, MSVDX_VEC_SHIFTREG_CONTROL); - } - -#if 0 - ret = psb_setup_fw(dev); - if (ret) - goto err_exit; - /* Send Initialisation message to firmware */ - if (0) { - uint32_t msg_init[FW_VA_INIT_SIZE >> 2]; - MEMIO_WRITE_FIELD(msg_init, FWRK_GENMSG_SIZE, - FW_VA_INIT_SIZE); - MEMIO_WRITE_FIELD(msg_init, FWRK_GENMSG_ID, VA_MSGID_INIT); - - /* Need to set this for all but A0 */ - MEMIO_WRITE_FIELD(msg_init, FW_VA_INIT_GLOBAL_PTD, - psb_get_default_pd_addr(dev_priv->mmu)); - - ret = psb_mtx_send(dev_priv, msg_init); - if (ret) - goto err_exit; - - psb_poll_mtx_irq(dev_priv); - } -#endif - - return 0; - -err_exit: - DRM_ERROR("MSVDX: initialization failed\n"); - if (msvdx_priv && msvdx_priv->ccb0) - psb_free_ccb(&msvdx_priv->ccb0); - if (msvdx_priv && msvdx_priv->ccb1) - psb_free_ccb(&msvdx_priv->ccb1); - if (dev_priv->msvdx_private) { - kfree(dev_priv->msvdx_private); - dev_priv->msvdx_private = NULL; - } - return 1; -} - -int psb_msvdx_uninit(struct drm_device *dev) -{ - struct drm_psb_private *dev_priv = dev->dev_private; - struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; - - /* Reset MSVDX chip */ - psb_msvdx_reset(dev_priv); - - /* PSB_WMSVDX32 (clk_enable_minimal, MSVDX_MAN_CLK_ENABLE); */ - PSB_DEBUG_INIT("MSVDX:set the msvdx clock to 0\n"); - PSB_WMSVDX32(0, MSVDX_MAN_CLK_ENABLE); - - if (NULL == msvdx_priv) - { - DRM_ERROR("MSVDX: psb_msvdx_uninit: msvdx_priv is NULL!\n"); - return -1; - } - - if (msvdx_priv->ccb0) - psb_free_ccb(&msvdx_priv->ccb0); - if (msvdx_priv->ccb1) - psb_free_ccb(&msvdx_priv->ccb1); - if (msvdx_priv->msvdx_fw) - kfree(msvdx_priv->msvdx_fw - ); - if (msvdx_priv->vec_local_mem_data) - kfree(msvdx_priv->vec_local_mem_data); - - if (msvdx_priv) { - /* pci_set_drvdata(dev->pdev, NULL); */ - device_remove_file(&dev->pdev->dev, &dev_attr_msvdx_pmstate); - sysfs_put(msvdx_priv->sysfs_pmstate); - msvdx_priv->sysfs_pmstate = NULL; - - kfree(msvdx_priv); - dev_priv->msvdx_private = NULL; - } - - return 0; -} diff --git a/drivers/staging/cdv/imgv/psb_ttm_fence.c b/drivers/staging/cdv/imgv/psb_ttm_fence.c deleted file mode 100644 index c5710c1..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_fence.c +++ /dev/null @@ -1,603 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ - -#include "psb_ttm_fence_api.h" -#include "psb_ttm_fence_driver.h" -#include -#include - -#include - -/* - * Simple implementation for now. - */ - -static void ttm_fence_lockup(struct ttm_fence_object *fence, uint32_t mask) -{ - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - - printk(KERN_ERR "GPU lockup dectected on engine %u " - "fence type 0x%08x\n", - (unsigned int)fence->fence_class, (unsigned int)mask); - /* - * Give engines some time to idle? - */ - - write_lock(&fc->lock); - ttm_fence_handler(fence->fdev, fence->fence_class, - fence->sequence, mask, -EBUSY); - write_unlock(&fc->lock); -} - -/* - * Convenience function to be called by fence::wait methods that - * need polling. - */ - -int ttm_fence_wait_polling(struct ttm_fence_object *fence, bool lazy, - bool interruptible, uint32_t mask) -{ - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - const struct ttm_fence_driver *driver = ttm_fence_driver(fence); - uint32_t count = 0; - int ret; - unsigned long end_jiffies = fence->timeout_jiffies; - - DECLARE_WAITQUEUE(entry, current); - add_wait_queue(&fc->fence_queue, &entry); - - ret = 0; - - for (;;) { - __set_current_state((interruptible) ? - TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); - if (ttm_fence_object_signaled(fence, mask)) - break; - if (time_after_eq(jiffies, end_jiffies)) { - if (driver->lockup) - driver->lockup(fence, mask); - else - ttm_fence_lockup(fence, mask); - continue; - } - if (lazy) - schedule_timeout(1); - else if ((++count & 0x0F) == 0) { - __set_current_state(TASK_RUNNING); - schedule(); - __set_current_state((interruptible) ? - TASK_INTERRUPTIBLE : - TASK_UNINTERRUPTIBLE); - } - if (interruptible && signal_pending(current)) { - ret = -ERESTART; - break; - } - } - __set_current_state(TASK_RUNNING); - remove_wait_queue(&fc->fence_queue, &entry); - return ret; -} - -/* - * Typically called by the IRQ handler. - */ - -void ttm_fence_handler(struct ttm_fence_device *fdev, uint32_t fence_class, - uint32_t sequence, uint32_t type, uint32_t error) -{ - int wake = 0; - uint32_t diff; - uint32_t relevant_type; - uint32_t new_type; - struct ttm_fence_class_manager *fc = &fdev->fence_class[fence_class]; - const struct ttm_fence_driver *driver = ttm_fence_driver_from_dev(fdev); - struct list_head *head; - struct ttm_fence_object *fence, *next; - bool found = false; - - if (list_empty(&fc->ring)) - return; - - list_for_each_entry(fence, &fc->ring, ring) { - diff = (sequence - fence->sequence) & fc->sequence_mask; - if (diff > fc->wrap_diff) { - found = true; - break; - } - } - - fc->waiting_types &= ~type; - head = (found) ? &fence->ring : &fc->ring; - - list_for_each_entry_safe_reverse(fence, next, head, ring) { - if (&fence->ring == &fc->ring) - break; - - DRM_DEBUG("Fence 0x%08lx, sequence 0x%08x, type 0x%08x\n", - (unsigned long)fence, fence->sequence, - fence->fence_type); - - if (error) { - fence->info.error = error; - fence->info.signaled_types = fence->fence_type; - list_del_init(&fence->ring); - wake = 1; - break; - } - - relevant_type = type & fence->fence_type; - new_type = (fence->info.signaled_types | relevant_type) ^ - fence->info.signaled_types; - - if (new_type) { - fence->info.signaled_types |= new_type; - DRM_DEBUG("Fence 0x%08lx signaled 0x%08x\n", - (unsigned long)fence, - fence->info.signaled_types); - - if (unlikely(driver->signaled)) - driver->signaled(fence); - - if (driver->needed_flush) - fc->pending_flush |= - driver->needed_flush(fence); - - if (new_type & fence->waiting_types) - wake = 1; - } - - fc->waiting_types |= - fence->waiting_types & ~fence->info.signaled_types; - - if (!(fence->fence_type & ~fence->info.signaled_types)) { - DRM_DEBUG("Fence completely signaled 0x%08lx\n", - (unsigned long)fence); - list_del_init(&fence->ring); - } - } - - /* - * Reinstate lost waiting types. - */ - - if ((fc->waiting_types & type) != type) { - head = head->prev; - list_for_each_entry(fence, head, ring) { - if (&fence->ring == &fc->ring) - break; - diff = - (fc->highest_waiting_sequence - - fence->sequence) & fc->sequence_mask; - if (diff > fc->wrap_diff) - break; - - fc->waiting_types |= - fence->waiting_types & ~fence->info.signaled_types; - } - } - - if (wake) - wake_up_all(&fc->fence_queue); -} - -static void ttm_fence_unring(struct ttm_fence_object *fence) -{ - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - unsigned long irq_flags; - - write_lock_irqsave(&fc->lock, irq_flags); - list_del_init(&fence->ring); - write_unlock_irqrestore(&fc->lock, irq_flags); -} - -bool ttm_fence_object_signaled(struct ttm_fence_object *fence, uint32_t mask) -{ - unsigned long flags; - bool signaled; - const struct ttm_fence_driver *driver = ttm_fence_driver(fence); - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - - mask &= fence->fence_type; - read_lock_irqsave(&fc->lock, flags); - signaled = (mask & fence->info.signaled_types) == mask; - read_unlock_irqrestore(&fc->lock, flags); - if (!signaled && driver->poll) { - write_lock_irqsave(&fc->lock, flags); - driver->poll(fence->fdev, fence->fence_class, mask); - signaled = (mask & fence->info.signaled_types) == mask; - write_unlock_irqrestore(&fc->lock, flags); - } - return signaled; -} - -int ttm_fence_object_flush(struct ttm_fence_object *fence, uint32_t type) -{ - const struct ttm_fence_driver *driver = ttm_fence_driver(fence); - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - unsigned long irq_flags; - uint32_t diff; - bool call_flush; - - if (type & ~fence->fence_type) { - DRM_ERROR("Flush trying to extend fence type, " - "0x%x, 0x%x\n", type, fence->fence_type); - return -EINVAL; - } - - write_lock_irqsave(&fc->lock, irq_flags); - fence->waiting_types |= type; - fc->waiting_types |= fence->waiting_types; - diff = (fence->sequence - fc->highest_waiting_sequence) & - fc->sequence_mask; - - if (diff < fc->wrap_diff) - fc->highest_waiting_sequence = fence->sequence; - - /* - * fence->waiting_types has changed. Determine whether - * we need to initiate some kind of flush as a result of this. - */ - - if (driver->needed_flush) - fc->pending_flush |= driver->needed_flush(fence); - - if (driver->poll) - driver->poll(fence->fdev, fence->fence_class, - fence->waiting_types); - - call_flush = (fc->pending_flush != 0); - write_unlock_irqrestore(&fc->lock, irq_flags); - - if (call_flush && driver->flush) - driver->flush(fence->fdev, fence->fence_class); - - return 0; -} - -/* - * Make sure old fence objects are signaled before their fence sequences are - * wrapped around and reused. - */ - -void ttm_fence_flush_old(struct ttm_fence_device *fdev, - uint32_t fence_class, uint32_t sequence) -{ - struct ttm_fence_class_manager *fc = &fdev->fence_class[fence_class]; - struct ttm_fence_object *fence; - unsigned long irq_flags; - const struct ttm_fence_driver *driver = fdev->driver; - bool call_flush; - - uint32_t diff; - - write_lock_irqsave(&fc->lock, irq_flags); - - list_for_each_entry_reverse(fence, &fc->ring, ring) { - diff = (sequence - fence->sequence) & fc->sequence_mask; - if (diff <= fc->flush_diff) - break; - - fence->waiting_types = fence->fence_type; - fc->waiting_types |= fence->fence_type; - - if (driver->needed_flush) - fc->pending_flush |= driver->needed_flush(fence); - } - - if (driver->poll) - driver->poll(fdev, fence_class, fc->waiting_types); - - call_flush = (fc->pending_flush != 0); - write_unlock_irqrestore(&fc->lock, irq_flags); - - if (call_flush && driver->flush) - driver->flush(fdev, fence->fence_class); - - /* - * FIXME: Shold we implement a wait here for really old fences? - */ - -} - -int ttm_fence_object_wait(struct ttm_fence_object *fence, - bool lazy, bool interruptible, uint32_t mask) -{ - const struct ttm_fence_driver *driver = ttm_fence_driver(fence); - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - int ret = 0; - unsigned long timeout; - unsigned long cur_jiffies; - unsigned long to_jiffies; - - if (mask & ~fence->fence_type) { - DRM_ERROR("Wait trying to extend fence type" - " 0x%08x 0x%08x\n", mask, fence->fence_type); - BUG(); - return -EINVAL; - } - - if (driver->wait) - return driver->wait(fence, lazy, interruptible, mask); - - ttm_fence_object_flush(fence, mask); -retry: - if (!driver->has_irq || - driver->has_irq(fence->fdev, fence->fence_class, mask)) { - - cur_jiffies = jiffies; - to_jiffies = fence->timeout_jiffies; - - timeout = (time_after(to_jiffies, cur_jiffies)) ? - to_jiffies - cur_jiffies : 1; - - if (interruptible) - ret = wait_event_interruptible_timeout - (fc->fence_queue, - ttm_fence_object_signaled(fence, mask), timeout); - else - ret = wait_event_timeout - (fc->fence_queue, - ttm_fence_object_signaled(fence, mask), timeout); - - if (unlikely(ret == -ERESTARTSYS)) - return -ERESTART; - - if (unlikely(ret == 0)) { - if (driver->lockup) - driver->lockup(fence, mask); - else - ttm_fence_lockup(fence, mask); - goto retry; - } - - return 0; - } - - return ttm_fence_wait_polling(fence, lazy, interruptible, mask); -} - -int ttm_fence_object_emit(struct ttm_fence_object *fence, uint32_t fence_flags, - uint32_t fence_class, uint32_t type) -{ - const struct ttm_fence_driver *driver = ttm_fence_driver(fence); - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - unsigned long flags; - uint32_t sequence; - unsigned long timeout; - int ret; - - ttm_fence_unring(fence); - ret = driver->emit(fence->fdev, - fence_class, fence_flags, &sequence, &timeout); - if (ret) - return ret; - - write_lock_irqsave(&fc->lock, flags); - fence->fence_class = fence_class; - fence->fence_type = type; - fence->waiting_types = 0; - fence->info.signaled_types = 0; - fence->info.error = 0; - fence->sequence = sequence; - fence->timeout_jiffies = timeout; - if (list_empty(&fc->ring)) - fc->highest_waiting_sequence = sequence - 1; - list_add_tail(&fence->ring, &fc->ring); - fc->latest_queued_sequence = sequence; - write_unlock_irqrestore(&fc->lock, flags); - return 0; -} - -int ttm_fence_object_init(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t type, - uint32_t create_flags, - void (*destroy) (struct ttm_fence_object *), - struct ttm_fence_object *fence) -{ - int ret = 0; - - kref_init(&fence->kref); - fence->fence_class = fence_class; - fence->fence_type = type; - fence->info.signaled_types = 0; - fence->waiting_types = 0; - fence->sequence = 0; - fence->info.error = 0; - fence->fdev = fdev; - fence->destroy = destroy; - INIT_LIST_HEAD(&fence->ring); - atomic_inc(&fdev->count); - - if (create_flags & TTM_FENCE_FLAG_EMIT) { - ret = ttm_fence_object_emit(fence, create_flags, - fence->fence_class, type); - } - - return ret; -} - -int ttm_fence_object_create(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t type, - uint32_t create_flags, - struct ttm_fence_object **c_fence) -{ - struct ttm_fence_object *fence; - int ret; - - ret = ttm_mem_global_alloc(fdev->mem_glob, - sizeof(*fence), - false, - false); - if (unlikely(ret != 0)) { - printk(KERN_ERR "Out of memory creating fence object\n"); - return ret; - } - - fence = kmalloc(sizeof(*fence), GFP_KERNEL); - if (!fence) { - printk(KERN_ERR "Out of memory creating fence object\n"); - ttm_mem_global_free(fdev->mem_glob, sizeof(*fence)); - return -ENOMEM; - } - - ret = ttm_fence_object_init(fdev, fence_class, type, - create_flags, NULL, fence); - if (ret) { - ttm_fence_object_unref(&fence); - return ret; - } - *c_fence = fence; - - return 0; -} - -static void ttm_fence_object_destroy(struct kref *kref) -{ - struct ttm_fence_object *fence = - container_of(kref, struct ttm_fence_object, kref); - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - unsigned long irq_flags; - - write_lock_irqsave(&fc->lock, irq_flags); - list_del_init(&fence->ring); - write_unlock_irqrestore(&fc->lock, irq_flags); - - atomic_dec(&fence->fdev->count); - if (fence->destroy) - fence->destroy(fence); - else { - ttm_mem_global_free(fence->fdev->mem_glob, - sizeof(*fence)); - kfree(fence); - } -} - -void ttm_fence_device_release(struct ttm_fence_device *fdev) -{ - kfree(fdev->fence_class); -} - -int -ttm_fence_device_init(int num_classes, - struct ttm_mem_global *mem_glob, - struct ttm_fence_device *fdev, - const struct ttm_fence_class_init *init, - bool replicate_init, - const struct ttm_fence_driver *driver) -{ - struct ttm_fence_class_manager *fc; - const struct ttm_fence_class_init *fci; - int i; - - fdev->mem_glob = mem_glob; - fdev->fence_class = kzalloc(num_classes * - sizeof(*fdev->fence_class), GFP_KERNEL); - - if (unlikely(!fdev->fence_class)) - return -ENOMEM; - - fdev->num_classes = num_classes; - atomic_set(&fdev->count, 0); - fdev->driver = driver; - - for (i = 0; i < fdev->num_classes; ++i) { - fc = &fdev->fence_class[i]; - fci = &init[(replicate_init) ? 0 : i]; - - fc->wrap_diff = fci->wrap_diff; - fc->flush_diff = fci->flush_diff; - fc->sequence_mask = fci->sequence_mask; - - rwlock_init(&fc->lock); - INIT_LIST_HEAD(&fc->ring); - init_waitqueue_head(&fc->fence_queue); - } - - return 0; -} - -struct ttm_fence_info ttm_fence_get_info(struct ttm_fence_object *fence) -{ - struct ttm_fence_class_manager *fc = ttm_fence_fc(fence); - struct ttm_fence_info tmp; - unsigned long irq_flags; - - read_lock_irqsave(&fc->lock, irq_flags); - tmp = fence->info; - read_unlock_irqrestore(&fc->lock, irq_flags); - - return tmp; -} - -void ttm_fence_object_unref(struct ttm_fence_object **p_fence) -{ - struct ttm_fence_object *fence = *p_fence; - - *p_fence = NULL; - (void)kref_put(&fence->kref, &ttm_fence_object_destroy); -} - -/* - * Placement / BO sync object glue. - */ - -bool ttm_fence_sync_obj_signaled(void *sync_obj, void *sync_arg) -{ - struct ttm_fence_object *fence = (struct ttm_fence_object *)sync_obj; - uint32_t fence_types = (uint32_t) (unsigned long)sync_arg; - - return ttm_fence_object_signaled(fence, fence_types); -} - -int ttm_fence_sync_obj_wait(void *sync_obj, void *sync_arg, - bool lazy, bool interruptible) -{ - struct ttm_fence_object *fence = (struct ttm_fence_object *)sync_obj; - uint32_t fence_types = (uint32_t) (unsigned long)sync_arg; - - return ttm_fence_object_wait(fence, lazy, interruptible, fence_types); -} - -int ttm_fence_sync_obj_flush(void *sync_obj, void *sync_arg) -{ - struct ttm_fence_object *fence = (struct ttm_fence_object *)sync_obj; - uint32_t fence_types = (uint32_t) (unsigned long)sync_arg; - - return ttm_fence_object_flush(fence, fence_types); -} - -void ttm_fence_sync_obj_unref(void **sync_obj) -{ - ttm_fence_object_unref((struct ttm_fence_object **)sync_obj); -} - -void *ttm_fence_sync_obj_ref(void *sync_obj) -{ - return (void *) - ttm_fence_object_ref((struct ttm_fence_object *)sync_obj); -} diff --git a/drivers/staging/cdv/imgv/psb_ttm_fence_api.h b/drivers/staging/cdv/imgv/psb_ttm_fence_api.h deleted file mode 100644 index d42904c..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_fence_api.h +++ /dev/null @@ -1,272 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ -#ifndef _TTM_FENCE_API_H_ -#define _TTM_FENCE_API_H_ - -#include -#include - -#define TTM_FENCE_FLAG_EMIT (1 << 0) -#define TTM_FENCE_TYPE_EXE (1 << 0) - -struct ttm_fence_device; - -/** - * struct ttm_fence_info - * - * @fence_class: The fence class. - * @fence_type: Bitfield indicating types for this fence. - * @signaled_types: Bitfield indicating which types are signaled. - * @error: Last error reported from the device. - * - * Used as output from the ttm_fence_get_info - */ - -struct ttm_fence_info { - uint32_t signaled_types; - uint32_t error; -}; - -/** - * struct ttm_fence_object - * - * @fdev: Pointer to the fence device struct. - * @kref: Holds the reference count of this fence object. - * @ring: List head used for the circular list of not-completely - * signaled fences. - * @info: Data for fast retrieval using the ttm_fence_get_info() - * function. - * @timeout_jiffies: Absolute jiffies value indicating when this fence - * object times out and, if waited on, calls ttm_fence_lockup - * to check for and resolve a GPU lockup. - * @sequence: Fence sequence number. - * @waiting_types: Types currently waited on. - * @destroy: Called to free the fence object, when its refcount has - * reached zero. If NULL, kfree is used. - * - * This struct is provided in the driver interface so that drivers can - * derive from it and create their own fence implementation. All members - * are private to the fence implementation and the fence driver callbacks. - * Otherwise a driver may access the derived object using container_of(). - */ - -struct ttm_fence_object { - struct ttm_fence_device *fdev; - struct kref kref; - uint32_t fence_class; - uint32_t fence_type; - - /* - * The below fields are protected by the fence class - * manager spinlock. - */ - - struct list_head ring; - struct ttm_fence_info info; - unsigned long timeout_jiffies; - uint32_t sequence; - uint32_t waiting_types; - void (*destroy) (struct ttm_fence_object *); -}; - -/** - * ttm_fence_object_init - * - * @fdev: Pointer to a struct ttm_fence_device. - * @fence_class: Fence class for this fence. - * @type: Fence type for this fence. - * @create_flags: Flags indicating varios actions at init time. At this point - * there's only TTM_FENCE_FLAG_EMIT, which triggers a sequence emission to - * the command stream. - * @destroy: Destroy function. If NULL, kfree() is used. - * @fence: The struct ttm_fence_object to initialize. - * - * Initialize a pre-allocated fence object. This function, together with the - * destroy function makes it possible to derive driver-specific fence objects. - */ - -extern int -ttm_fence_object_init(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t type, - uint32_t create_flags, - void (*destroy) (struct ttm_fence_object *fence), - struct ttm_fence_object *fence); - -/** - * ttm_fence_object_create - * - * @fdev: Pointer to a struct ttm_fence_device. - * @fence_class: Fence class for this fence. - * @type: Fence type for this fence. - * @create_flags: Flags indicating varios actions at init time. At this point - * there's only TTM_FENCE_FLAG_EMIT, which triggers a sequence emission to - * the command stream. - * @c_fence: On successful termination, *(@c_fence) will point to the created - * fence object. - * - * Create and initialize a struct ttm_fence_object. The destroy function will - * be set to kfree(). - */ - -extern int -ttm_fence_object_create(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t type, - uint32_t create_flags, - struct ttm_fence_object **c_fence); - -/** - * ttm_fence_object_wait - * - * @fence: The fence object to wait on. - * @lazy: Allow sleeps to reduce the cpu-usage if polling. - * @interruptible: Sleep interruptible when waiting. - * @type_mask: Wait for the given type_mask to signal. - * - * Wait for a fence to signal the given type_mask. The function will - * perform a fence_flush using type_mask. (See ttm_fence_object_flush). - * - * Returns - * -ERESTART if interrupted by a signal. - * May return driver-specific error codes if timed-out. - */ - -extern int -ttm_fence_object_wait(struct ttm_fence_object *fence, - bool lazy, bool interruptible, uint32_t type_mask); - -/** - * ttm_fence_object_flush - * - * @fence: The fence object to flush. - * @flush_mask: Fence types to flush. - * - * Make sure that the given fence eventually signals the - * types indicated by @flush_mask. Note that this may or may not - * map to a CPU or GPU flush. - */ - -extern int -ttm_fence_object_flush(struct ttm_fence_object *fence, uint32_t flush_mask); - -/** - * ttm_fence_get_info - * - * @fence: The fence object. - * - * Copy the info block from the fence while holding relevant locks. - */ - -struct ttm_fence_info ttm_fence_get_info(struct ttm_fence_object *fence); - -/** - * ttm_fence_object_ref - * - * @fence: The fence object. - * - * Return a ref-counted pointer to the fence object indicated by @fence. - */ - -static inline struct ttm_fence_object *ttm_fence_object_ref(struct - ttm_fence_object - *fence) -{ - kref_get(&fence->kref); - return fence; -} - -/** - * ttm_fence_object_unref - * - * @p_fence: Pointer to a ref-counted pinter to a struct ttm_fence_object. - * - * Unreference the fence object pointed to by *(@p_fence), clearing - * *(p_fence). - */ - -extern void ttm_fence_object_unref(struct ttm_fence_object **p_fence); - -/** - * ttm_fence_object_signaled - * - * @fence: Pointer to the struct ttm_fence_object. - * @mask: Type mask to check whether signaled. - * - * This function checks (without waiting) whether the fence object - * pointed to by @fence has signaled the types indicated by @mask, - * and returns 1 if true, 0 if false. This function does NOT perform - * an implicit fence flush. - */ - -extern bool -ttm_fence_object_signaled(struct ttm_fence_object *fence, uint32_t mask); - -/** - * ttm_fence_class - * - * @fence: Pointer to the struct ttm_fence_object. - * - * Convenience function that returns the fence class of a - * struct ttm_fence_object. - */ - -static inline uint32_t ttm_fence_class(const struct ttm_fence_object *fence) -{ - return fence->fence_class; -} - -/** - * ttm_fence_types - * - * @fence: Pointer to the struct ttm_fence_object. - * - * Convenience function that returns the fence types of a - * struct ttm_fence_object. - */ - -static inline uint32_t ttm_fence_types(const struct ttm_fence_object *fence) -{ - return fence->fence_type; -} - -/* - * The functions below are wrappers to the above functions, with - * similar names but with sync_obj omitted. These wrappers are intended - * to be plugged directly into the buffer object driver's sync object - * API, if the driver chooses to use ttm_fence_objects as buffer object - * sync objects. In the prototypes below, a sync_obj is cast to a - * struct ttm_fence_object, whereas a sync_arg is cast to an - * uint32_t representing a fence_type argument. - */ - -extern bool ttm_fence_sync_obj_signaled(void *sync_obj, void *sync_arg); -extern int ttm_fence_sync_obj_wait(void *sync_obj, void *sync_arg, - bool lazy, bool interruptible); -extern int ttm_fence_sync_obj_flush(void *sync_obj, void *sync_arg); -extern void ttm_fence_sync_obj_unref(void **sync_obj); -extern void *ttm_fence_sync_obj_ref(void *sync_obj); - -#endif diff --git a/drivers/staging/cdv/imgv/psb_ttm_fence_driver.h b/drivers/staging/cdv/imgv/psb_ttm_fence_driver.h deleted file mode 100644 index 233c6ba..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_fence_driver.h +++ /dev/null @@ -1,302 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ -#ifndef _TTM_FENCE_DRIVER_H_ -#define _TTM_FENCE_DRIVER_H_ - -#include -#include -#include -#include "psb_ttm_fence_api.h" -#include "ttm/ttm_memory.h" - -/** @file ttm_fence_driver.h - * - * Definitions needed for a driver implementing the - * ttm_fence subsystem. - */ - -/** - * struct ttm_fence_class_manager: - * - * @wrap_diff: Sequence difference to catch 32-bit wrapping. - * if (seqa - seqb) > @wrap_diff, then seqa < seqb. - * @flush_diff: Sequence difference to trigger fence flush. - * if (cur_seq - seqa) > @flush_diff, then consider fence object with - * seqa as old an needing a flush. - * @sequence_mask: Mask of valid bits in a fence sequence. - * @lock: Lock protecting this struct as well as fence objects - * associated with this struct. - * @ring: Circular sequence-ordered list of fence objects. - * @pending_flush: Fence types currently needing a flush. - * @waiting_types: Fence types that are currently waited for. - * @fence_queue: Queue of waiters on fences belonging to this fence class. - * @highest_waiting_sequence: Sequence number of the fence with highest - * sequence number and that is waited for. - * @latest_queued_sequence: Sequence number of the fence latest queued - * on the ring. - */ - -struct ttm_fence_class_manager { - - /* - * Unprotected constant members. - */ - - uint32_t wrap_diff; - uint32_t flush_diff; - uint32_t sequence_mask; - - /* - * The rwlock protects this structure as well as - * the data in all fence objects belonging to this - * class. This should be OK as most fence objects are - * only read from once they're created. - */ - - rwlock_t lock; - struct list_head ring; - uint32_t pending_flush; - uint32_t waiting_types; - wait_queue_head_t fence_queue; - uint32_t highest_waiting_sequence; - uint32_t latest_queued_sequence; -}; - -/** - * struct ttm_fence_device - * - * @fence_class: Array of fence class managers. - * @num_classes: Array dimension of @fence_class. - * @count: Current number of fence objects for statistics. - * @driver: Driver struct. - * - * Provided in the driver interface so that the driver can derive - * from this struct for its driver_private, and accordingly - * access the driver_private from the fence driver callbacks. - * - * All members except "count" are initialized at creation and - * never touched after that. No protection needed. - * - * This struct is private to the fence implementation and to the fence - * driver callbacks, and may otherwise be used by drivers only to - * obtain the derived device_private object using container_of(). - */ - -struct ttm_fence_device { - struct ttm_mem_global *mem_glob; - struct ttm_fence_class_manager *fence_class; - uint32_t num_classes; - atomic_t count; - const struct ttm_fence_driver *driver; -}; - -/** - * struct ttm_fence_class_init - * - * @wrap_diff: Fence sequence number wrap indicator. If - * (sequence1 - sequence2) > @wrap_diff, then sequence1 is - * considered to be older than sequence2. - * @flush_diff: Fence sequence number flush indicator. - * If a non-completely-signaled fence has a fence sequence number - * sequence1 and (sequence1 - current_emit_sequence) > @flush_diff, - * the fence is considered too old and it will be flushed upon the - * next call of ttm_fence_flush_old(), to make sure no fences with - * stale sequence numbers remains unsignaled. @flush_diff should - * be sufficiently less than @wrap_diff. - * @sequence_mask: Mask with valid bits of the fence sequence - * number set to 1. - * - * This struct is used as input to ttm_fence_device_init. - */ - -struct ttm_fence_class_init { - uint32_t wrap_diff; - uint32_t flush_diff; - uint32_t sequence_mask; -}; - -/** - * struct ttm_fence_driver - * - * @has_irq: Called by a potential waiter. Should return 1 if a - * fence object with indicated parameters is expected to signal - * automatically, and 0 if the fence implementation needs to - * repeatedly call @poll to make it signal. - * @emit: Make sure a fence with the given parameters is - * present in the indicated command stream. Return its sequence number - * in "breadcrumb". - * @poll: Check and report sequences of the given "fence_class" - * that have signaled "types" - * @flush: Make sure that the types indicated by the bitfield - * ttm_fence_class_manager::pending_flush will eventually - * signal. These bits have been put together using the - * result from the needed_flush function described below. - * @needed_flush: Given the fence_class and fence_types indicated by - * "fence", and the last received fence sequence of this - * fence class, indicate what types need a fence flush to - * signal. Return as a bitfield. - * @wait: Set to non-NULL if the driver wants to override the fence - * wait implementation. Return 0 on success, -EBUSY on failure, - * and -ERESTART if interruptible and a signal is pending. - * @signaled: Driver callback that is called whenever a - * ttm_fence_object::signaled_types has changed status. - * This function is called from atomic context, - * with the ttm_fence_class_manager::lock held in write mode. - * @lockup: Driver callback that is called whenever a wait has exceeded - * the lifetime of a fence object. - * If there is a GPU lockup, - * this function should, if possible, reset the GPU, - * call the ttm_fence_handler with an error status, and - * return. If no lockup was detected, simply extend the - * fence timeout_jiffies and return. The driver might - * want to protect the lockup check with a mutex and cache a - * non-locked-up status for a while to avoid an excessive - * amount of lockup checks from every waiting thread. - */ - -struct ttm_fence_driver { - bool (*has_irq) (struct ttm_fence_device *fdev, - uint32_t fence_class, uint32_t flags); - int (*emit) (struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t flags, - uint32_t *breadcrumb, unsigned long *timeout_jiffies); - void (*flush) (struct ttm_fence_device *fdev, uint32_t fence_class); - void (*poll) (struct ttm_fence_device *fdev, - uint32_t fence_class, uint32_t types); - uint32_t(*needed_flush) - (struct ttm_fence_object *fence); - int (*wait) (struct ttm_fence_object *fence, bool lazy, - bool interruptible, uint32_t mask); - void (*signaled) (struct ttm_fence_object *fence); - void (*lockup) (struct ttm_fence_object *fence, uint32_t fence_types); -}; - -/** - * function ttm_fence_device_init - * - * @num_classes: Number of fence classes for this fence implementation. - * @mem_global: Pointer to the global memory accounting info. - * @fdev: Pointer to an uninitialised struct ttm_fence_device. - * @init: Array of initialization info for each fence class. - * @replicate_init: Use the first @init initialization info for all classes. - * @driver: Driver callbacks. - * - * Initialize a struct ttm_fence_driver structure. Returns -ENOMEM if - * out-of-memory. Otherwise returns 0. - */ -extern int -ttm_fence_device_init(int num_classes, - struct ttm_mem_global *mem_glob, - struct ttm_fence_device *fdev, - const struct ttm_fence_class_init *init, - bool replicate_init, - const struct ttm_fence_driver *driver); - -/** - * function ttm_fence_device_release - * - * @fdev: Pointer to the fence device. - * - * Release all resources held by a fence device. Note that before - * this function is called, the caller must have made sure all fence - * objects belonging to this fence device are completely signaled. - */ - -extern void ttm_fence_device_release(struct ttm_fence_device *fdev); - -/** - * ttm_fence_handler - the fence handler. - * - * @fdev: Pointer to the fence device. - * @fence_class: Fence class that signals. - * @sequence: Signaled sequence. - * @type: Types that signal. - * @error: Error from the engine. - * - * This function signals all fences with a sequence previous to the - * @sequence argument, and belonging to @fence_class. The signaled fence - * types are provided in @type. If error is non-zero, the error member - * of the fence with sequence = @sequence is set to @error. This value - * may be reported back to user-space, indicating, for example an illegal - * 3D command or illegal mpeg data. - * - * This function is typically called from the driver::poll method when the - * command sequence preceding the fence marker has executed. It should be - * called with the ttm_fence_class_manager::lock held in write mode and - * may be called from interrupt context. - */ - -extern void -ttm_fence_handler(struct ttm_fence_device *fdev, - uint32_t fence_class, - uint32_t sequence, uint32_t type, uint32_t error); - -/** - * ttm_fence_driver_from_dev - * - * @fdev: The ttm fence device. - * - * Returns a pointer to the fence driver struct. - */ - -static inline const struct ttm_fence_driver *ttm_fence_driver_from_dev( - struct ttm_fence_device *fdev) -{ - return fdev->driver; -} - -/** - * ttm_fence_driver - * - * @fence: Pointer to a ttm fence object. - * - * Returns a pointer to the fence driver struct. - */ - -static inline const struct ttm_fence_driver *ttm_fence_driver(struct - ttm_fence_object - *fence) -{ - return ttm_fence_driver_from_dev(fence->fdev); -} - -/** - * ttm_fence_fc - * - * @fence: Pointer to a ttm fence object. - * - * Returns a pointer to the struct ttm_fence_class_manager for the - * fence class of @fence. - */ - -static inline struct ttm_fence_class_manager *ttm_fence_fc(struct - ttm_fence_object - *fence) -{ - return &fence->fdev->fence_class[fence->fence_class]; -} - -#endif diff --git a/drivers/staging/cdv/imgv/psb_ttm_fence_user.c b/drivers/staging/cdv/imgv/psb_ttm_fence_user.c deleted file mode 100644 index 7ada0dd..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_fence_user.c +++ /dev/null @@ -1,237 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ - -#include -#include "psb_ttm_fence_user.h" -#include "ttm/ttm_object.h" -#include "psb_ttm_fence_driver.h" -#include "psb_ttm_userobj_api.h" - -/** - * struct ttm_fence_user_object - * - * @base: The base object used for user-space visibility and refcounting. - * - * @fence: The fence object itself. - * - */ - -struct ttm_fence_user_object { - struct ttm_base_object base; - struct ttm_fence_object fence; -}; - -static struct ttm_fence_user_object *ttm_fence_user_object_lookup( - struct ttm_object_file *tfile, - uint32_t handle) -{ - struct ttm_base_object *base; - - base = ttm_base_object_lookup(tfile, handle); - if (unlikely(base == NULL)) { - printk(KERN_ERR "Invalid fence handle 0x%08lx\n", - (unsigned long)handle); - return NULL; - } - - if (unlikely(base->object_type != ttm_fence_type)) { - ttm_base_object_unref(&base); - printk(KERN_ERR "Invalid fence handle 0x%08lx\n", - (unsigned long)handle); - return NULL; - } - - return container_of(base, struct ttm_fence_user_object, base); -} - -/* - * The fence object destructor. - */ - -static void ttm_fence_user_destroy(struct ttm_fence_object *fence) -{ - struct ttm_fence_user_object *ufence = - container_of(fence, struct ttm_fence_user_object, fence); - - ttm_mem_global_free(fence->fdev->mem_glob, sizeof(*ufence)); - kfree(ufence); -} - -/* - * The base object destructor. We basically unly unreference the - * attached fence object. - */ - -static void ttm_fence_user_release(struct ttm_base_object **p_base) -{ - struct ttm_fence_user_object *ufence; - struct ttm_base_object *base = *p_base; - struct ttm_fence_object *fence; - - *p_base = NULL; - - if (unlikely(base == NULL)) - return; - - ufence = container_of(base, struct ttm_fence_user_object, base); - fence = &ufence->fence; - ttm_fence_object_unref(&fence); -} - -int -ttm_fence_user_create(struct ttm_fence_device *fdev, - struct ttm_object_file *tfile, - uint32_t fence_class, - uint32_t fence_types, - uint32_t create_flags, - struct ttm_fence_object **fence, - uint32_t *user_handle) -{ - int ret; - struct ttm_fence_object *tmp; - struct ttm_fence_user_object *ufence; - - ret = ttm_mem_global_alloc(fdev->mem_glob, - sizeof(*ufence), - false, - false); - if (unlikely(ret != 0)) - return -ENOMEM; - - ufence = kmalloc(sizeof(*ufence), GFP_KERNEL); - if (unlikely(ufence == NULL)) { - ttm_mem_global_free(fdev->mem_glob, sizeof(*ufence)); - return -ENOMEM; - } - - ret = ttm_fence_object_init(fdev, - fence_class, - fence_types, create_flags, - &ttm_fence_user_destroy, &ufence->fence); - - if (unlikely(ret != 0)) - goto out_err0; - - /* - * One fence ref is held by the fence ptr we return. - * The other one by the base object. Need to up the - * fence refcount before we publish this object to - * user-space. - */ - - tmp = ttm_fence_object_ref(&ufence->fence); - ret = ttm_base_object_init(tfile, &ufence->base, - false, ttm_fence_type, - &ttm_fence_user_release, NULL); - - if (unlikely(ret != 0)) - goto out_err1; - - *fence = &ufence->fence; - *user_handle = ufence->base.hash.key; - - return 0; -out_err1: - ttm_fence_object_unref(&tmp); - tmp = &ufence->fence; - ttm_fence_object_unref(&tmp); - return ret; -out_err0: - ttm_mem_global_free(fdev->mem_glob, sizeof(*ufence)); - kfree(ufence); - return ret; -} - -int ttm_fence_signaled_ioctl(struct ttm_object_file *tfile, void *data) -{ - int ret; - union ttm_fence_signaled_arg *arg = data; - struct ttm_fence_object *fence; - struct ttm_fence_info info; - struct ttm_fence_user_object *ufence; - struct ttm_base_object *base; - ret = 0; - - ufence = ttm_fence_user_object_lookup(tfile, arg->req.handle); - if (unlikely(ufence == NULL)) - return -EINVAL; - - fence = &ufence->fence; - - if (arg->req.flush) { - ret = ttm_fence_object_flush(fence, arg->req.fence_type); - if (unlikely(ret != 0)) - goto out; - } - - info = ttm_fence_get_info(fence); - arg->rep.signaled_types = info.signaled_types; - arg->rep.fence_error = info.error; - -out: - base = &ufence->base; - ttm_base_object_unref(&base); - return ret; -} - -int ttm_fence_finish_ioctl(struct ttm_object_file *tfile, void *data) -{ - int ret; - union ttm_fence_finish_arg *arg = data; - struct ttm_fence_user_object *ufence; - struct ttm_base_object *base; - struct ttm_fence_object *fence; - ret = 0; - - ufence = ttm_fence_user_object_lookup(tfile, arg->req.handle); - if (unlikely(ufence == NULL)) - return -EINVAL; - - fence = &ufence->fence; - - ret = ttm_fence_object_wait(fence, - arg->req.mode & TTM_FENCE_FINISH_MODE_LAZY, - true, arg->req.fence_type); - if (likely(ret == 0)) { - struct ttm_fence_info info = ttm_fence_get_info(fence); - - arg->rep.signaled_types = info.signaled_types; - arg->rep.fence_error = info.error; - } - - base = &ufence->base; - ttm_base_object_unref(&base); - - return ret; -} - -int ttm_fence_unref_ioctl(struct ttm_object_file *tfile, void *data) -{ - struct ttm_fence_unref_arg *arg = data; - int ret = 0; - - ret = ttm_ref_object_base_unref(tfile, arg->handle, ttm_fence_type); - return ret; -} diff --git a/drivers/staging/cdv/imgv/psb_ttm_fence_user.h b/drivers/staging/cdv/imgv/psb_ttm_fence_user.h deleted file mode 100644 index ee95e6a..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_fence_user.h +++ /dev/null @@ -1,140 +0,0 @@ -/************************************************************************** - * - * Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors - * Thomas Hellström - */ - -#ifndef TTM_FENCE_USER_H -#define TTM_FENCE_USER_H - -#if !defined(__KERNEL__) && !defined(_KERNEL) -#include -#endif - -#define TTM_FENCE_MAJOR 0 -#define TTM_FENCE_MINOR 1 -#define TTM_FENCE_PL 0 -#define TTM_FENCE_DATE "080819" - -/** - * struct ttm_fence_signaled_req - * - * @handle: Handle to the fence object. Input. - * - * @fence_type: Fence types we want to flush. Input. - * - * @flush: Boolean. Flush the indicated fence_types. Input. - * - * Argument to the TTM_FENCE_SIGNALED ioctl. - */ - -struct ttm_fence_signaled_req { - uint32_t handle; - uint32_t fence_type; - int32_t flush; - uint32_t pad64; -}; - -/** - * struct ttm_fence_rep - * - * @signaled_types: Fence type that has signaled. - * - * @fence_error: Command execution error. - * Hardware errors that are consequences of the execution - * of the command stream preceding the fence are reported - * here. - * - * Output argument to the TTM_FENCE_SIGNALED and - * TTM_FENCE_FINISH ioctls. - */ - -struct ttm_fence_rep { - uint32_t signaled_types; - uint32_t fence_error; -}; - -union ttm_fence_signaled_arg { - struct ttm_fence_signaled_req req; - struct ttm_fence_rep rep; -}; - -/* - * Waiting mode flags for the TTM_FENCE_FINISH ioctl. - * - * TTM_FENCE_FINISH_MODE_LAZY: Allow for sleeps during polling - * wait. - * - * TTM_FENCE_FINISH_MODE_NO_BLOCK: Don't block waiting for GPU, - * but return -EBUSY if the buffer is busy. - */ - -#define TTM_FENCE_FINISH_MODE_LAZY (1 << 0) -#define TTM_FENCE_FINISH_MODE_NO_BLOCK (1 << 1) - -/** - * struct ttm_fence_finish_req - * - * @handle: Handle to the fence object. Input. - * - * @fence_type: Fence types we want to finish. - * - * @mode: Wait mode. - * - * Input to the TTM_FENCE_FINISH ioctl. - */ - -struct ttm_fence_finish_req { - uint32_t handle; - uint32_t fence_type; - uint32_t mode; - uint32_t pad64; -}; - -union ttm_fence_finish_arg { - struct ttm_fence_finish_req req; - struct ttm_fence_rep rep; -}; - -/** - * struct ttm_fence_unref_arg - * - * @handle: Handle to the fence object. - * - * Argument to the TTM_FENCE_UNREF ioctl. - */ - -struct ttm_fence_unref_arg { - uint32_t handle; - uint32_t pad64; -}; - -/* - * Ioctl offsets frome extenstion start. - */ - -#define TTM_FENCE_SIGNALED 0x01 -#define TTM_FENCE_FINISH 0x02 -#define TTM_FENCE_UNREF 0x03 - -#endif diff --git a/drivers/staging/cdv/imgv/psb_ttm_glue.c b/drivers/staging/cdv/imgv/psb_ttm_glue.c deleted file mode 100644 index 57cb6ec..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_glue.c +++ /dev/null @@ -1,376 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * Copyright (c) 2008, Tungsten Graphics Inc. Cedar Park, TX., USA. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ - - -#include -#include "psb_drv.h" -#include "psb_ttm_userobj_api.h" -#include -#include "psb_msvdx.h" -#include "bufferclass_video.h" - -/*IMG Headers*/ -#include "private_data.h" - -extern int PVRMMap(struct file *pFile, struct vm_area_struct *ps_vma); -extern unsigned int bc_video_id_usage[BC_VIDEO_DEVICE_MAX_ID]; -int BC_DestroyBuffers (int id); - -static struct vm_operations_struct psb_ttm_vm_ops; - -/** - * NOTE: driver_private of drm_file is now a PVRSRV_FILE_PRIVATE_DATA struct - * pPriv in PVRSRV_FILE_PRIVATE_DATA contains the original psb_fpriv; - */ -int psb_open(struct inode *inode, struct file *filp) -{ - struct drm_file *file_priv; - struct drm_psb_private *dev_priv; - struct psb_fpriv *psb_fp; - PVRSRV_FILE_PRIVATE_DATA *pvr_file_priv; - int ret; - - DRM_DEBUG("\n"); - - ret = drm_open(inode, filp); - if (unlikely(ret)) - return ret; - - psb_fp = kzalloc(sizeof(*psb_fp), GFP_KERNEL); - - if (unlikely(psb_fp == NULL)) - goto out_err0; - - file_priv = (struct drm_file *) filp->private_data; - dev_priv = psb_priv(file_priv->minor->dev); - - DRM_DEBUG("is_master %d\n", file_priv->is_master ? 1 : 0); - - psb_fp->tfile = ttm_object_file_init(dev_priv->tdev, - PSB_FILE_OBJECT_HASH_ORDER); - if (unlikely(psb_fp->tfile == NULL)) - goto out_err1; - - pvr_file_priv = (PVRSRV_FILE_PRIVATE_DATA *)file_priv->driver_priv; - if (!pvr_file_priv) { - DRM_ERROR("drm file private is NULL\n"); - goto out_err1; - } - - pvr_file_priv->pPriv = psb_fp; - if (unlikely(dev_priv->bdev.dev_mapping == NULL)) - dev_priv->bdev.dev_mapping = dev_priv->dev->dev_mapping; - - return 0; - -out_err1: - kfree(psb_fp); -out_err0: - (void) drm_release(inode, filp); - return ret; -} - -int psb_release(struct inode *inode, struct file *filp) -{ - struct drm_file *file_priv; - struct psb_fpriv *psb_fp; - struct drm_psb_private *dev_priv; - struct msvdx_private *msvdx_priv; - int ret; - file_priv = (struct drm_file *) filp->private_data; - psb_fp = psb_fpriv(file_priv); - dev_priv = psb_priv(file_priv->minor->dev); - msvdx_priv = (struct msvdx_private *)dev_priv->msvdx_private; - - /*cleanup for msvdx*/ - if (msvdx_priv->tfile == psb_fpriv(file_priv)->tfile) { - msvdx_priv->fw_status = 0; - msvdx_priv->host_be_opp_enabled = 0; - msvdx_priv->deblock_enabled = 0; - memset(&msvdx_priv->frame_info, 0, sizeof(struct drm_psb_msvdx_frame_info) * MAX_DECODE_BUFFERS); - } - - if (psb_fp->bcd_index >= 0 && - psb_fp->bcd_index < BC_VIDEO_DEVICE_MAX_ID && - bc_video_id_usage[psb_fp->bcd_index] == 1) { - bc_video_id_usage[psb_fp->bcd_index] = 0; - BC_DestroyBuffers(psb_fp->bcd_index); - } - - ttm_object_file_release(&psb_fp->tfile); - kfree(psb_fp); - - /* remove video context */ - psb_remove_videoctx(dev_priv, filp); - - ret = drm_release(inode, filp); - - return ret; -} - -int psb_fence_signaled_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - - return ttm_fence_signaled_ioctl(psb_fpriv(file_priv)->tfile, data); -} - -int psb_fence_finish_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_fence_finish_ioctl(psb_fpriv(file_priv)->tfile, data); -} - -int psb_fence_unref_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_fence_unref_ioctl(psb_fpriv(file_priv)->tfile, data); -} - -int psb_pl_waitidle_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_pl_waitidle_ioctl(psb_fpriv(file_priv)->tfile, data); -} - -int psb_pl_setstatus_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_pl_setstatus_ioctl(psb_fpriv(file_priv)->tfile, - &psb_priv(dev)->ttm_lock, data); - -} - -int psb_pl_synccpu_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_pl_synccpu_ioctl(psb_fpriv(file_priv)->tfile, data); -} - -int psb_pl_unref_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_pl_unref_ioctl(psb_fpriv(file_priv)->tfile, data); - -} - -int psb_pl_reference_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - return ttm_pl_reference_ioctl(psb_fpriv(file_priv)->tfile, data); - -} - -int psb_pl_create_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - - return ttm_pl_create_ioctl(psb_fpriv(file_priv)->tfile, - &dev_priv->bdev, &dev_priv->ttm_lock, data); - -} - -int psb_pl_ub_create_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_private *dev_priv = psb_priv(dev); - - return ttm_pl_ub_create_ioctl(psb_fpriv(file_priv)->tfile, - &dev_priv->bdev, &dev_priv->ttm_lock, data); - -} -/** - * psb_ttm_fault - Wrapper around the ttm fault method. - * - * @vma: The struct vm_area_struct as in the vm fault() method. - * @vmf: The struct vm_fault as in the vm fault() method. - * - * Since ttm_fault() will reserve buffers while faulting, - * we need to take the ttm read lock around it, as this driver - * relies on the ttm_lock in write mode to exclude all threads from - * reserving and thus validating buffers in aperture- and memory shortage - * situations. - */ - -static int psb_ttm_fault(struct vm_area_struct *vma, - struct vm_fault *vmf) -{ - struct ttm_buffer_object *bo = (struct ttm_buffer_object *) - vma->vm_private_data; - struct drm_psb_private *dev_priv = - container_of(bo->bdev, struct drm_psb_private, bdev); - int ret; - - ret = ttm_read_lock(&dev_priv->ttm_lock, true); - if (unlikely(ret != 0)) - return VM_FAULT_NOPAGE; - - ret = dev_priv->ttm_vm_ops->fault(vma, vmf); - - ttm_read_unlock(&dev_priv->ttm_lock); - return ret; -} - -/** - * if vm_pgoff < DRM_PSB_FILE_PAGE_OFFSET call directly to - * PVRMMap - */ -int psb_mmap(struct file *filp, struct vm_area_struct *vma) -{ - struct drm_file *file_priv; - struct drm_psb_private *dev_priv; - int ret; - - if (vma->vm_pgoff < DRM_PSB_FILE_PAGE_OFFSET || - vma->vm_pgoff > 2 * DRM_PSB_FILE_PAGE_OFFSET) - return PVRMMap(filp, vma); - - file_priv = (struct drm_file *) filp->private_data; - dev_priv = psb_priv(file_priv->minor->dev); - - ret = ttm_bo_mmap(filp, vma, &dev_priv->bdev); - if (unlikely(ret != 0)) - return ret; - - if (unlikely(dev_priv->ttm_vm_ops == NULL)) { - dev_priv->ttm_vm_ops = (struct vm_operations_struct *)vma->vm_ops; - psb_ttm_vm_ops = *vma->vm_ops; - psb_ttm_vm_ops.fault = &psb_ttm_fault; - } - - vma->vm_ops = &psb_ttm_vm_ops; - - return 0; -} -/* -ssize_t psb_ttm_write(struct file *filp, const char __user *buf, - size_t count, loff_t *f_pos) -{ - struct drm_file *file_priv = (struct drm_file *)filp->private_data; - struct drm_psb_private *dev_priv = psb_priv(file_priv->minor->dev); - - return ttm_bo_io(&dev_priv->bdev, filp, buf, NULL, count, f_pos, 1); -} - -ssize_t psb_ttm_read(struct file *filp, char __user *buf, - size_t count, loff_t *f_pos) -{ - struct drm_file *file_priv = (struct drm_file *)filp->private_data; - struct drm_psb_private *dev_priv = psb_priv(file_priv->minor->dev); - - return ttm_bo_io(&dev_priv->bdev, filp, NULL, buf, count, f_pos, 1); -} -*/ -int psb_verify_access(struct ttm_buffer_object *bo, - struct file *filp) -{ - struct drm_file *file_priv = (struct drm_file *)filp->private_data; - - if (capable(CAP_SYS_ADMIN)) - return 0; - - if (unlikely(!file_priv->authenticated)) - return -EPERM; - - return ttm_pl_verify_access(bo, psb_fpriv(file_priv)->tfile); -} - -static int psb_ttm_mem_global_init(struct drm_global_reference *ref) -{ - return ttm_mem_global_init(ref->object); -} - -static void psb_ttm_mem_global_release(struct drm_global_reference *ref) -{ - ttm_mem_global_release(ref->object); -} - -int psb_ttm_global_init(struct drm_psb_private *dev_priv) -{ - struct drm_global_reference *global_ref; - int ret; - - global_ref = &dev_priv->mem_global_ref; - global_ref->global_type = DRM_GLOBAL_TTM_MEM; - global_ref->size = sizeof(struct ttm_mem_global); - global_ref->init = &psb_ttm_mem_global_init; - global_ref->release = &psb_ttm_mem_global_release; - - ret = drm_global_item_ref(global_ref); - if (unlikely(ret != 0)) { - DRM_ERROR("Failed referencing a global TTM memory object.\n"); - return ret; - } - - dev_priv->bo_global_ref.mem_glob = dev_priv->mem_global_ref.object; - global_ref = &dev_priv->bo_global_ref.ref; - global_ref->global_type = DRM_GLOBAL_TTM_BO; - global_ref->size = sizeof(struct ttm_bo_global); - global_ref->init = &ttm_bo_global_init; - global_ref->release = &ttm_bo_global_release; - ret = drm_global_item_ref(global_ref); - if (ret != 0) { - DRM_ERROR("Failed setting up TTM BO subsystem.\n"); - drm_global_item_unref(&dev_priv->mem_global_ref); - return ret; - } - - return 0; -} - -void psb_ttm_global_release(struct drm_psb_private *dev_priv) -{ - drm_global_item_unref(&dev_priv->mem_global_ref); -} - -int psb_getpageaddrs_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) -{ - struct drm_psb_getpageaddrs_arg *arg = data; - struct ttm_buffer_object *bo; - struct ttm_tt *ttm; - struct page **tt_pages; - unsigned long i, num_pages; - unsigned long *p = arg->page_addrs; - int ret = 0; - - bo = ttm_buffer_object_lookup(psb_fpriv(file_priv)->tfile, - arg->handle); - if (unlikely(bo == NULL)) { - printk(KERN_ERR - "Could not find buffer object for getpageaddrs.\n"); - return -EINVAL; - } - - arg->gtt_offset = bo->offset; - ttm = bo->ttm; - num_pages = ttm->num_pages; - tt_pages = ttm->pages; - - for (i = 0; i < num_pages; i++) - p[i] = (unsigned long)page_to_phys(tt_pages[i]); - - if (bo) - ttm_bo_unref(&bo); - - return ret; -} diff --git a/drivers/staging/cdv/imgv/psb_ttm_placement_user.c b/drivers/staging/cdv/imgv/psb_ttm_placement_user.c deleted file mode 100644 index 7395901..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_placement_user.c +++ /dev/null @@ -1,631 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ - -#include "psb_ttm_placement_user.h" -#include "ttm/ttm_bo_driver.h" -#include "ttm/ttm_object.h" -#include "psb_ttm_userobj_api.h" -#include "ttm/ttm_lock.h" -#include -#include - -struct ttm_bo_user_object { - struct ttm_base_object base; - struct ttm_buffer_object bo; -}; - -static size_t pl_bo_size; - -static uint32_t psb_busy_prios[] = { - TTM_PL_TT, - TTM_PL_PRIV0, /* CI */ - TTM_PL_PRIV2, /* RAR */ - TTM_PL_PRIV1, /* DRM_PSB_MEM_MMU */ - TTM_PL_SYSTEM -}; - -const struct ttm_placement default_placement = {0, 0, 0, NULL, 5, psb_busy_prios}; - -static size_t ttm_pl_size(struct ttm_bo_device *bdev, unsigned long num_pages) -{ - size_t page_array_size = - (num_pages * sizeof(void *) + PAGE_SIZE - 1) & PAGE_MASK; - - if (unlikely(pl_bo_size == 0)) { - pl_bo_size = bdev->glob->ttm_bo_extra_size + - ttm_round_pot(sizeof(struct ttm_bo_user_object)); - } - - return bdev->glob->ttm_bo_size + 2 * page_array_size; -} - -static struct ttm_bo_user_object *ttm_bo_user_lookup(struct ttm_object_file - *tfile, uint32_t handle) -{ - struct ttm_base_object *base; - - base = ttm_base_object_lookup(tfile, handle); - if (unlikely(base == NULL)) { - printk(KERN_ERR "Invalid buffer object handle 0x%08lx.\n", - (unsigned long)handle); - return NULL; - } - - if (unlikely(base->object_type != ttm_buffer_type)) { - ttm_base_object_unref(&base); - printk(KERN_ERR "Invalid buffer object handle 0x%08lx.\n", - (unsigned long)handle); - return NULL; - } - - return container_of(base, struct ttm_bo_user_object, base); -} - -struct ttm_buffer_object *ttm_buffer_object_lookup(struct ttm_object_file - *tfile, uint32_t handle) -{ - struct ttm_bo_user_object *user_bo; - struct ttm_base_object *base; - - user_bo = ttm_bo_user_lookup(tfile, handle); - if (unlikely(user_bo == NULL)) - return NULL; - - (void)ttm_bo_reference(&user_bo->bo); - base = &user_bo->base; - ttm_base_object_unref(&base); - return &user_bo->bo; -} - -static void ttm_bo_user_destroy(struct ttm_buffer_object *bo) -{ - struct ttm_bo_user_object *user_bo = - container_of(bo, struct ttm_bo_user_object, bo); - - ttm_mem_global_free(bo->glob->mem_glob, bo->acc_size); - kfree(user_bo); -} - -static void ttm_bo_user_release(struct ttm_base_object **p_base) -{ - struct ttm_bo_user_object *user_bo; - struct ttm_base_object *base = *p_base; - struct ttm_buffer_object *bo; - - *p_base = NULL; - - if (unlikely(base == NULL)) - return; - - user_bo = container_of(base, struct ttm_bo_user_object, base); - bo = &user_bo->bo; - ttm_bo_unref(&bo); -} - -static void ttm_bo_user_ref_release(struct ttm_base_object *base, - enum ttm_ref_type ref_type) -{ - struct ttm_bo_user_object *user_bo = - container_of(base, struct ttm_bo_user_object, base); - struct ttm_buffer_object *bo = &user_bo->bo; - - switch (ref_type) { - case TTM_REF_SYNCCPU_WRITE: - ttm_bo_synccpu_write_release(bo); - break; - default: - BUG(); - } -} - -static void ttm_pl_fill_rep(struct ttm_buffer_object *bo, - struct ttm_pl_rep *rep) -{ - struct ttm_bo_user_object *user_bo = - container_of(bo, struct ttm_bo_user_object, bo); - - rep->gpu_offset = bo->offset; - rep->bo_size = bo->num_pages << PAGE_SHIFT; - rep->map_handle = bo->addr_space_offset; - rep->placement = bo->mem.placement; - rep->handle = user_bo->base.hash.key; - rep->sync_object_arg = (uint32_t) (unsigned long)bo->sync_obj_arg; -} - -/* FIXME Copy from upstream TTM */ -static inline size_t ttm_bo_size(struct ttm_bo_global *glob, - unsigned long num_pages) -{ - size_t page_array_size = (num_pages * sizeof(void *) + PAGE_SIZE - 1) & - PAGE_MASK; - - return glob->ttm_bo_size + 2 * page_array_size; -} - -/* FIXME Copy from upstream TTM "ttm_bo_create", upstream TTM does not export this, so copy it here */ -static int ttm_bo_create_private(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type type, - struct ttm_placement *placement, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - struct ttm_buffer_object **p_bo) -{ - struct ttm_buffer_object *bo; - struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; - int ret; - - size_t acc_size = - ttm_bo_size(bdev->glob, (size + PAGE_SIZE - 1) >> PAGE_SHIFT); - ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false); - if (unlikely(ret != 0)) - return ret; - - bo = kzalloc(sizeof(*bo), GFP_KERNEL); - - if (unlikely(bo == NULL)) { - ttm_mem_global_free(mem_glob, acc_size); - return -ENOMEM; - } - - ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, - buffer_start, interruptible, - persistant_swap_storage, acc_size, NULL); - if (likely(ret == 0)) - *p_bo = bo; - - return ret; -} - -int psb_ttm_bo_check_placement(struct ttm_buffer_object *bo, - struct ttm_placement *placement) -{ - int i; - - for (i = 0; i < placement->num_placement; i++) { - if (!capable(CAP_SYS_ADMIN)) { - if (placement->placement[i] & TTM_PL_FLAG_NO_EVICT) { - printk(KERN_ERR TTM_PFX "Need to be root to " - "modify NO_EVICT status.\n"); - return -EINVAL; - } - } - } - for (i = 0; i < placement->num_busy_placement; i++) { - if (!capable(CAP_SYS_ADMIN)) { - if (placement->busy_placement[i] & TTM_PL_FLAG_NO_EVICT) { - printk(KERN_ERR TTM_PFX "Need to be root to " - "modify NO_EVICT status.\n"); - return -EINVAL; - } - } - } - return 0; -} - -int ttm_buffer_object_create(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - struct ttm_buffer_object **p_bo) -{ - struct ttm_placement placement = default_placement; - int ret; - - if ((flags & TTM_PL_MASK_CACHING) == 0) - flags |= TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; - - placement.num_placement = 1; - placement.placement = &flags; - - ret = ttm_bo_create_private(bdev, - size, - type, - &placement, - page_alignment, - buffer_start, - interruptible, - persistant_swap_storage, - p_bo); - - return ret; -} - - -int ttm_pl_create_ioctl(struct ttm_object_file *tfile, - struct ttm_bo_device *bdev, - struct ttm_lock *lock, void *data) -{ - union ttm_pl_create_arg *arg = data; - struct ttm_pl_create_req *req = &arg->req; - struct ttm_pl_rep *rep = &arg->rep; - struct ttm_buffer_object *bo; - struct ttm_buffer_object *tmp; - struct ttm_bo_user_object *user_bo; - uint32_t flags; - int ret = 0; - struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; - struct ttm_placement placement = default_placement; - size_t acc_size = - ttm_pl_size(bdev, (req->size + PAGE_SIZE - 1) >> PAGE_SHIFT); - ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false); - if (unlikely(ret != 0)) - return ret; - - flags = req->placement; - user_bo = kzalloc(sizeof(*user_bo), GFP_KERNEL); - if (unlikely(user_bo == NULL)) { - ttm_mem_global_free(mem_glob, acc_size); - return -ENOMEM; - } - - bo = &user_bo->bo; - ret = ttm_read_lock(lock, true); - if (unlikely(ret != 0)) { - ttm_mem_global_free(mem_glob, acc_size); - kfree(user_bo); - return ret; - } - - placement.num_placement = 1; - placement.placement = &flags; - - if ((flags & TTM_PL_MASK_CACHING) == 0) - flags |= TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; - - ret = ttm_bo_init(bdev, bo, req->size, - ttm_bo_type_device, &placement, - req->page_alignment, 0, true, - NULL, acc_size, &ttm_bo_user_destroy); - ttm_read_unlock(lock); - - /* - * Note that the ttm_buffer_object_init function - * would've called the destroy function on failure!! - */ - - if (unlikely(ret != 0)) - goto out; - - tmp = ttm_bo_reference(bo); - ret = ttm_base_object_init(tfile, &user_bo->base, - flags & TTM_PL_FLAG_SHARED, - ttm_buffer_type, - &ttm_bo_user_release, - &ttm_bo_user_ref_release); - if (unlikely(ret != 0)) - goto out_err; - - spin_lock(&bo->bdev->fence_lock); - ttm_pl_fill_rep(bo, rep); - spin_unlock(&bo->bdev->fence_lock); - ttm_bo_unref(&bo); -out: - return 0; -out_err: - ttm_bo_unref(&tmp); - ttm_bo_unref(&bo); - return ret; -} - -int ttm_pl_ub_create_ioctl(struct ttm_object_file *tfile, - struct ttm_bo_device *bdev, - struct ttm_lock *lock, void *data) -{ - union ttm_pl_create_ub_arg *arg = data; - struct ttm_pl_create_ub_req *req = &arg->req; - struct ttm_pl_rep *rep = &arg->rep; - struct ttm_buffer_object *bo; - struct ttm_buffer_object *tmp; - struct ttm_bo_user_object *user_bo; - uint32_t flags; - int ret = 0; - struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; - struct ttm_placement placement = default_placement; - size_t acc_size = - ttm_pl_size(bdev, (req->size + PAGE_SIZE - 1) >> PAGE_SHIFT); - ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false); - if (unlikely(ret != 0)) - return ret; - - flags = req->placement; - user_bo = kzalloc(sizeof(*user_bo), GFP_KERNEL); - if (unlikely(user_bo == NULL)) { - ttm_mem_global_free(mem_glob, acc_size); - return -ENOMEM; - } - ret = ttm_read_lock(lock, true); - if (unlikely(ret != 0)) { - ttm_mem_global_free(mem_glob, acc_size); - kfree(user_bo); - return ret; - } - bo = &user_bo->bo; - - placement.num_placement = 1; - placement.placement = &flags; - - ret = ttm_bo_init(bdev, - bo, - req->size, - ttm_bo_type_user, - &placement, - req->page_alignment, - req->user_address, - true, - NULL, - acc_size, - &ttm_bo_user_destroy); - - /* - * Note that the ttm_buffer_object_init function - * would've called the destroy function on failure!! - */ - ttm_read_unlock(lock); - if (unlikely(ret != 0)) - goto out; - - tmp = ttm_bo_reference(bo); - ret = ttm_base_object_init(tfile, &user_bo->base, - flags & TTM_PL_FLAG_SHARED, - ttm_buffer_type, - &ttm_bo_user_release, - &ttm_bo_user_ref_release); - if (unlikely(ret != 0)) - goto out_err; - - spin_lock(&bo->bdev->fence_lock); - ttm_pl_fill_rep(bo, rep); - spin_unlock(&bo->bdev->fence_lock); - ttm_bo_unref(&bo); -out: - return 0; -out_err: - ttm_bo_unref(&tmp); - ttm_bo_unref(&bo); - return ret; -} - -int ttm_pl_reference_ioctl(struct ttm_object_file *tfile, void *data) -{ - union ttm_pl_reference_arg *arg = data; - struct ttm_pl_rep *rep = &arg->rep; - struct ttm_bo_user_object *user_bo; - struct ttm_buffer_object *bo; - struct ttm_base_object *base; - int ret; - - user_bo = ttm_bo_user_lookup(tfile, arg->req.handle); - if (unlikely(user_bo == NULL)) { - printk(KERN_ERR "Could not reference buffer object.\n"); - return -EINVAL; - } - - bo = &user_bo->bo; - ret = ttm_ref_object_add(tfile, &user_bo->base, TTM_REF_USAGE, NULL); - if (unlikely(ret != 0)) { - printk(KERN_ERR - "Could not add a reference to buffer object.\n"); - goto out; - } - - spin_lock(&bo->bdev->fence_lock); - ttm_pl_fill_rep(bo, rep); - spin_unlock(&bo->bdev->fence_lock); - -out: - base = &user_bo->base; - ttm_base_object_unref(&base); - return ret; -} - -int ttm_pl_unref_ioctl(struct ttm_object_file *tfile, void *data) -{ - struct ttm_pl_reference_req *arg = data; - - return ttm_ref_object_base_unref(tfile, arg->handle, TTM_REF_USAGE); -} - -int ttm_pl_synccpu_ioctl(struct ttm_object_file *tfile, void *data) -{ - struct ttm_pl_synccpu_arg *arg = data; - struct ttm_bo_user_object *user_bo; - struct ttm_buffer_object *bo; - struct ttm_base_object *base; - bool existed; - int ret; - - switch (arg->op) { - case TTM_PL_SYNCCPU_OP_GRAB: - user_bo = ttm_bo_user_lookup(tfile, arg->handle); - if (unlikely(user_bo == NULL)) { - printk(KERN_ERR - "Could not find buffer object for synccpu.\n"); - return -EINVAL; - } - bo = &user_bo->bo; - base = &user_bo->base; - ret = ttm_bo_synccpu_write_grab(bo, - arg->access_mode & - TTM_PL_SYNCCPU_MODE_NO_BLOCK); - if (unlikely(ret != 0)) { - ttm_base_object_unref(&base); - goto out; - } - ret = ttm_ref_object_add(tfile, &user_bo->base, - TTM_REF_SYNCCPU_WRITE, &existed); - if (existed || ret != 0) - ttm_bo_synccpu_write_release(bo); - ttm_base_object_unref(&base); - break; - case TTM_PL_SYNCCPU_OP_RELEASE: - ret = ttm_ref_object_base_unref(tfile, arg->handle, - TTM_REF_SYNCCPU_WRITE); - break; - default: - ret = -EINVAL; - break; - } -out: - return ret; -} - -int ttm_pl_setstatus_ioctl(struct ttm_object_file *tfile, - struct ttm_lock *lock, void *data) -{ - union ttm_pl_setstatus_arg *arg = data; - struct ttm_pl_setstatus_req *req = &arg->req; - struct ttm_pl_rep *rep = &arg->rep; - struct ttm_buffer_object *bo; - struct ttm_placement placement = default_placement; - uint32_t flags[2]; - int ret; - - bo = ttm_buffer_object_lookup(tfile, req->handle); - if (unlikely(bo == NULL)) { - printk(KERN_ERR - "Could not find buffer object for setstatus.\n"); - return -EINVAL; - } - - ret = ttm_read_lock(lock, true); - if (unlikely(ret != 0)) - goto out_err0; - - ret = ttm_bo_reserve(bo, true, false, false, 0); - if (unlikely(ret != 0)) - goto out_err1; - - ret = ttm_bo_wait_cpu(bo, false); - if (unlikely(ret != 0)) - goto out_err2; - - flags[0] = req->set_placement; - flags[1] = req->clr_placement; - - placement.num_placement = 2; - placement.placement = flags; - - spin_lock(&bo->bdev->fence_lock); - - ret = psb_ttm_bo_check_placement(bo, &placement); - if (unlikely(ret != 0)) - goto out_err2; - - placement.num_placement = 1; - flags[0] = (req->set_placement | bo->mem.placement) & ~req->clr_placement; - - ret = ttm_bo_validate(bo, &placement, true, false, false); - if (unlikely(ret != 0)) - goto out_err2; - - ttm_pl_fill_rep(bo, rep); -out_err2: - spin_unlock(&bo->bdev->fence_lock); - ttm_bo_unreserve(bo); -out_err1: - ttm_read_unlock(lock); -out_err0: - ttm_bo_unref(&bo); - return ret; -} - -static int psb_ttm_bo_block_reservation(struct ttm_buffer_object *bo, bool interruptible, - bool no_wait) -{ - int ret; - - while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) { - if (no_wait) - return -EBUSY; - else if (interruptible) { - ret = wait_event_interruptible - (bo->event_queue, atomic_read(&bo->reserved) == 0); - if (unlikely(ret != 0)) - return -ERESTART; - } else { - wait_event(bo->event_queue, - atomic_read(&bo->reserved) == 0); - } - } - return 0; -} - -static void psb_ttm_bo_unblock_reservation(struct ttm_buffer_object *bo) -{ - atomic_set(&bo->reserved, 0); - wake_up_all(&bo->event_queue); -} - -int ttm_pl_waitidle_ioctl(struct ttm_object_file *tfile, void *data) -{ - struct ttm_pl_waitidle_arg *arg = data; - struct ttm_buffer_object *bo; - int ret; - - bo = ttm_buffer_object_lookup(tfile, arg->handle); - if (unlikely(bo == NULL)) { - printk(KERN_ERR "Could not find buffer object for waitidle.\n"); - return -EINVAL; - } - - ret = - psb_ttm_bo_block_reservation(bo, true, - arg->mode & TTM_PL_WAITIDLE_MODE_NO_BLOCK); - if (unlikely(ret != 0)) - goto out; - spin_lock(&bo->bdev->fence_lock); - ret = ttm_bo_wait(bo, - arg->mode & TTM_PL_WAITIDLE_MODE_LAZY, - true, arg->mode & TTM_PL_WAITIDLE_MODE_NO_BLOCK); - spin_unlock(&bo->bdev->fence_lock); - psb_ttm_bo_unblock_reservation(bo); -out: - ttm_bo_unref(&bo); - return ret; -} - -int ttm_pl_verify_access(struct ttm_buffer_object *bo, - struct ttm_object_file *tfile) -{ - struct ttm_bo_user_object *ubo; - - /* - * Check bo subclass. - */ - - if (unlikely(bo->destroy != &ttm_bo_user_destroy)) - return -EPERM; - - ubo = container_of(bo, struct ttm_bo_user_object, bo); - if (likely(ubo->base.shareable || ubo->base.tfile == tfile)) - return 0; - - return -EPERM; -} diff --git a/drivers/staging/cdv/imgv/psb_ttm_placement_user.h b/drivers/staging/cdv/imgv/psb_ttm_placement_user.h deleted file mode 100644 index f17bf48..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_placement_user.h +++ /dev/null @@ -1,252 +0,0 @@ -/************************************************************************** - * - * Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors - * Thomas Hellström - */ - -#ifndef _TTM_PLACEMENT_USER_H_ -#define _TTM_PLACEMENT_USER_H_ - -#if !defined(__KERNEL__) && !defined(_KERNEL) -#include -#else -#include -#endif - -#include "ttm/ttm_placement.h" - -#define TTM_PLACEMENT_MAJOR 0 -#define TTM_PLACEMENT_MINOR 1 -#define TTM_PLACEMENT_PL 0 -#define TTM_PLACEMENT_DATE "080819" - -/** - * struct ttm_pl_create_req - * - * @size: The buffer object size. - * @placement: Flags that indicate initial acceptable - * placement. - * @page_alignment: Required alignment in pages. - * - * Input to the TTM_BO_CREATE ioctl. - */ - -struct ttm_pl_create_req { - uint64_t size; - uint32_t placement; - uint32_t page_alignment; -}; - -/** - * struct ttm_pl_create_ub_req - * - * @size: The buffer object size. - * @user_address: User-space address of the memory area that - * should be used to back the buffer object cast to 64-bit. - * @placement: Flags that indicate initial acceptable - * placement. - * @page_alignment: Required alignment in pages. - * - * Input to the TTM_BO_CREATE_UB ioctl. - */ - -struct ttm_pl_create_ub_req { - uint64_t size; - uint64_t user_address; - uint32_t placement; - uint32_t page_alignment; -}; - -/** - * struct ttm_pl_rep - * - * @gpu_offset: The current offset into the memory region used. - * This can be used directly by the GPU if there are no - * additional GPU mapping procedures used by the driver. - * - * @bo_size: Actual buffer object size. - * - * @map_handle: Offset into the device address space. - * Used for map, seek, read, write. This will never change - * during the lifetime of an object. - * - * @placement: Flag indicating the placement status of - * the buffer object using the TTM_PL flags above. - * - * @sync_object_arg: Used for user-space synchronization and - * depends on the synchronization model used. If fences are - * used, this is the buffer_object::fence_type_mask - * - * Output from the TTM_PL_CREATE and TTM_PL_REFERENCE, and - * TTM_PL_SETSTATUS ioctls. - */ - -struct ttm_pl_rep { - uint64_t gpu_offset; - uint64_t bo_size; - uint64_t map_handle; - uint32_t placement; - uint32_t handle; - uint32_t sync_object_arg; - uint32_t pad64; -}; - -/** - * struct ttm_pl_setstatus_req - * - * @set_placement: Placement flags to set. - * - * @clr_placement: Placement flags to clear. - * - * @handle: The object handle - * - * Input to the TTM_PL_SETSTATUS ioctl. - */ - -struct ttm_pl_setstatus_req { - uint32_t set_placement; - uint32_t clr_placement; - uint32_t handle; - uint32_t pad64; -}; - -/** - * struct ttm_pl_reference_req - * - * @handle: The object to put a reference on. - * - * Input to the TTM_PL_REFERENCE and the TTM_PL_UNREFERENCE ioctls. - */ - -struct ttm_pl_reference_req { - uint32_t handle; - uint32_t pad64; -}; - -/* - * ACCESS mode flags for SYNCCPU. - * - * TTM_SYNCCPU_MODE_READ will guarantee that the GPU is not - * writing to the buffer. - * - * TTM_SYNCCPU_MODE_WRITE will guarantee that the GPU is not - * accessing the buffer. - * - * TTM_SYNCCPU_MODE_NO_BLOCK makes sure the call does not wait - * for GPU accesses to finish but return -EBUSY. - * - * TTM_SYNCCPU_MODE_TRYCACHED Try to place the buffer in cacheable - * memory while synchronized for CPU. - */ - -#define TTM_PL_SYNCCPU_MODE_READ TTM_ACCESS_READ -#define TTM_PL_SYNCCPU_MODE_WRITE TTM_ACCESS_WRITE -#define TTM_PL_SYNCCPU_MODE_NO_BLOCK (1 << 2) -#define TTM_PL_SYNCCPU_MODE_TRYCACHED (1 << 3) - -/** - * struct ttm_pl_synccpu_arg - * - * @handle: The object to synchronize. - * - * @access_mode: access mode indicated by the - * TTM_SYNCCPU_MODE flags. - * - * @op: indicates whether to grab or release the - * buffer for cpu usage. - * - * Input to the TTM_PL_SYNCCPU ioctl. - */ - -struct ttm_pl_synccpu_arg { - uint32_t handle; - uint32_t access_mode; - enum { - TTM_PL_SYNCCPU_OP_GRAB, - TTM_PL_SYNCCPU_OP_RELEASE - } op; - uint32_t pad64; -}; - -/* - * Waiting mode flags for the TTM_BO_WAITIDLE ioctl. - * - * TTM_WAITIDLE_MODE_LAZY: Allow for sleeps during polling - * wait. - * - * TTM_WAITIDLE_MODE_NO_BLOCK: Don't block waiting for GPU, - * but return -EBUSY if the buffer is busy. - */ - -#define TTM_PL_WAITIDLE_MODE_LAZY (1 << 0) -#define TTM_PL_WAITIDLE_MODE_NO_BLOCK (1 << 1) - -/** - * struct ttm_waitidle_arg - * - * @handle: The object to synchronize. - * - * @mode: wait mode indicated by the - * TTM_SYNCCPU_MODE flags. - * - * Argument to the TTM_BO_WAITIDLE ioctl. - */ - -struct ttm_pl_waitidle_arg { - uint32_t handle; - uint32_t mode; -}; - -union ttm_pl_create_arg { - struct ttm_pl_create_req req; - struct ttm_pl_rep rep; -}; - -union ttm_pl_reference_arg { - struct ttm_pl_reference_req req; - struct ttm_pl_rep rep; -}; - -union ttm_pl_setstatus_arg { - struct ttm_pl_setstatus_req req; - struct ttm_pl_rep rep; -}; - -union ttm_pl_create_ub_arg { - struct ttm_pl_create_ub_req req; - struct ttm_pl_rep rep; -}; - -/* - * Ioctl offsets. - */ - -#define TTM_PL_CREATE 0x00 -#define TTM_PL_REFERENCE 0x01 -#define TTM_PL_UNREF 0x02 -#define TTM_PL_SYNCCPU 0x03 -#define TTM_PL_WAITIDLE 0x04 -#define TTM_PL_SETSTATUS 0x05 -#define TTM_PL_CREATE_UB 0x06 - -#endif diff --git a/drivers/staging/cdv/imgv/psb_ttm_userobj_api.h b/drivers/staging/cdv/imgv/psb_ttm_userobj_api.h deleted file mode 100644 index c69fa88..0000000 --- a/drivers/staging/cdv/imgv/psb_ttm_userobj_api.h +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * All Rights Reserved. - * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ - -#ifndef _TTM_USEROBJ_API_H_ -#define _TTM_USEROBJ_API_H_ - -#include "psb_ttm_placement_user.h" -#include "psb_ttm_fence_user.h" -#include "ttm/ttm_object.h" -#include "psb_ttm_fence_api.h" -#include "ttm/ttm_bo_api.h" - -struct ttm_lock; - -/* - * User ioctls. - */ - -extern int ttm_pl_create_ioctl(struct ttm_object_file *tfile, - struct ttm_bo_device *bdev, - struct ttm_lock *lock, void *data); -extern int ttm_pl_ub_create_ioctl(struct ttm_object_file *tfile, - struct ttm_bo_device *bdev, - struct ttm_lock *lock, void *data); -extern int ttm_pl_reference_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_pl_unref_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_pl_synccpu_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_pl_setstatus_ioctl(struct ttm_object_file *tfile, - struct ttm_lock *lock, void *data); -extern int ttm_pl_waitidle_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_fence_signaled_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_fence_finish_ioctl(struct ttm_object_file *tfile, void *data); -extern int ttm_fence_unref_ioctl(struct ttm_object_file *tfile, void *data); - -extern int -ttm_fence_user_create(struct ttm_fence_device *fdev, - struct ttm_object_file *tfile, - uint32_t fence_class, - uint32_t fence_types, - uint32_t create_flags, - struct ttm_fence_object **fence, uint32_t * user_handle); - -extern struct ttm_buffer_object *ttm_buffer_object_lookup(struct ttm_object_file - *tfile, - uint32_t handle); - -extern int -ttm_pl_verify_access(struct ttm_buffer_object *bo, - struct ttm_object_file *tfile); - -extern int ttm_buffer_object_create(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - struct ttm_buffer_object **p_bo); - -extern int psb_ttm_bo_check_placement(struct ttm_buffer_object *bo, - struct ttm_placement *placement); -#endif diff --git a/drivers/staging/cdv/pvr/COPYING b/drivers/staging/cdv/pvr/COPYING deleted file mode 100644 index 80dd76b..0000000 --- a/drivers/staging/cdv/pvr/COPYING +++ /dev/null @@ -1,351 +0,0 @@ - -This software is Copyright (C) 2008 Imagination Technologies Ltd. - All rights reserved. - -You may use, distribute and copy this software under the terms of -GNU General Public License version 2, which is displayed below. - -------------------------------------------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - 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. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - -------------------------------------------------------------------------- - diff --git a/drivers/staging/cdv/pvr/INSTALL b/drivers/staging/cdv/pvr/INSTALL deleted file mode 100644 index e4c1069..0000000 --- a/drivers/staging/cdv/pvr/INSTALL +++ /dev/null @@ -1,76 +0,0 @@ - -SGX Embedded Systems DDK for the Linux kernel. -Copyright (C) 2008 Imagination Technologies Ltd. All rights reserved. -====================================================================== - -This file covers how to build and install the Imagination Technologies -SGX DDK for the Linux kernel. - - -Build System Environment Variables -------------------------------------------- - -The SGX DDK Build scripts depend on a number of environment variables -being setup before compilation or installation of DDK software can -commence: - -$DISCIMAGE -The DDK Build scripts install files to the location specified by the -DISCIMAGE environment variable, when the make install target is used. -This should point to the target filesystem. -$ export DISCIMAGE=/path/to/filesystem - -$KERNELDIR -When building the SGX DDK kernel module, the build needs access -to the headers of the Linux kernel -$ export KERNELDIR=/path/to/kernel - -$PATH -If a cross compiler is being used make sure the PATH environment variable -includes the path to the toolchain -$ export PATH=$PATH:/path/to/toolchain - -$CROSS_COMPILE -Since the SGX DDK Build scripts are geared toward a cross-compilation -workflow, the CROSS_COMPILE environment variable needs to be set -$ export CROSS_COMPILE=toolchain-prefix- - - -Build and Install Instructions -------------------------------------------- - -The SGX DDK configures different target builds within directories under -eurasiacon/build/linux/. - -The supported build targets are: - - all Makes everything - clean Removes all intermediate files created by a build. - clobber Removes all binaries for all builds as well. - install Runs the install script generated by the build. - -The following variables may be set on the command line to influence a build. - - BUILD The type of build being performed. - Alternatives are release, timing or debug. - CFLAGS Build dependent optimisations and debug information flags. - SILENT Determines whether text of commands is produced during build. - -To build for, change to the appropriate target directory, e.g.: -$ cd eurasiacon/build/linux/platform/kbuild - -Issue the make command: -$ make BUILD=debug all - -The DDK software must be installed by the root user. Become the root user: -$ su - -Install the DDK software: -$ make install - -Become an ordinary user again: -$ exit - - - - diff --git a/drivers/staging/cdv/pvr/README b/drivers/staging/cdv/pvr/README deleted file mode 100644 index 8039c39..0000000 --- a/drivers/staging/cdv/pvr/README +++ /dev/null @@ -1,48 +0,0 @@ - -SGX Embedded Systems DDK for Linux kernel. -Copyright (C) 2008 Imagination Technologies Ltd. All rights reserved. -====================================================================== - - -About -------------------------------------------- - -This is the Imagination Technologies SGX DDK for the Linux kernel. - - -License -------------------------------------------- - -You may use, distribute and copy this software under the terms of -GNU General Public License version 2. - -The full GNU General Public License version 2 is included in this -distribution in the file called "COPYING". - - -Build and Install Instructions -------------------------------------------- - -For details see the "INSTALL" file. - -To build for, change to the appropriate target directory, e.g.: -$ cd eurasiacon/build/linux/platform/kbuild - -Issue the make command: -$ make BUILD=debug all - -The DDK software must be installed by the root user. Become the root user: -$ su - -Install the DDK software: -$ make install - -Become an ordinary user again: -$ exit - - -Contact information: -------------------------------------------- - -Imagination Technologies Ltd. -Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK diff --git a/drivers/staging/cdv/pvr/eurasiacon/.gitignore b/drivers/staging/cdv/pvr/eurasiacon/.gitignore deleted file mode 100644 index f558f8b..0000000 --- a/drivers/staging/cdv/pvr/eurasiacon/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -binary_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/include4/dbgdrvif.h b/drivers/staging/cdv/pvr/include4/dbgdrvif.h deleted file mode 100644 index b7614ac..0000000 --- a/drivers/staging/cdv/pvr/include4/dbgdrvif.h +++ /dev/null @@ -1,328 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _DBGDRVIF_ -#define _DBGDRVIF_ - - -#if defined(__linux__) - -#define FILE_DEVICE_UNKNOWN 0 -#define METHOD_BUFFERED 0 -#define FILE_ANY_ACCESS 0 - -#define CTL_CODE( DeviceType, Function, Method, Access ) (Function) -#define MAKEIOCTLINDEX(i) ((i) & 0xFFF) - -#else - -#include "ioctldef.h" - -#endif - -#define DEBUG_CAPMODE_FRAMED 0x00000001UL -#define DEBUG_CAPMODE_CONTINUOUS 0x00000002UL -#define DEBUG_CAPMODE_HOTKEY 0x00000004UL - -#define DEBUG_OUTMODE_STANDARDDBG 0x00000001UL -#define DEBUG_OUTMODE_MONO 0x00000002UL -#define DEBUG_OUTMODE_STREAMENABLE 0x00000004UL -#define DEBUG_OUTMODE_ASYNC 0x00000008UL -#define DEBUG_OUTMODE_SGXVGA 0x00000010UL - -#define DEBUG_FLAGS_USE_NONPAGED_MEM 0x00000001UL -#define DEBUG_FLAGS_NO_BUF_EXPANDSION 0x00000002UL -#define DEBUG_FLAGS_ENABLESAMPLE 0x00000004UL -#define DEBUG_FLAGS_READONLY 0x00000008UL -#define DEBUG_FLAGS_WRITEONLY 0x00000010UL - -#define DEBUG_FLAGS_TEXTSTREAM 0x80000000UL - -#define DEBUG_LEVEL_0 0x00000001UL -#define DEBUG_LEVEL_1 0x00000003UL -#define DEBUG_LEVEL_2 0x00000007UL -#define DEBUG_LEVEL_3 0x0000000FUL -#define DEBUG_LEVEL_4 0x0000001FUL -#define DEBUG_LEVEL_5 0x0000003FUL -#define DEBUG_LEVEL_6 0x0000007FUL -#define DEBUG_LEVEL_7 0x000000FFUL -#define DEBUG_LEVEL_8 0x000001FFUL -#define DEBUG_LEVEL_9 0x000003FFUL -#define DEBUG_LEVEL_10 0x000007FFUL -#define DEBUG_LEVEL_11 0x00000FFFUL - -#define DEBUG_LEVEL_SEL0 0x00000001UL -#define DEBUG_LEVEL_SEL1 0x00000002UL -#define DEBUG_LEVEL_SEL2 0x00000004UL -#define DEBUG_LEVEL_SEL3 0x00000008UL -#define DEBUG_LEVEL_SEL4 0x00000010UL -#define DEBUG_LEVEL_SEL5 0x00000020UL -#define DEBUG_LEVEL_SEL6 0x00000040UL -#define DEBUG_LEVEL_SEL7 0x00000080UL -#define DEBUG_LEVEL_SEL8 0x00000100UL -#define DEBUG_LEVEL_SEL9 0x00000200UL -#define DEBUG_LEVEL_SEL10 0x00000400UL -#define DEBUG_LEVEL_SEL11 0x00000800UL - -#define DEBUG_SERVICE_IOCTL_BASE 0x800UL -#define DEBUG_SERVICE_CREATESTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_DESTROYSTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_GETSTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x03, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITESTRING CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x04, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_READSTRING CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x05, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x06, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_READ CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x07, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETDEBUGMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETDEBUGOUTMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x09, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETDEBUGLEVEL CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0A, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0B, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_GETFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0C, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_OVERRIDEMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0D, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_DEFAULTMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0E, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_GETSERVICETABLE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0F, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITE2 CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x10, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITESTRINGCM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x11, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITECM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETMARKER CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x13, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_GETMARKER CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_ISCAPTUREFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x15, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WRITELF CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x16, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_READLF CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x17, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_WAITFOREVENT CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x18, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define DEBUG_SERVICE_SETCONNNOTIFY CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x19, METHOD_BUFFERED, FILE_ANY_ACCESS) - - -typedef enum _DBG_EVENT_ -{ - DBG_EVENT_STREAM_DATA = 1 -} DBG_EVENT; - - -typedef struct _DBG_IN_CREATESTREAM_ -{ - union - { - IMG_CHAR *pszName; - IMG_UINT64 ui64Name; - } u; - IMG_UINT32 ui32Pages; - IMG_UINT32 ui32CapMode; - IMG_UINT32 ui32OutMode; -}DBG_IN_CREATESTREAM, *PDBG_IN_CREATESTREAM; - -typedef struct _DBG_IN_FINDSTREAM_ -{ - union - { - IMG_CHAR *pszName; - IMG_UINT64 ui64Name; - }u; - IMG_BOOL bResetStream; -}DBG_IN_FINDSTREAM, *PDBG_IN_FINDSTREAM; - -typedef struct _DBG_IN_WRITESTRING_ -{ - union - { - IMG_CHAR *pszString; - IMG_UINT64 ui64String; - } u; - IMG_SID hStream; - IMG_UINT32 ui32Level; -}DBG_IN_WRITESTRING, *PDBG_IN_WRITESTRING; - -typedef struct _DBG_IN_READSTRING_ -{ - union - { - IMG_CHAR *pszString; - IMG_UINT64 ui64String; - } u; - IMG_SID hStream; - IMG_UINT32 ui32StringLen; -} DBG_IN_READSTRING, *PDBG_IN_READSTRING; - -typedef struct _DBG_IN_SETDEBUGMODE_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Mode; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32End; - IMG_UINT32 ui32SampleRate; -} DBG_IN_SETDEBUGMODE, *PDBG_IN_SETDEBUGMODE; - -typedef struct _DBG_IN_SETDEBUGOUTMODE_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Mode; -} DBG_IN_SETDEBUGOUTMODE, *PDBG_IN_SETDEBUGOUTMODE; - -typedef struct _DBG_IN_SETDEBUGLEVEL_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Level; -} DBG_IN_SETDEBUGLEVEL, *PDBG_IN_SETDEBUGLEVEL; - -typedef struct _DBG_IN_SETFRAME_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Frame; -} DBG_IN_SETFRAME, *PDBG_IN_SETFRAME; - -typedef struct _DBG_IN_WRITE_ -{ - union - { - IMG_UINT8 *pui8InBuffer; - IMG_UINT64 ui64InBuffer; - } u; - IMG_SID hStream; - IMG_UINT32 ui32Level; - IMG_UINT32 ui32TransferSize; -} DBG_IN_WRITE, *PDBG_IN_WRITE; - -typedef struct _DBG_IN_READ_ -{ - union - { - IMG_UINT8 *pui8OutBuffer; - IMG_UINT64 ui64OutBuffer; - } u; - IMG_SID hStream; - IMG_BOOL bReadInitBuffer; - IMG_UINT32 ui32OutBufferSize; -} DBG_IN_READ, *PDBG_IN_READ; - -typedef struct _DBG_IN_OVERRIDEMODE_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Mode; -} DBG_IN_OVERRIDEMODE, *PDBG_IN_OVERRIDEMODE; - -typedef struct _DBG_IN_ISCAPTUREFRAME_ -{ - IMG_SID hStream; - IMG_BOOL bCheckPreviousFrame; -} DBG_IN_ISCAPTUREFRAME, *PDBG_IN_ISCAPTUREFRAME; - -typedef struct _DBG_IN_SETMARKER_ -{ - IMG_SID hStream; - IMG_UINT32 ui32Marker; -} DBG_IN_SETMARKER, *PDBG_IN_SETMARKER; - -typedef struct _DBG_IN_WRITE_LF_ -{ - union - { - IMG_UINT8 *pui8InBuffer; - IMG_UINT64 ui64InBuffer; - } u; - IMG_UINT32 ui32Flags; - IMG_SID hStream; - IMG_UINT32 ui32Level; - IMG_UINT32 ui32BufferSize; -} DBG_IN_WRITE_LF, *PDBG_IN_WRITE_LF; - -#define WRITELF_FLAGS_RESETBUF 0x00000001UL - -typedef struct _DBG_STREAM_CONTROL_ -{ - IMG_BOOL bInitPhaseComplete; - IMG_UINT32 ui32Flags; - - IMG_UINT32 ui32CapMode; - IMG_UINT32 ui32OutMode; - IMG_UINT32 ui32DebugLevel; - IMG_UINT32 ui32DefaultMode; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32End; - IMG_UINT32 ui32Current; - IMG_UINT32 ui32SampleRate; - IMG_UINT32 ui32Reserved; -} DBG_STREAM_CONTROL, *PDBG_STREAM_CONTROL; -typedef struct _DBG_STREAM_ -{ - struct _DBG_STREAM_ *psNext; - struct _DBG_STREAM_ *psInitStream; - DBG_STREAM_CONTROL *psCtrl; - IMG_BOOL bCircularAllowed; - IMG_PVOID pvBase; - IMG_UINT32 ui32Size; - IMG_UINT32 ui32RPtr; - IMG_UINT32 ui32WPtr; - IMG_UINT32 ui32DataWritten; - IMG_UINT32 ui32Marker; - IMG_UINT32 ui32InitPhaseWOff; - - - - - IMG_CHAR szName[30]; -} DBG_STREAM,*PDBG_STREAM; - -typedef struct _DBGKM_CONNECT_NOTIFIER_ -{ - IMG_VOID (IMG_CALLCONV *pfnConnectNotifier) (IMG_VOID); -} DBGKM_CONNECT_NOTIFIER, *PDBGKM_CONNECT_NOTIFIER; - -typedef struct _DBGKM_SERVICE_TABLE_ -{ - IMG_UINT32 ui32Size; - IMG_VOID * (IMG_CALLCONV *pfnCreateStream) (IMG_CHAR * pszName,IMG_UINT32 ui32CapMode,IMG_UINT32 ui32OutMode,IMG_UINT32 ui32Flags,IMG_UINT32 ui32Pages); - IMG_VOID (IMG_CALLCONV *pfnDestroyStream) (PDBG_STREAM psStream); - IMG_VOID * (IMG_CALLCONV *pfnFindStream) (IMG_CHAR * pszName, IMG_BOOL bResetInitBuffer); - IMG_UINT32 (IMG_CALLCONV *pfnWriteString) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); - IMG_UINT32 (IMG_CALLCONV *pfnReadString) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit); - IMG_UINT32 (IMG_CALLCONV *pfnWriteBIN) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); - IMG_UINT32 (IMG_CALLCONV *pfnReadBIN) (PDBG_STREAM psStream,IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBufferSize,IMG_UINT8 *pui8OutBuf); - IMG_VOID (IMG_CALLCONV *pfnSetCaptureMode) (PDBG_STREAM psStream,IMG_UINT32 ui32CapMode,IMG_UINT32 ui32Start,IMG_UINT32 ui32Stop,IMG_UINT32 ui32SampleRate); - IMG_VOID (IMG_CALLCONV *pfnSetOutputMode) (PDBG_STREAM psStream,IMG_UINT32 ui32OutMode); - IMG_VOID (IMG_CALLCONV *pfnSetDebugLevel) (PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel); - IMG_VOID (IMG_CALLCONV *pfnSetFrame) (PDBG_STREAM psStream,IMG_UINT32 ui32Frame); - IMG_UINT32 (IMG_CALLCONV *pfnGetFrame) (PDBG_STREAM psStream); - IMG_VOID (IMG_CALLCONV *pfnOverrideMode) (PDBG_STREAM psStream,IMG_UINT32 ui32Mode); - IMG_VOID (IMG_CALLCONV *pfnDefaultMode) (PDBG_STREAM psStream); - IMG_UINT32 (IMG_CALLCONV *pfnDBGDrivWrite2) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); - IMG_UINT32 (IMG_CALLCONV *pfnWriteStringCM) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); - IMG_UINT32 (IMG_CALLCONV *pfnWriteBINCM) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); - IMG_VOID (IMG_CALLCONV *pfnSetMarker) (PDBG_STREAM psStream,IMG_UINT32 ui32Marker); - IMG_UINT32 (IMG_CALLCONV *pfnGetMarker) (PDBG_STREAM psStream); - IMG_VOID (IMG_CALLCONV *pfnStartInitPhase) (PDBG_STREAM psStream); - IMG_VOID (IMG_CALLCONV *pfnStopInitPhase) (PDBG_STREAM psStream); - IMG_BOOL (IMG_CALLCONV *pfnIsCaptureFrame) (PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame); - IMG_UINT32 (IMG_CALLCONV *pfnWriteLF) (PDBG_STREAM psStream, IMG_UINT8 *pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags); - IMG_UINT32 (IMG_CALLCONV *pfnReadLF) (PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 *pui8OutBuf); - IMG_UINT32 (IMG_CALLCONV *pfnGetStreamOffset) (PDBG_STREAM psStream); - IMG_VOID (IMG_CALLCONV *pfnSetStreamOffset) (PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset); - IMG_BOOL (IMG_CALLCONV *pfnIsLastCaptureFrame) (PDBG_STREAM psStream); - IMG_VOID (IMG_CALLCONV *pfnWaitForEvent) (DBG_EVENT eEvent); - IMG_VOID (IMG_CALLCONV *pfnSetConnectNotifier) (DBGKM_CONNECT_NOTIFIER fn_notifier); - IMG_UINT32 (IMG_CALLCONV *pfnWritePersist) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -} DBGKM_SERVICE_TABLE, *PDBGKM_SERVICE_TABLE; - - -#endif diff --git a/drivers/staging/cdv/pvr/include4/img_defs.h b/drivers/staging/cdv/pvr/include4/img_defs.h deleted file mode 100644 index 79a730f..0000000 --- a/drivers/staging/cdv/pvr/include4/img_defs.h +++ /dev/null @@ -1,121 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__IMG_DEFS_H__) -#define __IMG_DEFS_H__ - -#include "img_types.h" - -typedef enum img_tag_TriStateSwitch -{ - IMG_ON = 0x00, - IMG_OFF, - IMG_IGNORE - -} img_TriStateSwitch, * img_pTriStateSwitch; - -#define IMG_SUCCESS 0 - -#define IMG_NO_REG 1 - -#if defined (NO_INLINE_FUNCS) - #define INLINE - #define FORCE_INLINE -#else -#if defined (__cplusplus) - #define INLINE inline - #define FORCE_INLINE inline -#else -#if !defined(INLINE) - #define INLINE __inline -#endif - #define FORCE_INLINE static __inline -#endif -#endif - - -#ifndef PVR_UNREFERENCED_PARAMETER -#define PVR_UNREFERENCED_PARAMETER(param) (param) = (param) -#endif - -#ifdef __GNUC__ -#define unref__ __attribute__ ((unused)) -#else -#define unref__ -#endif - -#ifndef _TCHAR_DEFINED -#if defined(UNICODE) -typedef unsigned short TCHAR, *PTCHAR, *PTSTR; -#else -typedef char TCHAR, *PTCHAR, *PTSTR; -#endif -#define _TCHAR_DEFINED -#endif - - - #if defined(__linux__) || defined(__QNXNTO__) || defined(__METAG) - - #define IMG_CALLCONV - #define IMG_INTERNAL __attribute__((visibility("hidden"))) - #define IMG_EXPORT __attribute__((visibility("default"))) - #define IMG_IMPORT - #define IMG_RESTRICT __restrict__ - - #else - #error("define an OS") - #endif - -#ifndef IMG_ABORT - #define IMG_ABORT() abort() -#endif - -#ifndef IMG_MALLOC - #define IMG_MALLOC(A) malloc (A) -#endif - -#ifndef IMG_FREE - #define IMG_FREE(A) free (A) -#endif - -#define IMG_CONST const - -#if defined(__GNUC__) -#define IMG_FORMAT_PRINTF(x,y) __attribute__((format(printf,x,y))) -#else -#define IMG_FORMAT_PRINTF(x,y) -#endif - -#define CLEANUP_WITH_POLL IMG_FALSE -#define FORCE_CLEANUP IMG_TRUE - -#if defined (_WIN64) -#define IMG_UNDEF (~0ULL) -#else -#define IMG_UNDEF (~0UL) -#endif - -#endif diff --git a/drivers/staging/cdv/pvr/include4/img_types.h b/drivers/staging/cdv/pvr/include4/img_types.h deleted file mode 100644 index 2431786..0000000 --- a/drivers/staging/cdv/pvr/include4/img_types.h +++ /dev/null @@ -1,151 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __IMG_TYPES_H__ -#define __IMG_TYPES_H__ - -#if !defined(IMG_ADDRSPACE_CPUVADDR_BITS) -#define IMG_ADDRSPACE_CPUVADDR_BITS 32 -#endif - -#if !defined(IMG_ADDRSPACE_PHYSADDR_BITS) -#define IMG_ADDRSPACE_PHYSADDR_BITS 32 -#endif - -typedef unsigned int IMG_UINT, *IMG_PUINT; -typedef signed int IMG_INT, *IMG_PINT; - -typedef unsigned char IMG_UINT8, *IMG_PUINT8; -typedef unsigned char IMG_BYTE, *IMG_PBYTE; -typedef signed char IMG_INT8, *IMG_PINT8; -typedef char IMG_CHAR, *IMG_PCHAR; - -typedef unsigned short IMG_UINT16, *IMG_PUINT16; -typedef signed short IMG_INT16, *IMG_PINT16; -#if !defined(IMG_UINT32_IS_ULONG) -typedef unsigned int IMG_UINT32, *IMG_PUINT32; -typedef signed int IMG_INT32, *IMG_PINT32; -#else -typedef unsigned long IMG_UINT32, *IMG_PUINT32; -typedef signed long IMG_INT32, *IMG_PINT32; -#endif -#if !defined(IMG_UINT32_MAX) - #define IMG_UINT32_MAX 0xFFFFFFFFUL -#endif - -#if defined(USE_CODE) - -typedef unsigned __int64 IMG_UINT64, *IMG_PUINT64; -typedef __int64 IMG_INT64, *IMG_PINT64; - -#else - #if ((defined(LINUX) || defined(__METAG)) || defined(__QNXNTO__)) - typedef unsigned long long IMG_UINT64, *IMG_PUINT64; - typedef long long IMG_INT64, *IMG_PINT64; - #else - #error("define an OS") - #endif -#endif - -#if !(defined(LINUX) && defined (__KERNEL__)) -typedef float IMG_FLOAT, *IMG_PFLOAT; -typedef double IMG_DOUBLE, *IMG_PDOUBLE; -#endif - -typedef enum tag_img_bool -{ - IMG_FALSE = 0, - IMG_TRUE = 1, - IMG_FORCE_ALIGN = 0x7FFFFFFF -} IMG_BOOL, *IMG_PBOOL; - -typedef void IMG_VOID, *IMG_PVOID; - -typedef IMG_INT32 IMG_RESULT; - -#if defined(_WIN64) - typedef unsigned __int64 IMG_UINTPTR_T; - typedef signed __int64 IMG_PTRDIFF_T; - typedef IMG_UINT64 IMG_SIZE_T; -#else - typedef unsigned int IMG_UINTPTR_T; - typedef IMG_UINT32 IMG_SIZE_T; -#endif - -typedef IMG_PVOID IMG_HANDLE; - -typedef void** IMG_HVOID, * IMG_PHVOID; - -#define IMG_NULL 0 - -typedef IMG_UINT32 IMG_SID; - -typedef IMG_UINT32 IMG_EVENTSID; - -#if defined(SUPPORT_SID_INTERFACE) - typedef IMG_SID IMG_S_HANDLE; -#else - typedef IMG_HANDLE IMG_S_HANDLE; -#endif - -typedef IMG_PVOID IMG_CPU_VIRTADDR; - -typedef struct _IMG_DEV_VIRTADDR -{ - - IMG_UINT32 uiAddr; -#define IMG_CAST_TO_DEVVADDR_UINT(var) (IMG_UINT32)(var) - -} IMG_DEV_VIRTADDR; - -typedef IMG_UINT32 IMG_DEVMEM_SIZE_T; - -typedef struct _IMG_CPU_PHYADDR -{ - - IMG_UINTPTR_T uiAddr; -} IMG_CPU_PHYADDR; - -typedef struct _IMG_DEV_PHYADDR -{ -#if IMG_ADDRSPACE_PHYSADDR_BITS == 32 - - IMG_UINTPTR_T uiAddr; -#else - IMG_UINT32 uiAddr; - IMG_UINT32 uiHighAddr; -#endif -} IMG_DEV_PHYADDR; - -typedef struct _IMG_SYS_PHYADDR -{ - - IMG_UINTPTR_T uiAddr; -} IMG_SYS_PHYADDR; - -#include "img_defs.h" - -#endif diff --git a/drivers/staging/cdv/pvr/include4/pdumpdefs.h b/drivers/staging/cdv/pvr/include4/pdumpdefs.h deleted file mode 100644 index 193b464..0000000 --- a/drivers/staging/cdv/pvr/include4/pdumpdefs.h +++ /dev/null @@ -1,108 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__PDUMPDEFS_H__) -#define __PDUMPDEFS_H__ - -typedef enum _PDUMP_PIXEL_FORMAT_ -{ - PVRSRV_PDUMP_PIXEL_FORMAT_UNSUPPORTED = 0, - PVRSRV_PDUMP_PIXEL_FORMAT_RGB8 = 1, - PVRSRV_PDUMP_PIXEL_FORMAT_RGB332 = 2, - PVRSRV_PDUMP_PIXEL_FORMAT_KRGB555 = 3, - PVRSRV_PDUMP_PIXEL_FORMAT_RGB565 = 4, - PVRSRV_PDUMP_PIXEL_FORMAT_ARGB4444 = 5, - PVRSRV_PDUMP_PIXEL_FORMAT_ARGB1555 = 6, - PVRSRV_PDUMP_PIXEL_FORMAT_RGB888 = 7, - PVRSRV_PDUMP_PIXEL_FORMAT_ARGB8888 = 8, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV8 = 9, - PVRSRV_PDUMP_PIXEL_FORMAT_AYUV4444 = 10, - PVRSRV_PDUMP_PIXEL_FORMAT_VY0UY1_8888 = 11, - PVRSRV_PDUMP_PIXEL_FORMAT_UY0VY1_8888 = 12, - PVRSRV_PDUMP_PIXEL_FORMAT_Y0UY1V_8888 = 13, - PVRSRV_PDUMP_PIXEL_FORMAT_Y0VY1U_8888 = 14, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV888 = 15, - PVRSRV_PDUMP_PIXEL_FORMAT_UYVY10101010 = 16, - PVRSRV_PDUMP_PIXEL_FORMAT_VYAUYA8888 = 17, - PVRSRV_PDUMP_PIXEL_FORMAT_AYUV8888 = 18, - PVRSRV_PDUMP_PIXEL_FORMAT_AYUV2101010 = 19, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV101010 = 20, - PVRSRV_PDUMP_PIXEL_FORMAT_PL12Y8 = 21, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV_IMC2 = 22, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV_YV12 = 23, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV_PL8 = 24, - PVRSRV_PDUMP_PIXEL_FORMAT_YUV_PL12 = 25, - PVRSRV_PDUMP_PIXEL_FORMAT_422PL12YUV8 = 26, - PVRSRV_PDUMP_PIXEL_FORMAT_420PL12YUV8 = 27, - PVRSRV_PDUMP_PIXEL_FORMAT_PL12Y10 = 28, - PVRSRV_PDUMP_PIXEL_FORMAT_422PL12YUV10 = 29, - PVRSRV_PDUMP_PIXEL_FORMAT_420PL12YUV10 = 30, - PVRSRV_PDUMP_PIXEL_FORMAT_ABGR8888 = 31, - PVRSRV_PDUMP_PIXEL_FORMAT_BGRA8888 = 32, - PVRSRV_PDUMP_PIXEL_FORMAT_ARGB8332 = 33, - PVRSRV_PDUMP_PIXEL_FORMAT_RGB555 = 34, - PVRSRV_PDUMP_PIXEL_FORMAT_F16 = 35, - PVRSRV_PDUMP_PIXEL_FORMAT_F32 = 36, - PVRSRV_PDUMP_PIXEL_FORMAT_L16 = 37, - PVRSRV_PDUMP_PIXEL_FORMAT_L32 = 38, - PVRSRV_PDUMP_PIXEL_FORMAT_RGBA8888 = 39, - PVRSRV_PDUMP_PIXEL_FORMAT_ABGR4444 = 40, - PVRSRV_PDUMP_PIXEL_FORMAT_RGBA4444 = 41, - PVRSRV_PDUMP_PIXEL_FORMAT_BGRA4444 = 42, - PVRSRV_PDUMP_PIXEL_FORMAT_ABGR1555 = 43, - PVRSRV_PDUMP_PIXEL_FORMAT_RGBA5551 = 44, - PVRSRV_PDUMP_PIXEL_FORMAT_BGRA5551 = 45, - PVRSRV_PDUMP_PIXEL_FORMAT_BGR565 = 46, - PVRSRV_PDUMP_PIXEL_FORMAT_A8 = 47, - - PVRSRV_PDUMP_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff - -} PDUMP_PIXEL_FORMAT; - -typedef enum _PDUMP_MEM_FORMAT_ -{ - PVRSRV_PDUMP_MEM_FORMAT_STRIDE = 0, - PVRSRV_PDUMP_MEM_FORMAT_RESERVED = 1, - PVRSRV_PDUMP_MEM_FORMAT_TILED = 8, - PVRSRV_PDUMP_MEM_FORMAT_TWIDDLED = 9, - PVRSRV_PDUMP_MEM_FORMAT_HYBRID = 10, - - PVRSRV_PDUMP_MEM_FORMAT_FORCE_I32 = 0x7fffffff -} PDUMP_MEM_FORMAT; - -typedef enum _PDUMP_POLL_OPERATOR -{ - PDUMP_POLL_OPERATOR_EQUAL = 0, - PDUMP_POLL_OPERATOR_LESS = 1, - PDUMP_POLL_OPERATOR_LESSEQUAL = 2, - PDUMP_POLL_OPERATOR_GREATER = 3, - PDUMP_POLL_OPERATOR_GREATEREQUAL = 4, - PDUMP_POLL_OPERATOR_NOTEQUAL = 5, -} PDUMP_POLL_OPERATOR; - - -#endif - diff --git a/drivers/staging/cdv/pvr/include4/pvr_debug.h b/drivers/staging/cdv/pvr/include4/pvr_debug.h deleted file mode 100644 index a9d082e..0000000 --- a/drivers/staging/cdv/pvr/include4/pvr_debug.h +++ /dev/null @@ -1,148 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * -******************************************************************************/ - -#ifndef __PVR_DEBUG_H__ -#define __PVR_DEBUG_H__ - - -#include "img_types.h" - - -#if defined (__cplusplus) -extern "C" { -#endif - -#define PVR_MAX_DEBUG_MESSAGE_LEN (512) - -/* These are privately used by pvr_debug, use the PVR_DBG_ defines instead */ -#define DBGPRIV_FATAL 0x01UL -#define DBGPRIV_ERROR 0x02UL -#define DBGPRIV_WARNING 0x04UL -#define DBGPRIV_MESSAGE 0x08UL -#define DBGPRIV_VERBOSE 0x10UL -#define DBGPRIV_CALLTRACE 0x20UL -#define DBGPRIV_ALLOC 0x40UL - -#define DBGPRIV_DBGDRV_MESSAGE 0x1000UL - -#define DBGPRIV_ALLLEVELS (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING | DBGPRIV_MESSAGE | DBGPRIV_VERBOSE) - - - -#define PVR_DBG_FATAL DBGPRIV_FATAL,__FILE__, __LINE__ -#define PVR_DBG_ERROR DBGPRIV_ERROR,__FILE__, __LINE__ -#define PVR_DBG_WARNING DBGPRIV_WARNING,__FILE__, __LINE__ -#define PVR_DBG_MESSAGE DBGPRIV_MESSAGE,__FILE__, __LINE__ -#define PVR_DBG_VERBOSE DBGPRIV_VERBOSE,__FILE__, __LINE__ -#define PVR_DBG_CALLTRACE DBGPRIV_CALLTRACE,__FILE__, __LINE__ -#define PVR_DBG_ALLOC DBGPRIV_ALLOC,__FILE__, __LINE__ - -/* - * Debug driver debugging - */ -#define PVR_DBGDRIV_MESSAGE DBGPRIV_DBGDRV_MESSAGE, "", 0 - -#if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) -#define PVRSRV_NEED_PVR_ASSERT -#endif - -#if defined(PVRSRV_NEED_PVR_ASSERT) && !defined(PVRSRV_NEED_PVR_DPF) -#define PVRSRV_NEED_PVR_DPF -#endif - -#if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG) || defined(TIMING)) -#define PVRSRV_NEED_PVR_TRACE -#endif - - -/* PVR_ASSERT() and PVR_DBG_BREAK handling */ - -#if defined(PVRSRV_NEED_PVR_ASSERT) - - #define PVR_ASSERT(EXPR) if (!(EXPR)) PVRSRVDebugAssertFail(__FILE__, __LINE__); - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugAssertFail(const IMG_CHAR *pszFile, - IMG_UINT32 ui32Line); - - #if defined(PVR_DBG_BREAK_ASSERT_FAIL) - #define PVR_DBG_BREAK PVRSRVDebugAssertFail("PVR_DBG_BREAK", 0) - #else - #define PVR_DBG_BREAK - #endif - -#else /* defined(PVRSRV_NEED_PVR_ASSERT) */ - - #define PVR_ASSERT(EXPR) - #define PVR_DBG_BREAK - -#endif /* defined(PVRSRV_NEED_PVR_ASSERT) */ - - -/* PVR_DPF() handling */ - -#if defined(PVRSRV_NEED_PVR_DPF) - - #define PVR_DPF(X) PVRSRVDebugPrintf X - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, - const IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line, - const IMG_CHAR *pszFormat, - ...) IMG_FORMAT_PRINTF(4, 5); - -#else /* defined(PVRSRV_NEED_PVR_DPF) */ - - #define PVR_DPF(X) - -#endif /* defined(PVRSRV_NEED_PVR_DPF) */ - - -/* PVR_TRACE() handling */ - -#if defined(PVRSRV_NEED_PVR_TRACE) - - #define PVR_TRACE(X) PVRSRVTrace X - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTrace(const IMG_CHAR* pszFormat, ... ) - IMG_FORMAT_PRINTF(1, 2); - -#else /* defined(PVRSRV_NEED_PVR_TRACE) */ - - #define PVR_TRACE(X) - -#endif /* defined(PVRSRV_NEED_PVR_TRACE) */ - - -#if defined (__cplusplus) -} -#endif - -#endif /* __PVR_DEBUG_H__ */ - -/****************************************************************************** - End of file (pvr_debug.h) -******************************************************************************/ - diff --git a/drivers/staging/cdv/pvr/include4/pvrmodule.h b/drivers/staging/cdv/pvr/include4/pvrmodule.h deleted file mode 100644 index 3dd5845..0000000 --- a/drivers/staging/cdv/pvr/include4/pvrmodule.h +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _PVRMODULE_H_ -#define _PVRMODULE_H_ -MODULE_AUTHOR("Imagination Technologies Ltd. "); -MODULE_LICENSE("GPL"); -#endif diff --git a/drivers/staging/cdv/pvr/include4/pvrversion.h b/drivers/staging/cdv/pvr/include4/pvrversion.h deleted file mode 100644 index c92de8f..0000000 --- a/drivers/staging/cdv/pvr/include4/pvrversion.h +++ /dev/null @@ -1,61 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - - - - - - - - - - -#ifndef _PVRVERSION_H_ -#define _PVRVERSION_H_ - -#define PVR_STR(X) #X -#define PVR_STR2(X) PVR_STR(X) - -#define PVRVERSION_MAJ 1 -#define PVRVERSION_MIN 7 -#define PVRVERSION_BRANCH 17 - -#define PVRVERSION_FAMILY "sgxddk" -#define PVRVERSION_BRANCHNAME "1.7" -#define PVRVERSION_BUILD 788837 -#define PVRVERSION_BSCONTROL "pc_i686_linux_XOrg_family" - -#define PVRVERSION_STRING "pc_i686_linux_XOrg_family sgxddk 17 1.7@" PVR_STR2(PVRVERSION_BUILD) -#define PVRVERSION_STRING_SHORT "1.7@" PVR_STR2(PVRVERSION_BUILD) - -#define COPYRIGHT_TXT "Copyright (c) Imagination Technologies Ltd. All Rights Reserved." - -#define PVRVERSION_BUILD_HI 78 -#define PVRVERSION_BUILD_LO 8837 -#define PVRVERSION_STRING_NUMERIC PVR_STR2(PVRVERSION_MAJ) "." PVR_STR2(PVRVERSION_MIN) "." PVR_STR2(PVRVERSION_BUILD_HI) "." PVR_STR2(PVRVERSION_BUILD_LO) - -#endif diff --git a/drivers/staging/cdv/pvr/include4/services.h b/drivers/staging/cdv/pvr/include4/services.h deleted file mode 100644 index 1d786bf..0000000 --- a/drivers/staging/cdv/pvr/include4/services.h +++ /dev/null @@ -1,1235 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SERVICES_H__ -#define __SERVICES_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "img_defs.h" -#include "servicesext.h" -#include "pdumpdefs.h" - - -#define PVRSRV_4K_PAGE_SIZE 4096UL - -#define PVRSRV_MAX_CMD_SIZE 1024 - -#define PVRSRV_MAX_DEVICES 16 - -#define EVENTOBJNAME_MAXLENGTH (50) - -#define PVRSRV_MEM_READ (1U<<0) -#define PVRSRV_MEM_WRITE (1U<<1) -#define PVRSRV_MEM_CACHE_CONSISTENT (1U<<2) -#define PVRSRV_MEM_NO_SYNCOBJ (1U<<3) -#define PVRSRV_MEM_INTERLEAVED (1U<<4) -#define PVRSRV_MEM_DUMMY (1U<<5) -#define PVRSRV_MEM_EDM_PROTECT (1U<<6) -#define PVRSRV_MEM_ZERO (1U<<7) -#define PVRSRV_MEM_USER_SUPPLIED_DEVVADDR (1U<<8) -#define PVRSRV_MEM_RAM_BACKED_ALLOCATION (1U<<9) -#define PVRSRV_MEM_NO_RESMAN (1U<<10) -#define PVRSRV_MEM_EXPORTED (1U<<11) - - -#define PVRSRV_HAP_CACHED (1U<<12) -#define PVRSRV_HAP_UNCACHED (1U<<13) -#define PVRSRV_HAP_WRITECOMBINE (1U<<14) -#define PVRSRV_HAP_CACHETYPE_MASK (PVRSRV_HAP_CACHED|PVRSRV_HAP_UNCACHED|PVRSRV_HAP_WRITECOMBINE) -#define PVRSRV_HAP_KERNEL_ONLY (1U<<15) -#define PVRSRV_HAP_SINGLE_PROCESS (1U<<16) -#define PVRSRV_HAP_MULTI_PROCESS (1U<<17) -#define PVRSRV_HAP_FROM_EXISTING_PROCESS (1U<<18) -#define PVRSRV_HAP_NO_CPU_VIRTUAL (1U<<19) -#define PVRSRV_HAP_MAPTYPE_MASK (PVRSRV_HAP_KERNEL_ONLY \ - |PVRSRV_HAP_SINGLE_PROCESS \ - |PVRSRV_HAP_MULTI_PROCESS \ - |PVRSRV_HAP_FROM_EXISTING_PROCESS \ - |PVRSRV_HAP_NO_CPU_VIRTUAL) - -#define PVRSRV_MEM_CACHED PVRSRV_HAP_CACHED -#define PVRSRV_MEM_UNCACHED PVRSRV_HAP_UNCACHED -#define PVRSRV_MEM_WRITECOMBINE PVRSRV_HAP_WRITECOMBINE - -#define PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT (24) - -#define PVRSRV_MAP_NOUSERVIRTUAL (1UL<<27) -#define PVRSRV_MEM_XPROC (1U<<28) - -#define PVRSRV_NO_CONTEXT_LOSS 0 -#define PVRSRV_SEVERE_LOSS_OF_CONTEXT 1 -#define PVRSRV_PRE_STATE_CHANGE_MASK 0x80 - - -#define PVRSRV_DEFAULT_DEV_COOKIE (1) - - -#define PVRSRV_MISC_INFO_TIMER_PRESENT (1U<<0) -#define PVRSRV_MISC_INFO_CLOCKGATE_PRESENT (1U<<1) -#define PVRSRV_MISC_INFO_MEMSTATS_PRESENT (1U<<2) -#define PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT (1U<<3) -#define PVRSRV_MISC_INFO_DDKVERSION_PRESENT (1U<<4) -#define PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT (1U<<5) -#define PVRSRV_MISC_INFO_FREEMEM_PRESENT (1U<<6) - -#define PVRSRV_MISC_INFO_RESET_PRESENT (1U<<31) - -#define PVRSRV_PDUMP_MAX_FILENAME_SIZE 20 -#define PVRSRV_PDUMP_MAX_COMMENT_SIZE 200 - - -#define PVRSRV_CHANGEDEVMEM_ATTRIBS_CACHECOHERENT 0x00000001 - -#define PVRSRV_MAPEXTMEMORY_FLAGS_ALTERNATEVA 0x00000001 -#define PVRSRV_MAPEXTMEMORY_FLAGS_PHYSCONTIG 0x00000002 - -#define PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC 0x00000001 -#define PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC 0x00000002 - -#define SRV_FLAGS_PERSIST 0x1 -#define SRV_FLAGS_PDUMP_ACTIVE 0x2 - -#define PVRSRV_PDUMP_FLAGS_CONTINUOUS 0x1 - - -typedef enum _PVRSRV_DEVICE_TYPE_ -{ - PVRSRV_DEVICE_TYPE_UNKNOWN = 0 , - PVRSRV_DEVICE_TYPE_MBX1 = 1 , - PVRSRV_DEVICE_TYPE_MBX1_LITE = 2 , - - PVRSRV_DEVICE_TYPE_M24VA = 3, - PVRSRV_DEVICE_TYPE_MVDA2 = 4, - PVRSRV_DEVICE_TYPE_MVED1 = 5, - PVRSRV_DEVICE_TYPE_MSVDX = 6, - - PVRSRV_DEVICE_TYPE_SGX = 7, - - PVRSRV_DEVICE_TYPE_VGX = 8, - - PVRSRV_DEVICE_TYPE_TOPAZ = 9, - - PVRSRV_DEVICE_TYPE_EXT = 10, - - PVRSRV_DEVICE_TYPE_LAST = 10, - - PVRSRV_DEVICE_TYPE_FORCE_I32 = 0x7fffffff - -} PVRSRV_DEVICE_TYPE; - -#define HEAP_ID( _dev_ , _dev_heap_idx_ ) ( ((_dev_)<<24) | ((_dev_heap_idx_)&((1<<24)-1)) ) -#define HEAP_IDX( _heap_id_ ) ( (_heap_id_)&((1<<24) - 1 ) ) -#define HEAP_DEV( _heap_id_ ) ( (_heap_id_)>>24 ) - -#define PVRSRV_UNDEFINED_HEAP_ID (~0LU) - -typedef enum -{ - IMG_EGL = 0x00000001, - IMG_OPENGLES1 = 0x00000002, - IMG_OPENGLES2 = 0x00000003, - IMG_D3DM = 0x00000004, - IMG_SRV_UM = 0x00000005, - IMG_OPENVG = 0x00000006, - IMG_SRVCLIENT = 0x00000007, - IMG_VISTAKMD = 0x00000008, - IMG_VISTA3DNODE = 0x00000009, - IMG_VISTAMVIDEONODE = 0x0000000A, - IMG_VISTAVPBNODE = 0x0000000B, - IMG_OPENGL = 0x0000000C, - IMG_D3D = 0x0000000D, -#if defined(SUPPORT_GRAPHICS_HAL) || defined(SUPPORT_COMPOSER_HAL) - IMG_ANDROID_HAL = 0x0000000E, -#endif -#if defined(SUPPORT_OPENCL) - IMG_OPENCL = 0x0000000F, -#endif - -} IMG_MODULE_ID; - - -#define APPHINT_MAX_STRING_SIZE 256 - -typedef enum -{ - IMG_STRING_TYPE = 1, - IMG_FLOAT_TYPE , - IMG_UINT_TYPE , - IMG_INT_TYPE , - IMG_FLAG_TYPE -}IMG_DATA_TYPE; - - -typedef struct _PVRSRV_DEV_DATA_ *PPVRSRV_DEV_DATA; - -typedef struct _PVRSRV_DEVICE_IDENTIFIER_ -{ - PVRSRV_DEVICE_TYPE eDeviceType; - PVRSRV_DEVICE_CLASS eDeviceClass; - IMG_UINT32 ui32DeviceIndex; - IMG_CHAR *pszPDumpDevName; - IMG_CHAR *pszPDumpRegName; - -} PVRSRV_DEVICE_IDENTIFIER; - - -typedef struct _PVRSRV_CLIENT_DEV_DATA_ -{ - IMG_UINT32 ui32NumDevices; - PVRSRV_DEVICE_IDENTIFIER asDevID[PVRSRV_MAX_DEVICES]; - PVRSRV_ERROR (*apfnDevConnect[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA); - PVRSRV_ERROR (*apfnDumpTrace[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA); - -} PVRSRV_CLIENT_DEV_DATA; - - -typedef struct _PVRSRV_CONNECTION_ -{ - IMG_HANDLE hServices; - IMG_UINT32 ui32ProcessID; - PVRSRV_CLIENT_DEV_DATA sClientDevData; - IMG_UINT32 ui32SrvFlags; -}PVRSRV_CONNECTION; - - -typedef struct _PVRSRV_DEV_DATA_ -{ - IMG_CONST PVRSRV_CONNECTION *psConnection; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -} PVRSRV_DEV_DATA; - -typedef struct _PVRSRV_MEMUPDATE_ -{ - IMG_UINT32 ui32UpdateAddr; - IMG_UINT32 ui32UpdateVal; -} PVRSRV_MEMUPDATE; - -typedef struct _PVRSRV_HWREG_ -{ - IMG_UINT32 ui32RegAddr; - IMG_UINT32 ui32RegVal; -} PVRSRV_HWREG; - -typedef struct _PVRSRV_MEMBLK_ -{ - IMG_DEV_VIRTADDR sDevVirtAddr; - IMG_HANDLE hOSMemHandle; - IMG_HANDLE hOSWrapMem; - IMG_HANDLE hBuffer; - IMG_HANDLE hResItem; - IMG_SYS_PHYADDR *psIntSysPAddr; - -} PVRSRV_MEMBLK; - -typedef struct _PVRSRV_KERNEL_MEM_INFO_ *PPVRSRV_KERNEL_MEM_INFO; - -typedef struct _PVRSRV_CLIENT_MEM_INFO_ -{ - - IMG_PVOID pvLinAddr; - - - IMG_PVOID pvLinAddrKM; - - - IMG_DEV_VIRTADDR sDevVAddr; - - - - - - - IMG_CPU_PHYADDR sCpuPAddr; - - - IMG_UINT32 ui32Flags; - - - - - IMG_UINT32 ui32ClientFlags; - - - IMG_SIZE_T uAllocSize; - - - - struct _PVRSRV_CLIENT_SYNC_INFO_ *psClientSyncInfo; - -#if defined (SUPPORT_SID_INTERFACE) - - IMG_SID hMappingInfo; - - - IMG_SID hKernelMemInfo; - - - IMG_SID hResItem; -#else - - IMG_HANDLE hMappingInfo; - - - IMG_HANDLE hKernelMemInfo; - - - IMG_HANDLE hResItem; -#endif - -#if defined(SUPPORT_MEMINFO_IDS) - #if !defined(USE_CODE) - - IMG_UINT64 ui64Stamp; - #else - IMG_UINT32 dummy1; - IMG_UINT32 dummy2; - #endif -#endif - - - - - struct _PVRSRV_CLIENT_MEM_INFO_ *psNext; - -} PVRSRV_CLIENT_MEM_INFO, *PPVRSRV_CLIENT_MEM_INFO; - - -#define PVRSRV_MAX_CLIENT_HEAPS (32) -typedef struct _PVRSRV_HEAP_INFO_ -{ - IMG_UINT32 ui32HeapID; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeap; -#else - IMG_HANDLE hDevMemHeap; -#endif - IMG_DEV_VIRTADDR sDevVAddrBase; - IMG_UINT32 ui32HeapByteSize; - IMG_UINT32 ui32Attribs; - IMG_UINT32 ui32XTileStride; -}PVRSRV_HEAP_INFO; - - - - -typedef struct _PVRSRV_EVENTOBJECT_ -{ - - IMG_CHAR szName[EVENTOBJNAME_MAXLENGTH]; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hOSEventKM; -#else - IMG_HANDLE hOSEventKM; -#endif - -} PVRSRV_EVENTOBJECT; - -typedef enum -{ - PVRSRV_MISC_INFO_CPUCACHEOP_NONE = 0, - PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN, - PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH -} PVRSRV_MISC_INFO_CPUCACHEOP_TYPE; - -typedef struct _PVRSRV_MISC_INFO_ -{ - IMG_UINT32 ui32StateRequest; - IMG_UINT32 ui32StatePresent; - - - IMG_VOID *pvSOCTimerRegisterKM; - IMG_VOID *pvSOCTimerRegisterUM; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSOCTimerRegisterOSMemHandle; - IMG_SID hSOCTimerRegisterMappingInfo; -#else - IMG_HANDLE hSOCTimerRegisterOSMemHandle; - IMG_HANDLE hSOCTimerRegisterMappingInfo; -#endif - - - IMG_VOID *pvSOCClockGateRegs; - IMG_UINT32 ui32SOCClockGateRegsSize; - - - IMG_CHAR *pszMemoryStr; - IMG_UINT32 ui32MemoryStrLen; - - - PVRSRV_EVENTOBJECT sGlobalEventObject; -#if defined (SUPPORT_SID_INTERFACE) - IMG_EVENTSID hOSGlobalEvent; -#else - IMG_HANDLE hOSGlobalEvent; -#endif - - - IMG_UINT32 aui32DDKVersion[4]; - - - struct - { - - IMG_BOOL bDeferOp; - - - PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType; - - -#if !defined (SUPPORT_SID_INTERFACE) - union - { - - PVRSRV_CLIENT_MEM_INFO *psClientMemInfo; - - - struct _PVRSRV_KERNEL_MEM_INFO_ *psKernelMemInfo; - } u; -#endif - - - IMG_VOID *pvBaseVAddr; - - - IMG_UINT32 ui32Length; - } sCacheOpCtl; -} PVRSRV_MISC_INFO; - -typedef struct _PVRSRV_SYNC_TOKEN_ -{ - - - struct - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif - IMG_UINT32 ui32ReadOpsPendingSnapshot; - IMG_UINT32 ui32WriteOpsPendingSnapshot; - } sPrivate; -} PVRSRV_SYNC_TOKEN; - - -typedef enum _PVRSRV_CLIENT_EVENT_ -{ - PVRSRV_CLIENT_EVENT_HWTIMEOUT = 0, -} PVRSRV_CLIENT_EVENT; - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVClientEvent(IMG_CONST PVRSRV_CLIENT_EVENT eEvent, - PVRSRV_DEV_DATA *psDevData, - IMG_PVOID pvData); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVConnect(PVRSRV_CONNECTION **ppsConnection, IMG_UINT32 ui32SrvFlags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDisconnect(IMG_CONST PVRSRV_CONNECTION *psConnection); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevices(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_UINT32 *puiNumDevices, - PVRSRV_DEVICE_IDENTIFIER *puiDevIDs); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceData(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_UINT32 uiDevIndex, - PVRSRV_DEV_DATA *psDevData, - PVRSRV_DEVICE_TYPE eDeviceType); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVReleaseMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo); - -#if 1 -IMG_IMPORT -IMG_UINT32 ReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset); - -IMG_IMPORT -IMG_VOID WriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value); - -IMG_IMPORT IMG_VOID WriteHWRegs(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Count, PVRSRV_HWREG *psHWRegs); -#endif - -IMG_IMPORT -PVRSRV_ERROR PVRSRVPollForValue ( const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hOSEvent, -#else - IMG_HANDLE hOSEvent, -#endif - volatile IMG_UINT32 *pui32LinMemAddr, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Waitus, - IMG_UINT32 ui32Tries); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phDevMemContext, -#else - IMG_HANDLE *phDevMemContext, -#endif - IMG_UINT32 *pui32SharedHeapCount, - PVRSRV_HEAP_INFO *psHeapInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext); -#else - IMG_HANDLE hDevMemContext); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext, -#else - IMG_HANDLE hDevMemContext, -#endif - IMG_UINT32 *pui32SharedHeapCount, - PVRSRV_HEAP_INFO *psHeapInfo); - -#if defined(PVRSRV_LOG_MEMORY_ALLOCS) - #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \ - (PVR_TRACE(("PVRSRVAllocDeviceMem(" #psDevData "," #hDevMemHeap "," #ui32Attribs "," #ui32Size "," #ui32Alignment "," #ppsMemInfo ")" \ - ": " logStr " (size = 0x%lx)", ui32Size)), \ - PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo)) -#else - #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \ - PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo) -#endif - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeap, -#else - IMG_HANDLE hDevMemHeap, -#endif - IMG_UINT32 ui32Attribs, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_CLIENT_MEM_INFO **ppsMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phMemInfo); -#else - IMG_HANDLE *phMemInfo); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeap, -#else - IMG_HANDLE hDevMemHeap, -#endif - IMG_DEV_VIRTADDR *psDevVAddr, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_CLIENT_MEM_INFO **ppsMemInfo); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo, - IMG_SID hDstDevMemHeap, -#else - IMG_HANDLE hKernelMemInfo, - IMG_HANDLE hDstDevMemHeap, -#endif - PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, - IMG_SYS_PHYADDR *psSysPAddr, - IMG_UINT32 ui32Flags); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Flags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext, -#else - IMG_HANDLE hDevMemContext, -#endif - IMG_SIZE_T ui32ByteSize, - IMG_SIZE_T ui32PageOffset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psSysPAddr, - IMG_VOID *pvLinAddr, - IMG_UINT32 ui32Flags, - PVRSRV_CLIENT_MEM_INFO **ppsMemInfo); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo); - -PVRSRV_ERROR PVRSRVChangeDeviceMemoryAttributes(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psClientMemInfo, - IMG_UINT32 ui32Attribs); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext, - IMG_SID hDeviceClassBuffer, -#else - IMG_HANDLE hDevMemContext, - IMG_HANDLE hDeviceClassBuffer, -#endif - PVRSRV_CLIENT_MEM_INFO **ppsMemInfo); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_SYS_PHYADDR sSysPhysAddr, - IMG_UINT32 uiSizeInBytes, - IMG_PVOID *ppvUserAddr, - IMG_UINT32 *puiActualSize, - IMG_PVOID *ppvProcess); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_PVOID pvUserAddr, - IMG_PVOID pvProcess); - -#if defined(LINUX) -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem2(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, - IMG_INT *iFd); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory2(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_INT iFd, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDstDevMemHeap, -#else - IMG_HANDLE hDstDevMemHeap, -#endif - PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo); -#endif - -typedef enum _PVRSRV_SYNCVAL_MODE_ -{ - PVRSRV_SYNCVAL_READ = IMG_TRUE, - PVRSRV_SYNCVAL_WRITE = IMG_FALSE, - -} PVRSRV_SYNCVAL_MODE, *PPVRSRV_SYNCVAL_MODE; - -typedef IMG_UINT32 PVRSRV_SYNCVAL; - -IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired); - -IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode); - -IMG_IMPORT IMG_BOOL PVRSRVTestOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired); - -IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode); - -IMG_IMPORT IMG_BOOL PVRSRVTestOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired); - -IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode); - -IMG_IMPORT PVRSRV_SYNCVAL PVRSRVGetPendingOpSyncVal(PPVRSRV_CLIENT_MEM_INFO psMemInfo, - PVRSRV_SYNCVAL_MODE eMode); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDeviceClass(IMG_CONST PVRSRV_CONNECTION *psConnection, - PVRSRV_DEVICE_CLASS DeviceClass, - IMG_UINT32 *pui32DevCount, - IMG_UINT32 *pui32DevID); - -IMG_IMPORT -IMG_HANDLE IMG_CALLCONV PVRSRVOpenDCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_UINT32 ui32DeviceID); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseDCDevice(IMG_CONST PVRSRV_CONNECTION *psConnection, IMG_HANDLE hDevice); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCFormats (IMG_HANDLE hDevice, - IMG_UINT32 *pui32Count, - DISPLAY_FORMAT *psFormat); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCDims (IMG_HANDLE hDevice, - IMG_UINT32 *pui32Count, - DISPLAY_FORMAT *psFormat, - DISPLAY_DIMS *psDims); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCSystemBuffer(IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phBuffer); -#else - IMG_HANDLE *phBuffer); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCInfo(IMG_HANDLE hDevice, - DISPLAY_INFO* psDisplayInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDCSwapChain (IMG_HANDLE hDevice, - IMG_UINT32 ui32Flags, - DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib, - DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib, - IMG_UINT32 ui32BufferCount, - IMG_UINT32 ui32OEMFlags, - IMG_UINT32 *pui32SwapChainID, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phSwapChain); -#else - IMG_HANDLE *phSwapChain); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDCSwapChain (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain); -#else - IMG_HANDLE hSwapChain); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstRect (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain, -#else - IMG_HANDLE hSwapChain, -#endif - IMG_RECT *psDstRect); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcRect (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain, -#else - IMG_HANDLE hSwapChain, -#endif - IMG_RECT *psSrcRect); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstColourKey (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain, -#else - IMG_HANDLE hSwapChain, -#endif - IMG_UINT32 ui32CKColour); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcColourKey (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain, -#else - IMG_HANDLE hSwapChain, -#endif - IMG_UINT32 ui32CKColour); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers(IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain, - IMG_SID *phBuffer); -#else - IMG_HANDLE hSwapChain, - IMG_HANDLE *phBuffer); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hBuffer, -#else - IMG_HANDLE hBuffer, -#endif - IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect, - IMG_UINT32 ui32SwapInterval, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hPrivateTag); -#else - IMG_HANDLE hPrivateTag); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCSystem (IMG_HANDLE hDevice, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain); -#else - IMG_HANDLE hSwapChain); -#endif - - -IMG_IMPORT -IMG_HANDLE IMG_CALLCONV PVRSRVOpenBCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_UINT32 ui32DeviceID); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseBCDevice(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_HANDLE hDevice); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBufferInfo(IMG_HANDLE hDevice, - BUFFER_INFO *psBuffer); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBuffer(IMG_HANDLE hDevice, - IMG_UINT32 ui32BufferIndex, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phBuffer); -#else - IMG_HANDLE *phBuffer); -#endif - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpInit(IMG_CONST PVRSRV_CONNECTION *psConnection); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStartInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStopInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPol(IMG_CONST PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo, -#else - PVRSRV_CLIENT_MEM_INFO *psMemInfo, -#endif - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - PDUMP_POLL_OPERATOR eOperator, - IMG_UINT32 ui32Flags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol(IMG_CONST PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo, -#else - PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, -#endif - IMG_BOOL bIsRead, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol2(IMG_CONST PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo, -#else - PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, -#endif - IMG_BOOL bIsRead); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMem(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_PVOID pvAltLinAddr, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSync(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_PVOID pvAltLinAddr, - PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpReg(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_CHAR *pszRegRegion, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Flags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPolWithFlags(const PVRSRV_DEV_DATA *psDevData, - IMG_CHAR *pszRegRegion, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Flags); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPol(const PVRSRV_DEV_DATA *psDevData, - IMG_CHAR *pszRegRegion, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDReg(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDDevPAddr(IMG_CONST PVRSRV_CONNECTION *psConnection, - PVRSRV_CLIENT_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_DEV_PHYADDR sPDDevPAddr); - -#if !defined(USE_CODE) -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPages(IMG_CONST PVRSRV_DEV_DATA *psDevData, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo, -#else - IMG_HANDLE hKernelMemInfo, -#endif - IMG_DEV_PHYADDR *pPages, - IMG_UINT32 ui32NumPages, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32Start, - IMG_UINT32 ui32Length, - IMG_UINT32 ui32Flags); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSetFrame(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_UINT32 ui32Frame); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpComment(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_CONST IMG_CHAR *pszComment, - IMG_BOOL bContinuous); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentf(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_BOOL bContinuous, - IMG_CONST IMG_CHAR *pszFormat, ...) -#if !defined(USE_CODE) - IMG_FORMAT_PRINTF(3, 4) -#endif -; - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentWithFlagsf(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_UINT32 ui32Flags, - IMG_CONST IMG_CHAR *pszFormat, ...) -#if !defined(USE_CODE) - IMG_FORMAT_PRINTF(3, 4) -#endif -; - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpDriverInfo(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_CHAR *pszString, - IMG_BOOL bContinuous); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpIsCapturing(IMG_CONST PVRSRV_CONNECTION *psConnection, - IMG_BOOL *pbIsCapturing); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpBitmap(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Width, - IMG_UINT32 ui32Height, - IMG_UINT32 ui32StrideInBytes, - IMG_DEV_VIRTADDR sDevBaseAddr, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext, -#else - IMG_HANDLE hDevMemContext, -#endif - IMG_UINT32 ui32Size, - PDUMP_PIXEL_FORMAT ePixelFormat, - PDUMP_MEM_FORMAT eMemFormat, - IMG_UINT32 ui32PDumpFlags); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegRead(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_CONST IMG_CHAR *pszRegRegion, - IMG_CONST IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Address, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PDumpFlags); - - -IMG_IMPORT -IMG_BOOL IMG_CALLCONV PVRSRVPDumpIsCapturingTest(IMG_CONST PVRSRV_CONNECTION *psConnection); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCycleCountRegRead(IMG_CONST PVRSRV_DEV_DATA *psDevData, - IMG_UINT32 ui32RegOffset, - IMG_BOOL bLastFrame); - -IMG_IMPORT IMG_HANDLE PVRSRVLoadLibrary(const IMG_CHAR *pszLibraryName); -IMG_IMPORT PVRSRV_ERROR PVRSRVUnloadLibrary(IMG_HANDLE hExtDrv); -IMG_IMPORT PVRSRV_ERROR PVRSRVGetLibFuncAddr(IMG_HANDLE hExtDrv, const IMG_CHAR *pszFunctionName, IMG_VOID **ppvFuncAddr); - -IMG_IMPORT IMG_UINT32 PVRSRVClockus (void); -IMG_IMPORT IMG_VOID PVRSRVWaitus (IMG_UINT32 ui32Timeus); -IMG_IMPORT IMG_VOID PVRSRVReleaseThreadQuanta (void); -IMG_IMPORT IMG_UINT32 IMG_CALLCONV PVRSRVGetCurrentProcessID(void); -IMG_IMPORT IMG_CHAR * IMG_CALLCONV PVRSRVSetLocale(const IMG_CHAR *pszLocale); - - - - - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVCreateAppHintState(IMG_MODULE_ID eModuleID, - const IMG_CHAR *pszAppName, - IMG_VOID **ppvState); -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeAppHintState(IMG_MODULE_ID eModuleID, - IMG_VOID *pvHintState); - -IMG_IMPORT IMG_BOOL IMG_CALLCONV PVRSRVGetAppHint(IMG_VOID *pvHintState, - const IMG_CHAR *pszHintName, - IMG_DATA_TYPE eDataType, - const IMG_VOID *pvDefault, - IMG_VOID *pvReturn); - -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMem (IMG_SIZE_T ui32Size); -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMem (IMG_SIZE_T ui32Size); -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMem (IMG_PVOID pvBase, IMG_SIZE_T uNewSize); -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeUserModeMem (IMG_PVOID pvMem); -IMG_IMPORT IMG_VOID PVRSRVMemCopy(IMG_VOID *pvDst, const IMG_VOID *pvSrc, IMG_SIZE_T ui32Size); -IMG_IMPORT IMG_VOID PVRSRVMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size); - -struct _PVRSRV_MUTEX_OPAQUE_STRUCT_; -typedef struct _PVRSRV_MUTEX_OPAQUE_STRUCT_ *PVRSRV_MUTEX_HANDLE; - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateMutex(PVRSRV_MUTEX_HANDLE *phMutex); -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMutex); -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex); -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex); - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockProcessGlobalMutex(void); -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockProcessGlobalMutex(void); - - -struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_; -typedef struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_ *PVRSRV_SEMAPHORE_HANDLE; - - - #define IMG_SEMAPHORE_WAIT_INFINITE ((IMG_UINT64)0xFFFFFFFFFFFFFFFFull) - - -#if !defined(USE_CODE) - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVCreateSemaphore) -#endif -static INLINE PVRSRV_ERROR PVRSRVCreateSemaphore(PVRSRV_SEMAPHORE_HANDLE *phSemaphore, IMG_INT iInitialCount) -{ - PVR_UNREFERENCED_PARAMETER(iInitialCount); - *phSemaphore = 0; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVDestroySemaphore) -#endif -static INLINE PVRSRV_ERROR PVRSRVDestroySemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore) -{ - PVR_UNREFERENCED_PARAMETER(hSemaphore); - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVWaitSemaphore) -#endif -static INLINE PVRSRV_ERROR PVRSRVWaitSemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore, IMG_UINT64 ui64TimeoutMicroSeconds) -{ - PVR_UNREFERENCED_PARAMETER(hSemaphore); - PVR_UNREFERENCED_PARAMETER(ui64TimeoutMicroSeconds); - return PVRSRV_ERROR_INVALID_PARAMS; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVPostSemaphore) -#endif -static INLINE IMG_VOID PVRSRVPostSemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore, IMG_INT iPostCount) -{ - PVR_UNREFERENCED_PARAMETER(hSemaphore); - PVR_UNREFERENCED_PARAMETER(iPostCount); -} - -#endif - - -#if (defined(DEBUG) && (defined(__linux__) || defined(__QNXNTO__))) -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); - -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeUserModeMemTracking(IMG_VOID *pvMem); - -IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMemTracking(IMG_VOID *pvMem, IMG_SIZE_T ui32NewSize, - IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); -#endif - -IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_EVENTSID hOSEvent); -#else - IMG_HANDLE hOSEvent); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateSyncInfoModObj(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phKernelSyncInfoModObj); -#else - IMG_HANDLE *phKernelSyncInfoModObj); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroySyncInfoModObj(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj); -#else - IMG_HANDLE hKernelSyncInfoModObj); -#endif - - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj, -#else - IMG_HANDLE hKernelSyncInfoModObj, -#endif - PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, - IMG_UINT32 ui32ModifyFlags, - IMG_UINT32 *pui32ReadOpsPending, - IMG_UINT32 *pui32WriteOpsPending); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj); -#else - IMG_HANDLE hKernelSyncInfoModObj); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsTakeToken(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - const IMG_SID hKernelSyncInfo, -#else - const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, -#endif - PVRSRV_SYNC_TOKEN *psSyncToken); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToToken(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - const IMG_SID hKernelSyncInfo, -#else - const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, -#endif - const PVRSRV_SYNC_TOKEN *psSyncToken, - IMG_BOOL bWait); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToModObj(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj, -#else - IMG_HANDLE hKernelSyncInfoModObj, -#endif - IMG_BOOL bWait); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToDelta(const PVRSRV_CONNECTION *psConnection, - PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo, - IMG_UINT32 ui32Delta, - IMG_BOOL bWait); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_SYNC_INFO **ppsSyncInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData, - PVRSRV_CLIENT_SYNC_INFO *psSyncInfo); - -IMG_IMPORT -const IMG_CHAR *PVRSRVGetErrorString(PVRSRV_ERROR eError); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCacheInvalidate(const PVRSRV_CONNECTION *psConnection, - IMG_PVOID pvLinearAddress, - IMG_UINT32 ui32Size); - -#define TIME_NOT_PASSED_UINT32(a,b,c) (((a) - (b)) < (c)) - -#if defined (__cplusplus) -} -#endif -#endif - diff --git a/drivers/staging/cdv/pvr/include4/servicesext.h b/drivers/staging/cdv/pvr/include4/servicesext.h deleted file mode 100644 index 54dd4d9..0000000 --- a/drivers/staging/cdv/pvr/include4/servicesext.h +++ /dev/null @@ -1,846 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__SERVICESEXT_H__) -#define __SERVICESEXT_H__ - -#define PVRSRV_LOCKFLG_READONLY (1) - -typedef enum _PVRSRV_ERROR_ -{ - PVRSRV_OK = 0, - PVRSRV_ERROR_OUT_OF_MEMORY, - PVRSRV_ERROR_TOO_FEW_BUFFERS, - PVRSRV_ERROR_INVALID_PARAMS, - PVRSRV_ERROR_INIT_FAILURE, - PVRSRV_ERROR_CANT_REGISTER_CALLBACK, - PVRSRV_ERROR_INVALID_DEVICE, - PVRSRV_ERROR_NOT_OWNER, - PVRSRV_ERROR_BAD_MAPPING, - PVRSRV_ERROR_TIMEOUT, - PVRSRV_ERROR_FLIP_CHAIN_EXISTS, - PVRSRV_ERROR_INVALID_SWAPINTERVAL, - PVRSRV_ERROR_SCENE_INVALID, - PVRSRV_ERROR_STREAM_ERROR, - PVRSRV_ERROR_FAILED_DEPENDENCIES, - PVRSRV_ERROR_CMD_NOT_PROCESSED, - PVRSRV_ERROR_CMD_TOO_BIG, - PVRSRV_ERROR_DEVICE_REGISTER_FAILED, - PVRSRV_ERROR_TOOMANYBUFFERS, - PVRSRV_ERROR_NOT_SUPPORTED, - PVRSRV_ERROR_PROCESSING_BLOCKED, - - PVRSRV_ERROR_CANNOT_FLUSH_QUEUE, - PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE, - PVRSRV_ERROR_CANNOT_GET_RENDERDETAILS, - PVRSRV_ERROR_RETRY, - - PVRSRV_ERROR_DDK_VERSION_MISMATCH, - PVRSRV_ERROR_BUILD_MISMATCH, - PVRSRV_ERROR_CORE_REVISION_MISMATCH, - - PVRSRV_ERROR_UPLOAD_TOO_BIG, - - PVRSRV_ERROR_INVALID_FLAGS, - PVRSRV_ERROR_FAILED_TO_REGISTER_PROCESS, - - PVRSRV_ERROR_UNABLE_TO_LOAD_LIBRARY, - PVRSRV_ERROR_UNABLE_GET_FUNC_ADDR, - PVRSRV_ERROR_UNLOAD_LIBRARY_FAILED, - - PVRSRV_ERROR_BRIDGE_CALL_FAILED, - PVRSRV_ERROR_IOCTL_CALL_FAILED, - - PVRSRV_ERROR_MMU_CONTEXT_NOT_FOUND, - PVRSRV_ERROR_BUFFER_DEVICE_NOT_FOUND, - PVRSRV_ERROR_BUFFER_DEVICE_ALREADY_PRESENT, - - PVRSRV_ERROR_PCI_DEVICE_NOT_FOUND, - PVRSRV_ERROR_PCI_CALL_FAILED, - PVRSRV_ERROR_PCI_REGION_TOO_SMALL, - PVRSRV_ERROR_PCI_REGION_UNAVAILABLE, - PVRSRV_ERROR_BAD_REGION_SIZE_MISMATCH, - - PVRSRV_ERROR_REGISTER_BASE_NOT_SET, - - PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE, - - PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM, - PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY, - PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC, - PVRSRV_ERROR_FAILED_TO_GET_PHYS_ADDR, - - PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY, - PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY, - - PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES, - PVRSRV_ERROR_FAILED_TO_FREE_PAGES, - PVRSRV_ERROR_FAILED_TO_COPY_PAGES, - PVRSRV_ERROR_UNABLE_TO_LOCK_PAGES, - PVRSRV_ERROR_UNABLE_TO_UNLOCK_PAGES, - PVRSRV_ERROR_STILL_MAPPED, - PVRSRV_ERROR_MAPPING_NOT_FOUND, - PVRSRV_ERROR_PHYS_ADDRESS_EXCEEDS_32BIT, - PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE, - - PVRSRV_ERROR_INVALID_SEGMENT_BLOCK, - PVRSRV_ERROR_INVALID_SGXDEVDATA, - PVRSRV_ERROR_INVALID_DEVINFO, - PVRSRV_ERROR_INVALID_MEMINFO, - PVRSRV_ERROR_INVALID_MISCINFO, - PVRSRV_ERROR_UNKNOWN_IOCTL, - PVRSRV_ERROR_INVALID_CONTEXT, - PVRSRV_ERROR_UNABLE_TO_DESTROY_CONTEXT, - PVRSRV_ERROR_INVALID_HEAP, - PVRSRV_ERROR_INVALID_KERNELINFO, - PVRSRV_ERROR_UNKNOWN_POWER_STATE, - PVRSRV_ERROR_INVALID_HANDLE_TYPE, - PVRSRV_ERROR_INVALID_WRAP_TYPE, - PVRSRV_ERROR_INVALID_PHYS_ADDR, - PVRSRV_ERROR_INVALID_CPU_ADDR, - PVRSRV_ERROR_INVALID_HEAPINFO, - PVRSRV_ERROR_INVALID_PERPROC, - PVRSRV_ERROR_FAILED_TO_RETRIEVE_HEAPINFO, - PVRSRV_ERROR_INVALID_MAP_REQUEST, - PVRSRV_ERROR_INVALID_UNMAP_REQUEST, - PVRSRV_ERROR_UNABLE_TO_FIND_MAPPING_HEAP, - PVRSRV_ERROR_MAPPING_STILL_IN_USE, - - PVRSRV_ERROR_EXCEEDED_HW_LIMITS, - PVRSRV_ERROR_NO_STAGING_BUFFER_ALLOCATED, - - PVRSRV_ERROR_UNABLE_TO_CREATE_PERPROC_AREA, - PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT, - PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT, - PVRSRV_ERROR_UNABLE_TO_REGISTER_EVENT, - PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT, - PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD, - PVRSRV_ERROR_UNABLE_TO_CLOSE_THREAD, - PVRSRV_ERROR_THREAD_READ_ERROR, - PVRSRV_ERROR_UNABLE_TO_REGISTER_ISR_HANDLER, - PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR, - PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR, - PVRSRV_ERROR_ISR_ALREADY_INSTALLED, - PVRSRV_ERROR_ISR_NOT_INSTALLED, - PVRSRV_ERROR_UNABLE_TO_INITIALISE_INTERRUPT, - PVRSRV_ERROR_UNABLE_TO_RETRIEVE_INFO, - PVRSRV_ERROR_UNABLE_TO_DO_BACKWARDS_BLIT, - PVRSRV_ERROR_UNABLE_TO_CLOSE_SERVICES, - PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT, - PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE, - PVRSRV_ERROR_UNABLE_TO_CLOSE_HANDLE, - - PVRSRV_ERROR_INVALID_CCB_COMMAND, - - PVRSRV_ERROR_UNABLE_TO_LOCK_RESOURCE, - PVRSRV_ERROR_INVALID_LOCK_ID, - PVRSRV_ERROR_RESOURCE_NOT_LOCKED, - - PVRSRV_ERROR_FLIP_FAILED, - PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED, - - PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE, - - PVRSRV_ERROR_CREATE_RENDER_CONTEXT_FAILED, - PVRSRV_ERROR_UNKNOWN_PRIMARY_FRAG, - PVRSRV_ERROR_UNEXPECTED_SECONDARY_FRAG, - PVRSRV_ERROR_UNEXPECTED_PRIMARY_FRAG, - - PVRSRV_ERROR_UNABLE_TO_INSERT_FENCE_ID, - - PVRSRV_ERROR_BLIT_SETUP_FAILED, - - PVRSRV_ERROR_PDUMP_NOT_AVAILABLE, - PVRSRV_ERROR_PDUMP_BUFFER_FULL, - PVRSRV_ERROR_PDUMP_BUF_OVERFLOW, - PVRSRV_ERROR_PDUMP_NOT_ACTIVE, - PVRSRV_ERROR_INCOMPLETE_LINE_OVERLAPS_PAGES, - - PVRSRV_ERROR_MUTEX_DESTROY_FAILED, - PVRSRV_ERROR_MUTEX_INTERRUPTIBLE_ERROR, - - PVRSRV_ERROR_INSUFFICIENT_SCRIPT_SPACE, - PVRSRV_ERROR_INSUFFICIENT_SPACE_FOR_COMMAND, - - PVRSRV_ERROR_PROCESS_NOT_INITIALISED, - PVRSRV_ERROR_PROCESS_NOT_FOUND, - PVRSRV_ERROR_SRV_CONNECT_FAILED, - PVRSRV_ERROR_SRV_DISCONNECT_FAILED, - PVRSRV_ERROR_DEINT_PHASE_FAILED, - PVRSRV_ERROR_INIT2_PHASE_FAILED, - - PVRSRV_ERROR_UNABLE_TO_FIND_RESOURCE, - - PVRSRV_ERROR_NO_DC_DEVICES_FOUND, - PVRSRV_ERROR_UNABLE_TO_OPEN_DC_DEVICE, - PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE, - PVRSRV_ERROR_NO_DEVICEDATA_FOUND, - PVRSRV_ERROR_NO_DEVICENODE_FOUND, - PVRSRV_ERROR_NO_CLIENTNODE_FOUND, - PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE, - - PVRSRV_ERROR_UNABLE_TO_INIT_TASK, - PVRSRV_ERROR_UNABLE_TO_SCHEDULE_TASK, - PVRSRV_ERROR_UNABLE_TO_KILL_TASK, - - PVRSRV_ERROR_UNABLE_TO_ENABLE_TIMER, - PVRSRV_ERROR_UNABLE_TO_DISABLE_TIMER, - PVRSRV_ERROR_UNABLE_TO_REMOVE_TIMER, - - PVRSRV_ERROR_UNKNOWN_PIXEL_FORMAT, - PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION, - - PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE, - PVRSRV_ERROR_HANDLE_NOT_ALLOCATED, - PVRSRV_ERROR_HANDLE_TYPE_MISMATCH, - PVRSRV_ERROR_UNABLE_TO_ADD_HANDLE, - PVRSRV_ERROR_HANDLE_NOT_SHAREABLE, - PVRSRV_ERROR_HANDLE_NOT_FOUND, - PVRSRV_ERROR_INVALID_SUBHANDLE, - PVRSRV_ERROR_HANDLE_BATCH_IN_USE, - PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE, - - PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE, - PVRSRV_ERROR_INSERT_HASH_TABLE_DATA_FAILED, - - PVRSRV_ERROR_UNSUPPORTED_BACKING_STORE, - PVRSRV_ERROR_UNABLE_TO_DESTROY_BM_HEAP, - - PVRSRV_ERROR_UNKNOWN_INIT_SERVER_STATE, - - PVRSRV_ERROR_NO_FREE_DEVICEIDS_AVALIABLE, - PVRSRV_ERROR_INVALID_DEVICEID, - PVRSRV_ERROR_DEVICEID_NOT_FOUND, - - PVRSRV_ERROR_MEMORY_TEST_FAILED, - PVRSRV_ERROR_CPUPADDR_TEST_FAILED, - PVRSRV_ERROR_COPY_TEST_FAILED, - - PVRSRV_ERROR_SEMAPHORE_NOT_INITIALISED, - - PVRSRV_ERROR_UNABLE_TO_RELEASE_CLOCK, - PVRSRV_ERROR_CLOCK_REQUEST_FAILED, - PVRSRV_ERROR_DISABLE_CLOCK_FAILURE, - PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE, - PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE, - PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK, - PVRSRV_ERROR_UNABLE_TO_GET_CLOCK, - PVRSRV_ERROR_UNABLE_TO_GET_PARENT_CLOCK, - PVRSRV_ERROR_UNABLE_TO_GET_SYSTEM_CLOCK, - - PVRSRV_ERROR_UNKNOWN_SGL_ERROR, - - PVRSRV_ERROR_SYSTEM_POWER_CHANGE_FAILURE, - PVRSRV_ERROR_DEVICE_POWER_CHANGE_FAILURE, - - PVRSRV_ERROR_BAD_SYNC_STATE, - - PVRSRV_ERROR_CACHEOP_FAILED, - - PVRSRV_ERROR_CACHE_INVALIDATE_FAILED, - - PVRSRV_ERROR_FORCE_I32 = 0x7fffffff - -} PVRSRV_ERROR; - - -typedef enum _PVRSRV_DEVICE_CLASS_ -{ - PVRSRV_DEVICE_CLASS_3D = 0 , - PVRSRV_DEVICE_CLASS_DISPLAY = 1 , - PVRSRV_DEVICE_CLASS_BUFFER = 2 , - PVRSRV_DEVICE_CLASS_VIDEO = 3 , - - PVRSRV_DEVICE_CLASS_FORCE_I32 = 0x7fffffff - -} PVRSRV_DEVICE_CLASS; - - -typedef enum _PVRSRV_SYS_POWER_STATE_ -{ - PVRSRV_SYS_POWER_STATE_Unspecified = -1, - PVRSRV_SYS_POWER_STATE_D0 = 0, - PVRSRV_SYS_POWER_STATE_D1 = 1, - PVRSRV_SYS_POWER_STATE_D2 = 2, - PVRSRV_SYS_POWER_STATE_D3 = 3, - PVRSRV_SYS_POWER_STATE_D4 = 4, - - PVRSRV_SYS_POWER_STATE_FORCE_I32 = 0x7fffffff - -} PVRSRV_SYS_POWER_STATE, *PPVRSRV_SYS_POWER_STATE; - - -typedef enum _PVRSRV_DEV_POWER_STATE_ -{ - PVRSRV_DEV_POWER_STATE_DEFAULT = -1, - PVRSRV_DEV_POWER_STATE_ON = 0, - PVRSRV_DEV_POWER_STATE_IDLE = 1, - PVRSRV_DEV_POWER_STATE_OFF = 2, - - PVRSRV_DEV_POWER_STATE_FORCE_I32 = 0x7fffffff - -} PVRSRV_DEV_POWER_STATE, *PPVRSRV_DEV_POWER_STATE; - - -typedef PVRSRV_ERROR (*PFN_PRE_POWER) (IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -typedef PVRSRV_ERROR (*PFN_POST_POWER) (IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -typedef PVRSRV_ERROR (*PFN_PRE_CLOCKSPEED_CHANGE) (IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -typedef PVRSRV_ERROR (*PFN_POST_CLOCKSPEED_CHANGE) (IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - - -typedef enum _PVRSRV_PIXEL_FORMAT_ { - - PVRSRV_PIXEL_FORMAT_UNKNOWN = 0, - PVRSRV_PIXEL_FORMAT_RGB565 = 1, - PVRSRV_PIXEL_FORMAT_RGB555 = 2, - PVRSRV_PIXEL_FORMAT_RGB888 = 3, - PVRSRV_PIXEL_FORMAT_BGR888 = 4, - PVRSRV_PIXEL_FORMAT_GREY_SCALE = 8, - PVRSRV_PIXEL_FORMAT_PAL12 = 13, - PVRSRV_PIXEL_FORMAT_PAL8 = 14, - PVRSRV_PIXEL_FORMAT_PAL4 = 15, - PVRSRV_PIXEL_FORMAT_PAL2 = 16, - PVRSRV_PIXEL_FORMAT_PAL1 = 17, - PVRSRV_PIXEL_FORMAT_ARGB1555 = 18, - PVRSRV_PIXEL_FORMAT_ARGB4444 = 19, - PVRSRV_PIXEL_FORMAT_ARGB8888 = 20, - PVRSRV_PIXEL_FORMAT_ABGR8888 = 21, - PVRSRV_PIXEL_FORMAT_YV12 = 22, - PVRSRV_PIXEL_FORMAT_I420 = 23, - PVRSRV_PIXEL_FORMAT_IMC2 = 25, - PVRSRV_PIXEL_FORMAT_XRGB8888 = 26, - PVRSRV_PIXEL_FORMAT_XBGR8888 = 27, - PVRSRV_PIXEL_FORMAT_BGRA8888 = 28, - PVRSRV_PIXEL_FORMAT_XRGB4444 = 29, - PVRSRV_PIXEL_FORMAT_ARGB8332 = 30, - PVRSRV_PIXEL_FORMAT_A2RGB10 = 31, - PVRSRV_PIXEL_FORMAT_A2BGR10 = 32, - PVRSRV_PIXEL_FORMAT_P8 = 33, - PVRSRV_PIXEL_FORMAT_L8 = 34, - PVRSRV_PIXEL_FORMAT_A8L8 = 35, - PVRSRV_PIXEL_FORMAT_A4L4 = 36, - PVRSRV_PIXEL_FORMAT_L16 = 37, - PVRSRV_PIXEL_FORMAT_L6V5U5 = 38, - PVRSRV_PIXEL_FORMAT_V8U8 = 39, - PVRSRV_PIXEL_FORMAT_V16U16 = 40, - PVRSRV_PIXEL_FORMAT_QWVU8888 = 41, - PVRSRV_PIXEL_FORMAT_XLVU8888 = 42, - PVRSRV_PIXEL_FORMAT_QWVU16 = 43, - PVRSRV_PIXEL_FORMAT_D16 = 44, - PVRSRV_PIXEL_FORMAT_D24S8 = 45, - PVRSRV_PIXEL_FORMAT_D24X8 = 46, - - - PVRSRV_PIXEL_FORMAT_ABGR16 = 47, - PVRSRV_PIXEL_FORMAT_ABGR16F = 48, - PVRSRV_PIXEL_FORMAT_ABGR32 = 49, - PVRSRV_PIXEL_FORMAT_ABGR32F = 50, - PVRSRV_PIXEL_FORMAT_B10GR11 = 51, - PVRSRV_PIXEL_FORMAT_GR88 = 52, - PVRSRV_PIXEL_FORMAT_BGR32 = 53, - PVRSRV_PIXEL_FORMAT_GR32 = 54, - PVRSRV_PIXEL_FORMAT_E5BGR9 = 55, - - - PVRSRV_PIXEL_FORMAT_RESERVED1 = 56, - PVRSRV_PIXEL_FORMAT_RESERVED2 = 57, - PVRSRV_PIXEL_FORMAT_RESERVED3 = 58, - PVRSRV_PIXEL_FORMAT_RESERVED4 = 59, - PVRSRV_PIXEL_FORMAT_RESERVED5 = 60, - - - PVRSRV_PIXEL_FORMAT_R8G8_B8G8 = 61, - PVRSRV_PIXEL_FORMAT_G8R8_G8B8 = 62, - - - PVRSRV_PIXEL_FORMAT_NV11 = 63, - PVRSRV_PIXEL_FORMAT_NV12 = 64, - - - PVRSRV_PIXEL_FORMAT_YUY2 = 65, - PVRSRV_PIXEL_FORMAT_YUV420 = 66, - PVRSRV_PIXEL_FORMAT_YUV444 = 67, - PVRSRV_PIXEL_FORMAT_VUY444 = 68, - PVRSRV_PIXEL_FORMAT_YUYV = 69, - PVRSRV_PIXEL_FORMAT_YVYU = 70, - PVRSRV_PIXEL_FORMAT_UYVY = 71, - PVRSRV_PIXEL_FORMAT_VYUY = 72, - - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY = 73, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV = 74, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YVYU = 75, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_VYUY = 76, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_AYUV = 77, - - - PVRSRV_PIXEL_FORMAT_A32B32G32R32 = 78, - PVRSRV_PIXEL_FORMAT_A32B32G32R32F = 79, - PVRSRV_PIXEL_FORMAT_A32B32G32R32_UINT = 80, - PVRSRV_PIXEL_FORMAT_A32B32G32R32_SINT = 81, - - - PVRSRV_PIXEL_FORMAT_B32G32R32 = 82, - PVRSRV_PIXEL_FORMAT_B32G32R32F = 83, - PVRSRV_PIXEL_FORMAT_B32G32R32_UINT = 84, - PVRSRV_PIXEL_FORMAT_B32G32R32_SINT = 85, - - - PVRSRV_PIXEL_FORMAT_G32R32 = 86, - PVRSRV_PIXEL_FORMAT_G32R32F = 87, - PVRSRV_PIXEL_FORMAT_G32R32_UINT = 88, - PVRSRV_PIXEL_FORMAT_G32R32_SINT = 89, - - - PVRSRV_PIXEL_FORMAT_D32F = 90, - PVRSRV_PIXEL_FORMAT_R32 = 91, - PVRSRV_PIXEL_FORMAT_R32F = 92, - PVRSRV_PIXEL_FORMAT_R32_UINT = 93, - PVRSRV_PIXEL_FORMAT_R32_SINT = 94, - - - PVRSRV_PIXEL_FORMAT_A16B16G16R16 = 95, - PVRSRV_PIXEL_FORMAT_A16B16G16R16F = 96, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_SINT = 97, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_SNORM = 98, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_UINT = 99, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_UNORM = 100, - - - PVRSRV_PIXEL_FORMAT_G16R16 = 101, - PVRSRV_PIXEL_FORMAT_G16R16F = 102, - PVRSRV_PIXEL_FORMAT_G16R16_UINT = 103, - PVRSRV_PIXEL_FORMAT_G16R16_UNORM = 104, - PVRSRV_PIXEL_FORMAT_G16R16_SINT = 105, - PVRSRV_PIXEL_FORMAT_G16R16_SNORM = 106, - - - PVRSRV_PIXEL_FORMAT_R16 = 107, - PVRSRV_PIXEL_FORMAT_R16F = 108, - PVRSRV_PIXEL_FORMAT_R16_UINT = 109, - PVRSRV_PIXEL_FORMAT_R16_UNORM = 110, - PVRSRV_PIXEL_FORMAT_R16_SINT = 111, - PVRSRV_PIXEL_FORMAT_R16_SNORM = 112, - - - PVRSRV_PIXEL_FORMAT_X8R8G8B8 = 113, - PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM = 114, - PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM_SRGB = 115, - - PVRSRV_PIXEL_FORMAT_A8R8G8B8 = 116, - PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM = 117, - PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM_SRGB = 118, - - PVRSRV_PIXEL_FORMAT_A8B8G8R8 = 119, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UINT = 120, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM = 121, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM_SRGB = 122, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_SINT = 123, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_SNORM = 124, - - - PVRSRV_PIXEL_FORMAT_G8R8 = 125, - PVRSRV_PIXEL_FORMAT_G8R8_UINT = 126, - PVRSRV_PIXEL_FORMAT_G8R8_UNORM = 127, - PVRSRV_PIXEL_FORMAT_G8R8_SINT = 128, - PVRSRV_PIXEL_FORMAT_G8R8_SNORM = 129, - - - PVRSRV_PIXEL_FORMAT_A8 = 130, - PVRSRV_PIXEL_FORMAT_R8 = 131, - PVRSRV_PIXEL_FORMAT_R8_UINT = 132, - PVRSRV_PIXEL_FORMAT_R8_UNORM = 133, - PVRSRV_PIXEL_FORMAT_R8_SINT = 134, - PVRSRV_PIXEL_FORMAT_R8_SNORM = 135, - - - PVRSRV_PIXEL_FORMAT_A2B10G10R10 = 136, - PVRSRV_PIXEL_FORMAT_A2B10G10R10_UNORM = 137, - PVRSRV_PIXEL_FORMAT_A2B10G10R10_UINT = 138, - - - PVRSRV_PIXEL_FORMAT_B10G11R11 = 139, - PVRSRV_PIXEL_FORMAT_B10G11R11F = 140, - - - PVRSRV_PIXEL_FORMAT_X24G8R32 = 141, - PVRSRV_PIXEL_FORMAT_G8R24 = 142, - PVRSRV_PIXEL_FORMAT_X8R24 = 143, - PVRSRV_PIXEL_FORMAT_E5B9G9R9 = 144, - PVRSRV_PIXEL_FORMAT_R1 = 145, - - PVRSRV_PIXEL_FORMAT_RESERVED6 = 146, - PVRSRV_PIXEL_FORMAT_RESERVED7 = 147, - PVRSRV_PIXEL_FORMAT_RESERVED8 = 148, - PVRSRV_PIXEL_FORMAT_RESERVED9 = 149, - PVRSRV_PIXEL_FORMAT_RESERVED10 = 150, - PVRSRV_PIXEL_FORMAT_RESERVED11 = 151, - PVRSRV_PIXEL_FORMAT_RESERVED12 = 152, - PVRSRV_PIXEL_FORMAT_RESERVED13 = 153, - PVRSRV_PIXEL_FORMAT_RESERVED14 = 154, - PVRSRV_PIXEL_FORMAT_RESERVED15 = 155, - PVRSRV_PIXEL_FORMAT_RESERVED16 = 156, - PVRSRV_PIXEL_FORMAT_RESERVED17 = 157, - PVRSRV_PIXEL_FORMAT_RESERVED18 = 158, - PVRSRV_PIXEL_FORMAT_RESERVED19 = 159, - PVRSRV_PIXEL_FORMAT_RESERVED20 = 160, - - - PVRSRV_PIXEL_FORMAT_UBYTE4 = 161, - PVRSRV_PIXEL_FORMAT_SHORT4 = 162, - PVRSRV_PIXEL_FORMAT_SHORT4N = 163, - PVRSRV_PIXEL_FORMAT_USHORT4N = 164, - PVRSRV_PIXEL_FORMAT_SHORT2N = 165, - PVRSRV_PIXEL_FORMAT_SHORT2 = 166, - PVRSRV_PIXEL_FORMAT_USHORT2N = 167, - PVRSRV_PIXEL_FORMAT_UDEC3 = 168, - PVRSRV_PIXEL_FORMAT_DEC3N = 169, - PVRSRV_PIXEL_FORMAT_F16_2 = 170, - PVRSRV_PIXEL_FORMAT_F16_4 = 171, - - - PVRSRV_PIXEL_FORMAT_L_F16 = 172, - PVRSRV_PIXEL_FORMAT_L_F16_REP = 173, - PVRSRV_PIXEL_FORMAT_L_F16_A_F16 = 174, - PVRSRV_PIXEL_FORMAT_A_F16 = 175, - PVRSRV_PIXEL_FORMAT_B16G16R16F = 176, - - PVRSRV_PIXEL_FORMAT_L_F32 = 177, - PVRSRV_PIXEL_FORMAT_A_F32 = 178, - PVRSRV_PIXEL_FORMAT_L_F32_A_F32 = 179, - - - PVRSRV_PIXEL_FORMAT_PVRTC2 = 180, - PVRSRV_PIXEL_FORMAT_PVRTC4 = 181, - PVRSRV_PIXEL_FORMAT_PVRTCII2 = 182, - PVRSRV_PIXEL_FORMAT_PVRTCII4 = 183, - PVRSRV_PIXEL_FORMAT_PVRTCIII = 184, - PVRSRV_PIXEL_FORMAT_PVRO8 = 185, - PVRSRV_PIXEL_FORMAT_PVRO88 = 186, - PVRSRV_PIXEL_FORMAT_PT1 = 187, - PVRSRV_PIXEL_FORMAT_PT2 = 188, - PVRSRV_PIXEL_FORMAT_PT4 = 189, - PVRSRV_PIXEL_FORMAT_PT8 = 190, - PVRSRV_PIXEL_FORMAT_PTW = 191, - PVRSRV_PIXEL_FORMAT_PTB = 192, - PVRSRV_PIXEL_FORMAT_MONO8 = 193, - PVRSRV_PIXEL_FORMAT_MONO16 = 194, - - - PVRSRV_PIXEL_FORMAT_C0_YUYV = 195, - PVRSRV_PIXEL_FORMAT_C0_UYVY = 196, - PVRSRV_PIXEL_FORMAT_C0_YVYU = 197, - PVRSRV_PIXEL_FORMAT_C0_VYUY = 198, - PVRSRV_PIXEL_FORMAT_C1_YUYV = 199, - PVRSRV_PIXEL_FORMAT_C1_UYVY = 200, - PVRSRV_PIXEL_FORMAT_C1_YVYU = 201, - PVRSRV_PIXEL_FORMAT_C1_VYUY = 202, - - - PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_UV = 203, - PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_VU = 204, - PVRSRV_PIXEL_FORMAT_C0_YUV420_3P = 205, - PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_UV = 206, - PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_VU = 207, - PVRSRV_PIXEL_FORMAT_C1_YUV420_3P = 208, - - PVRSRV_PIXEL_FORMAT_A2B10G10R10F = 209, - PVRSRV_PIXEL_FORMAT_B8G8R8_SINT = 210, - PVRSRV_PIXEL_FORMAT_PVRF32SIGNMASK = 211, - - PVRSRV_PIXEL_FORMAT_ABGR4444 = 212, - PVRSRV_PIXEL_FORMAT_ABGR1555 = 213, - PVRSRV_PIXEL_FORMAT_BGR565 = 214, - - - PVRSRV_PIXEL_FORMAT_C0_4KYUV420_2P_UV = 215, - PVRSRV_PIXEL_FORMAT_C0_4KYUV420_2P_VU = 216, - PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_UV = 217, - PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_VU = 218, - PVRSRV_PIXEL_FORMAT_P208 = 219, - PVRSRV_PIXEL_FORMAT_A8P8 = 220, - - PVRSRV_PIXEL_FORMAT_A4 = 221, - PVRSRV_PIXEL_FORMAT_AYUV8888 = 222, - PVRSRV_PIXEL_FORMAT_RAW256 = 223, - PVRSRV_PIXEL_FORMAT_RAW512 = 224, - PVRSRV_PIXEL_FORMAT_RAW1024 = 225, - - PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff - -} PVRSRV_PIXEL_FORMAT; - -typedef enum _PVRSRV_ALPHA_FORMAT_ { - PVRSRV_ALPHA_FORMAT_UNKNOWN = 0x00000000, - PVRSRV_ALPHA_FORMAT_PRE = 0x00000001, - PVRSRV_ALPHA_FORMAT_NONPRE = 0x00000002, - PVRSRV_ALPHA_FORMAT_MASK = 0x0000000F, -} PVRSRV_ALPHA_FORMAT; - -typedef enum _PVRSRV_COLOURSPACE_FORMAT_ { - PVRSRV_COLOURSPACE_FORMAT_UNKNOWN = 0x00000000, - PVRSRV_COLOURSPACE_FORMAT_LINEAR = 0x00010000, - PVRSRV_COLOURSPACE_FORMAT_NONLINEAR = 0x00020000, - PVRSRV_COLOURSPACE_FORMAT_MASK = 0x000F0000, -} PVRSRV_COLOURSPACE_FORMAT; - - -typedef enum _PVRSRV_ROTATION_ { - PVRSRV_ROTATE_0 = 0, - PVRSRV_ROTATE_90 = 1, - PVRSRV_ROTATE_180 = 2, - PVRSRV_ROTATE_270 = 3, - PVRSRV_FLIP_Y - -} PVRSRV_ROTATION; - -#define PVRSRV_CREATE_SWAPCHAIN_SHARED (1<<0) -#define PVRSRV_CREATE_SWAPCHAIN_QUERY (1<<1) -#define PVRSRV_CREATE_SWAPCHAIN_OEMOVERLAY (1<<2) - -typedef struct _PVRSRV_SYNC_DATA_ -{ - - IMG_UINT32 ui32WriteOpsPending; - volatile IMG_UINT32 ui32WriteOpsComplete; - - - IMG_UINT32 ui32ReadOpsPending; - volatile IMG_UINT32 ui32ReadOpsComplete; - - - IMG_UINT32 ui32LastOpDumpVal; - IMG_UINT32 ui32LastReadOpDumpVal; - -} PVRSRV_SYNC_DATA; - -typedef struct _PVRSRV_CLIENT_SYNC_INFO_ -{ - - PVRSRV_SYNC_DATA *psSyncData; - - - - - - IMG_DEV_VIRTADDR sWriteOpsCompleteDevVAddr; - - - IMG_DEV_VIRTADDR sReadOpsCompleteDevVAddr; - - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMappingInfo; - - - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hMappingInfo; - - - IMG_HANDLE hKernelSyncInfo; -#endif - -} PVRSRV_CLIENT_SYNC_INFO, *PPVRSRV_CLIENT_SYNC_INFO; - -typedef struct PVRSRV_RESOURCE_TAG -{ - volatile IMG_UINT32 ui32Lock; - IMG_UINT32 ui32ID; -}PVRSRV_RESOURCE; -typedef PVRSRV_RESOURCE PVRSRV_RES_HANDLE; - - -typedef IMG_VOID (*PFN_CMD_COMPLETE) (IMG_HANDLE); -typedef IMG_VOID (**PPFN_CMD_COMPLETE) (IMG_HANDLE); - -typedef IMG_BOOL (*PFN_CMD_PROC) (IMG_HANDLE, IMG_UINT32, IMG_VOID*); -typedef IMG_BOOL (**PPFN_CMD_PROC) (IMG_HANDLE, IMG_UINT32, IMG_VOID*); - - -typedef struct _IMG_RECT_ -{ - IMG_INT32 x0; - IMG_INT32 y0; - IMG_INT32 x1; - IMG_INT32 y1; -}IMG_RECT; - -typedef struct _IMG_RECT_16_ -{ - IMG_INT16 x0; - IMG_INT16 y0; - IMG_INT16 x1; - IMG_INT16 y1; -}IMG_RECT_16; - - -typedef PVRSRV_ERROR (*PFN_GET_BUFFER_ADDR)(IMG_HANDLE, - IMG_HANDLE, - IMG_SYS_PHYADDR**, - IMG_SIZE_T*, - IMG_VOID**, - IMG_HANDLE*, - IMG_BOOL*, - IMG_UINT32*); - - -typedef struct DISPLAY_DIMS_TAG -{ - IMG_UINT32 ui32ByteStride; - IMG_UINT32 ui32Width; - IMG_UINT32 ui32Height; -} DISPLAY_DIMS; - - -typedef struct DISPLAY_FORMAT_TAG -{ - - PVRSRV_PIXEL_FORMAT pixelformat; -} DISPLAY_FORMAT; - -typedef struct DISPLAY_SURF_ATTRIBUTES_TAG -{ - - PVRSRV_PIXEL_FORMAT pixelformat; - - DISPLAY_DIMS sDims; -} DISPLAY_SURF_ATTRIBUTES; - - -typedef struct DISPLAY_MODE_INFO_TAG -{ - - PVRSRV_PIXEL_FORMAT pixelformat; - - DISPLAY_DIMS sDims; - - IMG_UINT32 ui32RefreshHZ; - - IMG_UINT32 ui32OEMFlags; -} DISPLAY_MODE_INFO; - - - -#define MAX_DISPLAY_NAME_SIZE (50) - -typedef struct DISPLAY_INFO_TAG -{ - - IMG_UINT32 ui32MaxSwapChains; - - IMG_UINT32 ui32MaxSwapChainBuffers; - - IMG_UINT32 ui32MinSwapInterval; - - IMG_UINT32 ui32MaxSwapInterval; - - IMG_UINT32 ui32PhysicalWidthmm; - IMG_UINT32 ui32PhysicalHeightmm; - - IMG_CHAR szDisplayName[MAX_DISPLAY_NAME_SIZE]; -#if defined(SUPPORT_HW_CURSOR) - - IMG_UINT16 ui32CursorWidth; - IMG_UINT16 ui32CursorHeight; -#endif -} DISPLAY_INFO; - -typedef struct ACCESS_INFO_TAG -{ - IMG_UINT32 ui32Size; - IMG_UINT32 ui32FBPhysBaseAddress; - IMG_UINT32 ui32FBMemAvailable; - IMG_UINT32 ui32SysPhysBaseAddress; - IMG_UINT32 ui32SysSize; - IMG_UINT32 ui32DevIRQ; -}ACCESS_INFO; - - - -#if defined(PDUMP_SUSPEND_IS_PER_THREAD) -typedef struct { - IMG_UINT32 threadId; - IMG_INT suspendCount; -} PVRSRV_THREAD_SUSPEND_COUNT; - -#define PVRSRV_PDUMP_SUSPEND_Q_NAME "PVRSRVPDumpSuspendMsgQ" -#define PVRSRV_PDUMP_SUSPEND_Q_LENGTH 8 - -#endif - - -typedef struct _PVRSRV_REGISTRY_INFO_ -{ - IMG_UINT32 ui32DevCookie; - IMG_PCHAR pszKey; - IMG_PCHAR pszValue; - IMG_PCHAR pszBuf; - IMG_UINT32 ui32BufSize; -} PVRSRV_REGISTRY_INFO, *PPVRSRV_REGISTRY_INFO; - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVReadRegistryString (PPVRSRV_REGISTRY_INFO psRegInfo); -PVRSRV_ERROR IMG_CALLCONV PVRSRVWriteRegistryString (PPVRSRV_REGISTRY_INFO psRegInfo); - - -#define PVRSRV_BC_FLAGS_YUVCSC_CONFORMANT_RANGE (0 << 0) -#define PVRSRV_BC_FLAGS_YUVCSC_FULL_RANGE (1 << 0) - -#define PVRSRV_BC_FLAGS_YUVCSC_BT601 (0 << 1) -#define PVRSRV_BC_FLAGS_YUVCSC_BT709 (1 << 1) - -#define MAX_BUFFER_DEVICE_NAME_SIZE (50) - -typedef struct BUFFER_INFO_TAG -{ - IMG_UINT32 ui32BufferCount; - IMG_UINT32 ui32BufferDeviceID; - PVRSRV_PIXEL_FORMAT pixelformat; - IMG_UINT32 ui32ByteStride; - IMG_UINT32 ui32Width; - IMG_UINT32 ui32Height; - IMG_UINT32 ui32Flags; - IMG_CHAR szDeviceName[MAX_BUFFER_DEVICE_NAME_SIZE]; -} BUFFER_INFO; - -typedef enum _OVERLAY_DEINTERLACE_MODE_ -{ - WEAVE=0x0, - BOB_ODD, - BOB_EVEN, - BOB_EVEN_NONINTERLEAVED -} OVERLAY_DEINTERLACE_MODE; - -#endif diff --git a/drivers/staging/cdv/pvr/include4/sgx_options.h b/drivers/staging/cdv/pvr/include4/sgx_options.h deleted file mode 100644 index d2ddff6..0000000 --- a/drivers/staging/cdv/pvr/include4/sgx_options.h +++ /dev/null @@ -1,237 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(DEBUG) || defined (INTERNAL_TEST) -#define DEBUG_SET_OFFSET OPTIONS_BIT0 -#define OPTIONS_BIT0 0x1U -#else -#define OPTIONS_BIT0 0x0 -#endif - -#if defined(PDUMP) || defined (INTERNAL_TEST) -#define PDUMP_SET_OFFSET OPTIONS_BIT1 -#define OPTIONS_BIT1 (0x1U << 1) -#else -#define OPTIONS_BIT1 0x0 -#endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) || defined (INTERNAL_TEST) -#define PVRSRV_USSE_EDM_STATUS_DEBUG_SET_OFFSET OPTIONS_BIT2 -#define OPTIONS_BIT2 (0x1U << 2) -#else -#define OPTIONS_BIT2 0x0 -#endif - -#if defined(SUPPORT_HW_RECOVERY) || defined (INTERNAL_TEST) -#define SUPPORT_HW_RECOVERY_SET_OFFSET OPTIONS_BIT3 -#define OPTIONS_BIT3 (0x1U << 3) -#else -#define OPTIONS_BIT3 0x0 -#endif - - - -#if defined (SUPPORT_SID_INTERFACE) -#define PVR_SECURE_HANDLES_SET_OFFSET OPTIONS_BIT4 -#define OPTIONS_BIT4 (0x1U << 4) -#else -#if defined(PVR_SECURE_HANDLES) || defined (INTERNAL_TEST) -#define PVR_SECURE_HANDLES_SET_OFFSET OPTIONS_BIT4 -#define OPTIONS_BIT4 (0x1U << 4) -#else -#define OPTIONS_BIT4 0x0 -#endif -#endif - -#if defined(SGX_BYPASS_SYSTEM_CACHE) || defined (INTERNAL_TEST) -#define SGX_BYPASS_SYSTEM_CACHE_SET_OFFSET OPTIONS_BIT5 -#define OPTIONS_BIT5 (0x1U << 5) -#else -#define OPTIONS_BIT5 0x0 -#endif - -#if defined(SGX_DMS_AGE_ENABLE) || defined (INTERNAL_TEST) -#define SGX_DMS_AGE_ENABLE_SET_OFFSET OPTIONS_BIT6 -#define OPTIONS_BIT6 (0x1U << 6) -#else -#define OPTIONS_BIT6 0x0 -#endif - -#if defined(SGX_FAST_DPM_INIT) || defined (INTERNAL_TEST) -#define SGX_FAST_DPM_INIT_SET_OFFSET OPTIONS_BIT8 -#define OPTIONS_BIT8 (0x1U << 8) -#else -#define OPTIONS_BIT8 0x0 -#endif - -#if defined(SGX_FEATURE_WRITEBACK_DCU) || defined (INTERNAL_TEST) -#define SGX_FEATURE_DCU_SET_OFFSET OPTIONS_BIT9 -#define OPTIONS_BIT9 (0x1U << 9) -#else -#define OPTIONS_BIT9 0x0 -#endif - -#if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST) -#define SGX_FEATURE_MP_SET_OFFSET OPTIONS_BIT10 -#define OPTIONS_BIT10 (0x1U << 10) -#else -#define OPTIONS_BIT10 0x0 -#endif - -#if defined(SGX_FEATURE_MULTITHREADED_UKERNEL) || defined (INTERNAL_TEST) -#define SGX_FEATURE_MULTITHREADED_UKERNEL_SET_OFFSET OPTIONS_BIT11 -#define OPTIONS_BIT11 (0x1U << 11) -#else -#define OPTIONS_BIT11 0x0 -#endif - - - -#if defined(SGX_FEATURE_OVERLAPPED_SPM) || defined (INTERNAL_TEST) -#define SGX_FEATURE_OVERLAPPED_SPM_SET_OFFSET OPTIONS_BIT12 -#define OPTIONS_BIT12 (0x1U << 12) -#else -#define OPTIONS_BIT12 0x0 -#endif - - -#if defined(SGX_FEATURE_SYSTEM_CACHE) || defined (INTERNAL_TEST) -#define SGX_FEATURE_SYSTEM_CACHE_SET_OFFSET OPTIONS_BIT13 -#define OPTIONS_BIT13 (0x1U << 13) -#else -#define OPTIONS_BIT13 0x0 -#endif - -#if defined(SGX_SUPPORT_HWPROFILING) || defined (INTERNAL_TEST) -#define SGX_SUPPORT_HWPROFILING_SET_OFFSET OPTIONS_BIT14 -#define OPTIONS_BIT14 (0x1U << 14) -#else -#define OPTIONS_BIT14 0x0 -#endif - - - -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) || defined (INTERNAL_TEST) -#define SUPPORT_ACTIVE_POWER_MANAGEMENT_SET_OFFSET OPTIONS_BIT15 -#define OPTIONS_BIT15 (0x1U << 15) -#else -#define OPTIONS_BIT15 0x0 -#endif - -#if defined(SUPPORT_DISPLAYCONTROLLER_TILING) || defined (INTERNAL_TEST) -#define SUPPORT_DISPLAYCONTROLLER_TILING_SET_OFFSET OPTIONS_BIT16 -#define OPTIONS_BIT16 (0x1U << 16) -#else -#define OPTIONS_BIT16 0x0 -#endif - -#if defined(SUPPORT_PERCONTEXT_PB) || defined (INTERNAL_TEST) -#define SUPPORT_PERCONTEXT_PB_SET_OFFSET OPTIONS_BIT17 -#define OPTIONS_BIT17 (0x1U << 17) -#else -#define OPTIONS_BIT17 0x0 -#endif - -#if defined(SUPPORT_SGX_HWPERF) || defined (INTERNAL_TEST) -#define SUPPORT_SGX_HWPERF_SET_OFFSET OPTIONS_BIT18 -#define OPTIONS_BIT18 (0x1U << 18) -#else -#define OPTIONS_BIT18 0x0 -#endif - - - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) || defined (INTERNAL_TEST) -#define SUPPORT_SGX_MMU_DUMMY_PAGE_SET_OFFSET OPTIONS_BIT19 -#define OPTIONS_BIT19 (0x1U << 19) -#else -#define OPTIONS_BIT19 0x0 -#endif - -#if defined(SUPPORT_SGX_PRIORITY_SCHEDULING) || defined (INTERNAL_TEST) -#define SUPPORT_SGX_PRIORITY_SCHEDULING_SET_OFFSET OPTIONS_BIT20 -#define OPTIONS_BIT20 (0x1U << 20) -#else -#define OPTIONS_BIT20 0x0 -#endif - -#if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) || defined (INTERNAL_TEST) -#define SUPPORT_SGX_LOW_LATENCY_SCHEDULING_SET_OFFSET OPTIONS_BIT21 -#define OPTIONS_BIT21 (0x1U << 21) -#else -#define OPTIONS_BIT21 0x0 -#endif - -#if defined(USE_SUPPORT_NO_TA3D_OVERLAP) || defined (INTERNAL_TEST) -#define USE_SUPPORT_NO_TA3D_OVERLAP_SET_OFFSET OPTIONS_BIT22 -#define OPTIONS_BIT22 (0x1U << 22) -#else -#define OPTIONS_BIT22 0x0 -#endif - -#if defined(SGX_FEATURE_MP) || defined (INTERNAL_TEST) -#if defined(SGX_FEATURE_MP_CORE_COUNT) -#define OPTIONS_HIGHBYTE ((SGX_FEATURE_MP_CORE_COUNT-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET) -#define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET 28UL -#define SGX_FEATURE_MP_CORE_COUNT_SET_MASK 0xFF -#else -#define OPTIONS_HIGHBYTE (((SGX_FEATURE_MP_CORE_COUNT_TA-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET) |\ - ((SGX_FEATURE_MP_CORE_COUNT_3D-1) << SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET_3D)) -#define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET 24UL -#define SGX_FEATURE_MP_CORE_COUNT_SET_OFFSET_3D 28UL -#define SGX_FEATURE_MP_CORE_COUNT_SET_MASK 0xFF -#endif -#else -#define OPTIONS_HIGHBYTE 0x0 -#endif - - - -#define SGX_BUILD_OPTIONS \ - OPTIONS_BIT0 |\ - OPTIONS_BIT1 |\ - OPTIONS_BIT2 |\ - OPTIONS_BIT3 |\ - OPTIONS_BIT4 |\ - OPTIONS_BIT5 |\ - OPTIONS_BIT6 |\ - OPTIONS_BIT8 |\ - OPTIONS_BIT9 |\ - OPTIONS_BIT10 |\ - OPTIONS_BIT11 |\ - OPTIONS_BIT12 |\ - OPTIONS_BIT13 |\ - OPTIONS_BIT14 |\ - OPTIONS_BIT15 |\ - OPTIONS_BIT16 |\ - OPTIONS_BIT17 |\ - OPTIONS_BIT18 |\ - OPTIONS_BIT19 |\ - OPTIONS_BIT20 |\ - OPTIONS_BIT21 |\ - OPTIONS_BIT22 |\ - OPTIONS_HIGHBYTE - diff --git a/drivers/staging/cdv/pvr/include4/sgxapi_km.h b/drivers/staging/cdv/pvr/include4/sgxapi_km.h deleted file mode 100644 index dcbafbf..0000000 --- a/drivers/staging/cdv/pvr/include4/sgxapi_km.h +++ /dev/null @@ -1,423 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SGXAPI_KM_H__ -#define __SGXAPI_KM_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "sgxdefs.h" - -#if (defined(__linux__) || defined(__QNXNTO__)) && !defined(USE_CODE) - #if defined(__KERNEL__) - #include - #else - #include - #endif -#endif - -#define SGX_UNDEFINED_HEAP_ID (~0LU) -#define SGX_GENERAL_HEAP_ID 0 -#define SGX_TADATA_HEAP_ID 1 -#define SGX_KERNEL_CODE_HEAP_ID 2 -#define SGX_KERNEL_DATA_HEAP_ID 3 -#define SGX_PIXELSHADER_HEAP_ID 4 -#define SGX_VERTEXSHADER_HEAP_ID 5 -#define SGX_PDSPIXEL_CODEDATA_HEAP_ID 6 -#define SGX_PDSVERTEX_CODEDATA_HEAP_ID 7 -#define SGX_SYNCINFO_HEAP_ID 8 -#define SGX_SHARED_3DPARAMETERS_HEAP_ID 9 -#define SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID 10 -#if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) -#define SGX_GENERAL_MAPPING_HEAP_ID 11 -#endif -#if defined(SGX_FEATURE_2D_HARDWARE) -#define SGX_2D_HEAP_ID 12 -#else -#if defined(FIX_HW_BRN_26915) -#define SGX_CGBUFFER_HEAP_ID 13 -#endif -#endif -#define SGX_MAX_HEAP_ID 14 - -#if (defined(SUPPORT_PERCONTEXT_PB) || defined(SUPPORT_HYBRID_PB)) -#define SGX_3DPARAMETERS_HEAP_ID SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID -#else -#define SGX_3DPARAMETERS_HEAP_ID SGX_SHARED_3DPARAMETERS_HEAP_ID -#endif -#if defined(SGX543) || defined(SGX544) || defined(SGX554) -#define SGX_USE_CODE_SEGMENT_RANGE_BITS 23 -#else -#define SGX_USE_CODE_SEGMENT_RANGE_BITS 19 -#endif - -#define SGX_MAX_TA_STATUS_VALS 32 -#define SGX_MAX_3D_STATUS_VALS 4 - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) -#define SGX_MAX_TA_DST_SYNCS 1 -#define SGX_MAX_TA_SRC_SYNCS 1 -#define SGX_MAX_3D_SRC_SYNCS 4 -#else -#define SGX_MAX_SRC_SYNCS 8 -#define SGX_MAX_DST_SYNCS 1 -#endif - - -#if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) -#define PVRSRV_SGX_HWPERF_NUM_COUNTERS 8 -#define PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS 11 -#else -#define PVRSRV_SGX_HWPERF_NUM_COUNTERS 9 -#define PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS 8 -#endif - -#define PVRSRV_SGX_HWPERF_INVALID 0x1 - -#define PVRSRV_SGX_HWPERF_TRANSFER 0x2 -#define PVRSRV_SGX_HWPERF_TA 0x3 -#define PVRSRV_SGX_HWPERF_3D 0x4 -#define PVRSRV_SGX_HWPERF_2D 0x5 -#define PVRSRV_SGX_HWPERF_POWER 0x6 -#define PVRSRV_SGX_HWPERF_PERIODIC 0x7 -#define PVRSRV_SGX_HWPERF_3DSPM 0x8 - -#define PVRSRV_SGX_HWPERF_MK_EVENT 0x101 -#define PVRSRV_SGX_HWPERF_MK_TA 0x102 -#define PVRSRV_SGX_HWPERF_MK_3D 0x103 -#define PVRSRV_SGX_HWPERF_MK_2D 0x104 -#define PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY 0x105 -#define PVRSRV_SGX_HWPERF_MK_TA_DUMMY 0x106 -#define PVRSRV_SGX_HWPERF_MK_3D_DUMMY 0x107 -#define PVRSRV_SGX_HWPERF_MK_2D_DUMMY 0x108 -#define PVRSRV_SGX_HWPERF_MK_TA_LOCKUP 0x109 -#define PVRSRV_SGX_HWPERF_MK_3D_LOCKUP 0x10A -#define PVRSRV_SGX_HWPERF_MK_2D_LOCKUP 0x10B - -#define PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT 28 -#define PVRSRV_SGX_HWPERF_TYPE_OP_MASK ((1UL << PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT) - 1) -#define PVRSRV_SGX_HWPERF_TYPE_OP_START (0UL << PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT) -#define PVRSRV_SGX_HWPERF_TYPE_OP_END (1Ul << PVRSRV_SGX_HWPERF_TYPE_STARTEND_BIT) - -#define PVRSRV_SGX_HWPERF_TYPE_TRANSFER_START (PVRSRV_SGX_HWPERF_TRANSFER | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_TRANSFER_END (PVRSRV_SGX_HWPERF_TRANSFER | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_TA_START (PVRSRV_SGX_HWPERF_TA | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_TA_END (PVRSRV_SGX_HWPERF_TA | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_3D_START (PVRSRV_SGX_HWPERF_3D | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_3D_END (PVRSRV_SGX_HWPERF_3D | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_2D_START (PVRSRV_SGX_HWPERF_2D | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_2D_END (PVRSRV_SGX_HWPERF_2D | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_POWER_START (PVRSRV_SGX_HWPERF_POWER | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_POWER_END (PVRSRV_SGX_HWPERF_POWER | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_PERIODIC (PVRSRV_SGX_HWPERF_PERIODIC) -#define PVRSRV_SGX_HWPERF_TYPE_3DSPM_START (PVRSRV_SGX_HWPERF_3DSPM | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_3DSPM_END (PVRSRV_SGX_HWPERF_3DSPM | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TRANSFER_DUMMY_START (PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TRANSFER_DUMMY_END (PVRSRV_SGX_HWPERF_MK_TRANSFER_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_DUMMY_START (PVRSRV_SGX_HWPERF_MK_TA_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_DUMMY_END (PVRSRV_SGX_HWPERF_MK_TA_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_DUMMY_START (PVRSRV_SGX_HWPERF_MK_3D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_DUMMY_END (PVRSRV_SGX_HWPERF_MK_3D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_DUMMY_START (PVRSRV_SGX_HWPERF_MK_2D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_DUMMY_END (PVRSRV_SGX_HWPERF_MK_2D_DUMMY | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_LOCKUP (PVRSRV_SGX_HWPERF_MK_TA_LOCKUP) -#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_LOCKUP (PVRSRV_SGX_HWPERF_MK_3D_LOCKUP) -#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_LOCKUP (PVRSRV_SGX_HWPERF_MK_2D_LOCKUP) - -#define PVRSRV_SGX_HWPERF_TYPE_MK_EVENT_START (PVRSRV_SGX_HWPERF_MK_EVENT | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_EVENT_END (PVRSRV_SGX_HWPERF_MK_EVENT | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_START (PVRSRV_SGX_HWPERF_MK_TA | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_TA_END (PVRSRV_SGX_HWPERF_MK_TA | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_START (PVRSRV_SGX_HWPERF_MK_3D | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_3D_END (PVRSRV_SGX_HWPERF_MK_3D | PVRSRV_SGX_HWPERF_TYPE_OP_END) -#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_START (PVRSRV_SGX_HWPERF_MK_2D | PVRSRV_SGX_HWPERF_TYPE_OP_START) -#define PVRSRV_SGX_HWPERF_TYPE_MK_2D_END (PVRSRV_SGX_HWPERF_MK_2D | PVRSRV_SGX_HWPERF_TYPE_OP_END) - -#define PVRSRV_SGX_HWPERF_STATUS_OFF (0x0) -#define PVRSRV_SGX_HWPERF_STATUS_RESET_COUNTERS (1UL << 0) -#define PVRSRV_SGX_HWPERF_STATUS_GRAPHICS_ON (1UL << 1) -#define PVRSRV_SGX_HWPERF_STATUS_PERIODIC_ON (1UL << 2) -#define PVRSRV_SGX_HWPERF_STATUS_MK_EXECUTION_ON (1UL << 3) - - -typedef struct _PVRSRV_SGX_HWPERF_CB_ENTRY_ -{ - IMG_UINT32 ui32FrameNo; - IMG_UINT32 ui32PID; - IMG_UINT32 ui32RTData; - IMG_UINT32 ui32Type; - IMG_UINT32 ui32Ordinal; - IMG_UINT32 ui32Info; - IMG_UINT32 ui32Clocksx16; - - IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; - IMG_UINT32 ui32MiscCounters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS]; -} PVRSRV_SGX_HWPERF_CB_ENTRY; - - -typedef struct _CTL_STATUS_ -{ - IMG_DEV_VIRTADDR sStatusDevAddr; - IMG_UINT32 ui32StatusValue; -} CTL_STATUS; - - -typedef enum _SGX_MISC_INFO_REQUEST_ -{ - SGX_MISC_INFO_REQUEST_CLOCKSPEED = 0, - SGX_MISC_INFO_REQUEST_SGXREV, - SGX_MISC_INFO_REQUEST_DRIVER_SGXREV, -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - SGX_MISC_INFO_REQUEST_MEMREAD, - SGX_MISC_INFO_REQUEST_MEMCOPY, -#endif - SGX_MISC_INFO_REQUEST_SET_HWPERF_STATUS, -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - SGX_MISC_INFO_REQUEST_SET_BREAKPOINT, - SGX_MISC_INFO_REQUEST_POLL_BREAKPOINT, - SGX_MISC_INFO_REQUEST_RESUME_BREAKPOINT, -#endif - SGX_MISC_INFO_DUMP_DEBUG_INFO, - SGX_MISC_INFO_PANIC, - SGX_MISC_INFO_REQUEST_SPM, - SGX_MISC_INFO_REQUEST_ACTIVEPOWER, - SGX_MISC_INFO_REQUEST_LOCKUPS, - SGX_MISC_INFO_REQUEST_FORCE_I16 = 0x7fff -} SGX_MISC_INFO_REQUEST; - - -typedef struct _PVRSRV_SGX_MISCINFO_FEATURES -{ - IMG_UINT32 ui32CoreRev; - IMG_UINT32 ui32CoreID; - IMG_UINT32 ui32DDKVersion; - IMG_UINT32 ui32DDKBuild; - IMG_UINT32 ui32CoreIdSW; - IMG_UINT32 ui32CoreRevSW; - IMG_UINT32 ui32BuildOptions; -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - IMG_UINT32 ui32DeviceMemValue; -#endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - IMG_DEV_VIRTADDR sDevVAEDMStatusBuffer; - IMG_PVOID pvEDMStatusBuffer; -#endif -} PVRSRV_SGX_MISCINFO_FEATURES; - - -typedef struct _PVRSRV_SGX_MISCINFO_LOCKUPS -{ - IMG_UINT32 ui32HostDetectedLockups; - IMG_UINT32 ui32uKernelDetectedLockups; -} PVRSRV_SGX_MISCINFO_LOCKUPS; - - -typedef struct _PVRSRV_SGX_MISCINFO_ACTIVEPOWER -{ - IMG_UINT32 ui32NumActivePowerEvents; -} PVRSRV_SGX_MISCINFO_ACTIVEPOWER; - - -typedef struct _PVRSRV_SGX_MISCINFO_SPM -{ - IMG_HANDLE hRTDataSet; - IMG_UINT32 ui32NumOutOfMemSignals; - IMG_UINT32 ui32NumSPMRenders; -} PVRSRV_SGX_MISCINFO_SPM; - - -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) -typedef struct _SGX_BREAKPOINT_INFO -{ - - IMG_BOOL bBPEnable; - - IMG_UINT32 ui32BPIndex; - - IMG_UINT32 ui32DataMasterMask; - - IMG_DEV_VIRTADDR sBPDevVAddr, sBPDevVAddrEnd; - - IMG_BOOL bTrapped; - - IMG_BOOL bRead; - - IMG_BOOL bWrite; - - IMG_BOOL bTrappedBP; - - IMG_UINT32 ui32CoreNum; - IMG_DEV_VIRTADDR sTrappedBPDevVAddr; - IMG_UINT32 ui32TrappedBPBurstLength; - IMG_BOOL bTrappedBPRead; - IMG_UINT32 ui32TrappedBPDataMaster; - IMG_UINT32 ui32TrappedBPTag; -} SGX_BREAKPOINT_INFO; -#endif - - -typedef struct _PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS -{ - - IMG_UINT32 ui32NewHWPerfStatus; - - #if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) - - IMG_UINT32 aui32PerfGroup[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; - - IMG_UINT32 aui32PerfBit[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; - #else - - IMG_UINT32 ui32PerfGroup; - #endif -} PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS; - - -typedef struct _SGX_MISC_INFO_ -{ - SGX_MISC_INFO_REQUEST eRequest; - IMG_UINT32 ui32Padding; -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - IMG_DEV_VIRTADDR sDevVAddrSrc; - IMG_DEV_VIRTADDR sDevVAddrDest; - IMG_HANDLE hDevMemContext; -#endif - union - { - IMG_UINT32 reserved; - PVRSRV_SGX_MISCINFO_FEATURES sSGXFeatures; - IMG_UINT32 ui32SGXClockSpeed; - PVRSRV_SGX_MISCINFO_ACTIVEPOWER sActivePower; - PVRSRV_SGX_MISCINFO_LOCKUPS sLockups; - PVRSRV_SGX_MISCINFO_SPM sSPM; -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - SGX_BREAKPOINT_INFO sSGXBreakpointInfo; -#endif - PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS sSetHWPerfStatus; - } uData; -} SGX_MISC_INFO; - -#if defined(SGX_FEATURE_2D_HARDWARE) -#define PVRSRV_MAX_BLT_SRC_SYNCS 3 -#endif - - -#define SGX_KICKTA_DUMPBITMAP_MAX_NAME_LENGTH 256 - -typedef struct _SGX_KICKTA_DUMPBITMAP_ -{ - IMG_DEV_VIRTADDR sDevBaseAddr; - IMG_UINT32 ui32Flags; - IMG_UINT32 ui32Width; - IMG_UINT32 ui32Height; - IMG_UINT32 ui32Stride; - IMG_UINT32 ui32PDUMPFormat; - IMG_UINT32 ui32BytesPP; - IMG_CHAR pszName[SGX_KICKTA_DUMPBITMAP_MAX_NAME_LENGTH]; -} SGX_KICKTA_DUMPBITMAP, *PSGX_KICKTA_DUMPBITMAP; - -#define PVRSRV_SGX_PDUMP_CONTEXT_MAX_BITMAP_ARRAY_SIZE (16) - -typedef struct _PVRSRV_SGX_PDUMP_CONTEXT_ -{ - - IMG_UINT32 ui32CacheControl; - -} PVRSRV_SGX_PDUMP_CONTEXT; - - -#if !defined (SUPPORT_SID_INTERFACE) -typedef struct _SGX_KICKTA_DUMP_ROFF_ -{ - IMG_HANDLE hKernelMemInfo; - IMG_UINT32 uiAllocIndex; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Value; - IMG_PCHAR pszName; -} SGX_KICKTA_DUMP_ROFF, *PSGX_KICKTA_DUMP_ROFF; -#endif - -#if defined (SUPPORT_SID_INTERFACE) -typedef struct _SGX_KICKTA_DUMP_BUFFER_KM_ -#else -typedef struct _SGX_KICKTA_DUMP_BUFFER_ -#endif -{ - IMG_UINT32 ui32SpaceUsed; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32End; - IMG_UINT32 ui32BufferSize; - IMG_UINT32 ui32BackEndLength; - IMG_UINT32 uiAllocIndex; - IMG_HANDLE hKernelMemInfo; - IMG_PVOID pvLinAddr; -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - IMG_HANDLE hCtrlKernelMemInfo; - IMG_DEV_VIRTADDR sCtrlDevVAddr; -#endif - IMG_PCHAR pszName; -#if defined (SUPPORT_SID_INTERFACE) -} SGX_KICKTA_DUMP_BUFFER_KM, *PSGX_KICKTA_DUMP_BUFFER_KM; -#else -} SGX_KICKTA_DUMP_BUFFER, *PSGX_KICKTA_DUMP_BUFFER; -#endif - -#if !defined (SUPPORT_SID_INTERFACE) -#ifdef PDUMP -typedef struct _SGX_KICKTA_PDUMP_ -{ - - PSGX_KICKTA_DUMPBITMAP psPDumpBitmapArray; - IMG_UINT32 ui32PDumpBitmapSize; - - - PSGX_KICKTA_DUMP_BUFFER psBufferArray; - IMG_UINT32 ui32BufferArraySize; - - - PSGX_KICKTA_DUMP_ROFF psROffArray; - IMG_UINT32 ui32ROffArraySize; -} SGX_KICKTA_PDUMP, *PSGX_KICKTA_PDUMP; -#endif -#endif - -#if defined(TRANSFER_QUEUE) -#if defined(SGX_FEATURE_2D_HARDWARE) -#define SGX_MAX_2D_BLIT_CMD_SIZE 26 -#define SGX_MAX_2D_SRC_SYNC_OPS 3 -#endif -#define SGX_MAX_TRANSFER_STATUS_VALS 2 -#define SGX_MAX_TRANSFER_SYNC_OPS 5 -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/include4/sgxscript.h b/drivers/staging/cdv/pvr/include4/sgxscript.h deleted file mode 100644 index df79e2f..0000000 --- a/drivers/staging/cdv/pvr/include4/sgxscript.h +++ /dev/null @@ -1,81 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SGXSCRIPT_H__ -#define __SGXSCRIPT_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#define SGX_MAX_INIT_COMMANDS 64 -#define SGX_MAX_DEINIT_COMMANDS 16 - -typedef enum _SGX_INIT_OPERATION -{ - SGX_INIT_OP_ILLEGAL = 0, - SGX_INIT_OP_WRITE_HW_REG, -#if defined(PDUMP) - SGX_INIT_OP_PDUMP_HW_REG, -#endif - SGX_INIT_OP_HALT -} SGX_INIT_OPERATION; - -typedef union _SGX_INIT_COMMAND -{ - SGX_INIT_OPERATION eOp; - struct { - SGX_INIT_OPERATION eOp; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Value; - } sWriteHWReg; -#if defined(PDUMP) - struct { - SGX_INIT_OPERATION eOp; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Value; - } sPDumpHWReg; -#endif -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) - struct { - SGX_INIT_OPERATION eOp; - } sWorkaroundBRN22997; -#endif -} SGX_INIT_COMMAND; - -typedef struct _SGX_INIT_SCRIPTS_ -{ - SGX_INIT_COMMAND asInitCommandsPart1[SGX_MAX_INIT_COMMANDS]; - SGX_INIT_COMMAND asInitCommandsPart2[SGX_MAX_INIT_COMMANDS]; - SGX_INIT_COMMAND asDeinitCommands[SGX_MAX_DEINIT_COMMANDS]; -} SGX_INIT_SCRIPTS; - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/.gitignore b/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/.gitignore deleted file mode 100644 index f558f8b..0000000 --- a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -binary_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/makefile.linux.common b/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/makefile.linux.common deleted file mode 100644 index 3cda2a7..0000000 --- a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/makefile.linux.common +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -DISPLAY_CONTROLLER_SOURCES_ROOT = $(KBUILDROOT)/$(DISPLAY_CONTROLLER_DIR) - -INCLUDES += -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/services4/include \ - -I$(EURASIAROOT)/services4/system/$(PVR_SYSTEM) \ - -I$(EURASIAROOT)/services4/system/include \ - -I$(EURASIAROOT)/services4/srvkm/env/linux/mrst - -SOURCES += $(DISPLAY_CONTROLLER_SOURCES_ROOT)/mrstlfb_displayclass.c \ - $(DISPLAY_CONTROLLER_SOURCES_ROOT)/mrstlfb_linux.c -MODULE_CFLAGS += -DPVR_MRST_FB_SET_PAR_ON_INIT diff --git a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb.h b/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb.h deleted file mode 100644 index 8780ea0..0000000 --- a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb.h +++ /dev/null @@ -1,303 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __MRSTLFB_H__ -#define __MRSTLFB_H__ - -#include -#include "psb_intel_reg.h" - -#define MRST_USING_INTERRUPTS - -#define PSB_HWSTAM 0x2098 -#define PSB_INSTPM 0x20C0 -#define PSB_INT_IDENTITY_R 0x20A4 -#define _PSB_VSYNC_PIPEB_FLAG (1<<5) -#define _PSB_VSYNC_PIPEA_FLAG (1<<7) -#define _PSB_IRQ_SGX_FLAG (1<<18) -#define _PSB_IRQ_MSVDX_FLAG (1<<19) -#define PSB_INT_MASK_R 0x20A8 -#define PSB_INT_ENABLE_R 0x20A0 - -#define MAX_SWAPCHAINS 1 -#define MAX_FLIPBUFFERS 9 - -/* IPC message and command defines used to enable/disable mipi panel voltages */ -#define IPC_MSG_PANEL_ON_OFF 0xE9 -#define IPC_CMD_PANEL_ON 1 -#define IPC_CMD_PANEL_OFF 0 - -typedef void * MRST_HANDLE; - -typedef enum tag_mrst_bool -{ - MRST_FALSE = 0, - MRST_TRUE = 1, -} MRST_BOOL, *MRST_PBOOL; - -typedef int(* MRSTLFB_VSYNC_ISR_PFN)(struct drm_device* psDrmDevice, int iPipe); - - -typedef struct MRSTLFB_BUFFER_TAG -{ - - IMG_UINT32 ui32BufferSize; - union { - - IMG_SYS_PHYADDR *psNonCont; - - IMG_SYS_PHYADDR sCont; - } uSysAddr; - - IMG_DEV_VIRTADDR sDevVAddr; - - IMG_CPU_VIRTADDR sCPUVAddr; - - PVRSRV_SYNC_DATA *psSyncData; - - MRST_BOOL bIsContiguous; - - MRST_BOOL bIsAllocated; - - IMG_UINT32 ui32OwnerTaskID; -} MRSTLFB_BUFFER; - -typedef struct MRSTLFB_VSYNC_FLIP_ITEM_TAG -{ - - - - MRST_HANDLE hCmdComplete; - - unsigned long ulSwapInterval; - - MRST_BOOL bValid; - - MRST_BOOL bFlipped; - - MRST_BOOL bCmdCompleted; - - - - - - MRSTLFB_BUFFER* psBuffer; -} MRSTLFB_VSYNC_FLIP_ITEM; - -typedef struct MRSTLFB_SWAPCHAIN_TAG -{ - - unsigned long ulBufferCount; - - IMG_UINT32 ui32SwapChainID; - - - MRSTLFB_BUFFER **ppsBuffer; - - - unsigned long ulSwapChainLength; - - - MRSTLFB_VSYNC_FLIP_ITEM *psVSyncFlips; - - - unsigned long ulInsertIndex; - - - unsigned long ulRemoveIndex; - - - PVRSRV_DC_DISP2SRV_KMJTABLE *psPVRJTable; - - - struct drm_driver *psDrmDriver; - - - struct drm_device *psDrmDev; - - struct MRSTLFB_SWAPCHAIN_TAG *psNext; - - struct MRSTLFB_DEVINFO_TAG *psDevInfo; - unsigned long ui32Height; - unsigned long ui32Width; - unsigned long ui32ByteStride; - -} MRSTLFB_SWAPCHAIN; - -typedef struct MRSTLFB_FBINFO_TAG -{ - unsigned long ulFBSize; - unsigned long ulBufferSize; - unsigned long ulRoundedBufferSize; - unsigned long ulWidth; - unsigned long ulHeight; - unsigned long ulByteStride; - - - - IMG_SYS_PHYADDR sSysAddr; - IMG_CPU_VIRTADDR sCPUVAddr; - IMG_DEV_VIRTADDR sDevVAddr; - - - PVRSRV_PIXEL_FORMAT ePixelFormat; -}MRSTLFB_FBINFO; - -/** - * If DRI is enable then extemding drm_device - */ -typedef struct MRSTLFB_DEVINFO_TAG -{ - unsigned int uiDeviceID; - - struct drm_device *psDrmDevice; - - - - MRSTLFB_BUFFER sSystemBuffer; - - - PVRSRV_DC_DISP2SRV_KMJTABLE sPVRJTable; - - - PVRSRV_DC_SRV2DISP_KMJTABLE sDCJTable; - - - unsigned long ulRefCount; - - MRSTLFB_SWAPCHAIN *psCurrentSwapChain; - - MRSTLFB_SWAPCHAIN *apsSwapChains[MAX_SWAPCHAINS]; - - IMG_UINT32 ui32SwapChainNum; - - - void *pvRegs; - - - unsigned long ulSetFlushStateRefCount; - - - MRST_BOOL bFlushCommands; - - - MRST_BOOL bBlanked; - - - struct fb_info *psLINFBInfo; - - - struct notifier_block sLINNotifBlock; - - - spinlock_t sSwapChainLock; - - - - - IMG_DEV_VIRTADDR sDisplayDevVAddr; - - DISPLAY_INFO sDisplayInfo; - - - DISPLAY_FORMAT sDisplayFormat; - - - DISPLAY_DIMS sDisplayDim; - - IMG_UINT32 ui32MainPipe; - - - MRST_BOOL bSuspended; - - - MRST_BOOL bLeaveVT; - - - unsigned long ulLastFlipAddr; - - - MRST_BOOL bLastFlipAddrValid; -} MRSTLFB_DEVINFO; - -#if 0 -#define MRSTLFB_PAGE_SIZE 4096 -#define MRSTLFB_PAGE_MASK (MRSTLFB_PAGE_SIZE - 1) -#define MRSTLFB_PAGE_TRUNC (~MRSTLFB_PAGE_MASK) - -#define MRSTLFB_PAGE_ROUNDUP(x) (((x) + MRSTLFB_PAGE_MASK) & MRSTLFB_PAGE_TRUNC) -#endif - -#ifdef DEBUG -#define DEBUG_PRINTK(x) printk x -#else -#define DEBUG_PRINTK(x) -#endif - -#define DISPLAY_DEVICE_NAME "PowerVR Cedartrail Linux Display Driver" -#define DRVNAME "cdvlfb" -#define DEVNAME DRVNAME -#define DRIVER_PREFIX DRVNAME - -typedef enum _MRST_ERROR_ -{ - MRST_OK = 0, - MRST_ERROR_GENERIC = 1, - MRST_ERROR_OUT_OF_MEMORY = 2, - MRST_ERROR_TOO_FEW_BUFFERS = 3, - MRST_ERROR_INVALID_PARAMS = 4, - MRST_ERROR_INIT_FAILURE = 5, - MRST_ERROR_CANT_REGISTER_CALLBACK = 6, - MRST_ERROR_INVALID_DEVICE = 7, - MRST_ERROR_DEVICE_REGISTER_FAILED = 8 -} MRST_ERROR; - - -#ifndef UNREFERENCED_PARAMETER -#define UNREFERENCED_PARAMETER(param) (param) = (param) -#endif - -MRST_ERROR MRSTLFBInit(struct drm_device * dev); -MRST_ERROR MRSTLFBDeinit(void); - -int MRSTLFBAllocBuffer(struct drm_device *dev, IMG_UINT32 ui32Size, MRSTLFB_BUFFER **ppBuffer); -int MRSTLFBFreeBuffer(struct drm_device *dev, MRSTLFB_BUFFER **ppBuffer); - -void *MRSTLFBAllocKernelMem(unsigned long ulSize); -void MRSTLFBFreeKernelMem(void *pvMem); -MRST_ERROR MRSTLFBGetLibFuncAddr(char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable); -MRST_ERROR MRSTLFBInstallVSyncISR (MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_VSYNC_ISR_PFN pVsyncHandler); -MRST_ERROR MRSTLFBUninstallVSyncISR(MRSTLFB_DEVINFO *psDevInfo); -void MRSTLFBEnableVSyncInterrupt(MRSTLFB_DEVINFO *psDevInfo); -void MRSTLFBDisableVSyncInterrupt(MRSTLFB_DEVINFO *psDevInfo); - -void MRSTLFBFlipToSurface(MRSTLFB_DEVINFO *psDevInfo, unsigned long uiAddr); - -void MRSTLFBSuspend(void); -void MRSTLFBResume(void); - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_displayclass.c b/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_displayclass.c deleted file mode 100644 index 7d937d7..0000000 --- a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_displayclass.c +++ /dev/null @@ -1,1652 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "img_defs.h" -#include "servicesext.h" -#include "kerneldisplay.h" -#include "mrstlfb.h" - -#include "psb_fb.h" -#include "psb_drv.h" -#include "psb_powermgmt.h" - -IMG_UINT32 gui32MRSTDisplayDeviceID; - -PVRSRV_ERROR MRSTLFBPrePowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -PVRSRV_ERROR MRSTLFBPostPowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -#ifdef MODESET_640x480 -extern int psb_to_640 (struct fb_info* info); -#endif - -extern void mrst_init_LGE_MIPI(struct drm_device *dev); -extern void mrst_init_NSC_MIPI_bridge(struct drm_device *dev); - -struct psbfb_par { - struct drm_device *dev; - void *psbfb; - - int dpms_state; - - int crtc_count; - - uint32_t crtc_ids[2]; -}; - -extern void* psbfb_vdc_reg(struct drm_device* dev); - -static void *gpvAnchor; - - -#define MRSTLFB_COMMAND_COUNT 1 - -static PFN_DC_GET_PVRJTABLE pfnGetPVRJTable = 0; - -static MRSTLFB_DEVINFO * GetAnchorPtr(void) -{ - return (MRSTLFB_DEVINFO *)gpvAnchor; -} - -static void SetAnchorPtr(MRSTLFB_DEVINFO *psDevInfo) -{ - gpvAnchor = (void*)psDevInfo; -} - -static int MRSTLFB_dimension_match(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_SWAPCHAIN *psSwapChain) -{ - int dimension_match = 1; - - /* When the psSwapchain is NULL, it means that it will explicitly switch - * to the system buffer. So it is considered as match. - */ - if (!psSwapChain) - return dimension_match; - - if ((psSwapChain->ui32Height != psDevInfo->sDisplayDim.ui32Height) || - (psSwapChain->ui32ByteStride != psDevInfo->sDisplayDim.ui32ByteStride) || - (psSwapChain->ui32Width != psDevInfo->sDisplayDim.ui32Width)) - dimension_match = 0; - - return dimension_match; -} - -static void MRSTLFBFlip(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_BUFFER *psBuffer, int dim_match) -{ - unsigned long ulAddr = (unsigned long)psBuffer->sDevVAddr.uiAddr; - - if (!psDevInfo->bSuspended && !psDevInfo->bLeaveVT && dim_match) - { - MRSTLFBFlipToSurface(psDevInfo, ulAddr); - } - - psDevInfo->ulLastFlipAddr = ulAddr; - psDevInfo->bLastFlipAddrValid = MRST_TRUE; -} - -static void MRSTLFBRestoreLastFlip(MRSTLFB_DEVINFO *psDevInfo) -{ - if (!psDevInfo->bSuspended && !psDevInfo->bLeaveVT) - { - if (psDevInfo->bLastFlipAddrValid) - { - MRSTLFBFlipToSurface(psDevInfo, psDevInfo->ulLastFlipAddr); - } - } -} - -static void MRSTLFBClearSavedFlip(MRSTLFB_DEVINFO *psDevInfo) -{ - psDevInfo->bLastFlipAddrValid = MRST_FALSE; -} - -static void FlushInternalVSyncQueue(MRSTLFB_SWAPCHAIN *psSwapChain, MRST_BOOL bFlip, int dim_match) -{ - MRSTLFB_VSYNC_FLIP_ITEM *psFlipItem; - unsigned long ulMaxIndex; - unsigned long i; - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - ulMaxIndex = psSwapChain->ulSwapChainLength - 1; - - for(i = 0; i < psSwapChain->ulSwapChainLength; i++) - { - if (psFlipItem->bValid == MRST_FALSE) - { - continue; - } - - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": FlushInternalVSyncQueue: Flushing swap buffer (index %lu)\n", psSwapChain->ulRemoveIndex)); - - if(psFlipItem->bFlipped == MRST_FALSE) - { - if (bFlip) - { - - MRSTLFBFlip(psSwapChain->psDevInfo, psFlipItem->psBuffer, dim_match); - } - } - - if(psFlipItem->bCmdCompleted == MRST_FALSE) - { - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": FlushInternalVSyncQueue: Calling command complete for swap buffer (index %lu)\n", psSwapChain->ulRemoveIndex)); - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete((IMG_HANDLE)psFlipItem->hCmdComplete, MRST_TRUE); - } - - - psSwapChain->ulRemoveIndex++; - - if(psSwapChain->ulRemoveIndex > ulMaxIndex) - { - psSwapChain->ulRemoveIndex = 0; - } - - - psFlipItem->bFlipped = MRST_FALSE; - psFlipItem->bCmdCompleted = MRST_FALSE; - psFlipItem->bValid = MRST_FALSE; - - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - } - - psSwapChain->ulInsertIndex = 0; - psSwapChain->ulRemoveIndex = 0; -} - -static void DRMLFBFlipBuffer(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_SWAPCHAIN *psSwapChain, MRSTLFB_BUFFER *psBuffer) -{ - int dim_match = MRSTLFB_dimension_match(psDevInfo, psSwapChain); - if(psSwapChain != NULL) - { - if(psDevInfo->psCurrentSwapChain != NULL) - { - - if(psDevInfo->psCurrentSwapChain != psSwapChain) - FlushInternalVSyncQueue(psDevInfo->psCurrentSwapChain, MRST_FALSE, dim_match); - } - psDevInfo->psCurrentSwapChain = psSwapChain; - } - - MRSTLFBFlip(psDevInfo, psBuffer, dim_match); -} - -static void SetFlushStateNoLock(MRSTLFB_DEVINFO* psDevInfo, - MRST_BOOL bFlushState) -{ - if (bFlushState) - { - if (psDevInfo->ulSetFlushStateRefCount == 0) - { - psDevInfo->bFlushCommands = MRST_TRUE; - if (psDevInfo->psCurrentSwapChain != NULL) - { - int dim_match = MRSTLFB_dimension_match(psDevInfo, - psDevInfo->psCurrentSwapChain); - FlushInternalVSyncQueue(psDevInfo->psCurrentSwapChain, MRST_TRUE, dim_match); - } - } - psDevInfo->ulSetFlushStateRefCount++; - } - else - { - if (psDevInfo->ulSetFlushStateRefCount != 0) - { - psDevInfo->ulSetFlushStateRefCount--; - if (psDevInfo->ulSetFlushStateRefCount == 0) - { - psDevInfo->bFlushCommands = MRST_FALSE; - } - } - } -} - -static IMG_VOID SetFlushState(MRSTLFB_DEVINFO* psDevInfo, - MRST_BOOL bFlushState) -{ - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - SetFlushStateNoLock(psDevInfo, bFlushState); - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} - -static IMG_VOID SetDCState(IMG_HANDLE hDevice, IMG_UINT32 ui32State) -{ - MRSTLFB_DEVINFO *psDevInfo = (MRSTLFB_DEVINFO *)hDevice; - - switch (ui32State) - { - case DC_STATE_FLUSH_COMMANDS: - SetFlushState(psDevInfo, MRST_TRUE); - break; - case DC_STATE_NO_FLUSH_COMMANDS: - SetFlushState(psDevInfo, MRST_FALSE); - break; - default: - break; - } - - return; -} - -static int FrameBufferEvents(struct notifier_block *psNotif, - unsigned long event, void *data) -{ - MRSTLFB_DEVINFO *psDevInfo; - struct fb_event *psFBEvent = (struct fb_event *)data; - MRST_BOOL bBlanked; - - - if (event != FB_EVENT_BLANK) - { - return 0; - } - - psDevInfo = GetAnchorPtr(); - - bBlanked = (*(IMG_INT *)psFBEvent->data != 0) ? MRST_TRUE: MRST_FALSE; - - if (bBlanked != psDevInfo->bBlanked) - { - psDevInfo->bBlanked = bBlanked; - - SetFlushState(psDevInfo, bBlanked); - } - - return 0; -} - - -static MRST_ERROR UnblankDisplay(MRSTLFB_DEVINFO *psDevInfo) -{ - int res; - - console_lock(); - res = fb_blank(psDevInfo->psLINFBInfo, 0); - console_unlock(); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_blank failed (%d)", res); - return (MRST_ERROR_GENERIC); - } - - return (MRST_OK); -} - -static MRST_ERROR EnableLFBEventNotification(MRSTLFB_DEVINFO *psDevInfo) -{ - int res; - MRST_ERROR eError; - - - memset(&psDevInfo->sLINNotifBlock, 0, sizeof(psDevInfo->sLINNotifBlock)); - - psDevInfo->sLINNotifBlock.notifier_call = FrameBufferEvents; - psDevInfo->bBlanked = MRST_FALSE; - - res = fb_register_client(&psDevInfo->sLINNotifBlock); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_register_client failed (%d)", res); - - return (MRST_ERROR_GENERIC); - } - - eError = UnblankDisplay(psDevInfo); - if (eError != MRST_OK) - { - DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX - ": UnblankDisplay failed (%d)", eError)); - return eError; - } - - return (MRST_OK); -} - -static MRST_ERROR DisableLFBEventNotification(MRSTLFB_DEVINFO *psDevInfo) -{ - int res; - - - res = fb_unregister_client(&psDevInfo->sLINNotifBlock); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_unregister_client failed (%d)", res); - return (MRST_ERROR_GENERIC); - } - - return (MRST_OK); -} - -static PVRSRV_ERROR OpenDCDevice(IMG_UINT32 ui32DeviceID, - IMG_HANDLE *phDevice, - PVRSRV_SYNC_DATA* psSystemBufferSyncData) -{ - MRSTLFB_DEVINFO *psDevInfo; - MRST_ERROR eError; - - UNREFERENCED_PARAMETER(ui32DeviceID); - - psDevInfo = GetAnchorPtr(); - - - psDevInfo->sSystemBuffer.psSyncData = psSystemBufferSyncData; - - psDevInfo->ulSetFlushStateRefCount = 0; - psDevInfo->bFlushCommands = MRST_FALSE; - - eError = EnableLFBEventNotification(psDevInfo); - if (eError != MRST_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't enable framebuffer event notification\n"); - return PVRSRV_ERROR_UNABLE_TO_OPEN_DC_DEVICE; - } - - - *phDevice = (IMG_HANDLE)psDevInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR CloseDCDevice(IMG_HANDLE hDevice) -{ - MRSTLFB_DEVINFO *psDevInfo = (MRSTLFB_DEVINFO *)hDevice; - MRST_ERROR eError; - - eError = DisableLFBEventNotification(psDevInfo); - if (eError != MRST_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't disable framebuffer event notification\n"); - return PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR EnumDCFormats(IMG_HANDLE hDevice, - IMG_UINT32 *pui32NumFormats, - DISPLAY_FORMAT *psFormat) -{ - MRSTLFB_DEVINFO *psDevInfo; - - if(!hDevice || !pui32NumFormats) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - - *pui32NumFormats = 1; - - if(psFormat) - { - psFormat[0] = psDevInfo->sDisplayFormat; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR EnumDCDims(IMG_HANDLE hDevice, - DISPLAY_FORMAT *psFormat, - IMG_UINT32 *pui32NumDims, - DISPLAY_DIMS *psDim) -{ - MRSTLFB_DEVINFO *psDevInfo; - - if(!hDevice || !psFormat || !pui32NumDims) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - - *pui32NumDims = 1; - - - if(psDim) - { - psDim[0] = psDevInfo->sDisplayDim; - } - - return (PVRSRV_OK); -} - - -static PVRSRV_ERROR GetDCSystemBuffer(IMG_HANDLE hDevice, IMG_HANDLE *phBuffer) -{ - MRSTLFB_DEVINFO *psDevInfo; - - if(!hDevice || !phBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - - - - *phBuffer = (IMG_HANDLE)&psDevInfo->sSystemBuffer; - - return (PVRSRV_OK); -} - - -static PVRSRV_ERROR GetDCInfo(IMG_HANDLE hDevice, DISPLAY_INFO *psDCInfo) -{ - MRSTLFB_DEVINFO *psDevInfo; - - if(!hDevice || !psDCInfo) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - - *psDCInfo = psDevInfo->sDisplayInfo; - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR GetDCBufferAddr(IMG_HANDLE hDevice, - IMG_HANDLE hBuffer, - IMG_SYS_PHYADDR **ppsSysAddr, - IMG_SIZE_T *pui32ByteSize, - IMG_VOID **ppvCpuVAddr, - IMG_HANDLE *phOSMapInfo, - IMG_BOOL *pbIsContiguous, - IMG_UINT32 *pui32TilingStride) -{ - MRSTLFB_BUFFER *psSystemBuffer; - - UNREFERENCED_PARAMETER(pui32TilingStride); - - if(!hDevice) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - if(!hBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - psSystemBuffer = (MRSTLFB_BUFFER *)hBuffer; - - if (!ppsSysAddr) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - if( psSystemBuffer->bIsContiguous ) - *ppsSysAddr = &psSystemBuffer->uSysAddr.sCont; - else - *ppsSysAddr = psSystemBuffer->uSysAddr.psNonCont; - - if (!pui32ByteSize) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - *pui32ByteSize = psSystemBuffer->ui32BufferSize; - - if (ppvCpuVAddr) - { - *ppvCpuVAddr = psSystemBuffer->sCPUVAddr; - } - - if (phOSMapInfo) - { - *phOSMapInfo = (IMG_HANDLE)0; - } - - if (pbIsContiguous) - { - *pbIsContiguous = psSystemBuffer->bIsContiguous; - } - - return (PVRSRV_OK); -} - - - -static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, - IMG_UINT32 ui32Flags, - DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib, - DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib, - IMG_UINT32 ui32BufferCount, - PVRSRV_SYNC_DATA **ppsSyncData, - IMG_UINT32 ui32OEMFlags, - IMG_HANDLE *phSwapChain, - IMG_UINT32 *pui32SwapChainID) -{ - MRSTLFB_DEVINFO *psDevInfo; - MRSTLFB_SWAPCHAIN *psSwapChain; - MRSTLFB_BUFFER **ppsBuffer; - MRSTLFB_VSYNC_FLIP_ITEM *psVSyncFlips; - IMG_UINT32 i; - IMG_UINT32 iSCId = MAX_SWAPCHAINS; - PVRSRV_ERROR eError = PVRSRV_ERROR_NOT_SUPPORTED; - unsigned long ulLockFlags; - struct drm_device* psDrmDev; - unsigned long ulSwapChainLength; - - UNREFERENCED_PARAMETER(ui32OEMFlags); - - - if(!hDevice - || !psDstSurfAttrib - || !psSrcSurfAttrib - || !ppsSyncData - || !phSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - - - if(ui32BufferCount > psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers) - { - return (PVRSRV_ERROR_TOOMANYBUFFERS); - } - - - ulSwapChainLength = ui32BufferCount + 1; - - - - if(psDstSurfAttrib->pixelformat != psDevInfo->sDisplayFormat.pixelformat - || psDstSurfAttrib->sDims.ui32ByteStride != psDevInfo->sDisplayDim.ui32ByteStride - || psDstSurfAttrib->sDims.ui32Width != psDevInfo->sDisplayDim.ui32Width - || psDstSurfAttrib->sDims.ui32Height != psDevInfo->sDisplayDim.ui32Height) - { - - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - if(psDstSurfAttrib->pixelformat != psSrcSurfAttrib->pixelformat - || psDstSurfAttrib->sDims.ui32ByteStride != psSrcSurfAttrib->sDims.ui32ByteStride - || psDstSurfAttrib->sDims.ui32Width != psSrcSurfAttrib->sDims.ui32Width - || psDstSurfAttrib->sDims.ui32Height != psSrcSurfAttrib->sDims.ui32Height) - { - - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - - UNREFERENCED_PARAMETER(ui32Flags); - - /* If we can't enable the vblank on the corresponding pipe, - * don't create the DC swap chain - */ - if (psb_enable_vblank(psDevInfo->psDrmDevice, psDevInfo->ui32MainPipe)) - return (PVRSRV_ERROR_NOT_SUPPORTED); - - - psSwapChain = (MRSTLFB_SWAPCHAIN*)MRSTLFBAllocKernelMem(sizeof(MRSTLFB_SWAPCHAIN)); - if(!psSwapChain) - { - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - - for(iSCId = 0;iSCId < MAX_SWAPCHAINS;++iSCId) - { - if( psDevInfo->apsSwapChains[iSCId] == NULL ) - { - psDevInfo->apsSwapChains[iSCId] = psSwapChain; - break; - } - } - - if(iSCId == MAX_SWAPCHAINS) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeSwapChain; - } - - ppsBuffer = (MRSTLFB_BUFFER**)MRSTLFBAllocKernelMem(sizeof(MRSTLFB_BUFFER*) * ui32BufferCount); - if(!ppsBuffer) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeSwapChain; - } - - psVSyncFlips = (MRSTLFB_VSYNC_FLIP_ITEM *)MRSTLFBAllocKernelMem(sizeof(MRSTLFB_VSYNC_FLIP_ITEM) * ulSwapChainLength); - if (!psVSyncFlips) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeBuffers; - } - - psSwapChain->ulSwapChainLength = ulSwapChainLength; - psSwapChain->ulBufferCount = (unsigned long)ui32BufferCount; - psSwapChain->ppsBuffer = ppsBuffer; - psSwapChain->psVSyncFlips = psVSyncFlips; - psSwapChain->ulInsertIndex = 0; - psSwapChain->ulRemoveIndex = 0; - psSwapChain->psPVRJTable = &psDevInfo->sPVRJTable; - /* save the dimension info of system buffer for the new swapchain*/ - psSwapChain->ui32Height = psDevInfo->sDisplayDim.ui32Height; - psSwapChain->ui32ByteStride = psDevInfo->sDisplayDim.ui32ByteStride; - psSwapChain->ui32Width = psDevInfo->sDisplayDim.ui32Width; - - memset(ppsBuffer, 0, sizeof(MRSTLFB_BUFFER *) * ui32BufferCount); - for (i = 0; i < ui32BufferCount; i++) - { - unsigned long bufSize = psDevInfo->sDisplayDim.ui32ByteStride * psDevInfo->sDisplayDim.ui32Height; - if (MRSTLFBAllocBuffer(psDevInfo->psDrmDevice, bufSize, &ppsBuffer[i]) != MRST_OK) { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorFreeVSyncFlips; - } - ppsBuffer[i]->psSyncData = ppsSyncData[i]; - } - - - for (i = 0; i < ulSwapChainLength; i++) - { - psVSyncFlips[i].bValid = MRST_FALSE; - psVSyncFlips[i].bFlipped = MRST_FALSE; - psVSyncFlips[i].bCmdCompleted = MRST_FALSE; - } - - - psDrmDev = psDevInfo->psDrmDevice; - - psSwapChain->psDevInfo = psDevInfo; - psSwapChain->psDrmDev = psDrmDev; - psSwapChain->psDrmDriver = psDrmDev->driver; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - psSwapChain->ui32SwapChainID = *pui32SwapChainID = iSCId+1; - - if(psDevInfo->psCurrentSwapChain == NULL) - psDevInfo->psCurrentSwapChain = psSwapChain; - - psDevInfo->ui32SwapChainNum++; - if(psDevInfo->ui32SwapChainNum == 1) - { - MRSTLFBEnableVSyncInterrupt(psDevInfo); - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - - *phSwapChain = (IMG_HANDLE)psSwapChain; - - return (PVRSRV_OK); - -ErrorFreeVSyncFlips: - for (i = 0; i < ui32BufferCount; i++) { - MRSTLFBFreeBuffer(psDevInfo->psDrmDevice, &ppsBuffer[i]); - } - MRSTLFBFreeKernelMem(psVSyncFlips); -ErrorFreeBuffers: - MRSTLFBFreeKernelMem(ppsBuffer); -ErrorFreeSwapChain: - if(iSCId != MAX_SWAPCHAINS && psDevInfo->apsSwapChains[iSCId] == psSwapChain ) - psDevInfo->apsSwapChains[iSCId] = NULL; - MRSTLFBFreeKernelMem(psSwapChain); - - return eError; -} - -static PVRSRV_ERROR DestroyDCSwapChain(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain) -{ - MRSTLFB_DEVINFO *psDevInfo; - MRSTLFB_SWAPCHAIN *psSwapChain; - unsigned long ulLockFlags; - int i; - int dimension_match; - - - if(!hDevice || !hSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psDevInfo = (MRSTLFB_DEVINFO*)hDevice; - psSwapChain = (MRSTLFB_SWAPCHAIN*)hSwapChain; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - dimension_match = MRSTLFB_dimension_match(psDevInfo, psSwapChain); - - psDevInfo->ui32SwapChainNum--; - - if(psDevInfo->ui32SwapChainNum == 0) - { - MRSTLFBDisableVSyncInterrupt(psDevInfo); - psDevInfo->psCurrentSwapChain = NULL; - } - - psDevInfo->apsSwapChains[ psSwapChain->ui32SwapChainID -1] = NULL; - - - FlushInternalVSyncQueue(psSwapChain, (psDevInfo->ui32SwapChainNum == 0), dimension_match); - - if (psDevInfo->ui32SwapChainNum == 0) - { - - DRMLFBFlipBuffer(psDevInfo, NULL, &psDevInfo->sSystemBuffer); - MRSTLFBClearSavedFlip(psDevInfo); - } - - if(psDevInfo->psCurrentSwapChain == psSwapChain) - psDevInfo->psCurrentSwapChain = NULL; - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - - for (i = 0; i < psSwapChain->ulBufferCount; i++) - { - MRSTLFBFreeBuffer(psDevInfo->psDrmDevice, &psSwapChain->ppsBuffer[i] ); - } - MRSTLFBFreeKernelMem(psSwapChain->psVSyncFlips); - MRSTLFBFreeKernelMem(psSwapChain->ppsBuffer); - MRSTLFBFreeKernelMem(psSwapChain); - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SetDCDstRect(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(psRect); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCSrcRect(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(psRect); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCDstColourKey(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(ui32CKColour); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR SetDCSrcColourKey(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour) -{ - UNREFERENCED_PARAMETER(hDevice); - UNREFERENCED_PARAMETER(hSwapChain); - UNREFERENCED_PARAMETER(ui32CKColour); - - - - return (PVRSRV_ERROR_NOT_SUPPORTED); -} - -static PVRSRV_ERROR GetDCBuffers(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain, - IMG_UINT32 *pui32BufferCount, - IMG_HANDLE *phBuffer) -{ - MRSTLFB_SWAPCHAIN *psSwapChain; - unsigned long i; - - - if(!hDevice - || !hSwapChain - || !pui32BufferCount - || !phBuffer) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psSwapChain = (MRSTLFB_SWAPCHAIN*)hSwapChain; - - - *pui32BufferCount = (IMG_UINT32)psSwapChain->ulBufferCount; - - - for(i=0; iulBufferCount; i++) - { - phBuffer[i] = (IMG_HANDLE)psSwapChain->ppsBuffer[i]; - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SwapToDCBuffer(IMG_HANDLE hDevice, - IMG_HANDLE hBuffer, - IMG_UINT32 ui32SwapInterval, - IMG_HANDLE hPrivateTag, - IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect) -{ - UNREFERENCED_PARAMETER(ui32SwapInterval); - UNREFERENCED_PARAMETER(hPrivateTag); - UNREFERENCED_PARAMETER(psClipRect); - - if(!hDevice - || !hBuffer - || (ui32ClipRectCount != 0)) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR SwapToDCSystem(IMG_HANDLE hDevice, - IMG_HANDLE hSwapChain) -{ - if(!hDevice || !hSwapChain) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - - return (PVRSRV_OK); -} - -static MRST_BOOL MRSTLFBVSyncIHandler(MRSTLFB_DEVINFO *psDevInfo) -{ - MRST_BOOL bStatus = MRST_TRUE; - MRSTLFB_VSYNC_FLIP_ITEM *psFlipItem; - unsigned long ulMaxIndex; - unsigned long ulLockFlags; - MRSTLFB_SWAPCHAIN *psSwapChain; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - - psSwapChain = psDevInfo->psCurrentSwapChain; - if (psSwapChain == NULL) - { - goto ExitUnlock; - } - - - if (psDevInfo->bFlushCommands || psDevInfo->bSuspended || psDevInfo->bLeaveVT) - { - goto ExitUnlock; - } - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - ulMaxIndex = psSwapChain->ulSwapChainLength - 1; - - while(psFlipItem->bValid) - { - - if(psFlipItem->bFlipped) - { - - if(!psFlipItem->bCmdCompleted) - { - - MRST_BOOL bScheduleMISR; - - bScheduleMISR = MRST_TRUE; - - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete((IMG_HANDLE)psFlipItem->hCmdComplete, bScheduleMISR); - - - psFlipItem->bCmdCompleted = MRST_TRUE; - } - - - psFlipItem->ulSwapInterval--; - - - if(psFlipItem->ulSwapInterval == 0) - { - - psSwapChain->ulRemoveIndex++; - - if(psSwapChain->ulRemoveIndex > ulMaxIndex) - { - psSwapChain->ulRemoveIndex = 0; - } - - - psFlipItem->bCmdCompleted = MRST_FALSE; - psFlipItem->bFlipped = MRST_FALSE; - - - psFlipItem->bValid = MRST_FALSE; - } - else - { - - break; - } - } - else - { - - DRMLFBFlipBuffer(psDevInfo, psSwapChain, psFlipItem->psBuffer); - - - psFlipItem->bFlipped = MRST_TRUE; - - - break; - } - - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; - } - -ExitUnlock: - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - - return bStatus; -} - -#if defined(MRST_USING_INTERRUPTS) -static int -MRSTLFBVSyncISR(struct drm_device *psDrmDevice, int iPipe) -{ - MRSTLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - - if (iPipe == psDevInfo->ui32MainPipe) - MRSTLFBVSyncIHandler(psDevInfo); - - return 0; -} -#endif - - -static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, - IMG_UINT32 ui32DataSize, - IMG_VOID *pvData) -{ - DISPLAYCLASS_FLIP_COMMAND *psFlipCmd; - MRSTLFB_DEVINFO *psDevInfo; - MRSTLFB_BUFFER *psBuffer; - MRSTLFB_SWAPCHAIN *psSwapChain; -#if defined(MRST_USING_INTERRUPTS) - MRSTLFB_VSYNC_FLIP_ITEM* psFlipItem; -#endif - unsigned long ulLockFlags; - - - if(!hCmdCookie || !pvData) - { - return IMG_FALSE; - } - - - psFlipCmd = (DISPLAYCLASS_FLIP_COMMAND*)pvData; - - if (psFlipCmd == IMG_NULL || sizeof(DISPLAYCLASS_FLIP_COMMAND) != ui32DataSize) - { - return IMG_FALSE; - } - - - psDevInfo = (MRSTLFB_DEVINFO*)psFlipCmd->hExtDevice; - - psBuffer = (MRSTLFB_BUFFER*)psFlipCmd->hExtBuffer; - psSwapChain = (MRSTLFB_SWAPCHAIN*) psFlipCmd->hExtSwapChain; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - -#if defined(MRST_USING_INTERRUPTS) - - if(psFlipCmd->ui32SwapInterval == 0 || psDevInfo->bFlushCommands) - { -#endif - DRMLFBFlipBuffer(psDevInfo, psSwapChain, psBuffer); - - - - psSwapChain->psPVRJTable->pfnPVRSRVCmdComplete(hCmdCookie, IMG_TRUE); - -#if defined(MRST_USING_INTERRUPTS) - goto ExitTrueUnlock; - } - - psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulInsertIndex]; - - - if(psFlipItem->bValid == MRST_FALSE) - { - unsigned long ulMaxIndex = psSwapChain->ulSwapChainLength - 1; - - if(psSwapChain->ulInsertIndex == psSwapChain->ulRemoveIndex) - { - - DRMLFBFlipBuffer(psDevInfo, psSwapChain, psBuffer); - - psFlipItem->bFlipped = MRST_TRUE; - } - else - { - psFlipItem->bFlipped = MRST_FALSE; - } - - psFlipItem->hCmdComplete = (MRST_HANDLE)hCmdCookie; - psFlipItem->ulSwapInterval = (unsigned long)psFlipCmd->ui32SwapInterval; - psFlipItem->psBuffer = psBuffer; - psFlipItem->bValid = MRST_TRUE; - - psSwapChain->ulInsertIndex++; - if(psSwapChain->ulInsertIndex > ulMaxIndex) - { - psSwapChain->ulInsertIndex = 0; - } - - goto ExitTrueUnlock; - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - return IMG_FALSE; - -ExitTrueUnlock: -#endif - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - return IMG_TRUE; -} - - -#if defined(PVR_MRST_FB_SET_PAR_ON_INIT) -static void MRSTFBSetPar(struct fb_info *psLINFBInfo) -{ - console_lock(); - - if (psLINFBInfo->fbops->fb_set_par != NULL) - { - int res; - - res = psLINFBInfo->fbops->fb_set_par(psLINFBInfo); - if (res != 0) - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_set_par failed: %d\n", res); - - } - } - else - { - printk(KERN_WARNING DRIVER_PREFIX - ": fb_set_par not set - HW cursor may not work\n"); - } - - console_unlock(); -} -#endif - -void MRSTLFBSuspend(void) -{ - MRSTLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - if (!psDevInfo->bSuspended) - { -#if !defined(PVR_MRST_STYLE_PM) - if(psDevInfo->ui32SwapChainNum != 0) - { - MRSTLFBDisableVSyncInterrupt(psDevInfo); - } -#endif - psDevInfo->bSuspended = MRST_TRUE; - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); -} - -void MRSTLFBResume(void) -{ - MRSTLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - unsigned long ulLockFlags; - - spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - - if (psDevInfo->bSuspended) - { -#if !defined(PVR_MRST_STYLE_PM) - if(psDevInfo->ui32SwapChainNum != 0) - { - MRSTLFBEnableVSyncInterrupt(psDevInfo); - } -#endif - psDevInfo->bSuspended = MRST_FALSE; - - MRSTLFBRestoreLastFlip(psDevInfo); - } - - spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); - -#if !defined(PVR_MRST_STYLE_PM) - (void) UnblankDisplay(psDevInfo); -#endif -} - -#ifdef DRM_PVR_USE_INTEL_FB -#include "mm.h" -int MRSTLFBHandleChangeFB(struct drm_device* dev, struct psb_framebuffer *psbfb) -{ - MRSTLFB_DEVINFO *psDevInfo = GetAnchorPtr(); - int i; - struct drm_psb_private * dev_priv = (struct drm_psb_private *)dev->dev_private; - struct psb_gtt * pg = dev_priv->pg; - LinuxMemArea *psLinuxMemArea = NULL; - MRSTLFB_BUFFER *pBuffer; - - if (!psDevInfo->sSystemBuffer.bIsContiguous) { - MRSTLFBFreeKernelMem( psDevInfo->sSystemBuffer.uSysAddr.psNonCont ); - psDevInfo->sSystemBuffer.uSysAddr.psNonCont = NULL; - } - psDevInfo->sDisplayFormat.pixelformat = (psbfb->base.depth == 16) ? PVRSRV_PIXEL_FORMAT_RGB565 : PVRSRV_PIXEL_FORMAT_ARGB8888; - - psDevInfo->sDisplayDim.ui32ByteStride = psbfb->base.pitch; - psDevInfo->sDisplayDim.ui32Width = psbfb->base.width; - psDevInfo->sDisplayDim.ui32Height = psbfb->base.height; - - psDevInfo->sSystemBuffer.ui32BufferSize = psbfb->size; - - if (psbfb->pvrBO != NULL) - { - psDevInfo->sSystemBuffer.sCPUVAddr = psbfb->fbdev->screen_base; - psDevInfo->sSystemBuffer.sDevVAddr.uiAddr = psbfb->offset; - } - else - { - if (dev_priv->fb_reloc) { - /* - * the frame buffer has been relocated - * because the stolen memory isn't large enough - */ - pBuffer = (MRSTLFB_BUFFER *)dev_priv->fb_reloc; - psDevInfo->sSystemBuffer.sCPUVAddr = pBuffer->sCPUVAddr; - psDevInfo->sSystemBuffer.sDevVAddr.uiAddr = pBuffer->sDevVAddr.uiAddr; - } else { - psDevInfo->sSystemBuffer.sCPUVAddr = pg->vram_addr; - psDevInfo->sSystemBuffer.sDevVAddr.uiAddr = 0; - } - } - - psDevInfo->sSystemBuffer.bIsAllocated = MRST_FALSE; - - if (psbfb->pvrBO != NULL) - { - psLinuxMemArea = (LinuxMemArea *)psbfb->pvrBO->sMemBlk.hOSMemHandle; - } - - if ((dev_priv->fb_reloc == NULL) && - ((psbfb->pvrBO == NULL) || (psLinuxMemArea->eAreaType != LINUX_MEM_AREA_ALLOC_PAGES))) - { - psDevInfo->sSystemBuffer.bIsContiguous = MRST_TRUE; - psDevInfo->sSystemBuffer.uSysAddr.sCont.uiAddr = pg->stolen_base; - } else { - psDevInfo->sSystemBuffer.bIsContiguous = MRST_FALSE; - psDevInfo->sSystemBuffer.uSysAddr.psNonCont = MRSTLFBAllocKernelMem( sizeof( IMG_SYS_PHYADDR ) * (psbfb->size >> PAGE_SHIFT)); - if (psDevInfo->sSystemBuffer.uSysAddr.psNonCont == NULL) { - WARN_ON_ONCE(1); - printk(KERN_ERR "Out of Memory in HandleChangeFB\n"); - return -ENOMEM; - } - if (dev_priv->fb_reloc) { - pBuffer = (MRSTLFB_BUFFER *)dev_priv->fb_reloc; - for (i = 0; i < psbfb->size >> PAGE_SHIFT; i++) - psDevInfo->sSystemBuffer.uSysAddr.psNonCont[i].uiAddr = - pBuffer->uSysAddr.psNonCont[i].uiAddr; - } else { - struct page **page_list = psLinuxMemArea->uData.sPageList.pvPageList; - for (i = 0; i < psbfb->size >> PAGE_SHIFT; i++) - psDevInfo->sSystemBuffer.uSysAddr.psNonCont[i].uiAddr = - page_to_pfn(page_list[i]) << PAGE_SHIFT; - } - } - - return 0; -} - - -uint32_t MRSTLFBGetSize(MRSTLFB_BUFFER *pBuffer) -{ - return pBuffer->ui32BufferSize; -} - -void* MRSTLFBGetCPUVAddr(MRSTLFB_BUFFER *pBuffer) -{ - return pBuffer->sCPUVAddr; -} - -uint32_t MRSTLFBGetDevVAddr(MRSTLFB_BUFFER *pBuffer) -{ - return pBuffer->sDevVAddr.uiAddr; -} - -#endif - -static int MRSTLFBFindMainPipe(struct drm_device *dev) -{ - struct drm_crtc *crtc; - - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) - { - if ( drm_helper_crtc_in_use(crtc) ) - { - struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); - return psb_intel_crtc->pipe; - } - } - - return 0; -} - - -static MRST_ERROR InitDev(MRSTLFB_DEVINFO *psDevInfo) -{ - MRST_ERROR eError = MRST_ERROR_GENERIC; - struct fb_info *psLINFBInfo; - struct drm_device * psDrmDevice = psDevInfo->psDrmDevice; - struct drm_psb_private * psDrmPrivate = (struct drm_psb_private *)psDrmDevice->dev_private; - struct psb_fbdev * psPsbFBDev = (struct psb_fbdev *)psDrmPrivate->fbdev; - struct drm_framebuffer * psDrmFB; - struct psb_framebuffer *psbfb; - int i; - - psDrmFB = psPsbFBDev->psb_fb_helper.fb; - if(!psDrmFB) { - printk(KERN_INFO"%s:Cannot find drm FB", __FUNCTION__); - return eError; - } - psbfb = to_psb_fb(psDrmFB); - - psLINFBInfo = (struct fb_info*)psPsbFBDev->psb_fb_helper.fbdev; - -#if defined(PVR_MRST_FB_SET_PAR_ON_INIT) - MRSTFBSetPar(psLINFBInfo); -#endif - - - psDevInfo->sSystemBuffer.bIsContiguous = MRST_TRUE; - psDevInfo->sSystemBuffer.bIsAllocated = MRST_FALSE; - - MRSTLFBHandleChangeFB(psDrmDevice, psbfb); - - - psDevInfo->sDisplayFormat.pixelformat = PVRSRV_PIXEL_FORMAT_ARGB8888; - psDevInfo->psLINFBInfo = psLINFBInfo; - - /* - * Ugly. This will always select the pipe B as the main pipe on CDV. - * If the external monitor is connected during loading the gfx kernel driver, - * it will select the pipe A as the main pipe. Then maybe the wrong main pipe - * is selected when the external monitor is explicitly turned off. - * To be simple, currently we only choose the LVDS pipe as the main pipe. - * Otherwise we will have to handle the scenario when the main pipe is switched. - */ - psDevInfo->ui32MainPipe = MRSTLFBFindMainPipe(psDevInfo->psDrmDevice); - psDevInfo->ui32MainPipe = 1; - - for(i = 0;i < MAX_SWAPCHAINS;++i) - { - psDevInfo->apsSwapChains[i] = NULL; - } - - - - - psDevInfo->pvRegs = psbfb_vdc_reg(psDevInfo->psDrmDevice); - - if (psDevInfo->pvRegs == NULL) - { - eError = PVRSRV_ERROR_BAD_MAPPING; - printk(KERN_WARNING DRIVER_PREFIX ": Couldn't map registers needed for flipping\n"); - return eError; - } - - return MRST_OK; -} - -static void DeInitDev(MRSTLFB_DEVINFO *psDevInfo) -{ - -} - -MRST_ERROR MRSTLFBInit(struct drm_device * dev) -{ - MRSTLFB_DEVINFO *psDevInfo; - //struct drm_psb_private *psDrmPriv = (struct drm_psb_private *)dev->dev_private; - - psDevInfo = GetAnchorPtr(); - - if (psDevInfo == NULL) - { - PFN_CMD_PROC pfnCmdProcList[MRSTLFB_COMMAND_COUNT]; - IMG_UINT32 aui32SyncCountList[MRSTLFB_COMMAND_COUNT][2]; - - psDevInfo = (MRSTLFB_DEVINFO *)MRSTLFBAllocKernelMem(sizeof(MRSTLFB_DEVINFO)); - - if(!psDevInfo) - { - return (MRST_ERROR_OUT_OF_MEMORY); - } - - - memset(psDevInfo, 0, sizeof(MRSTLFB_DEVINFO)); - - - SetAnchorPtr((void*)psDevInfo); - - psDevInfo->psDrmDevice = dev; - psDevInfo->ulRefCount = 0; - - - if(InitDev(psDevInfo) != MRST_OK) - { - return (MRST_ERROR_INIT_FAILURE); - } - - if(MRSTLFBGetLibFuncAddr ("PVRGetDisplayClassJTable", &pfnGetPVRJTable) != MRST_OK) - { - return (MRST_ERROR_INIT_FAILURE); - } - - - if(!(*pfnGetPVRJTable)(&psDevInfo->sPVRJTable)) - { - return (MRST_ERROR_INIT_FAILURE); - } - - - spin_lock_init(&psDevInfo->sSwapChainLock); - - psDevInfo->psCurrentSwapChain = NULL; - psDevInfo->bFlushCommands = MRST_FALSE; - - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = MAX_FLIPBUFFERS; - psDevInfo->sDisplayInfo.ui32MaxSwapChains = MAX_SWAPCHAINS; - psDevInfo->sDisplayInfo.ui32MaxSwapInterval = 3; - psDevInfo->sDisplayInfo.ui32MinSwapInterval = 0; - - strncpy(psDevInfo->sDisplayInfo.szDisplayName, DISPLAY_DEVICE_NAME, MAX_DISPLAY_NAME_SIZE); - - - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Maximum number of swap chain buffers: %u\n", - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers)); - - - - - psDevInfo->sDCJTable.ui32TableSize = sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE); - psDevInfo->sDCJTable.pfnOpenDCDevice = OpenDCDevice; - psDevInfo->sDCJTable.pfnCloseDCDevice = CloseDCDevice; - psDevInfo->sDCJTable.pfnEnumDCFormats = EnumDCFormats; - psDevInfo->sDCJTable.pfnEnumDCDims = EnumDCDims; - psDevInfo->sDCJTable.pfnGetDCSystemBuffer = GetDCSystemBuffer; - psDevInfo->sDCJTable.pfnGetDCInfo = GetDCInfo; - psDevInfo->sDCJTable.pfnGetBufferAddr = GetDCBufferAddr; - psDevInfo->sDCJTable.pfnCreateDCSwapChain = CreateDCSwapChain; - psDevInfo->sDCJTable.pfnDestroyDCSwapChain = DestroyDCSwapChain; - psDevInfo->sDCJTable.pfnSetDCDstRect = SetDCDstRect; - psDevInfo->sDCJTable.pfnSetDCSrcRect = SetDCSrcRect; - psDevInfo->sDCJTable.pfnSetDCDstColourKey = SetDCDstColourKey; - psDevInfo->sDCJTable.pfnSetDCSrcColourKey = SetDCSrcColourKey; - psDevInfo->sDCJTable.pfnGetDCBuffers = GetDCBuffers; - psDevInfo->sDCJTable.pfnSwapToDCBuffer = SwapToDCBuffer; - psDevInfo->sDCJTable.pfnSwapToDCSystem = SwapToDCSystem; - psDevInfo->sDCJTable.pfnSetDCState = SetDCState; - - - if(psDevInfo->sPVRJTable.pfnPVRSRVRegisterDCDevice ( - &psDevInfo->sDCJTable, - &psDevInfo->uiDeviceID ) != PVRSRV_OK) - { - return (MRST_ERROR_DEVICE_REGISTER_FAILED); - } - - printk("Device ID: %d\n", (int)psDevInfo->uiDeviceID); - - -#if defined (MRST_USING_INTERRUPTS) - - if(MRSTLFBInstallVSyncISR(psDevInfo,MRSTLFBVSyncISR) != MRST_OK) - { - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX "ISR Installation failed\n")); - return (MRST_ERROR_INIT_FAILURE); - } -#endif - - - pfnCmdProcList[DC_FLIP_COMMAND] = ProcessFlip; - - - aui32SyncCountList[DC_FLIP_COMMAND][0] = 0; - aui32SyncCountList[DC_FLIP_COMMAND][1] = 2; - - - if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterCmdProcList (psDevInfo->uiDeviceID, - &pfnCmdProcList[0], - aui32SyncCountList, - MRSTLFB_COMMAND_COUNT) != PVRSRV_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": Can't register callback\n"); - return (MRST_ERROR_CANT_REGISTER_CALLBACK); - } - - - } - - - //psDrmPriv->psb_change_fb_handler = MRSTLFBHandleChangeFB; - - //psDrmPriv->psb_leave_vt_handler = DRMLFBLeaveVTHandler; - //psDrmPriv->psb_enter_vt_handler = DRMLFBEnterVTHandler; - - psDevInfo->ulRefCount++; - - - return (MRST_OK); -} - -MRST_ERROR MRSTLFBDeinit(void) -{ - MRSTLFB_DEVINFO *psDevInfo, *psDevFirst; - - psDevFirst = GetAnchorPtr(); - psDevInfo = psDevFirst; - - - if (psDevInfo == NULL) - { - return (MRST_ERROR_GENERIC); - } - - - psDevInfo->ulRefCount--; - - psDevInfo->psDrmDevice = NULL; - if (psDevInfo->ulRefCount == 0) - { - - PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable = &psDevInfo->sPVRJTable; - - if (psDevInfo->sPVRJTable.pfnPVRSRVRemoveCmdProcList (psDevInfo->uiDeviceID, MRSTLFB_COMMAND_COUNT) != PVRSRV_OK) - { - return (MRST_ERROR_GENERIC); - } - - if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterPowerDevice((IMG_UINT32)psDevInfo->uiDeviceID, - IMG_NULL, IMG_NULL, - IMG_NULL, IMG_NULL, IMG_NULL, - PVRSRV_DEV_POWER_STATE_ON, - PVRSRV_DEV_POWER_STATE_ON) != PVRSRV_OK) - { - return (MRST_ERROR_GENERIC); - } - - -#if defined (MRST_USING_INTERRUPTS) - - if(MRSTLFBUninstallVSyncISR(psDevInfo) != MRST_OK) - { - return (MRST_ERROR_GENERIC); - } -#endif - - if (psJTable->pfnPVRSRVRemoveDCDevice(psDevInfo->uiDeviceID) != PVRSRV_OK) - { - return (MRST_ERROR_GENERIC); - } - - DeInitDev(psDevInfo); - - - MRSTLFBFreeKernelMem(psDevInfo); - } - - - SetAnchorPtr(NULL); - - - return (MRST_OK); -} - -int MRSTLFBAllocBuffer(struct drm_device *dev, IMG_UINT32 ui32Size, MRSTLFB_BUFFER **ppBuffer) - -{ - IMG_VOID *pvBuf; - IMG_UINT32 ulPagesNumber; - IMG_UINT32 ulCounter; - int i, ret; - - pvBuf = __vmalloc( ui32Size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, __pgprot((pgprot_val(PAGE_KERNEL ) & ~_PAGE_CACHE_MASK) | _PAGE_CACHE_WC) ); - if( pvBuf == NULL ) - { - return MRST_ERROR_OUT_OF_MEMORY; - } - - ulPagesNumber = (ui32Size + PAGE_SIZE -1) / PAGE_SIZE; - - *ppBuffer = MRSTLFBAllocKernelMem( sizeof( MRSTLFB_BUFFER ) ); - if (*ppBuffer == NULL) { - /* Free the allocated memory */ - vfree(pvBuf); - return MRST_ERROR_OUT_OF_MEMORY; - } - - (*ppBuffer)->sCPUVAddr = pvBuf; - (*ppBuffer)->ui32BufferSize = ui32Size; - (*ppBuffer)->uSysAddr.psNonCont = MRSTLFBAllocKernelMem( sizeof( IMG_SYS_PHYADDR ) * ulPagesNumber); - - if ((*ppBuffer)->uSysAddr.psNonCont == NULL) { - /* Free the allocated memory */ - vfree(pvBuf); - MRSTLFBFreeKernelMem(*ppBuffer); - *ppBuffer = NULL; - return MRST_ERROR_OUT_OF_MEMORY; - } - - (*ppBuffer)->bIsAllocated = MRST_TRUE; - (*ppBuffer)->bIsContiguous = MRST_FALSE; - (*ppBuffer)->ui32OwnerTaskID = task_tgid_nr(current); - - i = 0; - for(ulCounter = 0; ulCounter < ui32Size; ulCounter += PAGE_SIZE) - { - (*ppBuffer)->uSysAddr.psNonCont[i++].uiAddr = vmalloc_to_pfn( pvBuf + ulCounter ) << PAGE_SHIFT; - } - - ret = psb_gtt_map_pvr_memory(dev, (unsigned int)*ppBuffer, - (*ppBuffer)->ui32OwnerTaskID, - (IMG_CPU_PHYADDR*) (*ppBuffer)->uSysAddr.psNonCont, - ulPagesNumber, &(*ppBuffer)->sDevVAddr.uiAddr ); - if (ret == 0) { - (*ppBuffer)->sDevVAddr.uiAddr <<= PAGE_SHIFT; - - return MRST_OK; - } else { - vfree(pvBuf); - MRSTLFBFreeKernelMem((*ppBuffer)->uSysAddr.psNonCont); - MRSTLFBFreeKernelMem(*ppBuffer); - *ppBuffer = NULL; - return MRST_ERROR_OUT_OF_MEMORY; - } -} - -int MRSTLFBFreeBuffer(struct drm_device *dev, MRSTLFB_BUFFER **ppBuffer) -{ - if((*ppBuffer == NULL) || !(*ppBuffer)->bIsAllocated ) - return MRST_ERROR_INVALID_PARAMS; - - psb_gtt_unmap_pvr_memory(dev, (unsigned int)*ppBuffer, - (*ppBuffer)->ui32OwnerTaskID); - - vfree( (*ppBuffer)->sCPUVAddr ); - - MRSTLFBFreeKernelMem( (*ppBuffer)->uSysAddr.psNonCont ); - - MRSTLFBFreeKernelMem( *ppBuffer); - - *ppBuffer = NULL; - - return MRST_OK; -} - diff --git a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c b/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c deleted file mode 100644 index 080b0cc..0000000 --- a/drivers/staging/cdv/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c +++ /dev/null @@ -1,192 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include -#include -#include -#include - -#include - -#include - -#include "img_defs.h" -#include "servicesext.h" -#include "kerneldisplay.h" -#include "pvrmodule.h" -#include "pvr_drm.h" -#include "mrstlfb.h" -#include "kerneldisplay.h" -#include "psb_irq.h" - -#include "psb_drv.h" - -#define MAKESTRING(x) # x - -#if !defined(DISPLAY_CONTROLLER) -#define DISPLAY_CONTROLLER pvrlfb -#endif - -//#define MAKENAME_HELPER(x, y) x ## y -//#define MAKENAME2(x, y) MAKENAME_HELPER(x, y) -//#define MAKENAME(x) MAKENAME2(DISPLAY_CONTROLLER, x) - -#define unref__ __attribute__ ((unused)) - - -extern int fb_idx; - -void *MRSTLFBAllocKernelMem(unsigned long ulSize) -{ - return kmalloc(ulSize, GFP_KERNEL); -} - -void MRSTLFBFreeKernelMem(void *pvMem) -{ - kfree(pvMem); -} - - -MRST_ERROR MRSTLFBGetLibFuncAddr (char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable) -{ - if(strcmp("PVRGetDisplayClassJTable", szFunctionName) != 0) - { - return (MRST_ERROR_INVALID_PARAMS); - } - - - *ppfnFuncTable = PVRGetDisplayClassJTable; - - return (MRST_OK); -} - -static void MRSTLFBVSyncWriteReg(MRSTLFB_DEVINFO *psDevInfo, unsigned long ulOffset, unsigned long ulValue) -{ - - void *pvRegAddr = (void *)(psDevInfo->pvRegs + ulOffset); - mb(); - iowrite32(ulValue, pvRegAddr); -} - -unsigned long MRSTLFBVSyncReadReg(MRSTLFB_DEVINFO * psDevinfo, unsigned long ulOffset) -{ - mb(); - return ioread32((char *)psDevinfo->pvRegs + ulOffset); -} - -void MRSTLFBEnableVSyncInterrupt(MRSTLFB_DEVINFO * psDevinfo) -{ -#if defined(MRST_USING_INTERRUPTS) - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) psDevinfo->psDrmDevice->dev_private; - dev_priv->vblanksEnabledForFlips = true; - psb_enable_vblank(psDevinfo->psDrmDevice, psDevinfo->ui32MainPipe); -#endif -} - -void MRSTLFBDisableVSyncInterrupt(MRSTLFB_DEVINFO * psDevinfo) -{ -#if defined(MRST_USING_INTERRUPTS) - struct drm_device * dev = psDevinfo->psDrmDevice; - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) psDevinfo->psDrmDevice->dev_private; - dev_priv->vblanksEnabledForFlips = false; - if (!dev->vblank_enabled[psDevinfo->ui32MainPipe]) - psb_disable_vblank(psDevinfo->psDrmDevice, psDevinfo->ui32MainPipe); -#endif -} - -#if defined(MRST_USING_INTERRUPTS) -MRST_ERROR MRSTLFBInstallVSyncISR(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_VSYNC_ISR_PFN pVsyncHandler) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) psDevInfo->psDrmDevice->dev_private; - dev_priv->psb_vsync_handler = pVsyncHandler; - return (MRST_OK); -} - - -MRST_ERROR MRSTLFBUninstallVSyncISR(MRSTLFB_DEVINFO *psDevInfo) -{ - struct drm_psb_private *dev_priv = - (struct drm_psb_private *) psDevInfo->psDrmDevice->dev_private; - dev_priv->psb_vsync_handler = NULL; - return (MRST_OK); -} -#endif - - -void MRSTLFBFlipToSurface(MRSTLFB_DEVINFO *psDevInfo, unsigned long uiAddr) -{ - int dspbase = (psDevInfo->ui32MainPipe == 0 ? DSPABASE : DSPBBASE); - int dspsurf = (psDevInfo->ui32MainPipe == 0 ? DSPASURF : DSPBSURF); - - if (IS_CDV(psDevInfo->psDrmDevice)) { - dspsurf = DSPASURF; - MRSTLFBVSyncWriteReg(psDevInfo, dspsurf, uiAddr); - - dspsurf = DSPBSURF; - MRSTLFBVSyncWriteReg(psDevInfo, dspsurf, uiAddr); - } else { - MRSTLFBVSyncWriteReg(psDevInfo, dspbase, uiAddr); - } -} - - -int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Init)(struct drm_device unref__ *dev) -{ - if(MRSTLFBInit(dev) != MRST_OK) - { - printk(KERN_WARNING DRIVER_PREFIX ": MRSTLFB_Init: MRSTLFBInit failed\n"); - return -ENODEV; - } - - return 0; -} - -void PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Cleanup)(struct drm_device unref__ *dev) -{ - if(MRSTLFBDeinit() != MRST_OK) - { - printk(KERN_WARNING DRIVER_PREFIX "%s: can't deinit device\n", __FUNCTION__); - } -} - -int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Suspend)(struct drm_device unref__ *dev) -{ - MRSTLFBSuspend(); - - return 0; -} - -int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Resume)(struct drm_device unref__ *dev) -{ - MRSTLFBResume(); - - return 0; -} diff --git a/drivers/staging/cdv/pvr/services4/include/env/linux-intel/pvr_drm_shared.h b/drivers/staging/cdv/pvr/services4/include/env/linux-intel/pvr_drm_shared.h deleted file mode 100644 index 5510cf9..0000000 --- a/drivers/staging/cdv/pvr/services4/include/env/linux-intel/pvr_drm_shared.h +++ /dev/null @@ -1,50 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__PVR_DRM_SHARED_H__) -#define __PVR_DRM_SHARED_H__ - -#define PVR_DRM_SRVKM_CMD 0x12 -#define PVR_DRM_DISP_CMD 0x13 -#define PVR_DRM_BC_CMD 0x14 -#define PVR_DRM_IS_MASTER_CMD 0x15 -#define PVR_DRM_UNPRIV_CMD 0x16 -#define PVR_DRM_DBGDRV_CMD 0x1E - -#define PVR_DRM_UNPRIV_INIT_SUCCESFUL 0 -#define PVR_DRM_UNPRIV_BUSID_TYPE 1 -#define PVR_DRM_UNPRIV_BUSID_FIELD 2 - -#define PVR_DRM_BUS_TYPE_PCI 0 - -#define PVR_DRM_PCI_DOMAIN 0 -#define PVR_DRM_PCI_BUS 1 -#define PVR_DRM_PCI_DEV 2 -#define PVR_DRM_PCI_FUNC 3 - -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/include/env/linux/pvr_drm_shared.h b/drivers/staging/cdv/pvr/services4/include/env/linux/pvr_drm_shared.h deleted file mode 100644 index 5510cf9..0000000 --- a/drivers/staging/cdv/pvr/services4/include/env/linux/pvr_drm_shared.h +++ /dev/null @@ -1,50 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__PVR_DRM_SHARED_H__) -#define __PVR_DRM_SHARED_H__ - -#define PVR_DRM_SRVKM_CMD 0x12 -#define PVR_DRM_DISP_CMD 0x13 -#define PVR_DRM_BC_CMD 0x14 -#define PVR_DRM_IS_MASTER_CMD 0x15 -#define PVR_DRM_UNPRIV_CMD 0x16 -#define PVR_DRM_DBGDRV_CMD 0x1E - -#define PVR_DRM_UNPRIV_INIT_SUCCESFUL 0 -#define PVR_DRM_UNPRIV_BUSID_TYPE 1 -#define PVR_DRM_UNPRIV_BUSID_FIELD 2 - -#define PVR_DRM_BUS_TYPE_PCI 0 - -#define PVR_DRM_PCI_DOMAIN 0 -#define PVR_DRM_PCI_BUS 1 -#define PVR_DRM_PCI_DEV 2 -#define PVR_DRM_PCI_FUNC 3 - -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/include/kernelbuffer.h b/drivers/staging/cdv/pvr/services4/include/kernelbuffer.h deleted file mode 100644 index 4cd36d2..0000000 --- a/drivers/staging/cdv/pvr/services4/include/kernelbuffer.h +++ /dev/null @@ -1,72 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__KERNELBUFFER_H__) -#define __KERNELBUFFER_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -typedef PVRSRV_ERROR (*PFN_OPEN_BC_DEVICE)(IMG_UINT32, IMG_HANDLE*); -typedef PVRSRV_ERROR (*PFN_CLOSE_BC_DEVICE)(IMG_UINT32, IMG_HANDLE); -typedef PVRSRV_ERROR (*PFN_GET_BC_INFO)(IMG_HANDLE, BUFFER_INFO*); -typedef PVRSRV_ERROR (*PFN_GET_BC_BUFFER)(IMG_HANDLE, IMG_UINT32, PVRSRV_SYNC_DATA*, IMG_HANDLE*); - -typedef struct PVRSRV_BC_SRV2BUFFER_KMJTABLE_TAG -{ - IMG_UINT32 ui32TableSize; - PFN_OPEN_BC_DEVICE pfnOpenBCDevice; - PFN_CLOSE_BC_DEVICE pfnCloseBCDevice; - PFN_GET_BC_INFO pfnGetBCInfo; - PFN_GET_BC_BUFFER pfnGetBCBuffer; - PFN_GET_BUFFER_ADDR pfnGetBufferAddr; - -} PVRSRV_BC_SRV2BUFFER_KMJTABLE; - - -typedef PVRSRV_ERROR (*PFN_BC_REGISTER_BUFFER_DEV)(PVRSRV_BC_SRV2BUFFER_KMJTABLE*, IMG_UINT32*); -typedef IMG_VOID (*PFN_BC_SCHEDULE_DEVICES)(IMG_VOID); -typedef PVRSRV_ERROR (*PFN_BC_REMOVE_BUFFER_DEV)(IMG_UINT32); - -typedef struct PVRSRV_BC_BUFFER2SRV_KMJTABLE_TAG -{ - IMG_UINT32 ui32TableSize; - PFN_BC_REGISTER_BUFFER_DEV pfnPVRSRVRegisterBCDevice; - PFN_BC_SCHEDULE_DEVICES pfnPVRSRVScheduleDevices; - PFN_BC_REMOVE_BUFFER_DEV pfnPVRSRVRemoveBCDevice; - -} PVRSRV_BC_BUFFER2SRV_KMJTABLE, *PPVRSRV_BC_BUFFER2SRV_KMJTABLE; - -typedef IMG_BOOL (*PFN_BC_GET_PVRJTABLE) (PPVRSRV_BC_BUFFER2SRV_KMJTABLE); - -IMG_IMPORT IMG_BOOL PVRGetBufferClassJTable(PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable); - -#if defined (__cplusplus) -} -#endif - -#endif diff --git a/drivers/staging/cdv/pvr/services4/include/kerneldisplay.h b/drivers/staging/cdv/pvr/services4/include/kerneldisplay.h deleted file mode 100644 index cdbef00..0000000 --- a/drivers/staging/cdv/pvr/services4/include/kerneldisplay.h +++ /dev/null @@ -1,165 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__KERNELDISPLAY_H__) -#define __KERNELDISPLAY_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -typedef PVRSRV_ERROR (*PFN_OPEN_DC_DEVICE)(IMG_UINT32, IMG_HANDLE*, PVRSRV_SYNC_DATA*); -typedef PVRSRV_ERROR (*PFN_CLOSE_DC_DEVICE)(IMG_HANDLE); -typedef PVRSRV_ERROR (*PFN_ENUM_DC_FORMATS)(IMG_HANDLE, IMG_UINT32*, DISPLAY_FORMAT*); -typedef PVRSRV_ERROR (*PFN_ENUM_DC_DIMS)(IMG_HANDLE, - DISPLAY_FORMAT*, - IMG_UINT32*, - DISPLAY_DIMS*); -typedef PVRSRV_ERROR (*PFN_GET_DC_SYSTEMBUFFER)(IMG_HANDLE, IMG_HANDLE*); -typedef PVRSRV_ERROR (*PFN_GET_DC_INFO)(IMG_HANDLE, DISPLAY_INFO*); -typedef PVRSRV_ERROR (*PFN_CREATE_DC_SWAPCHAIN)(IMG_HANDLE, - IMG_UINT32, - DISPLAY_SURF_ATTRIBUTES*, - DISPLAY_SURF_ATTRIBUTES*, - IMG_UINT32, - PVRSRV_SYNC_DATA**, - IMG_UINT32, - IMG_HANDLE*, - IMG_UINT32*); -typedef PVRSRV_ERROR (*PFN_DESTROY_DC_SWAPCHAIN)(IMG_HANDLE, - IMG_HANDLE); -typedef PVRSRV_ERROR (*PFN_SET_DC_DSTRECT)(IMG_HANDLE, IMG_HANDLE, IMG_RECT*); -typedef PVRSRV_ERROR (*PFN_SET_DC_SRCRECT)(IMG_HANDLE, IMG_HANDLE, IMG_RECT*); -typedef PVRSRV_ERROR (*PFN_SET_DC_DSTCK)(IMG_HANDLE, IMG_HANDLE, IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_SET_DC_SRCCK)(IMG_HANDLE, IMG_HANDLE, IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_GET_DC_BUFFERS)(IMG_HANDLE, - IMG_HANDLE, - IMG_UINT32*, - IMG_HANDLE*); -typedef PVRSRV_ERROR (*PFN_SWAP_TO_DC_BUFFER)(IMG_HANDLE, - IMG_HANDLE, - IMG_UINT32, - IMG_HANDLE, - IMG_UINT32, - IMG_RECT*); -typedef PVRSRV_ERROR (*PFN_SWAP_TO_DC_SYSTEM)(IMG_HANDLE, IMG_HANDLE); -typedef IMG_VOID (*PFN_QUERY_SWAP_COMMAND_ID)(IMG_HANDLE, IMG_HANDLE, IMG_HANDLE, IMG_HANDLE, IMG_UINT16*, IMG_BOOL*); -typedef IMG_VOID (*PFN_SET_DC_STATE)(IMG_HANDLE, IMG_UINT32); - -typedef struct PVRSRV_DC_SRV2DISP_KMJTABLE_TAG -{ - IMG_UINT32 ui32TableSize; - PFN_OPEN_DC_DEVICE pfnOpenDCDevice; - PFN_CLOSE_DC_DEVICE pfnCloseDCDevice; - PFN_ENUM_DC_FORMATS pfnEnumDCFormats; - PFN_ENUM_DC_DIMS pfnEnumDCDims; - PFN_GET_DC_SYSTEMBUFFER pfnGetDCSystemBuffer; - PFN_GET_DC_INFO pfnGetDCInfo; - PFN_GET_BUFFER_ADDR pfnGetBufferAddr; - PFN_CREATE_DC_SWAPCHAIN pfnCreateDCSwapChain; - PFN_DESTROY_DC_SWAPCHAIN pfnDestroyDCSwapChain; - PFN_SET_DC_DSTRECT pfnSetDCDstRect; - PFN_SET_DC_SRCRECT pfnSetDCSrcRect; - PFN_SET_DC_DSTCK pfnSetDCDstColourKey; - PFN_SET_DC_SRCCK pfnSetDCSrcColourKey; - PFN_GET_DC_BUFFERS pfnGetDCBuffers; - PFN_SWAP_TO_DC_BUFFER pfnSwapToDCBuffer; - PFN_SWAP_TO_DC_SYSTEM pfnSwapToDCSystem; - PFN_SET_DC_STATE pfnSetDCState; - PFN_QUERY_SWAP_COMMAND_ID pfnQuerySwapCommandID; - -} PVRSRV_DC_SRV2DISP_KMJTABLE; - -typedef IMG_BOOL (*PFN_ISR_HANDLER)(IMG_VOID*); - -typedef PVRSRV_ERROR (*PFN_DC_REGISTER_DISPLAY_DEV)(PVRSRV_DC_SRV2DISP_KMJTABLE*, IMG_UINT32*); -typedef PVRSRV_ERROR (*PFN_DC_REMOVE_DISPLAY_DEV)(IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_DC_OEM_FUNCTION)(IMG_UINT32, IMG_VOID*, IMG_UINT32, IMG_VOID*, IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_DC_REGISTER_COMMANDPROCLIST)(IMG_UINT32, PPFN_CMD_PROC,IMG_UINT32[][2], IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_DC_REMOVE_COMMANDPROCLIST)(IMG_UINT32, IMG_UINT32); -typedef IMG_VOID (*PFN_DC_CMD_COMPLETE)(IMG_HANDLE, IMG_BOOL); -typedef PVRSRV_ERROR (*PFN_DC_REGISTER_SYS_ISR)(PFN_ISR_HANDLER, IMG_VOID*, IMG_UINT32, IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_DC_REGISTER_POWER)(IMG_UINT32, PFN_PRE_POWER, PFN_POST_POWER, - PFN_PRE_CLOCKSPEED_CHANGE, PFN_POST_CLOCKSPEED_CHANGE, - IMG_HANDLE, PVRSRV_DEV_POWER_STATE, PVRSRV_DEV_POWER_STATE); - -typedef struct PVRSRV_DC_DISP2SRV_KMJTABLE_TAG -{ - IMG_UINT32 ui32TableSize; - PFN_DC_REGISTER_DISPLAY_DEV pfnPVRSRVRegisterDCDevice; - PFN_DC_REMOVE_DISPLAY_DEV pfnPVRSRVRemoveDCDevice; - PFN_DC_OEM_FUNCTION pfnPVRSRVOEMFunction; - PFN_DC_REGISTER_COMMANDPROCLIST pfnPVRSRVRegisterCmdProcList; - PFN_DC_REMOVE_COMMANDPROCLIST pfnPVRSRVRemoveCmdProcList; - PFN_DC_CMD_COMPLETE pfnPVRSRVCmdComplete; - PFN_DC_REGISTER_SYS_ISR pfnPVRSRVRegisterSystemISRHandler; - PFN_DC_REGISTER_POWER pfnPVRSRVRegisterPowerDevice; - PFN_DC_CMD_COMPLETE pfnPVRSRVFreeCmdCompletePacket; -} PVRSRV_DC_DISP2SRV_KMJTABLE, *PPVRSRV_DC_DISP2SRV_KMJTABLE; - - -typedef struct DISPLAYCLASS_FLIP_COMMAND_TAG -{ - - IMG_HANDLE hExtDevice; - - - IMG_HANDLE hExtSwapChain; - - - IMG_HANDLE hExtBuffer; - - - IMG_HANDLE hPrivateTag; - - - IMG_UINT32 ui32ClipRectCount; - - - IMG_RECT *psClipRect; - - - IMG_UINT32 ui32SwapInterval; - -} DISPLAYCLASS_FLIP_COMMAND; - -#define DC_FLIP_COMMAND 0 - -#define DC_STATE_NO_FLUSH_COMMANDS 0 -#define DC_STATE_FLUSH_COMMANDS 1 - - -typedef IMG_BOOL (*PFN_DC_GET_PVRJTABLE)(PPVRSRV_DC_DISP2SRV_KMJTABLE); - -IMG_IMPORT IMG_BOOL PVRGetDisplayClassJTable(PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable); - - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/pdump.h b/drivers/staging/cdv/pvr/services4/include/pdump.h deleted file mode 100644 index c41a6d4..0000000 --- a/drivers/staging/cdv/pvr/services4/include/pdump.h +++ /dev/null @@ -1,37 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SERVICES_PDUMP_H_ -#define _SERVICES_PDUMP_H_ - -#define PDUMP_FLAGS_NEVER 0x08000000U -#define PDUMP_FLAGS_LASTFRAME 0x10000000U -#define PDUMP_FLAGS_RESETLFBUFFER 0x20000000U -#define PDUMP_FLAGS_CONTINUOUS 0x40000000U -#define PDUMP_FLAGS_PERSISTENT 0x80000000U - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/pvr_bridge.h b/drivers/staging/cdv/pvr/services4/include/pvr_bridge.h deleted file mode 100644 index f170015..0000000 --- a/drivers/staging/cdv/pvr/services4/include/pvr_bridge.h +++ /dev/null @@ -1,1784 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __PVR_BRIDGE_H__ -#define __PVR_BRIDGE_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "servicesint.h" - -#ifdef __linux__ - - #include - - #define PVRSRV_IOC_GID 'g' - #define PVRSRV_IO(INDEX) _IO(PVRSRV_IOC_GID, INDEX, PVRSRV_BRIDGE_PACKAGE) - #define PVRSRV_IOW(INDEX) _IOW(PVRSRV_IOC_GID, INDEX, PVRSRV_BRIDGE_PACKAGE) - #define PVRSRV_IOR(INDEX) _IOR(PVRSRV_IOC_GID, INDEX, PVRSRV_BRIDGE_PACKAGE) - #define PVRSRV_IOWR(INDEX) _IOWR(PVRSRV_IOC_GID, INDEX, PVRSRV_BRIDGE_PACKAGE) - -#else - - #if defined(__QNXNTO__) - #define PVRSRV_IOC_GID (0x0UL) - #else - #error Unknown platform: Cannot define ioctls - #endif - - #define PVRSRV_IO(INDEX) (PVRSRV_IOC_GID + (INDEX)) - #define PVRSRV_IOW(INDEX) (PVRSRV_IOC_GID + (INDEX)) - #define PVRSRV_IOR(INDEX) (PVRSRV_IOC_GID + (INDEX)) - #define PVRSRV_IOWR(INDEX) (PVRSRV_IOC_GID + (INDEX)) - - #define PVRSRV_BRIDGE_BASE PVRSRV_IOC_GID -#endif - - -#define PVRSRV_BRIDGE_CORE_CMD_FIRST 0UL -#define PVRSRV_BRIDGE_ENUM_DEVICES PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+0) -#define PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+1) -#define PVRSRV_BRIDGE_RELEASE_DEVICEINFO PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+2) -#define PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+3) -#define PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+4) -#define PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+5) -#define PVRSRV_BRIDGE_ALLOC_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+6) -#define PVRSRV_BRIDGE_FREE_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+7) -#define PVRSRV_BRIDGE_GETFREE_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+8) -#define PVRSRV_BRIDGE_CREATE_COMMANDQUEUE PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+9) -#define PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+10) -#define PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+11) -#define PVRSRV_BRIDGE_CONNECT_SERVICES PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+12) -#define PVRSRV_BRIDGE_DISCONNECT_SERVICES PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+13) -#define PVRSRV_BRIDGE_WRAP_DEVICE_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+14) -#define PVRSRV_BRIDGE_GET_DEVICEMEMINFO PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+15) -#define PVRSRV_BRIDGE_RESERVE_DEV_VIRTMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+16) -#define PVRSRV_BRIDGE_FREE_DEV_VIRTMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+17) -#define PVRSRV_BRIDGE_MAP_EXT_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+18) -#define PVRSRV_BRIDGE_UNMAP_EXT_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+19) -#define PVRSRV_BRIDGE_MAP_DEV_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+20) -#define PVRSRV_BRIDGE_UNMAP_DEV_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+21) -#define PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+22) -#define PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+23) -#define PVRSRV_BRIDGE_MAP_MEM_INFO_TO_USER PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+24) -#define PVRSRV_BRIDGE_UNMAP_MEM_INFO_FROM_USER PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+25) -#define PVRSRV_BRIDGE_EXPORT_DEVICEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+26) -#define PVRSRV_BRIDGE_RELEASE_MMAP_DATA PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+27) -#define PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+28) -#define PVRSRV_BRIDGE_MAP_DEV_MEMORY_2 PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+29) -#define PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2 PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST+30) -#define PVRSRV_BRIDGE_CORE_CMD_LAST (PVRSRV_BRIDGE_CORE_CMD_FIRST+30) - -#define PVRSRV_BRIDGE_SIM_CMD_FIRST (PVRSRV_BRIDGE_CORE_CMD_LAST+1) -#define PVRSRV_BRIDGE_PROCESS_SIMISR_EVENT PVRSRV_IOWR(PVRSRV_BRIDGE_SIM_CMD_FIRST+0) -#define PVRSRV_BRIDGE_REGISTER_SIM_PROCESS PVRSRV_IOWR(PVRSRV_BRIDGE_SIM_CMD_FIRST+1) -#define PVRSRV_BRIDGE_UNREGISTER_SIM_PROCESS PVRSRV_IOWR(PVRSRV_BRIDGE_SIM_CMD_FIRST+2) -#define PVRSRV_BRIDGE_SIM_CMD_LAST (PVRSRV_BRIDGE_SIM_CMD_FIRST+2) - -#define PVRSRV_BRIDGE_MAPPING_CMD_FIRST (PVRSRV_BRIDGE_SIM_CMD_LAST+1) -#define PVRSRV_BRIDGE_MAPPHYSTOUSERSPACE PVRSRV_IOWR(PVRSRV_BRIDGE_MAPPING_CMD_FIRST+0) -#define PVRSRV_BRIDGE_UNMAPPHYSTOUSERSPACE PVRSRV_IOWR(PVRSRV_BRIDGE_MAPPING_CMD_FIRST+1) -#define PVRSRV_BRIDGE_GETPHYSTOUSERSPACEMAP PVRSRV_IOWR(PVRSRV_BRIDGE_MAPPING_CMD_FIRST+2) -#define PVRSRV_BRIDGE_MAPPING_CMD_LAST (PVRSRV_BRIDGE_MAPPING_CMD_FIRST+2) - -#define PVRSRV_BRIDGE_STATS_CMD_FIRST (PVRSRV_BRIDGE_MAPPING_CMD_LAST+1) -#define PVRSRV_BRIDGE_GET_FB_STATS PVRSRV_IOWR(PVRSRV_BRIDGE_STATS_CMD_FIRST+0) -#define PVRSRV_BRIDGE_STATS_CMD_LAST (PVRSRV_BRIDGE_STATS_CMD_FIRST+0) - -#define PVRSRV_BRIDGE_MISC_CMD_FIRST (PVRSRV_BRIDGE_STATS_CMD_LAST+1) -#define PVRSRV_BRIDGE_GET_MISC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_MISC_CMD_FIRST+0) -#define PVRSRV_BRIDGE_RELEASE_MISC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_MISC_CMD_FIRST+1) -#define PVRSRV_BRIDGE_MISC_CMD_LAST (PVRSRV_BRIDGE_MISC_CMD_FIRST+1) - -#if defined (SUPPORT_OVERLAY_ROTATE_BLIT) -#define PVRSRV_BRIDGE_OVERLAY_CMD_FIRST (PVRSRV_BRIDGE_MISC_CMD_LAST+1) -#define PVRSRV_BRIDGE_INIT_3D_OVL_BLT_RES PVRSRV_IOWR(PVRSRV_BRIDGE_OVERLAY_CMD_FIRST+0) -#define PVRSRV_BRIDGE_DEINIT_3D_OVL_BLT_RES PVRSRV_IOWR(PVRSRV_BRIDGE_OVERLAY_CMD_FIRST+1) -#define PVRSRV_BRIDGE_OVERLAY_CMD_LAST (PVRSRV_BRIDGE_OVERLAY_CMD_FIRST+1) -#else -#define PVRSRV_BRIDGE_OVERLAY_CMD_LAST PVRSRV_BRIDGE_MISC_CMD_LAST -#endif - -#if defined(PDUMP) -#define PVRSRV_BRIDGE_PDUMP_CMD_FIRST (PVRSRV_BRIDGE_OVERLAY_CMD_LAST+1) -#define PVRSRV_BRIDGE_PDUMP_INIT PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+0) -#define PVRSRV_BRIDGE_PDUMP_MEMPOL PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+1) -#define PVRSRV_BRIDGE_PDUMP_DUMPMEM PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+2) -#define PVRSRV_BRIDGE_PDUMP_REG PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+3) -#define PVRSRV_BRIDGE_PDUMP_REGPOL PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+4) -#define PVRSRV_BRIDGE_PDUMP_COMMENT PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+5) -#define PVRSRV_BRIDGE_PDUMP_SETFRAME PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+6) -#define PVRSRV_BRIDGE_PDUMP_ISCAPTURING PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+7) -#define PVRSRV_BRIDGE_PDUMP_DUMPBITMAP PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+8) -#define PVRSRV_BRIDGE_PDUMP_DUMPREADREG PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+9) -#define PVRSRV_BRIDGE_PDUMP_SYNCPOL PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+10) -#define PVRSRV_BRIDGE_PDUMP_DUMPSYNC PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+11) -#define PVRSRV_BRIDGE_PDUMP_MEMPAGES PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+12) -#define PVRSRV_BRIDGE_PDUMP_DRIVERINFO PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+13) -#define PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+15) -#define PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+16) -#define PVRSRV_BRIDGE_PDUMP_STARTINITPHASE PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+17) -#define PVRSRV_BRIDGE_PDUMP_STOPINITPHASE PVRSRV_IOWR(PVRSRV_BRIDGE_PDUMP_CMD_FIRST+18) -#define PVRSRV_BRIDGE_PDUMP_CMD_LAST (PVRSRV_BRIDGE_PDUMP_CMD_FIRST+18) -#else -#define PVRSRV_BRIDGE_PDUMP_CMD_LAST PVRSRV_BRIDGE_OVERLAY_CMD_LAST -#endif - -#define PVRSRV_BRIDGE_OEM_CMD_FIRST (PVRSRV_BRIDGE_PDUMP_CMD_LAST+1) -#define PVRSRV_BRIDGE_GET_OEMJTABLE PVRSRV_IOWR(PVRSRV_BRIDGE_OEM_CMD_FIRST+0) -#define PVRSRV_BRIDGE_OEM_CMD_LAST (PVRSRV_BRIDGE_OEM_CMD_FIRST+0) - -#define PVRSRV_BRIDGE_DEVCLASS_CMD_FIRST (PVRSRV_BRIDGE_OEM_CMD_LAST+1) -#define PVRSRV_BRIDGE_ENUM_CLASS PVRSRV_IOWR(PVRSRV_BRIDGE_DEVCLASS_CMD_FIRST+0) -#define PVRSRV_BRIDGE_DEVCLASS_CMD_LAST (PVRSRV_BRIDGE_DEVCLASS_CMD_FIRST+0) - -#define PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST (PVRSRV_BRIDGE_DEVCLASS_CMD_LAST+1) -#define PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+0) -#define PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+1) -#define PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+2) -#define PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+3) -#define PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+4) -#define PVRSRV_BRIDGE_GET_DISPCLASS_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+5) -#define PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+6) -#define PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+7) -#define PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+8) -#define PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+9) -#define PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+10) -#define PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+11) -#define PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+12) -#define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+13) -#define PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM PVRSRV_IOWR(PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14) -#define PVRSRV_BRIDGE_DISPCLASS_CMD_LAST (PVRSRV_BRIDGE_DISPCLASS_CMD_FIRST+14) - -#define PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST (PVRSRV_BRIDGE_DISPCLASS_CMD_LAST+1) -#define PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+0) -#define PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+1) -#define PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+2) -#define PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER PVRSRV_IOWR(PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+3) -#define PVRSRV_BRIDGE_BUFCLASS_CMD_LAST (PVRSRV_BRIDGE_BUFCLASS_CMD_FIRST+3) - -#define PVRSRV_BRIDGE_WRAP_CMD_FIRST (PVRSRV_BRIDGE_BUFCLASS_CMD_LAST+1) -#define PVRSRV_BRIDGE_WRAP_EXT_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_WRAP_CMD_FIRST+0) -#define PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY PVRSRV_IOWR(PVRSRV_BRIDGE_WRAP_CMD_FIRST+1) -#define PVRSRV_BRIDGE_WRAP_CMD_LAST (PVRSRV_BRIDGE_WRAP_CMD_FIRST+1) - -#define PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST (PVRSRV_BRIDGE_WRAP_CMD_LAST+1) -#define PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST+0) -#define PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST+1) -#define PVRSRV_BRIDGE_MAP_MEMINFO_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST+2) -#define PVRSRV_BRIDGE_UNMAP_MEMINFO_MEM PVRSRV_IOWR(PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST+3) -#define PVRSRV_BRIDGE_SHAREDMEM_CMD_LAST (PVRSRV_BRIDGE_SHAREDMEM_CMD_FIRST+3) - -#define PVRSRV_BRIDGE_SERVICES4_TMP_CMD_FIRST (PVRSRV_BRIDGE_SHAREDMEM_CMD_LAST+1) -#define PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR PVRSRV_IOWR(PVRSRV_BRIDGE_SERVICES4_TMP_CMD_FIRST+0) -#define PVRSRV_BRIDGE_SERVICES4_TMP_CMD_LAST (PVRSRV_BRIDGE_SERVICES4_TMP_CMD_FIRST+0) - -#define PVRSRV_BRIDGE_INITSRV_CMD_FIRST (PVRSRV_BRIDGE_SERVICES4_TMP_CMD_LAST+1) -#define PVRSRV_BRIDGE_INITSRV_CONNECT PVRSRV_IOWR(PVRSRV_BRIDGE_INITSRV_CMD_FIRST+0) -#define PVRSRV_BRIDGE_INITSRV_DISCONNECT PVRSRV_IOWR(PVRSRV_BRIDGE_INITSRV_CMD_FIRST+1) -#define PVRSRV_BRIDGE_INITSRV_CMD_LAST (PVRSRV_BRIDGE_INITSRV_CMD_FIRST+1) - -#define PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST (PVRSRV_BRIDGE_INITSRV_CMD_LAST+1) -#define PVRSRV_BRIDGE_EVENT_OBJECT_WAIT PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+0) -#define PVRSRV_BRIDGE_EVENT_OBJECT_OPEN PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+1) -#define PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE PVRSRV_IOWR(PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+2) -#define PVRSRV_BRIDGE_EVENT_OBJECT_CMD_LAST (PVRSRV_BRIDGE_EVENT_OBJECT_CMD_FIRST+2) - -#define PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST (PVRSRV_BRIDGE_EVENT_OBJECT_CMD_LAST+1) -#define PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+0) -#define PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+1) -#define PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+2) -#define PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+3) -#define PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+4) -#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_TOKEN PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+5) -#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+6) -#define PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+7) -#define PVRSRV_BRIDGE_ALLOC_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+8) -#define PVRSRV_BRIDGE_FREE_SYNC_INFO PVRSRV_IOWR(PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+9) -#define PVRSRV_BRIDGE_SYNC_OPS_CMD_LAST (PVRSRV_BRIDGE_SYNC_OPS_CMD_FIRST+9) - -#define PVRSRV_BRIDGE_LAST_NON_DEVICE_CMD (PVRSRV_BRIDGE_SYNC_OPS_CMD_LAST+1) - - -#define PVRSRV_KERNEL_MODE_CLIENT 1 - -typedef struct PVRSRV_BRIDGE_RETURN_TAG -{ - PVRSRV_ERROR eError; - IMG_VOID *pvData; - -}PVRSRV_BRIDGE_RETURN; - - -typedef struct PVRSRV_BRIDGE_PACKAGE_TAG -{ - IMG_UINT32 ui32BridgeID; - IMG_UINT32 ui32Size; - IMG_VOID *pvParamIn; - IMG_UINT32 ui32InBufferSize; - IMG_VOID *pvParamOut; - IMG_UINT32 ui32OutBufferSize; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelServices; -#else - IMG_HANDLE hKernelServices; -#endif -}PVRSRV_BRIDGE_PACKAGE; - - -typedef struct PVRSRV_BRIDGE_IN_CONNECT_SERVICES_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32Flags; -} PVRSRV_BRIDGE_IN_CONNECT_SERVICES; - -typedef struct PVRSRV_BRIDGE_IN_ACQUIRE_DEVICEINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 uiDevIndex; - PVRSRV_DEVICE_TYPE eDeviceType; - -} PVRSRV_BRIDGE_IN_ACQUIRE_DEVICEINFO; - - -typedef struct PVRSRV_BRIDGE_IN_ENUMCLASS_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_DEVICE_CLASS sDeviceClass; -} PVRSRV_BRIDGE_IN_ENUMCLASS; - - -typedef struct PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE; - - -typedef struct PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS; - - -typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER; - - -typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO; - - -typedef struct PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE; - - -typedef struct PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif -} PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO; - - -typedef struct PVRSRV_BRIDGE_IN_RELEASE_DEVICEINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -} PVRSRV_BRIDGE_IN_RELEASE_DEVICEINFO; - - -typedef struct PVRSRV_BRIDGE_IN_FREE_CLASSDEVICEINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_DEVICE_CLASS DeviceClass; - IMG_VOID* pvDevInfo; - -}PVRSRV_BRIDGE_IN_FREE_CLASSDEVICEINFO; - - -typedef struct PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif - -}PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO; - - -typedef struct PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -}PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT; - - -typedef struct PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif - -}PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT; - - -typedef struct PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemHeap; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemHeap; -#endif - IMG_UINT32 ui32Attribs; - IMG_SIZE_T ui32Size; - IMG_SIZE_T ui32Alignment; - -}PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM; - -typedef struct PVRSRV_BRIDGE_IN_MAPMEMINFOTOUSER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - -}PVRSRV_BRIDGE_IN_MAPMEMINFOTOUSER; - -typedef struct PVRSRV_BRIDGE_IN_UNMAPMEMINFOFROMUSER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - IMG_PVOID pvLinAddr; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMappingInfo; -#else - IMG_HANDLE hMappingInfo; -#endif - -}PVRSRV_BRIDGE_IN_UNMAPMEMINFOFROMUSER; - -typedef struct PVRSRV_BRIDGE_IN_FREEDEVICEMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hDevCookie; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - -}PVRSRV_BRIDGE_IN_FREEDEVICEMEM; - -typedef struct PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hDevCookie; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - -}PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM; - -typedef struct PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32Flags; - -} PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM; - -typedef struct PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_SIZE_T ui32QueueSize; - -}PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE; - - -typedef struct PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - PVRSRV_QUEUE_INFO *psQueueInfo; - -}PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE; - - -typedef struct PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle; -#else - IMG_HANDLE hMHandle; -#endif -} PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA; - - -typedef struct PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle; -#else - IMG_HANDLE hMHandle; -#endif -} PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA; - - -typedef struct PVRSRV_BRIDGE_IN_RESERVE_DEV_VIRTMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeap; -#else - IMG_HANDLE hDevMemHeap; -#endif - IMG_DEV_VIRTADDR *psDevVAddr; - IMG_SIZE_T ui32Size; - IMG_SIZE_T ui32Alignment; - -}PVRSRV_BRIDGE_IN_RESERVE_DEV_VIRTMEM; - -typedef struct PVRSRV_BRIDGE_OUT_CONNECT_SERVICES_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelServices; -#else - IMG_HANDLE hKernelServices; -#endif -}PVRSRV_BRIDGE_OUT_CONNECT_SERVICES; - -typedef struct PVRSRV_BRIDGE_OUT_RESERVE_DEV_VIRTMEM_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; - IMG_SID hKernelSyncInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_OUT_RESERVE_DEV_VIRTMEM; - - -typedef struct PVRSRV_BRIDGE_IN_FREE_DEV_VIRTMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_IN_FREE_DEV_VIRTMEM; - - -typedef struct PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; - IMG_SID hDstDevMemHeap; -#else - IMG_HANDLE hKernelMemInfo; - IMG_HANDLE hDstDevMemHeap; -#endif - -}PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY; - - -typedef struct PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDstKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psDstKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sDstClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sDstClientSyncInfo; - -}PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY; - - -typedef struct PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY; - - -typedef struct PVRSRV_BRIDGE_IN_MAP_EXT_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - IMG_SYS_PHYADDR *psSysPAddr; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_MAP_EXT_MEMORY; - -typedef struct PVRSRV_BRIDGE_IN_UNMAP_EXT_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_UNMAP_EXT_MEMORY; - -typedef struct PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceClassBuffer; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDeviceClassBuffer; - IMG_HANDLE hDevMemContext; -#endif - -}PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY; - - -typedef struct PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY_TAG -{ - PVRSRV_ERROR eError; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; - IMG_SID hMappingInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - IMG_HANDLE hMappingInfo; -#endif - -}PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY; - - -typedef struct PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_MEMPOL_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Value; - IMG_UINT32 ui32Mask; - PDUMP_POLL_OPERATOR eOperator; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_MEMPOL; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; -#endif - IMG_BOOL bIsRead; - IMG_BOOL bUseLastOpDumpVal; - IMG_UINT32 ui32Value; - IMG_UINT32 ui32Mask; - -}PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_PVOID pvLinAddr; - IMG_PVOID pvAltLinAddr; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Bytes; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_PVOID pvAltLinAddr; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; -#endif - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Bytes; - -}PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPREG_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - PVRSRV_HWREG sHWReg; - IMG_UINT32 ui32Flags; - IMG_CHAR szRegRegion[32]; - -}PVRSRV_BRIDGE_IN_PDUMP_DUMPREG; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_REGPOL_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - PVRSRV_HWREG sHWReg; - IMG_UINT32 ui32Mask; - IMG_UINT32 ui32Flags; - IMG_CHAR szRegRegion[32]; -}PVRSRV_BRIDGE_IN_PDUMP_REGPOL; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPPDREG_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_HWREG sHWReg; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_DUMPPDREG; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hKernelMemInfo; -#endif - IMG_DEV_PHYADDR *pPages; - IMG_UINT32 ui32NumPages; - IMG_DEV_VIRTADDR sDevVAddr; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32Length; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_COMMENT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_CHAR szComment[PVRSRV_PDUMP_MAX_COMMENT_SIZE]; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_COMMENT; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_SETFRAME_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32Frame; - -}PVRSRV_BRIDGE_IN_PDUMP_SETFRAME; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_BITMAP_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; - IMG_UINT32 ui32FileOffset; - IMG_UINT32 ui32Width; - IMG_UINT32 ui32Height; - IMG_UINT32 ui32StrideInBytes; - IMG_DEV_VIRTADDR sDevBaseAddr; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevMemContext; -#endif - IMG_UINT32 ui32Size; - PDUMP_PIXEL_FORMAT ePixelFormat; - PDUMP_MEM_FORMAT eMemFormat; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_PDUMP_BITMAP; - - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_READREG_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; - IMG_UINT32 ui32FileOffset; - IMG_UINT32 ui32Address; - IMG_UINT32 ui32Size; - IMG_UINT32 ui32Flags; - IMG_CHAR szRegRegion[32]; - -}PVRSRV_BRIDGE_IN_PDUMP_READREG; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_CHAR szString[PVRSRV_PDUMP_MAX_COMMENT_SIZE]; - IMG_BOOL bContinuous; - -}PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hKernelMemInfo; -#endif - IMG_UINT32 ui32Offset; - IMG_DEV_PHYADDR sPDDevPAddr; -}PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR; - -typedef struct PVRSRV_BRIDGE_PDUM_IN_CYCLE_COUNT_REG_READ_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_UINT32 ui32RegOffset; - IMG_BOOL bLastFrame; -}PVRSRV_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ; - -typedef struct PVRSRV_BRIDGE_OUT_ENUMDEVICE_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32NumDevices; - PVRSRV_DEVICE_IDENTIFIER asDeviceIdentifier[PVRSRV_MAX_DEVICES]; - -}PVRSRV_BRIDGE_OUT_ENUMDEVICE; - - -typedef struct PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO_TAG -{ - - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -} PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO; - - -typedef struct PVRSRV_BRIDGE_OUT_ENUMCLASS_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32NumDevices; - IMG_UINT32 ui32DevID[PVRSRV_MAX_DEVICES]; - -}PVRSRV_BRIDGE_OUT_ENUMCLASS; - - -typedef struct PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32DeviceID; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -}PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE; - -typedef struct PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - -}PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE; - - -typedef struct PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif - IMG_VOID *pvLinAddr; - IMG_SIZE_T ui32ByteSize; - IMG_SIZE_T ui32PageOffset; - IMG_BOOL bPhysContig; - IMG_UINT32 ui32NumPageTableEntries; - IMG_SYS_PHYADDR *psSysPAddr; - IMG_UINT32 ui32Flags; - -}PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY; - -typedef struct PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY_TAG -{ - PVRSRV_ERROR eError; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY; - -typedef struct PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -}PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY; - - -#define PVRSRV_MAX_DC_DISPLAY_FORMATS 10 -#define PVRSRV_MAX_DC_DISPLAY_DIMENSIONS 10 -#define PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS 9 -#define PVRSRV_MAX_DC_CLIP_RECTS 32 - -typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32Count; - DISPLAY_FORMAT asFormat[PVRSRV_MAX_DC_DISPLAY_FORMATS]; - -}PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS; - - -typedef struct PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - DISPLAY_FORMAT sFormat; - -}PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS; - - -typedef struct PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32Count; - DISPLAY_DIMS asDim[PVRSRV_MAX_DC_DISPLAY_DIMENSIONS]; - -}PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO_TAG -{ - PVRSRV_ERROR eError; - DISPLAY_INFO sDisplayInfo; - -}PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hBuffer; -#else - IMG_HANDLE hBuffer; -#endif - -}PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER; - - -typedef struct PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - IMG_UINT32 ui32Flags; - DISPLAY_SURF_ATTRIBUTES sDstSurfAttrib; - DISPLAY_SURF_ATTRIBUTES sSrcSurfAttrib; - IMG_UINT32 ui32BufferCount; - IMG_UINT32 ui32OEMFlags; - IMG_UINT32 ui32SwapChainID; - -} PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN; - - -typedef struct PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSwapChain; -#else - IMG_HANDLE hSwapChain; -#endif - IMG_UINT32 ui32SwapChainID; - -} PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN; - - -typedef struct PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hSwapChain; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hSwapChain; -#endif - -} PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN; - - -typedef struct PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hSwapChain; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hSwapChain; -#endif - IMG_RECT sRect; - -} PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT; - - -typedef struct PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hSwapChain; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hSwapChain; -#endif - IMG_UINT32 ui32CKColour; - -} PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY; - - -typedef struct PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hSwapChain; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hSwapChain; -#endif - -} PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32BufferCount; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; -#else - IMG_HANDLE ahBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; -#endif - -} PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS; - - -typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hBuffer; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hBuffer; -#endif - IMG_UINT32 ui32SwapInterval; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hPrivateTag; -#else - IMG_HANDLE hPrivateTag; -#endif - IMG_UINT32 ui32ClipRectCount; - IMG_RECT sClipRect[PVRSRV_MAX_DC_CLIP_RECTS]; - -} PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER; - - -typedef struct PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; - IMG_SID hSwapChain; -#else - IMG_HANDLE hDeviceKM; - IMG_HANDLE hSwapChain; -#endif - -} PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM; - - -typedef struct PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32DeviceID; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - -} PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE; - - -typedef struct PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - -} PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO_TAG -{ - PVRSRV_ERROR eError; - BUFFER_INFO sBufferInfo; - -} PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO; - - -typedef struct PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - IMG_UINT32 ui32BufferIndex; - -} PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hBuffer; -#else - IMG_HANDLE hBuffer; -#endif - -} PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32ClientHeapCount; - PVRSRV_HEAP_INFO sHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; - -} PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO; - - -typedef struct PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevMemContext; -#endif - IMG_UINT32 ui32ClientHeapCount; - PVRSRV_HEAP_INFO sHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; - -} PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT; - - -typedef struct PVRSRV_BRIDGE_OUT_CREATE_DEVMEMHEAP_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeap; -#else - IMG_HANDLE hDevMemHeap; -#endif - -} PVRSRV_BRIDGE_OUT_CREATE_DEVMEMHEAP; - - -typedef struct PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; - -} PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM; - - -typedef struct PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMemInfo; -#else - IMG_HANDLE hMemInfo; -#endif -#if defined(SUPPORT_MEMINFO_IDS) - IMG_UINT64 ui64Stamp; -#endif - -} PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM; - - -typedef struct PVRSRV_BRIDGE_OUT_MAPMEMINFOTOUSER_TAG -{ - PVRSRV_ERROR eError; - IMG_PVOID pvLinAddr; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMappingInfo; -#else - IMG_HANDLE hMappingInfo; -#endif - -}PVRSRV_BRIDGE_OUT_MAPMEMINFOTOUSER; - - -typedef struct PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM_TAG -{ - PVRSRV_ERROR eError; - IMG_SIZE_T ui32Total; - IMG_SIZE_T ui32Free; - IMG_SIZE_T ui32LargestBlock; - -} PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM; - - -#include "pvrmmap.h" -typedef struct PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA_TAG -{ - PVRSRV_ERROR eError; - - - IMG_UINT32 ui32MMapOffset; - - - IMG_UINT32 ui32ByteOffset; - - - IMG_UINT32 ui32RealByteSize; - - - IMG_UINT32 ui32UserVAddr; - -} PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA; - -typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA_TAG -{ - PVRSRV_ERROR eError; - - - IMG_BOOL bMUnmap; - - - IMG_UINT32 ui32UserVAddr; - - - IMG_UINT32 ui32RealByteSize; -} PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA; -typedef struct PVRSRV_BRIDGE_IN_GET_MISC_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_MISC_INFO sMiscInfo; - -}PVRSRV_BRIDGE_IN_GET_MISC_INFO; - - -typedef struct PVRSRV_BRIDGE_OUT_GET_MISC_INFO_TAG -{ - PVRSRV_ERROR eError; - PVRSRV_MISC_INFO sMiscInfo; - -}PVRSRV_BRIDGE_OUT_GET_MISC_INFO; - - -typedef struct PVRSRV_BRIDGE_IN_RELEASE_MISC_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_MISC_INFO sMiscInfo; - -}PVRSRV_BRIDGE_IN_RELEASE_MISC_INFO; - - -typedef struct PVRSRV_BRIDGE_OUT_RELEASE_MISC_INFO_TAG -{ - PVRSRV_ERROR eError; - PVRSRV_MISC_INFO sMiscInfo; - -}PVRSRV_BRIDGE_OUT_RELEASE_MISC_INFO; - - -typedef struct PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING_TAG -{ - PVRSRV_ERROR eError; - IMG_BOOL bIsCapturing; - -} PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING; - -typedef struct PVRSRV_BRIDGE_IN_GET_FB_STATS_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_SIZE_T ui32Total; - IMG_SIZE_T ui32Available; - -} PVRSRV_BRIDGE_IN_GET_FB_STATS; - - -typedef struct PVRSRV_BRIDGE_IN_MAPPHYSTOUSERSPACE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_SYS_PHYADDR sSysPhysAddr; - IMG_UINT32 uiSizeInBytes; - -} PVRSRV_BRIDGE_IN_MAPPHYSTOUSERSPACE; - - -typedef struct PVRSRV_BRIDGE_OUT_MAPPHYSTOUSERSPACE_TAG -{ - IMG_PVOID pvUserAddr; - IMG_UINT32 uiActualSize; - IMG_PVOID pvProcess; - -} PVRSRV_BRIDGE_OUT_MAPPHYSTOUSERSPACE; - - -typedef struct PVRSRV_BRIDGE_IN_UNMAPPHYSTOUSERSPACE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_PVOID pvUserAddr; - IMG_PVOID pvProcess; - -} PVRSRV_BRIDGE_IN_UNMAPPHYSTOUSERSPACE; - - -typedef struct PVRSRV_BRIDGE_OUT_GETPHYSTOUSERSPACEMAP_TAG -{ - IMG_PVOID *ppvTbl; - IMG_UINT32 uiTblSize; - -} PVRSRV_BRIDGE_OUT_GETPHYSTOUSERSPACEMAP; - - -#if !defined (SUPPORT_SID_INTERFACE) -typedef struct PVRSRV_BRIDGE_IN_REGISTER_SIM_PROCESS_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_HANDLE hDevCookie; - IMG_PVOID pvProcess; - -} PVRSRV_BRIDGE_IN_REGISTER_SIM_PROCESS; - - -typedef struct PVRSRV_BRIDGE_OUT_REGISTER_SIM_PROCESS_TAG -{ - IMG_SYS_PHYADDR sRegsPhysBase; - IMG_VOID *pvRegsBase; - IMG_PVOID pvProcess; - IMG_UINT32 ulNoOfEntries; - IMG_PVOID pvTblLinAddr; - -} PVRSRV_BRIDGE_OUT_REGISTER_SIM_PROCESS; - - -typedef struct PVRSRV_BRIDGE_IN_UNREGISTER_SIM_PROCESS_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_HANDLE hDevCookie; - IMG_PVOID pvProcess; - IMG_VOID *pvRegsBase; - -} PVRSRV_BRIDGE_IN_UNREGISTER_SIM_PROCESS; - -typedef struct PVRSRV_BRIDGE_IN_PROCESS_SIMISR_EVENT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_HANDLE hDevCookie; - IMG_UINT32 ui32StatusAndMask; - PVRSRV_ERROR eError; - -} PVRSRV_BRIDGE_IN_PROCESS_SIMISR_EVENT; -#endif - -typedef struct PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_BOOL bInitSuccesful; -} PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT; - - -typedef struct PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32Flags; - IMG_SIZE_T ui32Size; -}PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM; - -typedef struct PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; -}PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM; - -typedef struct PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM_TAG -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; - IMG_SID hMappingInfo; -#else - IMG_UINT32 ui32BridgeFlags; - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; -}PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM; - -typedef struct PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM_TAG -{ - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM; - -typedef struct PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hKernelMemInfo; -#endif -}PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM; - -typedef struct PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM_TAG -{ - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; - PVRSRV_CLIENT_SYNC_INFO sClientSyncInfo; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM; - -typedef struct PVRSRV_BRIDGE_IN_UNMAP_MEMINFO_MEM_TAG -{ - IMG_UINT32 ui32BridgeFlags; - PVRSRV_CLIENT_MEM_INFO sClientMemInfo; -}PVRSRV_BRIDGE_IN_UNMAP_MEMINFO_MEM; - -typedef struct PVRSRV_BRIDGE_OUT_UNMAP_MEMINFO_MEM_TAG -{ - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_UNMAP_MEMINFO_MEM; - -typedef struct PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevMemContext; -#endif -}PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR; - -typedef struct PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR_TAG -{ - IMG_DEV_PHYADDR sPDDevPAddr; - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR; - -typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAI_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hOSEventKM; -#else - IMG_HANDLE hOSEventKM; -#endif -} PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAIT; - -typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN_TAG -{ - PVRSRV_EVENTOBJECT sEventObject; -} PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN; - -typedef struct PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN_TAG -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_UINT32 hOSEvent; -#else - IMG_HANDLE hOSEvent; -#endif - PVRSRV_ERROR eError; -} PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN; - -typedef struct PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE_TAG -{ - PVRSRV_EVENTOBJECT sEventObject; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hOSEventKM; -#else - IMG_HANDLE hOSEventKM; -#endif -} PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE; - -typedef struct PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ_TAG -{ - PVRSRV_ERROR eError; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj; -#else - IMG_HANDLE hKernelSyncInfoModObj; -#endif - -} PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ; - -typedef struct PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj; -#else - IMG_HANDLE hKernelSyncInfoModObj; -#endif -} PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ; - -typedef struct PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj; - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfoModObj; - IMG_HANDLE hKernelSyncInfo; -#endif - IMG_UINT32 ui32ModifyFlags; - -} PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS; - -typedef struct PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj; -#else - IMG_HANDLE hKernelSyncInfoModObj; -#endif -} PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS; - -typedef struct PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS_TAG -{ - PVRSRV_ERROR eError; - - - IMG_UINT32 ui32ReadOpsPending; - IMG_UINT32 ui32WriteOpsPending; - -} PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS; - -typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif - -} PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN; - -typedef struct PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN_TAG -{ - PVRSRV_ERROR eError; - - IMG_UINT32 ui32ReadOpsPending; - IMG_UINT32 ui32WriteOpsPending; - -} PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN; - -typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif - IMG_UINT32 ui32ReadOpsPendingSnapshot; - IMG_UINT32 ui32WriteOpsPendingSnapshot; -} PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN; - -typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfoModObj; -#else - IMG_HANDLE hKernelSyncInfoModObj; -#endif -} PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ; - -typedef struct PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif - IMG_UINT32 ui32Delta; -} PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA; - -typedef struct PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -} PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO; - -typedef struct PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO_TAG -{ - PVRSRV_ERROR eError; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif -} PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO; - -typedef struct PVRSRV_BRIDGE_IN_FREE_SYNC_INFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelSyncInfo; -#else - IMG_HANDLE hKernelSyncInfo; -#endif -} PVRSRV_BRIDGE_IN_FREE_SYNC_INFO; - -typedef struct PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS_TAG -{ - IMG_SID hKernelMemInfo; - IMG_UINT32 ui32Attribs; -} PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS; - - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/pvr_bridge_km.h b/drivers/staging/cdv/pvr/services4/include/pvr_bridge_km.h deleted file mode 100644 index 1175b76..0000000 --- a/drivers/staging/cdv/pvr/services4/include/pvr_bridge_km.h +++ /dev/null @@ -1,305 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __PVR_BRIDGE_KM_H_ -#define __PVR_BRIDGE_KM_H_ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "pvr_bridge.h" -#include "perproc.h" - -#if defined(__linux__) -PVRSRV_ERROR LinuxBridgeInit(IMG_VOID); -IMG_VOID LinuxBridgeDeInit(IMG_VOID); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevicesKM(IMG_UINT32 *pui32NumDevices, - PVRSRV_DEVICE_IDENTIFIER *psDevIdList); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceDataKM(IMG_UINT32 uiDevIndex, - PVRSRV_DEVICE_TYPE eDeviceType, - IMG_HANDLE *phDevCookie); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateCommandQueueKM(IMG_SIZE_T ui32QueueSize, - PVRSRV_QUEUE_INFO **ppsQueueInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueueInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *psHeapInfo); -#else - PVRSRV_HEAP_INFO *psHeapInfo); -#endif - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCookie, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE *phDevMemContext, - IMG_UINT32 *pui32ClientHeapCount, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *psHeapInfo, -#else - PVRSRV_HEAP_INFO *psHeapInfo, -#endif - IMG_BOOL *pbCreated, - IMG_BOOL *pbShared); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContextKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_BOOL *pbDestroyed); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_UINT32 *pui32ClientHeapCount, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *psHeapInfo, -#else - PVRSRV_HEAP_INFO *psHeapInfo, -#endif - IMG_BOOL *pbShared - ); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemHeap, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo); - - -#if defined(PVRSRV_LOG_MEMORY_ALLOCS) - #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ - (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \ - ", " #alignment "," #memInfo "): " logStr " (size = 0x%x)", size)),\ - _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo)) -#else - #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ - _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo) -#endif - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDissociateDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMemKM(IMG_HANDLE hDevMemHeap, - IMG_DEV_VIRTADDR *psDevVAddr, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMemKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - PVRSRV_KERNEL_MEM_INFO *psSrcMemInfo, - IMG_HANDLE hDstDevMemHeap, - PVRSRV_KERNEL_MEM_INFO **ppsDstMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemContext, - IMG_SIZE_T ui32ByteSize, - IMG_SIZE_T ui32PageOffset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psSysAddr, - IMG_VOID *pvLinAddr, - IMG_UINT32 ui32Flags, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVEnumerateDCKM(PVRSRV_DEVICE_CLASS DeviceClass, - IMG_UINT32 *pui32DevCount, - IMG_UINT32 *pui32DevID ); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVOpenDCDeviceKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32DeviceID, - IMG_HANDLE hDevCookie, - IMG_HANDLE *phDeviceKM); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVCloseDCDeviceKM(IMG_HANDLE hDeviceKM, IMG_BOOL bResManCallback); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVEnumDCFormatsKM(IMG_HANDLE hDeviceKM, - IMG_UINT32 *pui32Count, - DISPLAY_FORMAT *psFormat); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVEnumDCDimsKM(IMG_HANDLE hDeviceKM, - DISPLAY_FORMAT *psFormat, - IMG_UINT32 *pui32Count, - DISPLAY_DIMS *psDim); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetDCSystemBufferKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE *phBuffer); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetDCInfoKM(IMG_HANDLE hDeviceKM, - DISPLAY_INFO *psDisplayInfo); -IMG_IMPORT -PVRSRV_ERROR PVRSRVCreateDCSwapChainKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDeviceKM, - IMG_UINT32 ui32Flags, - DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib, - DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib, - IMG_UINT32 ui32BufferCount, - IMG_UINT32 ui32OEMFlags, - IMG_HANDLE *phSwapChain, - IMG_UINT32 *pui32SwapChainID); -IMG_IMPORT -PVRSRV_ERROR PVRSRVDestroyDCSwapChainKM(IMG_HANDLE hSwapChain); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetDCDstRectKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetDCSrcRectKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain, - IMG_RECT *psRect); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetDCDstColourKeyKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetDCSrcColourKeyKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain, - IMG_UINT32 ui32CKColour); -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain, - IMG_UINT32 *pui32BufferCount, - IMG_HANDLE *phBuffer); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hBuffer, - IMG_UINT32 ui32SwapInterval, - IMG_HANDLE hPrivateTag, - IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChain); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVOpenBCDeviceKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32DeviceID, - IMG_HANDLE hDevCookie, - IMG_HANDLE *phDeviceKM); -IMG_IMPORT -PVRSRV_ERROR PVRSRVCloseBCDeviceKM(IMG_HANDLE hDeviceKM, IMG_BOOL bResManCallback); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetBCInfoKM(IMG_HANDLE hDeviceKM, - BUFFER_INFO *psBufferInfo); -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetBCBufferKM(IMG_HANDLE hDeviceKM, - IMG_UINT32 ui32BufferIndex, - IMG_HANDLE *phBuffer); - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemContext, - IMG_HANDLE hDeviceClassBuffer, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo, - IMG_HANDLE *phOSMapInfo); - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVChangeDeviceMemoryAttributesKM(IMG_HANDLE hKernelMemInfo, - IMG_UINT32 ui32Attribs); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetFreeDeviceMemKM(IMG_UINT32 ui32Flags, - IMG_SIZE_T *pui32Total, - IMG_SIZE_T *pui32Free, - IMG_SIZE_T *pui32LargestBlock); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - PVRSRV_KERNEL_SYNC_INFO **ppsKernelSyncInfo); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo); - -IMG_IMPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo); -#else -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo); -#endif - -IMG_IMPORT PVRSRV_ERROR -PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo); - -IMG_IMPORT PVRSRV_ERROR -PVRSRVFreeSharedSysMemoryKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo); - -IMG_IMPORT PVRSRV_ERROR -PVRSRVDissociateMemFromResmanKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo); - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/pvrmmap.h b/drivers/staging/cdv/pvr/services4/include/pvrmmap.h deleted file mode 100644 index 242d953..0000000 --- a/drivers/staging/cdv/pvr/services4/include/pvrmmap.h +++ /dev/null @@ -1,44 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __PVRMMAP_H__ -#define __PVRMMAP_H__ - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRPMapKMem(IMG_HANDLE hModule, IMG_VOID **ppvLinAddr, IMG_VOID *pvLinAddrKM, IMG_SID *phMappingInfo, IMG_SID hMHandle); -#else -PVRSRV_ERROR PVRPMapKMem(IMG_HANDLE hModule, IMG_VOID **ppvLinAddr, IMG_VOID *pvLinAddrKM, IMG_HANDLE *phMappingInfo, IMG_HANDLE hMHandle); -#endif - - -#if defined (SUPPORT_SID_INTERFACE) -IMG_BOOL PVRUnMapKMem(IMG_HANDLE hModule, IMG_SID hMappingInfo, IMG_SID hMHandle); -#else -IMG_BOOL PVRUnMapKMem(IMG_HANDLE hModule, IMG_HANDLE hMappingInfo, IMG_HANDLE hMHandle); -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/pvrsrv_errors.h b/drivers/staging/cdv/pvr/services4/include/pvrsrv_errors.h deleted file mode 100644 index 5474984..0000000 --- a/drivers/staging/cdv/pvr/services4/include/pvrsrv_errors.h +++ /dev/null @@ -1,266 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__PVRSRV_ERRORS_H__) -#define __PVRSRV_ERRORS_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - - switch (eError) - { - case PVRSRV_OK: return "No Errors"; - case PVRSRV_ERROR_OUT_OF_MEMORY: return "PVRSRV_ERROR_OUT_OF_MEMORY - Unable to allocate required memory"; - case PVRSRV_ERROR_TOO_FEW_BUFFERS: return "PVRSRV_ERROR_TOO_FEW_BUFFERS"; - case PVRSRV_ERROR_INVALID_PARAMS: return "PVRSRV_ERROR_INVALID_PARAMS"; - case PVRSRV_ERROR_INIT_FAILURE: return "PVRSRV_ERROR_INIT_FAILURE"; - case PVRSRV_ERROR_CANT_REGISTER_CALLBACK: return "PVRSRV_ERROR_CANT_REGISTER_CALLBACK"; - case PVRSRV_ERROR_INVALID_DEVICE: return "PVRSRV_ERROR_INVALID_DEVICE"; - case PVRSRV_ERROR_NOT_OWNER: return "PVRSRV_ERROR_NOT_OWNER"; - case PVRSRV_ERROR_BAD_MAPPING: return "PVRSRV_ERROR_BAD_MAPPING"; - case PVRSRV_ERROR_TIMEOUT: return "PVRSRV_ERROR_TIMEOUT"; - case PVRSRV_ERROR_FLIP_CHAIN_EXISTS: return "PVRSRV_ERROR_FLIP_CHAIN_EXISTS"; - case PVRSRV_ERROR_INVALID_SWAPINTERVAL: return "PVRSRV_ERROR_INVALID_SWAPINTERVAL"; - case PVRSRV_ERROR_SCENE_INVALID: return "PVRSRV_ERROR_SCENE_INVALID"; - case PVRSRV_ERROR_STREAM_ERROR: return "PVRSRV_ERROR_STREAM_ERROR"; - case PVRSRV_ERROR_FAILED_DEPENDENCIES: return "PVRSRV_ERROR_FAILED_DEPENDENCIES"; - case PVRSRV_ERROR_CMD_NOT_PROCESSED: return "PVRSRV_ERROR_CMD_NOT_PROCESSED"; - case PVRSRV_ERROR_CMD_TOO_BIG: return "PVRSRV_ERROR_CMD_TOO_BIG"; - case PVRSRV_ERROR_DEVICE_REGISTER_FAILED: return "PVRSRV_ERROR_DEVICE_REGISTER_FAILED"; - case PVRSRV_ERROR_TOOMANYBUFFERS: return "PVRSRV_ERROR_TOOMANYBUFFERS"; - case PVRSRV_ERROR_NOT_SUPPORTED: return "PVRSRV_ERROR_NOT_SUPPORTED - fix"; - case PVRSRV_ERROR_PROCESSING_BLOCKED: return "PVRSRV_ERROR_PROCESSING_BLOCKED"; - - case PVRSRV_ERROR_CANNOT_FLUSH_QUEUE: return "PVRSRV_ERROR_CANNOT_FLUSH_QUEUE"; - case PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE: return "PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE"; - case PVRSRV_ERROR_CANNOT_GET_RENDERDETAILS: return "PVRSRV_ERROR_CANNOT_GET_RENDERDETAILS"; - case PVRSRV_ERROR_RETRY: return "PVRSRV_ERROR_RETRY"; - - case PVRSRV_ERROR_DDK_VERSION_MISMATCH: return "PVRSRV_ERROR_DDK_VERSION_MISMATCH"; - case PVRSRV_ERROR_BUILD_MISMATCH: return "PVRSRV_ERROR_BUILD_MISMATCH"; - case PVRSRV_ERROR_CORE_REVISION_MISMATCH: return "PVRSRV_ERROR_CORE_REVISION_MISMATCH"; - - case PVRSRV_ERROR_UPLOAD_TOO_BIG: return "PVRSRV_ERROR_UPLOAD_TOO_BIG"; - - case PVRSRV_ERROR_INVALID_FLAGS: return "PVRSRV_ERROR_INVALID_FLAGS"; - case PVRSRV_ERROR_FAILED_TO_REGISTER_PROCESS: return "PVRSRV_ERROR_FAILED_TO_REGISTER_PROCESS"; - - case PVRSRV_ERROR_UNABLE_TO_LOAD_LIBRARY: return "PVRSRV_ERROR_UNABLE_TO_LOAD_LIBRARY"; - case PVRSRV_ERROR_UNABLE_GET_FUNC_ADDR: return "PVRSRV_ERROR_UNABLE_GET_FUNC_ADDR"; - case PVRSRV_ERROR_UNLOAD_LIBRARY_FAILED: return "PVRSRV_ERROR_UNLOAD_LIBRARY_FAILED"; - - case PVRSRV_ERROR_BRIDGE_CALL_FAILED: return "PVRSRV_ERROR_BRIDGE_CALL_FAILED"; - case PVRSRV_ERROR_IOCTL_CALL_FAILED: return "PVRSRV_ERROR_IOCTL_CALL_FAILED"; - - case PVRSRV_ERROR_MMU_CONTEXT_NOT_FOUND: return "PVRSRV_ERROR_MMU_CONTEXT_NOT_FOUND"; - case PVRSRV_ERROR_BUFFER_DEVICE_NOT_FOUND: return "PVRSRV_ERROR_BUFFER_DEVICE_NOT_FOUND"; - case PVRSRV_ERROR_BUFFER_DEVICE_ALREADY_PRESENT:return "PVRSRV_ERROR_BUFFER_DEVICE_ALREADY_PRESENT"; - - case PVRSRV_ERROR_PCI_DEVICE_NOT_FOUND: return "PVRSRV_ERROR_PCI_DEVICE_NOT_FOUND"; - case PVRSRV_ERROR_PCI_CALL_FAILED: return "PVRSRV_ERROR_PCI_CALL_FAILED"; - case PVRSRV_ERROR_PCI_REGION_TOO_SMALL: return "PVRSRV_ERROR_PCI_REGION_TOO_SMALL"; - case PVRSRV_ERROR_PCI_REGION_UNAVAILABLE: return "PVRSRV_ERROR_PCI_REGION_UNAVAILABLE"; - case PVRSRV_ERROR_BAD_REGION_SIZE_MISMATCH: return "PVRSRV_ERROR_BAD_REGION_SIZE_MISMATCH"; - - case PVRSRV_ERROR_REGISTER_BASE_NOT_SET: return "PVRSRV_ERROR_REGISTER_BASE_NOT_SET"; - - case PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE: return "PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE"; - - case PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM: return "PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM"; - case PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY: return "PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY"; - case PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC: return "PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC"; - case PVRSRV_ERROR_FAILED_TO_GET_PHYS_ADDR: return "PVRSRV_ERROR_FAILED_TO_GET_PHYS_ADDR"; - - case PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY: return "PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY"; - case PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY: return "PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY"; - - case PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES: return "PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES"; - case PVRSRV_ERROR_FAILED_TO_FREE_PAGES: return "PVRSRV_ERROR_FAILED_TO_FREE_PAGES"; - case PVRSRV_ERROR_FAILED_TO_COPY_PAGES: return "PVRSRV_ERROR_FAILED_TO_COPY_PAGES"; - case PVRSRV_ERROR_UNABLE_TO_LOCK_PAGES: return "PVRSRV_ERROR_UNABLE_TO_LOCK_PAGES"; - case PVRSRV_ERROR_UNABLE_TO_UNLOCK_PAGES: return "PVRSRV_ERROR_UNABLE_TO_UNLOCK_PAGES"; - case PVRSRV_ERROR_STILL_MAPPED: return "PVRSRV_ERROR_STILL_MAPPED"; - case PVRSRV_ERROR_MAPPING_NOT_FOUND: return "PVRSRV_ERROR_MAPPING_NOT_FOUND"; - case PVRSRV_ERROR_PHYS_ADDRESS_EXCEEDS_32BIT: return "PVRSRV_ERROR_PHYS_ADDRESS_EXCEEDS_32BIT"; - case PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE: return "PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE"; - - case PVRSRV_ERROR_INVALID_SEGMENT_BLOCK: return "PVRSRV_ERROR_INVALID_SEGMENT_BLOCK"; - case PVRSRV_ERROR_INVALID_SGXDEVDATA: return "PVRSRV_ERROR_INVALID_SGXDEVDATA"; - case PVRSRV_ERROR_INVALID_DEVINFO: return "PVRSRV_ERROR_INVALID_DEVINFO"; - case PVRSRV_ERROR_INVALID_MEMINFO: return "PVRSRV_ERROR_INVALID_MEMINFO"; - case PVRSRV_ERROR_INVALID_MISCINFO: return "PVRSRV_ERROR_INVALID_MISCINFO"; - case PVRSRV_ERROR_UNKNOWN_IOCTL: return "PVRSRV_ERROR_UNKNOWN_IOCTL"; - case PVRSRV_ERROR_INVALID_CONTEXT: return "PVRSRV_ERROR_INVALID_CONTEXT"; - case PVRSRV_ERROR_UNABLE_TO_DESTROY_CONTEXT: return "PVRSRV_ERROR_UNABLE_TO_DESTROY_CONTEXT"; - case PVRSRV_ERROR_INVALID_HEAP: return "PVRSRV_ERROR_INVALID_HEAP"; - case PVRSRV_ERROR_INVALID_KERNELINFO: return "PVRSRV_ERROR_INVALID_KERNELINFO"; - case PVRSRV_ERROR_UNKNOWN_POWER_STATE: return "PVRSRV_ERROR_UNKNOWN_POWER_STATE"; - case PVRSRV_ERROR_INVALID_HANDLE_TYPE: return "PVRSRV_ERROR_INVALID_HANDLE_TYPE"; - case PVRSRV_ERROR_INVALID_WRAP_TYPE: return "PVRSRV_ERROR_INVALID_WRAP_TYPE"; - case PVRSRV_ERROR_INVALID_PHYS_ADDR: return "PVRSRV_ERROR_INVALID_PHYS_ADDR"; - case PVRSRV_ERROR_INVALID_CPU_ADDR: return "PVRSRV_ERROR_INVALID_CPU_ADDR"; - case PVRSRV_ERROR_INVALID_HEAPINFO: return "PVRSRV_ERROR_INVALID_HEAPINFO"; - case PVRSRV_ERROR_INVALID_PERPROC: return "PVRSRV_ERROR_INVALID_PERPROC"; - case PVRSRV_ERROR_FAILED_TO_RETRIEVE_HEAPINFO: return "PVRSRV_ERROR_FAILED_TO_RETRIEVE_HEAPINFO"; - case PVRSRV_ERROR_INVALID_MAP_REQUEST: return "PVRSRV_ERROR_INVALID_MAP_REQUEST"; - case PVRSRV_ERROR_INVALID_UNMAP_REQUEST: return "PVRSRV_ERROR_INVALID_UNMAP_REQUEST"; - case PVRSRV_ERROR_UNABLE_TO_FIND_MAPPING_HEAP: return "PVRSRV_ERROR_UNABLE_TO_FIND_MAPPING_HEAP"; - case PVRSRV_ERROR_MAPPING_STILL_IN_USE: return "PVRSRV_ERROR_MAPPING_STILL_IN_USE"; - - case PVRSRV_ERROR_EXCEEDED_HW_LIMITS: return "PVRSRV_ERROR_EXCEEDED_HW_LIMITS"; - case PVRSRV_ERROR_NO_STAGING_BUFFER_ALLOCATED: return "PVRSRV_ERROR_NO_STAGING_BUFFER_ALLOCATED"; - - case PVRSRV_ERROR_UNABLE_TO_CREATE_PERPROC_AREA:return "PVRSRV_ERROR_UNABLE_TO_CREATE_PERPROC_AREA"; - case PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT: return "PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT"; - case PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT: return "PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT"; - case PVRSRV_ERROR_UNABLE_TO_REGISTER_EVENT: return "PVRSRV_ERROR_UNABLE_TO_REGISTER_EVENT"; - case PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT: return "PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT"; - case PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD: return "PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD"; - case PVRSRV_ERROR_UNABLE_TO_CLOSE_THREAD: return "PVRSRV_ERROR_UNABLE_TO_CLOSE_THREAD"; - case PVRSRV_ERROR_THREAD_READ_ERROR: return "PVRSRV_ERROR_THREAD_READ_ERROR"; - case PVRSRV_ERROR_UNABLE_TO_REGISTER_ISR_HANDLER:return "PVRSRV_ERROR_UNABLE_TO_REGISTER_ISR_HANDLER"; - case PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR: return "PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR"; - case PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR: return "PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR"; - case PVRSRV_ERROR_ISR_ALREADY_INSTALLED: return "PVRSRV_ERROR_ISR_ALREADY_INSTALLED"; - case PVRSRV_ERROR_ISR_NOT_INSTALLED: return "PVRSRV_ERROR_ISR_NOT_INSTALLED"; - case PVRSRV_ERROR_UNABLE_TO_INITIALISE_INTERRUPT:return "PVRSRV_ERROR_UNABLE_TO_INITIALISE_INTERRUPT"; - case PVRSRV_ERROR_UNABLE_TO_RETRIEVE_INFO: return "PVRSRV_ERROR_UNABLE_TO_RETRIEVE_INFO"; - case PVRSRV_ERROR_UNABLE_TO_DO_BACKWARDS_BLIT: return "PVRSRV_ERROR_UNABLE_TO_DO_BACKWARDS_BLIT"; - case PVRSRV_ERROR_UNABLE_TO_CLOSE_SERVICES: return "PVRSRV_ERROR_UNABLE_TO_CLOSE_SERVICES"; - case PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT: return "PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT"; - case PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE: return "PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE"; - - case PVRSRV_ERROR_INVALID_CCB_COMMAND: return "PVRSRV_ERROR_INVALID_CCB_COMMAND"; - - case PVRSRV_ERROR_UNABLE_TO_LOCK_RESOURCE: return "PVRSRV_ERROR_UNABLE_TO_LOCK_RESOURCE"; - case PVRSRV_ERROR_INVALID_LOCK_ID: return "PVRSRV_ERROR_INVALID_LOCK_ID"; - case PVRSRV_ERROR_RESOURCE_NOT_LOCKED: return "PVRSRV_ERROR_RESOURCE_NOT_LOCKED"; - - case PVRSRV_ERROR_FLIP_FAILED: return "PVRSRV_ERROR_FLIP_FAILED"; - case PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED: return "PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED"; - - case PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE: return "PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE"; - - case PVRSRV_ERROR_CREATE_RENDER_CONTEXT_FAILED: return "PVRSRV_ERROR_CREATE_RENDER_CONTEXT_FAILED"; - case PVRSRV_ERROR_UNKNOWN_PRIMARY_FRAG: return "PVRSRV_ERROR_UNKNOWN_PRIMARY_FRAG"; - case PVRSRV_ERROR_UNEXPECTED_SECONDARY_FRAG: return "PVRSRV_ERROR_UNEXPECTED_SECONDARY_FRAG"; - case PVRSRV_ERROR_UNEXPECTED_PRIMARY_FRAG: return "PVRSRV_ERROR_UNEXPECTED_PRIMARY_FRAG"; - - case PVRSRV_ERROR_UNABLE_TO_INSERT_FENCE_ID: return "PVRSRV_ERROR_UNABLE_TO_INSERT_FENCE_ID"; - - case PVRSRV_ERROR_BLIT_SETUP_FAILED: return "PVRSRV_ERROR_BLIT_SETUP_FAILED"; - - case PVRSRV_ERROR_PDUMP_NOT_AVAILABLE: return "PVRSRV_ERROR_PDUMP_NOT_AVAILABLE"; - case PVRSRV_ERROR_PDUMP_BUFFER_FULL: return "PVRSRV_ERROR_PDUMP_BUFFER_FULL"; - case PVRSRV_ERROR_PDUMP_BUF_OVERFLOW: return "PVRSRV_ERROR_PDUMP_BUF_OVERFLOW"; - case PVRSRV_ERROR_PDUMP_NOT_ACTIVE: return "PVRSRV_ERROR_PDUMP_NOT_ACTIVE"; - case PVRSRV_ERROR_INCOMPLETE_LINE_OVERLAPS_PAGES:return "PVRSRV_ERROR_INCOMPLETE_LINE_OVERLAPS_PAGES"; - - case PVRSRV_ERROR_MUTEX_DESTROY_FAILED: return "PVRSRV_ERROR_MUTEX_DESTROY_FAILED"; - case PVRSRV_ERROR_MUTEX_INTERRUPTIBLE_ERROR: return "PVRSRV_ERROR_MUTEX_INTERRUPTIBLE_ERROR"; - - case PVRSRV_ERROR_INSUFFICIENT_SCRIPT_SPACE: return "PVRSRV_ERROR_INSUFFICIENT_SCRIPT_SPACE"; - case PVRSRV_ERROR_INSUFFICIENT_SPACE_FOR_COMMAND:return "PVRSRV_ERROR_INSUFFICIENT_SPACE_FOR_COMMAND"; - - case PVRSRV_ERROR_PROCESS_NOT_INITIALISED: return "PVRSRV_ERROR_PROCESS_NOT_INITIALISED"; - case PVRSRV_ERROR_PROCESS_NOT_FOUND: return "PVRSRV_ERROR_PROCESS_NOT_FOUND"; - case PVRSRV_ERROR_SRV_CONNECT_FAILED: return "PVRSRV_ERROR_SRV_CONNECT_FAILED"; - case PVRSRV_ERROR_SRV_DISCONNECT_FAILED: return "PVRSRV_ERROR_SRV_DISCONNECT_FAILED"; - case PVRSRV_ERROR_DEINT_PHASE_FAILED: return "PVRSRV_ERROR_DEINT_PHASE_FAILED"; - case PVRSRV_ERROR_INIT2_PHASE_FAILED: return "PVRSRV_ERROR_INIT2_PHASE_FAILED"; - - case PVRSRV_ERROR_NO_DC_DEVICES_FOUND: return "PVRSRV_ERROR_NO_DC_DEVICES_FOUND"; - case PVRSRV_ERROR_UNABLE_TO_OPEN_DC_DEVICE: return "PVRSRV_ERROR_UNABLE_TO_OPEN_DC_DEVICE"; - case PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE: return "PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE"; - case PVRSRV_ERROR_NO_DEVICEDATA_FOUND: return "PVRSRV_ERROR_NO_DEVICEDATA_FOUND"; - case PVRSRV_ERROR_NO_DEVICENODE_FOUND: return "PVRSRV_ERROR_NO_DEVICENODE_FOUND"; - case PVRSRV_ERROR_NO_CLIENTNODE_FOUND: return "PVRSRV_ERROR_NO_CLIENTNODE_FOUND"; - case PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE: return "PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE"; - - case PVRSRV_ERROR_UNABLE_TO_INIT_TASK: return "PVRSRV_ERROR_UNABLE_TO_INIT_TASK"; - case PVRSRV_ERROR_UNABLE_TO_SCHEDULE_TASK: return "PVRSRV_ERROR_UNABLE_TO_SCHEDULE_TASK"; - case PVRSRV_ERROR_UNABLE_TO_KILL_TASK: return "PVRSRV_ERROR_UNABLE_TO_KILL_TASK"; - - case PVRSRV_ERROR_UNABLE_TO_ENABLE_TIMER: return "PVRSRV_ERROR_UNABLE_TO_ENABLE_TIMER"; - case PVRSRV_ERROR_UNABLE_TO_DISABLE_TIMER: return "PVRSRV_ERROR_UNABLE_TO_DISABLE_TIMER"; - case PVRSRV_ERROR_UNABLE_TO_REMOVE_TIMER: return "PVRSRV_ERROR_UNABLE_TO_REMOVE_TIMER"; - - case PVRSRV_ERROR_UNKNOWN_PIXEL_FORMAT: return "PVRSRV_ERROR_UNKNOWN_PIXEL_FORMAT"; - case PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION: return "PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION"; - - case PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE: return "PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE"; - case PVRSRV_ERROR_HANDLE_NOT_ALLOCATED: return "PVRSRV_ERROR_HANDLE_NOT_ALLOCATED"; - case PVRSRV_ERROR_HANDLE_TYPE_MISMATCH: return "PVRSRV_ERROR_HANDLE_TYPE_MISMATCH"; - case PVRSRV_ERROR_UNABLE_TO_ADD_HANDLE: return "PVRSRV_ERROR_UNABLE_TO_ADD_HANDLE"; - case PVRSRV_ERROR_HANDLE_NOT_SHAREABLE: return "PVRSRV_ERROR_HANDLE_NOT_SHAREABLE"; - case PVRSRV_ERROR_HANDLE_NOT_FOUND: return "PVRSRV_ERROR_HANDLE_NOT_FOUND"; - case PVRSRV_ERROR_INVALID_SUBHANDLE: return "PVRSRV_ERROR_INVALID_SUBHANDLE"; - case PVRSRV_ERROR_HANDLE_BATCH_IN_USE: return "PVRSRV_ERROR_HANDLE_BATCH_IN_USE"; - case PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE: return "PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE"; - - case PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE: return "PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE"; - case PVRSRV_ERROR_INSERT_HASH_TABLE_DATA_FAILED:return "PVRSRV_ERROR_INSERT_HASH_TABLE_DATA_FAILED"; - - case PVRSRV_ERROR_UNSUPPORTED_BACKING_STORE: return "PVRSRV_ERROR_UNSUPPORTED_BACKING_STORE"; - case PVRSRV_ERROR_UNABLE_TO_DESTROY_BM_HEAP: return "PVRSRV_ERROR_UNABLE_TO_DESTROY_BM_HEAP"; - - case PVRSRV_ERROR_UNKNOWN_INIT_SERVER_STATE: return "PVRSRV_ERROR_UNKNOWN_INIT_SERVER_STATE"; - - case PVRSRV_ERROR_NO_FREE_DEVICEIDS_AVALIABLE: return "PVRSRV_ERROR_NO_FREE_DEVICEIDS_AVALIABLE"; - case PVRSRV_ERROR_INVALID_DEVICEID: return "PVRSRV_ERROR_INVALID_DEVICEID"; - case PVRSRV_ERROR_DEVICEID_NOT_FOUND: return "PVRSRV_ERROR_DEVICEID_NOT_FOUND"; - - case PVRSRV_ERROR_MEMORY_TEST_FAILED: return "PVRSRV_ERROR_MEMORY_TEST_FAILED"; - case PVRSRV_ERROR_CPUPADDR_TEST_FAILED: return "PVRSRV_ERROR_CPUPADDR_TEST_FAILED"; - case PVRSRV_ERROR_COPY_TEST_FAILED: return "PVRSRV_ERROR_COPY_TEST_FAILED"; - - case PVRSRV_ERROR_SEMAPHORE_NOT_INITIALISED: return "PVRSRV_ERROR_SEMAPHORE_NOT_INITIALISED"; - - case PVRSRV_ERROR_UNABLE_TO_RELEASE_CLOCK: return "PVRSRV_ERROR_UNABLE_TO_RELEASE_CLOCK"; - case PVRSRV_ERROR_CLOCK_REQUEST_FAILED: return "PVRSRV_ERROR_CLOCK_REQUEST_FAILED"; - case PVRSRV_ERROR_DISABLE_CLOCK_FAILURE: return "PVRSRV_ERROR_DISABLE_CLOCK_FAILURE"; - case PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE: return "PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE"; - case PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE: return "PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE"; - case PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK: return "PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK"; - case PVRSRV_ERROR_UNABLE_TO_GET_CLOCK: return "PVRSRV_ERROR_UNABLE_TO_GET_CLOCK"; - case PVRSRV_ERROR_UNABLE_TO_GET_PARENT_CLOCK: return "PVRSRV_ERROR_UNABLE_TO_GET_PARENT_CLOCK"; - case PVRSRV_ERROR_UNABLE_TO_GET_SYSTEM_CLOCK: return "PVRSRV_ERROR_UNABLE_TO_GET_SYSTEM_CLOCK"; - - case PVRSRV_ERROR_UNKNOWN_SGL_ERROR: return "PVRSRV_ERROR_UNKNOWN_SGL_ERROR"; - case PVRSRV_ERROR_BAD_SYNC_STATE: return "PVRSRV_ERROR_BAD_SYNC_STATE"; - - case PVRSRV_ERROR_FORCE_I32: return "PVRSRV_ERROR_FORCE_I32"; - - default: - return "Unknown PVRSRV error number"; - } - -#if defined (__cplusplus) -} -#endif -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/servicesint.h b/drivers/staging/cdv/pvr/services4/include/servicesint.h deleted file mode 100644 index 813a391..0000000 --- a/drivers/staging/cdv/pvr/services4/include/servicesint.h +++ /dev/null @@ -1,391 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__SERVICESINT_H__) -#define __SERVICESINT_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "services.h" -#include "sysinfo.h" - -#define HWREC_DEFAULT_TIMEOUT (500) - -#define DRIVERNAME_MAXLENGTH (100) - -#define ALIGNSIZE(size, alignshift) (((size) + ((1UL << (alignshift))-1)) & ~((1UL << (alignshift))-1)) - -#ifndef MAX -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#endif -#ifndef MIN -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#endif - -typedef enum _PVRSRV_MEMTYPE_ -{ - PVRSRV_MEMTYPE_UNKNOWN = 0, - PVRSRV_MEMTYPE_DEVICE = 1, - PVRSRV_MEMTYPE_DEVICECLASS = 2, - PVRSRV_MEMTYPE_WRAPPED = 3, - PVRSRV_MEMTYPE_MAPPED = 4, -} PVRSRV_MEMTYPE; - -typedef struct _PVRSRV_KERNEL_MEM_INFO_ -{ - - IMG_PVOID pvLinAddrKM; - - - IMG_DEV_VIRTADDR sDevVAddr; - - - IMG_UINT32 ui32Flags; - - - IMG_SIZE_T uAllocSize; - - - PVRSRV_MEMBLK sMemBlk; - - - IMG_PVOID pvSysBackupBuffer; - - - IMG_UINT32 ui32RefCount; - - - IMG_BOOL bPendingFree; - - -#if defined(SUPPORT_MEMINFO_IDS) - #if !defined(USE_CODE) - - IMG_UINT64 ui64Stamp; - #else - IMG_UINT32 dummy1; - IMG_UINT32 dummy2; - #endif -#endif - - - struct _PVRSRV_KERNEL_SYNC_INFO_ *psKernelSyncInfo; - - PVRSRV_MEMTYPE memType; - - - - - - - - - struct { - - - IMG_BOOL bInUse; - - - IMG_HANDLE hDevCookieInt; - - - IMG_UINT32 ui32ShareIndex; - - - - IMG_UINT32 ui32OrigReqAttribs; - IMG_UINT32 ui32OrigReqSize; - IMG_UINT32 ui32OrigReqAlignment; - } sShareMemWorkaround; -} PVRSRV_KERNEL_MEM_INFO; - - -typedef struct _PVRSRV_KERNEL_SYNC_INFO_ -{ - - PVRSRV_SYNC_DATA *psSyncData; - - - IMG_DEV_VIRTADDR sWriteOpsCompleteDevVAddr; - - - IMG_DEV_VIRTADDR sReadOpsCompleteDevVAddr; - - - PVRSRV_KERNEL_MEM_INFO *psSyncDataMemInfoKM; - - - - IMG_UINT32 ui32RefCount; - - - IMG_HANDLE hResItem; - - - IMG_UINT32 ui32UID; -} PVRSRV_KERNEL_SYNC_INFO; - -typedef struct _PVRSRV_DEVICE_SYNC_OBJECT_ -{ - - IMG_UINT32 ui32ReadOpsPendingVal; - IMG_DEV_VIRTADDR sReadOpsCompleteDevVAddr; - IMG_UINT32 ui32WriteOpsPendingVal; - IMG_DEV_VIRTADDR sWriteOpsCompleteDevVAddr; -} PVRSRV_DEVICE_SYNC_OBJECT; - -typedef struct _PVRSRV_SYNC_OBJECT -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfoKM; - IMG_UINT32 ui32WriteOpsPending; - IMG_UINT32 ui32ReadOpsPending; - -}PVRSRV_SYNC_OBJECT, *PPVRSRV_SYNC_OBJECT; - -typedef struct _PVRSRV_COMMAND -{ - IMG_SIZE_T uCmdSize; - IMG_UINT32 ui32DevIndex; - IMG_UINT32 CommandType; - IMG_UINT32 ui32DstSyncCount; - IMG_UINT32 ui32SrcSyncCount; - PVRSRV_SYNC_OBJECT *psDstSync; - PVRSRV_SYNC_OBJECT *psSrcSync; - IMG_SIZE_T uDataSize; - IMG_UINT32 ui32ProcessID; - IMG_VOID *pvData; -}PVRSRV_COMMAND, *PPVRSRV_COMMAND; - - -typedef struct _PVRSRV_QUEUE_INFO_ -{ - IMG_VOID *pvLinQueueKM; - IMG_VOID *pvLinQueueUM; - volatile IMG_SIZE_T ui32ReadOffset; - volatile IMG_SIZE_T ui32WriteOffset; - IMG_UINT32 *pui32KickerAddrKM; - IMG_UINT32 *pui32KickerAddrUM; - IMG_SIZE_T ui32QueueSize; - - IMG_UINT32 ui32ProcessID; - - IMG_HANDLE hMemBlock[2]; - - struct _PVRSRV_QUEUE_INFO_ *psNextKM; -}PVRSRV_QUEUE_INFO; - - -typedef struct _PVRSRV_HEAP_INFO_KM_ -{ - IMG_UINT32 ui32HeapID; - IMG_DEV_VIRTADDR sDevVAddrBase; - - IMG_HANDLE hDevMemHeap; - IMG_UINT32 ui32HeapByteSize; - IMG_UINT32 ui32Attribs; - IMG_UINT32 ui32XTileStride; -}PVRSRV_HEAP_INFO_KM; - - -typedef struct _PVRSRV_EVENTOBJECT_KM_ -{ - - IMG_CHAR szName[EVENTOBJNAME_MAXLENGTH]; - - IMG_HANDLE hOSEventKM; - -} PVRSRV_EVENTOBJECT_KM; - - -typedef struct _PVRSRV_MISC_INFO_KM_ -{ - IMG_UINT32 ui32StateRequest; - IMG_UINT32 ui32StatePresent; - - - IMG_VOID *pvSOCTimerRegisterKM; - IMG_VOID *pvSOCTimerRegisterUM; - IMG_HANDLE hSOCTimerRegisterOSMemHandle; - IMG_HANDLE hSOCTimerRegisterMappingInfo; - - - IMG_VOID *pvSOCClockGateRegs; - IMG_UINT32 ui32SOCClockGateRegsSize; - - - IMG_CHAR *pszMemoryStr; - IMG_UINT32 ui32MemoryStrLen; - - - PVRSRV_EVENTOBJECT_KM sGlobalEventObject; - IMG_HANDLE hOSGlobalEvent; - - - IMG_UINT32 aui32DDKVersion[4]; - - - struct - { - - IMG_BOOL bDeferOp; - - - PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType; - - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - - IMG_VOID *pvBaseVAddr; - - - IMG_UINT32 ui32Length; - } sCacheOpCtl; -} PVRSRV_MISC_INFO_KM; - - -typedef PVRSRV_ERROR (*PFN_INSERT_CMD) (PVRSRV_QUEUE_INFO*, - PVRSRV_COMMAND**, - IMG_UINT32, - IMG_UINT16, - IMG_UINT32, - PVRSRV_KERNEL_SYNC_INFO*[], - IMG_UINT32, - PVRSRV_KERNEL_SYNC_INFO*[], - IMG_UINT32); -typedef PVRSRV_ERROR (*PFN_SUBMIT_CMD) (PVRSRV_QUEUE_INFO*, PVRSRV_COMMAND*, IMG_BOOL); - - -typedef struct PVRSRV_DEVICECLASS_BUFFER_TAG -{ - PFN_GET_BUFFER_ADDR pfnGetBufferAddr; - IMG_HANDLE hDevMemContext; - IMG_HANDLE hExtDevice; - IMG_HANDLE hExtBuffer; - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - IMG_UINT32 ui32MemMapRefCount; -} PVRSRV_DEVICECLASS_BUFFER; - - -typedef struct PVRSRV_CLIENT_DEVICECLASS_INFO_TAG -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDeviceKM; -#else - IMG_HANDLE hDeviceKM; -#endif - IMG_HANDLE hServices; -} PVRSRV_CLIENT_DEVICECLASS_INFO; - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVGetWriteOpsPending) -#endif -static INLINE -IMG_UINT32 PVRSRVGetWriteOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp) -{ - IMG_UINT32 ui32WriteOpsPending; - - if(bIsReadOp) - { - ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - else - { - - - - ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - - return ui32WriteOpsPending; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVGetReadOpsPending) -#endif -static INLINE -IMG_UINT32 PVRSRVGetReadOpsPending(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, IMG_BOOL bIsReadOp) -{ - IMG_UINT32 ui32ReadOpsPending; - - if(bIsReadOp) - { - ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOpsPending++; - } - else - { - ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - return ui32ReadOpsPending; -} - -IMG_IMPORT -PVRSRV_ERROR PVRSRVQueueCommand(IMG_HANDLE hQueueInfo, - PVRSRV_COMMAND *psCommand); - - - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV -PVRSRVGetMMUContextPDDevPAddr(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemContext, -#else - IMG_HANDLE hDevMemContext, -#endif - IMG_DEV_PHYADDR *sPDDevPAddr); - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV -PVRSRVAllocSharedSysMem(const PVRSRV_CONNECTION *psConnection, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - PVRSRV_CLIENT_MEM_INFO **ppsClientMemInfo); - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV -PVRSRVFreeSharedSysMem(const PVRSRV_CONNECTION *psConnection, - PVRSRV_CLIENT_MEM_INFO *psClientMemInfo); - -IMG_IMPORT PVRSRV_ERROR -PVRSRVUnrefSharedSysMem(const PVRSRV_CONNECTION *psConnection, - PVRSRV_CLIENT_MEM_INFO *psClientMemInfo); - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV -PVRSRVMapMemInfoMem(const PVRSRV_CONNECTION *psConnection, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo, -#else - IMG_HANDLE hKernelMemInfo, -#endif - PVRSRV_CLIENT_MEM_INFO **ppsClientMemInfo); - - -#if defined (__cplusplus) -} -#endif -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/sgx_bridge.h b/drivers/staging/cdv/pvr/services4/include/sgx_bridge.h deleted file mode 100644 index 204189c..0000000 --- a/drivers/staging/cdv/pvr/services4/include/sgx_bridge.h +++ /dev/null @@ -1,644 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SGX_BRIDGE_H__) -#define __SGX_BRIDGE_H__ - -#if defined (SUPPORT_SID_INTERFACE) -#include "sgxapi.h" -#else -#include "sgxapi_km.h" -#endif -#include "sgxinfo.h" -#include "pvr_bridge.h" - -#if defined (__cplusplus) -extern "C" { -#endif - - -#define PVRSRV_BRIDGE_SGX_CMD_BASE (PVRSRV_BRIDGE_LAST_NON_DEVICE_CMD+1) -#define PVRSRV_BRIDGE_SGX_GETCLIENTINFO PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+0) -#define PVRSRV_BRIDGE_SGX_RELEASECLIENTINFO PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+1) -#define PVRSRV_BRIDGE_SGX_GETINTERNALDEVINFO PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+2) -#define PVRSRV_BRIDGE_SGX_DOKICK PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+3) -#define PVRSRV_BRIDGE_SGX_GETPHYSPAGEADDR PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+4) -#define PVRSRV_BRIDGE_SGX_READREGISTRYDWORD PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+5) - -#define PVRSRV_BRIDGE_SGX_2DQUERYBLTSCOMPLETE PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+9) - -#define PVRSRV_BRIDGE_SGX_GETMMUPDADDR PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+10) - -#if defined(TRANSFER_QUEUE) -#define PVRSRV_BRIDGE_SGX_SUBMITTRANSFER PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+13) -#endif -#define PVRSRV_BRIDGE_SGX_GETMISCINFO PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+14) -#define PVRSRV_BRIDGE_SGXINFO_FOR_SRVINIT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+15) -#define PVRSRV_BRIDGE_SGX_DEVINITPART2 PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+16) - -#define PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+17) -#define PVRSRV_BRIDGE_SGX_UNREFSHAREDPBDESC PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+18) -#define PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+19) -#define PVRSRV_BRIDGE_SGX_REGISTER_HW_RENDER_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+20) -#define PVRSRV_BRIDGE_SGX_FLUSH_HW_RENDER_TARGET PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+21) -#define PVRSRV_BRIDGE_SGX_UNREGISTER_HW_RENDER_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+22) -#if defined(SGX_FEATURE_2D_HARDWARE) -#define PVRSRV_BRIDGE_SGX_SUBMIT2D PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+23) -#define PVRSRV_BRIDGE_SGX_REGISTER_HW_2D_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+24) -#define PVRSRV_BRIDGE_SGX_UNREGISTER_HW_2D_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+25) -#endif -#define PVRSRV_BRIDGE_SGX_REGISTER_HW_TRANSFER_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+26) -#define PVRSRV_BRIDGE_SGX_UNREGISTER_HW_TRANSFER_CONTEXT PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+27) - -#define PVRSRV_BRIDGE_SGX_SCHEDULE_PROCESS_QUEUES PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+28) - -#define PVRSRV_BRIDGE_SGX_READ_HWPERF_CB PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+30) - -#if defined(PDUMP) -#define PVRSRV_BRIDGE_SGX_PDUMP_BUFFER_ARRAY PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+31) -#define PVRSRV_BRIDGE_SGX_PDUMP_3D_SIGNATURE_REGISTERS PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+32) -#define PVRSRV_BRIDGE_SGX_PDUMP_COUNTER_REGISTERS PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+33) -#define PVRSRV_BRIDGE_SGX_PDUMP_TA_SIGNATURE_REGISTERS PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+34) -#define PVRSRV_BRIDGE_SGX_PDUMP_HWPERFCB PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+35) -#define PVRSRV_BRIDGE_SGX_PDUMP_SAVEMEM PVRSRV_IOWR(PVRSRV_BRIDGE_SGX_CMD_BASE+36) -#endif - - - -#define PVRSRV_BRIDGE_LAST_SGX_CMD (PVRSRV_BRIDGE_SGX_CMD_BASE+36) - - -typedef struct PVRSRV_BRIDGE_IN_GETPHYSPAGEADDR -{ - IMG_UINT32 ui32BridgeFlags; - IMG_HANDLE hDevMemHeap; - IMG_DEV_VIRTADDR sDevVAddr; -}PVRSRV_BRIDGE_IN_GETPHYSPAGEADDR; - - -typedef struct PVRSRV_BRIDGE_OUT_GETPHYSPAGEADDR -{ - PVRSRV_ERROR eError; - IMG_DEV_PHYADDR DevPAddr; - IMG_CPU_PHYADDR CpuPAddr; -}PVRSRV_BRIDGE_OUT_GETPHYSPAGEADDR; - - -typedef struct PVRSRV_BRIDGE_IN_SGX_GETMMU_PDADDR_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif -}PVRSRV_BRIDGE_IN_SGX_GETMMU_PDADDR; - - -typedef struct PVRSRV_BRIDGE_OUT_SGX_GETMMU_PDADDR_TAG -{ - IMG_DEV_PHYADDR sPDDevPAddr; - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_SGX_GETMMU_PDADDR; - - -typedef struct PVRSRV_BRIDGE_IN_GETCLIENTINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -}PVRSRV_BRIDGE_IN_GETCLIENTINFO; - - -typedef struct PVRSRV_BRIDGE_OUT_GETINTERNALDEVINFO_TAG -{ - SGX_INTERNAL_DEVINFO sSGXInternalDevInfo; - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_GETINTERNALDEVINFO; - - -typedef struct PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -}PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO; - - -typedef struct PVRSRV_BRIDGE_OUT_GETCLIENTINFO_TAG -{ - SGX_CLIENT_INFO sClientInfo; - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_GETCLIENTINFO; - - -typedef struct PVRSRV_BRIDGE_IN_RELEASECLIENTINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - SGX_CLIENT_INFO sClientInfo; -}PVRSRV_BRIDGE_IN_RELEASECLIENTINFO; - - -typedef struct PVRSRV_BRIDGE_IN_ISPBREAKPOLL_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -}PVRSRV_BRIDGE_IN_ISPBREAKPOLL; - - -typedef struct PVRSRV_BRIDGE_IN_DOKICK_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - SGX_CCB_KICK sCCBKick; -}PVRSRV_BRIDGE_IN_DOKICK; - - -typedef struct PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -}PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES; - - -#if defined(TRANSFER_QUEUE) - -typedef struct PVRSRV_BRIDGE_IN_SUBMITTRANSFER_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - PVRSRV_TRANSFER_SGX_KICK sKick; -}PVRSRV_BRIDGE_IN_SUBMITTRANSFER; - -#if defined(SGX_FEATURE_2D_HARDWARE) - -typedef struct PVRSRV_BRIDGE_IN_SUBMIT2D_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - PVRSRV_2D_SGX_KICK sKick; -} PVRSRV_BRIDGE_IN_SUBMIT2D; -#endif -#endif - - -typedef struct PVRSRV_BRIDGE_IN_READREGDWORD_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_PCHAR pszKey; - IMG_PCHAR pszValue; -}PVRSRV_BRIDGE_IN_READREGDWORD; - - -typedef struct PVRSRV_BRIDGE_OUT_READREGDWORD_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32Data; -}PVRSRV_BRIDGE_OUT_READREGDWORD; - - -typedef struct PVRSRV_BRIDGE_IN_SGXGETMISCINFO_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - SGX_MISC_INFO *psMiscInfo; -}PVRSRV_BRIDGE_IN_SGXGETMISCINFO; - -typedef struct PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif -}PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT; - -typedef struct PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT_TAG -{ - PVRSRV_ERROR eError; - SGX_BRIDGE_INFO_FOR_SRVINIT sInitInfo; -}PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT; - -typedef struct PVRSRV_BRIDGE_IN_SGXDEVINITPART2_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - SGX_BRIDGE_INIT_INFO sInitInfo; -}PVRSRV_BRIDGE_IN_SGXDEVINITPART2; - -typedef struct PVRSRV_BRIDGE_OUT_SGXDEVINITPART2_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32KMBuildOptions; - -}PVRSRV_BRIDGE_OUT_SGXDEVINITPART2; - - -typedef struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hKernSyncInfo; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hKernSyncInfo; -#endif - IMG_BOOL bWaitForComplete; -}PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE; - - -#define PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS 10 - -typedef struct PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_BOOL bLockOnFailure; - IMG_UINT32 ui32TotalPBSize; -}PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC; - -typedef struct PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC_TAG -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; - IMG_SID hSharedPBDesc; - IMG_SID hSharedPBDescKernelMemInfoHandle; - IMG_SID hHWPBDescKernelMemInfoHandle; - IMG_SID hBlockKernelMemInfoHandle; - IMG_SID hHWBlockKernelMemInfoHandle; - IMG_SID ahSharedPBDescSubKernelMemInfoHandles[PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS]; -#else - IMG_HANDLE hKernelMemInfo; - IMG_HANDLE hSharedPBDesc; - IMG_HANDLE hSharedPBDescKernelMemInfoHandle; - IMG_HANDLE hHWPBDescKernelMemInfoHandle; - IMG_HANDLE hBlockKernelMemInfoHandle; - IMG_HANDLE hHWBlockKernelMemInfoHandle; - IMG_HANDLE ahSharedPBDescSubKernelMemInfoHandles[PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS]; -#endif - IMG_UINT32 ui32SharedPBDescSubKernelMemInfoHandlesCount; - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC; - -typedef struct PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSharedPBDesc; -#else - IMG_HANDLE hSharedPBDesc; -#endif -}PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC; - -typedef struct PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC_TAG -{ - PVRSRV_ERROR eError; -}PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC; - - -typedef struct PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_UINT32 ui32TotalPBSize; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hSharedPBDescKernelMemInfo; - IMG_SID hHWPBDescKernelMemInfo; - IMG_SID hBlockKernelMemInfo; - IMG_SID hHWBlockKernelMemInfo; - IMG_SID *phKernelMemInfoHandles; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hSharedPBDescKernelMemInfo; - IMG_HANDLE hHWPBDescKernelMemInfo; - IMG_HANDLE hBlockKernelMemInfo; - IMG_HANDLE hHWBlockKernelMemInfo; - IMG_HANDLE *phKernelMemInfoHandles; -#endif - IMG_UINT32 ui32KernelMemInfoHandlesCount; - IMG_DEV_VIRTADDR sHWPBDescDevVAddr; -}PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC; - -typedef struct PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hSharedPBDesc; -#else - IMG_HANDLE hSharedPBDesc; -#endif -}PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC; - - -#ifdef PDUMP -typedef struct PVRSRV_BRIDGE_IN_PDUMP_BUFFER_ARRAY_TAG -{ - IMG_UINT32 ui32BridgeFlags; - SGX_KICKTA_DUMP_BUFFER *psBufferArray; - IMG_UINT32 ui32BufferArrayLength; - IMG_BOOL bDumpPolls; -} PVRSRV_BRIDGE_IN_PDUMP_BUFFER_ARRAY; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif - IMG_UINT32 ui32DumpFrameNum; - IMG_BOOL bLastFrame; - IMG_UINT32 *pui32Registers; - IMG_UINT32 ui32NumRegisters; -}PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS; - -typedef struct PVRSRV_BRIDGE_IN_PDUMPCOUNTER_REGISTERS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_UINT32 ui32DumpFrameNum; - IMG_BOOL bLastFrame; - IMG_UINT32 *pui32Registers; - IMG_UINT32 ui32NumRegisters; -}PVRSRV_BRIDGE_IN_PDUMP_COUNTER_REGISTERS; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_UINT32 ui32DumpFrameNum; - IMG_UINT32 ui32TAKickCount; - IMG_BOOL bLastFrame; - IMG_UINT32 *pui32Registers; - IMG_UINT32 ui32NumRegisters; -}PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hDevMemContext; -#endif - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; - IMG_UINT32 ui32FileOffset; - IMG_UINT32 ui32PDumpFlags; - -}PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB; - -typedef struct PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hDevMemContext; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_CHAR szFileName[PVRSRV_PDUMP_MAX_FILENAME_SIZE]; - IMG_UINT32 ui32FileOffset; - IMG_DEV_VIRTADDR sDevVAddr; - IMG_UINT32 ui32Size; -#if !defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE hDevMemContext; -#endif - IMG_UINT32 ui32PDumpFlags; - -}PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM; - -#endif - -typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_RENDER_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_DEV_VIRTADDR sHWRenderContextDevVAddr; -}PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_RENDER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHWRenderContext; -#else - IMG_HANDLE hHWRenderContext; -#endif -}PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_BOOL bForceCleanup; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hHWRenderContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hHWRenderContext; -#endif -}PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_TRANSFER_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; -}PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_TRANSFER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHWTransferContext; -#else - IMG_HANDLE hHWTransferContext; -#endif -}PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_BOOL bForceCleanup; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hHWTransferContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hHWTransferContext; -#endif -}PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT; - -typedef struct PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr; -}PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET; - - -#if defined(SGX_FEATURE_2D_HARDWARE) -typedef struct PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_2D_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_DEV_VIRTADDR sHW2DContextDevVAddr; -}PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_2D_CONTEXT; - -typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT_TAG -{ - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHW2DContext; -#else - IMG_HANDLE hHW2DContext; -#endif -}PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT; - -typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT_TAG -{ - IMG_UINT32 ui32BridgeFlags; - IMG_BOOL bForceCleanup; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; - IMG_SID hHW2DContext; -#else - IMG_HANDLE hDevCookie; - IMG_HANDLE hHW2DContext; -#endif -}PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT; - -#define SGX2D_MAX_BLT_CMD_SIZ 256 -#endif - - -typedef struct PVRSRV_BRIDGE_IN_SGX_READ_HWPERF_CB_TAG -{ - IMG_UINT32 ui32BridgeFlags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevCookie; -#else - IMG_HANDLE hDevCookie; -#endif - IMG_UINT32 ui32ArraySize; - PVRSRV_SGX_HWPERF_CB_ENTRY *psHWPerfCBData; -} PVRSRV_BRIDGE_IN_SGX_READ_HWPERF_CB; - -typedef struct PVRSRV_BRIDGE_OUT_SGX_READ_HWPERF_CB_TAG -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32DataCount; - IMG_UINT32 ui32ClockSpeed; - IMG_UINT32 ui32HostTimeStamp; -} PVRSRV_BRIDGE_OUT_SGX_READ_HWPERF_CB; - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/sgx_mkif_km.h b/drivers/staging/cdv/pvr/services4/include/sgx_mkif_km.h deleted file mode 100644 index d5cffdb..0000000 --- a/drivers/staging/cdv/pvr/services4/include/sgx_mkif_km.h +++ /dev/null @@ -1,347 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__SGX_MKIF_KM_H__) -#define __SGX_MKIF_KM_H__ - -#include "img_types.h" -#include "servicesint.h" -#include "sgxapi_km.h" - - -#if !defined (SGX_MP_CORE_SELECT) -#if defined(SGX_FEATURE_MP) - #define SGX_REG_BANK_SHIFT (14) - #define SGX_REG_BANK_SIZE (1 << SGX_REG_BANK_SHIFT) - #define SGX_REG_BANK_BASE_INDEX (2) - #define SGX_REG_BANK_MASTER_INDEX (1) - #define SGX_MP_CORE_SELECT(x,i) (x + ((i + SGX_REG_BANK_BASE_INDEX) * SGX_REG_BANK_SIZE)) - #define SGX_MP_MASTER_SELECT(x) (x + (SGX_REG_BANK_MASTER_INDEX * SGX_REG_BANK_SIZE)) -#else - #define SGX_MP_CORE_SELECT(x,i) (x) -#endif -#endif - - -typedef struct _SGXMKIF_COMMAND_ -{ - IMG_UINT32 ui32ServiceAddress; - IMG_UINT32 ui32CacheControl; - IMG_UINT32 ui32Data[6]; -} SGXMKIF_COMMAND; - - -typedef struct _PVRSRV_SGX_KERNEL_CCB_ -{ - SGXMKIF_COMMAND asCommands[256]; -} PVRSRV_SGX_KERNEL_CCB; - - -typedef struct _PVRSRV_SGX_CCB_CTL_ -{ - IMG_UINT32 ui32WriteOffset; - IMG_UINT32 ui32ReadOffset; -} PVRSRV_SGX_CCB_CTL; - - -typedef struct _SGXMKIF_HOST_CTL_ -{ -#if defined(PVRSRV_USSE_EDM_BREAKPOINTS) - IMG_UINT32 ui32BreakpointDisable; - IMG_UINT32 ui32Continue; -#endif - - volatile IMG_UINT32 ui32InitStatus; - volatile IMG_UINT32 ui32PowerStatus; - volatile IMG_UINT32 ui32CleanupStatus; -#if defined(FIX_HW_BRN_28889) - volatile IMG_UINT32 ui32InvalStatus; -#endif -#if defined(SUPPORT_HW_RECOVERY) - IMG_UINT32 ui32uKernelDetectedLockups; - IMG_UINT32 ui32HostDetectedLockups; - IMG_UINT32 ui32HWRecoverySampleRate; -#endif - IMG_UINT32 ui32uKernelTimerClock; - IMG_UINT32 ui32ActivePowManSampleRate; - IMG_UINT32 ui32InterruptFlags; - IMG_UINT32 ui32InterruptClearFlags; - IMG_UINT32 ui32BPSetClearSignal; - - IMG_UINT32 ui32NumActivePowerEvents; - - IMG_UINT32 ui32TimeWraps; - IMG_UINT32 ui32HostClock; - IMG_UINT32 ui32AssertFail; - -#if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) - IMG_UINT32 aui32PerfGroup[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; - IMG_UINT32 aui32PerfBit[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; -#else - IMG_UINT32 ui32PerfGroup; -#endif - -#if defined(FIX_HW_BRN_31939) - IMG_UINT32 ui32BRN31939Mem; -#endif - - IMG_UINT32 ui32OpenCLDelayCount; -} SGXMKIF_HOST_CTL; - -#define SGXMKIF_CMDTA_CTRLFLAGS_READY 0x00000001 -typedef struct _SGXMKIF_CMDTA_SHARED_ -{ - IMG_UINT32 ui32CtrlFlags; - - IMG_UINT32 ui32NumTAStatusVals; - IMG_UINT32 ui32Num3DStatusVals; - - - IMG_UINT32 ui32TATQSyncWriteOpsPendingVal; - IMG_DEV_VIRTADDR sTATQSyncWriteOpsCompleteDevVAddr; - IMG_UINT32 ui32TATQSyncReadOpsPendingVal; - IMG_DEV_VIRTADDR sTATQSyncReadOpsCompleteDevVAddr; - - - IMG_UINT32 ui323DTQSyncWriteOpsPendingVal; - IMG_DEV_VIRTADDR s3DTQSyncWriteOpsCompleteDevVAddr; - IMG_UINT32 ui323DTQSyncReadOpsPendingVal; - IMG_DEV_VIRTADDR s3DTQSyncReadOpsCompleteDevVAddr; - - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - IMG_UINT32 ui32NumTASrcSyncs; - PVRSRV_DEVICE_SYNC_OBJECT asTASrcSyncs[SGX_MAX_TA_SRC_SYNCS]; - IMG_UINT32 ui32NumTADstSyncs; - PVRSRV_DEVICE_SYNC_OBJECT asTADstSyncs[SGX_MAX_TA_DST_SYNCS]; - IMG_UINT32 ui32Num3DSrcSyncs; - PVRSRV_DEVICE_SYNC_OBJECT as3DSrcSyncs[SGX_MAX_3D_SRC_SYNCS]; -#else - - IMG_UINT32 ui32NumSrcSyncs; - PVRSRV_DEVICE_SYNC_OBJECT asSrcSyncs[SGX_MAX_SRC_SYNCS]; -#endif - - - PVRSRV_DEVICE_SYNC_OBJECT sTA3DDependency; - - CTL_STATUS sCtlTAStatusInfo[SGX_MAX_TA_STATUS_VALS]; - CTL_STATUS sCtl3DStatusInfo[SGX_MAX_3D_STATUS_VALS]; - -} SGXMKIF_CMDTA_SHARED; - -#define SGXTQ_MAX_STATUS SGX_MAX_TRANSFER_STATUS_VALS + 2 - -#define SGXMKIF_TQFLAGS_NOSYNCUPDATE 0x00000001 -#define SGXMKIF_TQFLAGS_KEEPPENDING 0x00000002 -#define SGXMKIF_TQFLAGS_TATQ_SYNC 0x00000004 -#define SGXMKIF_TQFLAGS_3DTQ_SYNC 0x00000008 -#if defined(SGX_FEATURE_FAST_RENDER_CONTEXT_SWITCH) -#define SGXMKIF_TQFLAGS_CTXSWITCH 0x00000010 -#endif -#define SGXMKIF_TQFLAGS_DUMMYTRANSFER 0x00000020 - -typedef struct _SGXMKIF_TRANSFERCMD_SHARED_ -{ - - - IMG_UINT32 ui32NumSrcSyncs; - PVRSRV_DEVICE_SYNC_OBJECT asSrcSyncs[SGX_MAX_SRC_SYNCS]; - - - IMG_UINT32 ui32NumDstSyncs; - PVRSRV_DEVICE_SYNC_OBJECT asDstSyncs[SGX_MAX_DST_SYNCS]; - - IMG_UINT32 ui32TASyncWriteOpsPendingVal; - IMG_DEV_VIRTADDR sTASyncWriteOpsCompleteDevVAddr; - IMG_UINT32 ui32TASyncReadOpsPendingVal; - IMG_DEV_VIRTADDR sTASyncReadOpsCompleteDevVAddr; - - - IMG_UINT32 ui323DSyncWriteOpsPendingVal; - IMG_DEV_VIRTADDR s3DSyncWriteOpsCompleteDevVAddr; - IMG_UINT32 ui323DSyncReadOpsPendingVal; - IMG_DEV_VIRTADDR s3DSyncReadOpsCompleteDevVAddr; - - IMG_UINT32 ui32NumStatusVals; - CTL_STATUS sCtlStatusInfo[SGXTQ_MAX_STATUS]; -} SGXMKIF_TRANSFERCMD_SHARED, *PSGXMKIF_TRANSFERCMD_SHARED; - - -#if defined(SGX_FEATURE_2D_HARDWARE) -typedef struct _SGXMKIF_2DCMD_SHARED_ { - - IMG_UINT32 ui32NumSrcSync; - PVRSRV_DEVICE_SYNC_OBJECT sSrcSyncData[SGX_MAX_2D_SRC_SYNC_OPS]; - - - PVRSRV_DEVICE_SYNC_OBJECT sDstSyncData; - - - PVRSRV_DEVICE_SYNC_OBJECT sTASyncData; - - - PVRSRV_DEVICE_SYNC_OBJECT s3DSyncData; -} SGXMKIF_2DCMD_SHARED, *PSGXMKIF_2DCMD_SHARED; -#endif - - -typedef struct _SGXMKIF_HWDEVICE_SYNC_LIST_ -{ - IMG_DEV_VIRTADDR sAccessDevAddr; - IMG_UINT32 ui32NumSyncObjects; - - PVRSRV_DEVICE_SYNC_OBJECT asSyncData[1]; -} SGXMKIF_HWDEVICE_SYNC_LIST, *PSGXMKIF_HWDEVICE_SYNC_LIST; - - -#define PVRSRV_USSE_EDM_INIT_COMPLETE (1UL << 0) - -#define PVRSRV_USSE_EDM_POWMAN_IDLE_COMPLETE (1UL << 2) -#define PVRSRV_USSE_EDM_POWMAN_POWEROFF_COMPLETE (1UL << 3) -#define PVRSRV_USSE_EDM_POWMAN_POWEROFF_RESTART_IMMEDIATE (1UL << 4) -#define PVRSRV_USSE_EDM_POWMAN_NO_WORK (1UL << 5) - -#define PVRSRV_USSE_EDM_INTERRUPT_HWR (1UL << 0) -#define PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER (1UL << 1) - -#define PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE (1UL << 0) - -#if defined(FIX_HW_BRN_28889) -#define PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE (1UL << 0) -#endif - -#define PVRSRV_USSE_MISCINFO_READY 0x1UL -#define PVRSRV_USSE_MISCINFO_GET_STRUCT_SIZES 0x2UL -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) -#define PVRSRV_USSE_MISCINFO_MEMREAD 0x4UL -#define PVRSRV_USSE_MISCINFO_MEMWRITE 0x8UL -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) -#define PVRSRV_USSE_MISCINFO_MEMREAD_FAIL 0x1UL << 31 -#endif -#endif - - -#define PVRSRV_CLEANUPCMD_RT 0x1U -#define PVRSRV_CLEANUPCMD_RC 0x2U -#define PVRSRV_CLEANUPCMD_TC 0x3U -#define PVRSRV_CLEANUPCMD_2DC 0x4U -#define PVRSRV_CLEANUPCMD_PB 0x5U - -#define PVRSRV_POWERCMD_POWEROFF 0x1U -#define PVRSRV_POWERCMD_IDLE 0x2U -#define PVRSRV_POWERCMD_RESUME 0x3U - -#define PVRSRV_CTXSUSPCMD_SUSPEND 0x1U -#define PVRSRV_CTXSUSPCMD_RESUME 0x2U - - -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) -#define SGX_BIF_DIR_LIST_INDEX_EDM (SGX_FEATURE_BIF_NUM_DIRLISTS - 1) -#else -#define SGX_BIF_DIR_LIST_INDEX_EDM (0) -#endif - -#define SGXMKIF_CC_INVAL_BIF_PT 0x1 -#define SGXMKIF_CC_INVAL_BIF_PD 0x2 -#define SGXMKIF_CC_INVAL_BIF_SL 0x4 -#define SGXMKIF_CC_INVAL_DATA 0x8 - - -typedef struct _SGX_MISCINFO_STRUCT_SIZES_ -{ -#if defined (SGX_FEATURE_2D_HARDWARE) - IMG_UINT32 ui32Sizeof_2DCMD; - IMG_UINT32 ui32Sizeof_2DCMD_SHARED; -#endif - IMG_UINT32 ui32Sizeof_CMDTA; - IMG_UINT32 ui32Sizeof_CMDTA_SHARED; - IMG_UINT32 ui32Sizeof_TRANSFERCMD; - IMG_UINT32 ui32Sizeof_TRANSFERCMD_SHARED; - IMG_UINT32 ui32Sizeof_3DREGISTERS; - IMG_UINT32 ui32Sizeof_HWPBDESC; - IMG_UINT32 ui32Sizeof_HWRENDERCONTEXT; - IMG_UINT32 ui32Sizeof_HWRENDERDETAILS; - IMG_UINT32 ui32Sizeof_HWRTDATA; - IMG_UINT32 ui32Sizeof_HWRTDATASET; - IMG_UINT32 ui32Sizeof_HWTRANSFERCONTEXT; - IMG_UINT32 ui32Sizeof_HOST_CTL; - IMG_UINT32 ui32Sizeof_COMMAND; -} SGX_MISCINFO_STRUCT_SIZES; - - -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) -typedef struct _PVRSRV_SGX_MISCINFO_MEMACCESS -{ - IMG_DEV_VIRTADDR sDevVAddr; - IMG_DEV_PHYADDR sPDDevPAddr; -} PVRSRV_SGX_MISCINFO_MEMACCESS; -#endif - -typedef struct _PVRSRV_SGX_MISCINFO_INFO -{ - IMG_UINT32 ui32MiscInfoFlags; - PVRSRV_SGX_MISCINFO_FEATURES sSGXFeatures; - SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - PVRSRV_SGX_MISCINFO_MEMACCESS sSGXMemAccessSrc; - PVRSRV_SGX_MISCINFO_MEMACCESS sSGXMemAccessDest; -#endif -} PVRSRV_SGX_MISCINFO_INFO; - -#ifdef PVRSRV_USSE_EDM_STATUS_DEBUG -#define SGXMK_TRACE_BUFFER_SIZE 512 -#endif - -#define SGXMKIF_HWPERF_CB_SIZE 0x100 - -typedef struct _SGXMKIF_HWPERF_CB_ENTRY_ -{ - IMG_UINT32 ui32FrameNo; - IMG_UINT32 ui32PID; - IMG_UINT32 ui32RTData; - IMG_UINT32 ui32Type; - IMG_UINT32 ui32Ordinal; - IMG_UINT32 ui32Info; - IMG_UINT32 ui32TimeWraps; - IMG_UINT32 ui32Time; - - IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; - IMG_UINT32 ui32MiscCounters[SGX_FEATURE_MP_CORE_COUNT_3D][PVRSRV_SGX_HWPERF_NUM_MISC_COUNTERS]; -} SGXMKIF_HWPERF_CB_ENTRY; - -typedef struct _SGXMKIF_HWPERF_CB_ -{ - IMG_UINT32 ui32Woff; - IMG_UINT32 ui32Roff; - IMG_UINT32 ui32Ordinal; - SGXMKIF_HWPERF_CB_ENTRY psHWPerfCBData[SGXMKIF_HWPERF_CB_SIZE]; -} SGXMKIF_HWPERF_CB; - - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/include/sgxinfo.h b/drivers/staging/cdv/pvr/services4/include/sgxinfo.h deleted file mode 100644 index c32dc31..0000000 --- a/drivers/staging/cdv/pvr/services4/include/sgxinfo.h +++ /dev/null @@ -1,470 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined (__SGXINFO_H__) -#define __SGXINFO_H__ - -#include "sgxscript.h" -#include "servicesint.h" -#include "services.h" -#if !defined (SUPPORT_SID_INTERFACE) -#include "sgxapi_km.h" -#endif -#include "sgx_mkif_km.h" - - -#define SGX_MAX_DEV_DATA 24 -#define SGX_MAX_INIT_MEM_HANDLES 18 - - -typedef struct _SGX_BRIDGE_INFO_FOR_SRVINIT -{ - IMG_DEV_PHYADDR sPDDevPAddr; - PVRSRV_HEAP_INFO asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; -} SGX_BRIDGE_INFO_FOR_SRVINIT; - - -typedef enum _SGXMKIF_CMD_TYPE_ -{ - SGXMKIF_CMD_TA = 0, - SGXMKIF_CMD_TRANSFER = 1, - SGXMKIF_CMD_2D = 2, - SGXMKIF_CMD_POWER = 3, - SGXMKIF_CMD_CONTEXTSUSPEND = 4, - SGXMKIF_CMD_CLEANUP = 5, - SGXMKIF_CMD_GETMISCINFO = 6, - SGXMKIF_CMD_PROCESS_QUEUES = 7, - SGXMKIF_CMD_DATABREAKPOINT = 8, - SGXMKIF_CMD_SETHWPERFSTATUS = 9, - SGXMKIF_CMD_FLUSHPDCACHE = 10, - SGXMKIF_CMD_MAX = 11, - - SGXMKIF_CMD_FORCE_I32 = -1, - -} SGXMKIF_CMD_TYPE; - - -typedef struct _SGX_BRIDGE_INIT_INFO_ -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelCCBMemInfo; - IMG_SID hKernelCCBCtlMemInfo; - IMG_SID hKernelCCBEventKickerMemInfo; - IMG_SID hKernelSGXHostCtlMemInfo; - IMG_SID hKernelSGXTA3DCtlMemInfo; -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - IMG_SID hKernelSGXPTLAWriteBackMemInfo; -#endif - IMG_SID hKernelSGXMiscMemInfo; -#else - IMG_HANDLE hKernelCCBMemInfo; - IMG_HANDLE hKernelCCBCtlMemInfo; - IMG_HANDLE hKernelCCBEventKickerMemInfo; - IMG_HANDLE hKernelSGXHostCtlMemInfo; - IMG_HANDLE hKernelSGXTA3DCtlMemInfo; -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - IMG_HANDLE hKernelSGXPTLAWriteBackMemInfo; -#endif - IMG_HANDLE hKernelSGXMiscMemInfo; -#endif - - IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX]; - - SGX_INIT_SCRIPTS sScripts; - - IMG_UINT32 ui32ClientBuildOptions; - SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; - -#if defined(SGX_SUPPORT_HWPROFILING) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelHWProfilingMemInfo; -#else - IMG_HANDLE hKernelHWProfilingMemInfo; -#endif -#endif -#if defined(SUPPORT_SGX_HWPERF) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelHWPerfCBMemInfo; -#else - IMG_HANDLE hKernelHWPerfCBMemInfo; -#endif -#endif -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelTASigBufferMemInfo; - IMG_SID hKernel3DSigBufferMemInfo; -#else - IMG_HANDLE hKernelTASigBufferMemInfo; - IMG_HANDLE hKernel3DSigBufferMemInfo; -#endif - -#if defined(FIX_HW_BRN_29702) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelCFIMemInfo; -#else - IMG_HANDLE hKernelCFIMemInfo; -#endif -#endif -#if defined(FIX_HW_BRN_29823) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelDummyTermStreamMemInfo; -#else - IMG_HANDLE hKernelDummyTermStreamMemInfo; -#endif -#endif - -#if defined(FIX_HW_BRN_31542) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelClearClipWAVDMStreamMemInfo; - IMG_SID hKernelClearClipWAIndexStreamMemInfo; - IMG_SID hKernelClearClipWAPDSMemInfo; - IMG_SID hKernelClearClipWAUSEMemInfo; - IMG_SID hKernelClearClipWAParamMemInfo; - IMG_SID hKernelClearClipWAPMPTMemInfo; - IMG_SID hKernelClearClipWATPCMemInfo; - IMG_SID hKernelClearClipWAPSGRgnHdrMemInfo; -#else - IMG_HANDLE hKernelClearClipWAVDMStreamMemInfo; - IMG_HANDLE hKernelClearClipWAIndexStreamMemInfo; - IMG_HANDLE hKernelClearClipWAPDSMemInfo; - IMG_HANDLE hKernelClearClipWAUSEMemInfo; - IMG_HANDLE hKernelClearClipWAParamMemInfo; - IMG_HANDLE hKernelClearClipWAPMPTMemInfo; - IMG_HANDLE hKernelClearClipWATPCMemInfo; - IMG_HANDLE hKernelClearClipWAPSGRgnHdrMemInfo; -#endif -#endif - -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - IMG_HANDLE hKernelVDMSnapShotBufferMemInfo; - IMG_HANDLE hKernelVDMCtrlStreamBufferMemInfo; -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - IMG_HANDLE hKernelVDMStateUpdateBufferMemInfo; -#endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelEDMStatusBufferMemInfo; -#else - IMG_HANDLE hKernelEDMStatusBufferMemInfo; -#endif -#endif -#if defined(SGX_FEATURE_OVERLAPPED_SPM) -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelTmpRgnHeaderMemInfo; -#else - IMG_HANDLE hKernelTmpRgnHeaderMemInfo; -#endif -#endif - - IMG_UINT32 ui32EDMTaskReg0; - IMG_UINT32 ui32EDMTaskReg1; - - IMG_UINT32 ui32ClkGateCtl; - IMG_UINT32 ui32ClkGateCtl2; - IMG_UINT32 ui32ClkGateStatusReg; - IMG_UINT32 ui32ClkGateStatusMask; -#if defined(SGX_FEATURE_MP) - IMG_UINT32 ui32MasterClkGateStatusReg; - IMG_UINT32 ui32MasterClkGateStatusMask; - IMG_UINT32 ui32MasterClkGateStatus2Reg; - IMG_UINT32 ui32MasterClkGateStatus2Mask; -#endif - - IMG_UINT32 ui32CacheControl; - - IMG_UINT32 asInitDevData[SGX_MAX_DEV_DATA]; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; -#else - IMG_HANDLE asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; -#endif - -} SGX_BRIDGE_INIT_INFO; - - -typedef struct _SGX_DEVICE_SYNC_LIST_ -{ - PSGXMKIF_HWDEVICE_SYNC_LIST psHWDeviceSyncList; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelHWSyncListMemInfo; -#else - IMG_HANDLE hKernelHWSyncListMemInfo; -#endif - PVRSRV_CLIENT_MEM_INFO *psHWDeviceSyncListClientMemInfo; - PVRSRV_CLIENT_MEM_INFO *psAccessResourceClientMemInfo; - - volatile IMG_UINT32 *pui32Lock; - - struct _SGX_DEVICE_SYNC_LIST_ *psNext; - - - IMG_UINT32 ui32NumSyncObjects; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahSyncHandles[1]; -#else - IMG_HANDLE ahSyncHandles[1]; -#endif -} SGX_DEVICE_SYNC_LIST, *PSGX_DEVICE_SYNC_LIST; - - -typedef struct _SGX_INTERNEL_STATUS_UPDATE_ -{ - CTL_STATUS sCtlStatus; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hKernelMemInfo; -#endif -} SGX_INTERNEL_STATUS_UPDATE; - - -typedef struct _SGX_CCB_KICK_ -{ - SGXMKIF_COMMAND sCommand; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hCCBKernelMemInfo; -#else - IMG_HANDLE hCCBKernelMemInfo; -#endif - - IMG_UINT32 ui32NumDstSyncObjects; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelHWSyncListMemInfo; -#else - IMG_HANDLE hKernelHWSyncListMemInfo; -#endif - - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *pahDstSyncHandles; -#else - IMG_HANDLE *pahDstSyncHandles; -#endif - - IMG_UINT32 ui32NumTAStatusVals; - IMG_UINT32 ui32Num3DStatusVals; - -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - SGX_INTERNEL_STATUS_UPDATE asTAStatusUpdate[SGX_MAX_TA_STATUS_VALS]; - SGX_INTERNEL_STATUS_UPDATE as3DStatusUpdate[SGX_MAX_3D_STATUS_VALS]; -#else -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; - IMG_SID ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; -#else - IMG_HANDLE ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; - IMG_HANDLE ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; -#endif -#endif - - IMG_BOOL bFirstKickOrResume; -#if (defined(NO_HARDWARE) || defined(PDUMP)) - IMG_BOOL bTerminateOrAbort; -#endif - IMG_BOOL bLastInScene; - - - IMG_UINT32 ui32CCBOffset; - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - IMG_UINT32 ui32NumTASrcSyncs; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; -#else - IMG_HANDLE ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; -#endif - IMG_UINT32 ui32NumTADstSyncs; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; -#else - IMG_HANDLE ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; -#endif - IMG_UINT32 ui32Num3DSrcSyncs; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; -#else - IMG_HANDLE ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; -#endif -#else - - IMG_UINT32 ui32NumSrcSyncs; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; -#else - IMG_HANDLE ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; -#endif -#endif - - - IMG_BOOL bTADependency; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hTA3DSyncInfo; - - IMG_SID hTASyncInfo; - IMG_SID h3DSyncInfo; -#else - IMG_HANDLE hTA3DSyncInfo; - - IMG_HANDLE hTASyncInfo; - IMG_HANDLE h3DSyncInfo; -#endif -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif -#if defined(NO_HARDWARE) - IMG_UINT32 ui32WriteOpsPendingVal; -#endif - IMG_HANDLE hDevMemContext; -} SGX_CCB_KICK; - - -#define SGX_KERNEL_USE_CODE_BASE_INDEX 15 - - -typedef struct _SGX_CLIENT_INFO_ -{ - IMG_UINT32 ui32ProcessID; - IMG_VOID *pvProcess; - PVRSRV_MISC_INFO sMiscInfo; - - IMG_UINT32 asDevData[SGX_MAX_DEV_DATA]; - -} SGX_CLIENT_INFO; - -typedef struct _SGX_INTERNAL_DEVINFO_ -{ - IMG_UINT32 ui32Flags; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHostCtlKernelMemInfoHandle; -#else - IMG_HANDLE hHostCtlKernelMemInfoHandle; -#endif - IMG_BOOL bForcePTOff; -} SGX_INTERNAL_DEVINFO; - - -typedef struct _SGX_INTERNAL_DEVINFO_KM_ -{ - IMG_UINT32 ui32Flags; - IMG_HANDLE hHostCtlKernelMemInfoHandle; - IMG_BOOL bForcePTOff; -} SGX_INTERNAL_DEVINFO_KM; - - -#if defined(TRANSFER_QUEUE) -typedef struct _PVRSRV_TRANSFER_SGX_KICK_ -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hCCBMemInfo; -#else - IMG_HANDLE hCCBMemInfo; -#endif - IMG_UINT32 ui32SharedCmdCCBOffset; - - IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hTASyncInfo; - IMG_SID h3DSyncInfo; -#else - IMG_HANDLE hTASyncInfo; - IMG_HANDLE h3DSyncInfo; -#endif - - IMG_UINT32 ui32NumSrcSync; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; -#else - IMG_HANDLE ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; -#endif - - IMG_UINT32 ui32NumDstSync; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; -#else - IMG_HANDLE ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; -#endif - - IMG_UINT32 ui32Flags; - - IMG_UINT32 ui32PDumpFlags; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif - IMG_HANDLE hDevMemContext; -} PVRSRV_TRANSFER_SGX_KICK, *PPVRSRV_TRANSFER_SGX_KICK; - -#if defined(SGX_FEATURE_2D_HARDWARE) -typedef struct _PVRSRV_2D_SGX_KICK_ -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hCCBMemInfo; -#else - IMG_HANDLE hCCBMemInfo; -#endif - IMG_UINT32 ui32SharedCmdCCBOffset; - - IMG_DEV_VIRTADDR sHW2DContextDevVAddr; - - IMG_UINT32 ui32NumSrcSync; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; - - - IMG_SID hDstSyncInfo; - - - IMG_SID hTASyncInfo; - - - IMG_SID h3DSyncInfo; -#else - IMG_HANDLE ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; - - - IMG_HANDLE hDstSyncInfo; - - - IMG_HANDLE hTASyncInfo; - - - IMG_HANDLE h3DSyncInfo; -#endif - - IMG_UINT32 ui32PDumpFlags; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif - IMG_HANDLE hDevMemContext; -} PVRSRV_2D_SGX_KICK, *PPVRSRV_2D_SGX_KICK; -#endif -#endif - - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/.gitignore b/drivers/staging/cdv/pvr/services4/srvkm/bridged/.gitignore deleted file mode 100644 index 2f89523..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c b/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c deleted file mode 100644 index 8cfbe23..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c +++ /dev/null @@ -1,4782 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - - -#include - -#include "img_defs.h" -#include "services.h" -#include "pvr_bridge_km.h" -#include "pvr_debug.h" -#include "ra.h" -#include "pvr_bridge.h" -#if defined(SUPPORT_SGX) -#include "sgx_bridge.h" -#endif -#if defined(SUPPORT_VGX) -#include "vgx_bridge.h" -#endif -#if defined(SUPPORT_MSVDX) -#include "msvdx_bridge.h" -#endif -#include "perproc.h" -#include "device.h" -#include "buffer_manager.h" - -#include "pdump_km.h" -#include "syscommon.h" - -#include "bridged_pvr_bridge.h" -#if defined(SUPPORT_SGX) -#include "bridged_sgx_bridge.h" -#endif -#if defined(SUPPORT_VGX) -#include "bridged_vgx_bridge.h" -#endif -#if defined(SUPPORT_MSVDX) -#include "bridged_msvdx_bridge.h" -#endif - -#include "env_data.h" - -#if defined (__linux__) || defined(__QNXNTO__) -#include "mmap.h" -#endif - - -#include "srvkm.h" - -PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY g_BridgeDispatchTable[BRIDGE_DISPATCH_TABLE_ENTRY_COUNT]; - -#if defined(DEBUG_BRIDGE_KM) -PVRSRV_BRIDGE_GLOBAL_STATS g_BridgeGlobalStats; -#endif - -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) -static IMG_BOOL abSharedDeviceMemHeap[PVRSRV_MAX_CLIENT_HEAPS]; -static IMG_BOOL *pbSharedDeviceMemHeap = abSharedDeviceMemHeap; -#else -static IMG_BOOL *pbSharedDeviceMemHeap = (IMG_BOOL*)IMG_NULL; -#endif - - -#if defined(DEBUG_BRIDGE_KM) -PVRSRV_ERROR -CopyFromUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size) -{ - PVRSRV_ERROR ret; - ret = OSCopyFromUser(pProcData, pvDest, pvSrc, ui32Size); - - if (ret == PVRSRV_OK) { - g_BridgeDispatchTable[ui32BridgeID].ui32CopyFromUserTotalBytes += ui32Size; - g_BridgeGlobalStats.ui32TotalCopyFromUserBytes += ui32Size; - } - return ret; -} -PVRSRV_ERROR -CopyToUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size) -{ - PVRSRV_ERROR ret; - ret = OSCopyToUser(pProcData, pvDest, pvSrc, ui32Size); - if (ret == PVRSRV_OK) { - g_BridgeDispatchTable[ui32BridgeID].ui32CopyToUserTotalBytes += ui32Size; - g_BridgeGlobalStats.ui32TotalCopyToUserBytes += ui32Size; - } - return ret; -} -#endif - - -static IMG_INT -PVRSRVEnumerateDevicesBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_ENUMDEVICE *psEnumDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DEVICES); - - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - psEnumDeviceOUT->eError = - PVRSRVEnumerateDevicesKM(&psEnumDeviceOUT->ui32NumDevices, - psEnumDeviceOUT->asDeviceIdentifier); - - return 0; -} - -static IMG_INT -PVRSRVAcquireDeviceDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ACQUIRE_DEVICEINFO *psAcquireDevInfoIN, - PVRSRV_BRIDGE_OUT_ACQUIRE_DEVICEINFO *psAcquireDevInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ACQUIRE_DEVICEINFO); - - psAcquireDevInfoOUT->eError = - PVRSRVAcquireDeviceDataKM(psAcquireDevInfoIN->uiDevIndex, - psAcquireDevInfoIN->eDeviceType, - &hDevCookieInt); - if(psAcquireDevInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psAcquireDevInfoOUT->eError = - PVRSRVAllocHandle(psPerProc->psHandleBase, - &psAcquireDevInfoOUT->hDevCookie, - hDevCookieInt, - PVRSRV_HANDLE_TYPE_DEV_NODE, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - return 0; -} - - -static IMG_INT -PVRSRVCreateDeviceMemContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CREATE_DEVMEMCONTEXT *psCreateDevMemContextIN, - PVRSRV_BRIDGE_OUT_CREATE_DEVMEMCONTEXT *psCreateDevMemContextOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_UINT32 i; - IMG_BOOL bCreated; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DEVMEMCONTEXT); - - - NEW_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS + 1) - - psCreateDevMemContextOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psCreateDevMemContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - - psCreateDevMemContextOUT->eError = - PVRSRVCreateDeviceMemContextKM(hDevCookieInt, - psPerProc, - &hDevMemContextInt, - &psCreateDevMemContextOUT->ui32ClientHeapCount, -#if defined (SUPPORT_SID_INTERFACE) - &asHeapInfo[0], -#else - &psCreateDevMemContextOUT->sHeapInfo[0], -#endif - &bCreated, - pbSharedDeviceMemHeap); - - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - - - if(bCreated) - { - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psCreateDevMemContextOUT->hDevMemContext, - hDevMemContextInt, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - } - else - { - psCreateDevMemContextOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, - &psCreateDevMemContextOUT->hDevMemContext, - hDevMemContextInt, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - for(i = 0; i < psCreateDevMemContextOUT->ui32ClientHeapCount; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeapExt; -#else - IMG_HANDLE hDevMemHeapExt; -#endif - -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - if(abSharedDeviceMemHeap[i]) -#endif - { - -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &hDevMemHeapExt, - asHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); -#else - PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); -#endif - } -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - else - { - - if(bCreated) - { -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &hDevMemHeapExt, - asHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psCreateDevMemContextOUT->hDevMemContext); -#else - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psCreateDevMemContextOUT->hDevMemContext); -#endif - } - else - { - psCreateDevMemContextOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, - &hDevMemHeapExt, -#if defined (SUPPORT_SID_INTERFACE) - asHeapInfo[i].hDevMemHeap, -#else - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap, -#endif - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psCreateDevMemContextOUT->eError != PVRSRV_OK) - { - return 0; - } - } - } -#endif - psCreateDevMemContextOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; -#if defined (SUPPORT_SID_INTERFACE) - psCreateDevMemContextOUT->sHeapInfo[i].ui32HeapID = asHeapInfo[i].ui32HeapID; - psCreateDevMemContextOUT->sHeapInfo[i].sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; - psCreateDevMemContextOUT->sHeapInfo[i].ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; - psCreateDevMemContextOUT->sHeapInfo[i].ui32Attribs = asHeapInfo[i].ui32Attribs; - psCreateDevMemContextOUT->sHeapInfo[i].ui32XTileStride = asHeapInfo[i].ui32XTileStride; -#endif - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDevMemContextOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVDestroyDeviceMemContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_DEVMEMCONTEXT *psDestroyDevMemContextIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_BOOL bDestroyed; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DEVMEMCONTEXT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psDestroyDevMemContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psDestroyDevMemContextIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVDestroyDeviceMemContextKM(hDevCookieInt, hDevMemContextInt, &bDestroyed); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(bDestroyed) - { - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroyDevMemContextIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - } - - return 0; -} - - -static IMG_INT -PVRSRVGetDeviceMemHeapInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoIN, - PVRSRV_BRIDGE_OUT_GET_DEVMEM_HEAPINFO *psGetDevMemHeapInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - IMG_UINT32 i; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DEVMEM_HEAPINFO); - - NEW_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS) - - psGetDevMemHeapInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psGetDevMemHeapInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDevMemHeapInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psGetDevMemHeapInfoIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDevMemHeapInfoOUT->eError = - PVRSRVGetDeviceMemHeapInfoKM(hDevCookieInt, - hDevMemContextInt, - &psGetDevMemHeapInfoOUT->ui32ClientHeapCount, -#if defined (SUPPORT_SID_INTERFACE) - &asHeapInfo[0], -#else - &psGetDevMemHeapInfoOUT->sHeapInfo[0], -#endif - pbSharedDeviceMemHeap); - - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - for(i = 0; i < psGetDevMemHeapInfoOUT->ui32ClientHeapCount; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hDevMemHeapExt; -#else - IMG_HANDLE hDevMemHeapExt; -#endif - -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - if(abSharedDeviceMemHeap[i]) -#endif - { - -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &hDevMemHeapExt, - asHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); -#else - PVRSRVAllocHandleNR(psPerProc->psHandleBase, &hDevMemHeapExt, - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); -#endif - } -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - else - { - - psGetDevMemHeapInfoOUT->eError = - PVRSRVFindHandle(psPerProc->psHandleBase, - &hDevMemHeapExt, -#if defined (SUPPORT_SID_INTERFACE) - asHeapInfo[i].hDevMemHeap, -#else - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap, -#endif - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psGetDevMemHeapInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#endif - psGetDevMemHeapInfoOUT->sHeapInfo[i].hDevMemHeap = hDevMemHeapExt; -#if defined (SUPPORT_SID_INTERFACE) - psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32HeapID = asHeapInfo[i].ui32HeapID; - psGetDevMemHeapInfoOUT->sHeapInfo[i].sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; - psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; - psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32Attribs = asHeapInfo[i].ui32Attribs; - psGetDevMemHeapInfoOUT->sHeapInfo[i].ui32XTileStride = asHeapInfo[i].ui32XTileStride; -#endif - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDevMemHeapInfoOUT->eError, psPerProc) - - return 0; -} - - -#if defined(OS_PVRSRV_ALLOC_DEVICE_MEM_BW) -IMG_INT -PVRSRVAllocDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, - PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc); -#else -static IMG_INT -PVRSRVAllocDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM *psAllocDeviceMemIN, - PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM *psAllocDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemHeapInt; - IMG_UINT32 ui32ShareIndex; - IMG_BOOL bUseShareMemWorkaround; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_DEVICEMEM); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc, 2) - - psAllocDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psAllocDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psAllocDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemHeapInt, - psAllocDeviceMemIN->hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - - bUseShareMemWorkaround = ((psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_XPROC) != 0) ? IMG_TRUE : IMG_FALSE; - ui32ShareIndex = 7654321; - - if (bUseShareMemWorkaround) - { - - - - psAllocDeviceMemOUT->eError = - BM_XProcWorkaroundFindNewBufferAndSetShareIndex(&ui32ShareIndex); - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - psAllocDeviceMemOUT->eError = - PVRSRVAllocDeviceMemKM(hDevCookieInt, - psPerProc, - hDevMemHeapInt, - psAllocDeviceMemIN->ui32Attribs, - psAllocDeviceMemIN->ui32Size, - psAllocDeviceMemIN->ui32Alignment, - &psMemInfo, - "" ); - - if (bUseShareMemWorkaround) - { - PVR_ASSERT(ui32ShareIndex != 7654321); - BM_XProcWorkaroundUnsetShareIndex(ui32ShareIndex); - } - - if(psAllocDeviceMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psMemInfo->sShareMemWorkaround.bInUse = bUseShareMemWorkaround; - if (bUseShareMemWorkaround) - { - PVR_ASSERT(ui32ShareIndex != 7654321); - psMemInfo->sShareMemWorkaround.ui32ShareIndex = ui32ShareIndex; - psMemInfo->sShareMemWorkaround.hDevCookieInt = hDevCookieInt; - psMemInfo->sShareMemWorkaround.ui32OrigReqAttribs = psAllocDeviceMemIN->ui32Attribs; - psMemInfo->sShareMemWorkaround.ui32OrigReqSize = (IMG_UINT32)psAllocDeviceMemIN->ui32Size; - psMemInfo->sShareMemWorkaround.ui32OrigReqAlignment = (IMG_UINT32)psAllocDeviceMemIN->ui32Alignment; - } - - OSMemSet(&psAllocDeviceMemOUT->sClientMemInfo, - 0, - sizeof(psAllocDeviceMemOUT->sClientMemInfo)); - - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; - -#if defined (__linux__) - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = 0; -#else - psAllocDeviceMemOUT->sClientMemInfo.pvLinAddr = psMemInfo->pvLinAddrKM; -#endif - psAllocDeviceMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psAllocDeviceMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psAllocDeviceMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) -#else - psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; -#endif - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - #if defined (SUPPORT_SID_INTERFACE) - PVR_ASSERT(psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo != 0); - - if (psMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo, - psMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psAllocDeviceMemOUT->sClientMemInfo.hMappingInfo = 0; - } -#endif - - if(psAllocDeviceMemIN->ui32Attribs & PVRSRV_MEM_NO_SYNCOBJ) - { - - OSMemSet(&psAllocDeviceMemOUT->sClientSyncInfo, - 0, - sizeof (PVRSRV_CLIENT_SYNC_INFO)); - psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = IMG_NULL; - } - else - { - - -#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) - psAllocDeviceMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psAllocDeviceMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psAllocDeviceMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo, - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo = 0; - } -#else - psAllocDeviceMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; -#endif -#endif - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psAllocDeviceMemOUT->sClientSyncInfo.hKernelSyncInfo, - psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psAllocDeviceMemOUT->sClientMemInfo.hKernelMemInfo); - - psAllocDeviceMemOUT->sClientMemInfo.psClientSyncInfo = - &psAllocDeviceMemOUT->sClientSyncInfo; - - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psAllocDeviceMemOUT->eError, psPerProc) - - return 0; -} - -#endif - -static IMG_INT -PVRSRVFreeDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREEDEVICEMEM *psFreeDeviceMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_VOID *pvKernelMemInfo; - - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_DEVICEMEM); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psFreeDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvKernelMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psFreeDeviceMemIN->hKernelMemInfo, -#else - psFreeDeviceMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVFreeDeviceMemKM(hDevCookieInt, pvKernelMemInfo); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - psFreeDeviceMemIN->hKernelMemInfo, -#else - psFreeDeviceMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - return 0; -} - - -static IMG_INT -PVRSRVExportDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM *psExportDeviceMemIN, - PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; -#endif - - PVR_ASSERT(ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_EXPORT_DEVICEMEM) || - ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2)); - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - - psExportDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psExportDeviceMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find devcookie")); - return 0; - } - - - psExportDeviceMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_PVOID *)&psKernelMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psExportDeviceMemIN->hKernelMemInfo, -#else - psExportDeviceMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: can't find kernel meminfo")); - return 0; - } - - - psExportDeviceMemOUT->eError = - PVRSRVFindHandle(KERNEL_HANDLE_BASE, - &psExportDeviceMemOUT->hMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psExportDeviceMemOUT->eError == PVRSRV_OK) - { - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVExportDeviceMemBW: allocation is already exported")); - return 0; - } - - - psExportDeviceMemOUT->eError = PVRSRVAllocHandle(KERNEL_HANDLE_BASE, - &psExportDeviceMemOUT->hMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - if (psExportDeviceMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVExportDeviceMemBW: failed to allocate handle from global handle list")); - return 0; - } - - - psKernelMemInfo->ui32Flags |= PVRSRV_MEM_EXPORTED; - - return 0; -} - - -static IMG_INT -PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *psMapDevMemIN, - PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *psMapDevMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psSrcKernelMemInfo = IMG_NULL; - PVRSRV_KERNEL_MEM_INFO *psDstKernelMemInfo = IMG_NULL; - IMG_HANDLE hDstDevMemHeap = IMG_NULL; - - PVR_ASSERT(ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_MAP_DEV_MEMORY) || - ui32BridgeID == PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_MAP_DEV_MEMORY_2)); - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - NEW_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc, 2) - - - psMapDevMemOUT->eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, - (IMG_VOID**)&psSrcKernelMemInfo, - psMapDevMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psMapDevMemOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDstDevMemHeap, - psMapDevMemIN->hDstDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - if (psSrcKernelMemInfo->sShareMemWorkaround.bInUse) - { - PVR_DPF((PVR_DBG_MESSAGE, "using the mem wrap workaround.")); - - - - - - - - - - psMapDevMemOUT->eError = BM_XProcWorkaroundSetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVMapDeviceMemoryBW(): failed to recycle shared buffer")); - return 0; - } - - psMapDevMemOUT->eError = - PVRSRVAllocDeviceMemKM(psSrcKernelMemInfo->sShareMemWorkaround.hDevCookieInt, - psPerProc, - hDstDevMemHeap, - psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAttribs | PVRSRV_MEM_NO_SYNCOBJ, - psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqSize, - psSrcKernelMemInfo->sShareMemWorkaround.ui32OrigReqAlignment, - &psDstKernelMemInfo, - "" ); - - - BM_XProcWorkaroundUnsetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "lakjgfgewjlrgebhe")); - return 0; - } - - if(psSrcKernelMemInfo->psKernelSyncInfo) - { - psSrcKernelMemInfo->psKernelSyncInfo->ui32RefCount++; - } - - psDstKernelMemInfo->psKernelSyncInfo = psSrcKernelMemInfo->psKernelSyncInfo; - } - else - { - - psMapDevMemOUT->eError = PVRSRVMapDeviceMemoryKM(psPerProc, - psSrcKernelMemInfo, - hDstDevMemHeap, - &psDstKernelMemInfo); - if(psMapDevMemOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - - psDstKernelMemInfo->sShareMemWorkaround = psSrcKernelMemInfo->sShareMemWorkaround; - - OSMemSet(&psMapDevMemOUT->sDstClientMemInfo, - 0, - sizeof(psMapDevMemOUT->sDstClientMemInfo)); - OSMemSet(&psMapDevMemOUT->sDstClientSyncInfo, - 0, - sizeof(psMapDevMemOUT->sDstClientSyncInfo)); - - psMapDevMemOUT->sDstClientMemInfo.pvLinAddrKM = - psDstKernelMemInfo->pvLinAddrKM; - - psMapDevMemOUT->sDstClientMemInfo.pvLinAddr = 0; - psMapDevMemOUT->sDstClientMemInfo.sDevVAddr = psDstKernelMemInfo->sDevVAddr; - psMapDevMemOUT->sDstClientMemInfo.ui32Flags = psDstKernelMemInfo->ui32Flags; - psMapDevMemOUT->sDstClientMemInfo.uAllocSize = psDstKernelMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) -#else - psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = psDstKernelMemInfo->sMemBlk.hOSMemHandle; -#endif - - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo, - psDstKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo = IMG_NULL; - -#if defined (SUPPORT_SID_INTERFACE) - - if (psDstKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientMemInfo.hMappingInfo, - psDstKernelMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); - } - else - { - psMapDevMemOUT->sDstClientMemInfo.hMappingInfo = 0; - } -#endif - - - if(psDstKernelMemInfo->psKernelSyncInfo) - { -#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) - psMapDevMemOUT->sDstClientSyncInfo.psSyncData = - psDstKernelMemInfo->psKernelSyncInfo->psSyncData; - psMapDevMemOUT->sDstClientSyncInfo.sWriteOpsCompleteDevVAddr = - psDstKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapDevMemOUT->sDstClientSyncInfo.sReadOpsCompleteDevVAddr = - psDstKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - - if (psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo, - psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); - } - else - { - psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo = 0; - } -#else - psMapDevMemOUT->sDstClientSyncInfo.hMappingInfo = - psDstKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; -#endif -#endif - - psMapDevMemOUT->sDstClientMemInfo.psClientSyncInfo = &psMapDevMemOUT->sDstClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevMemOUT->sDstClientSyncInfo.hKernelSyncInfo, - psDstKernelMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapDevMemOUT->sDstClientMemInfo.hKernelMemInfo); - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc) - - return 0; -} - - -static IMG_INT -PVRSRVUnmapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNMAP_DEV_MEMORY *psUnmapDevMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = IMG_NULL; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEV_MEMORY); - - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psUnmapDevMemIN->hKernelMemInfo, -#else - psUnmapDevMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if (psKernelMemInfo->sShareMemWorkaround.bInUse) - { - psRetOUT->eError = PVRSRVFreeDeviceMemKM(psKernelMemInfo->sShareMemWorkaround.hDevCookieInt, psKernelMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVUnmapDeviceMemoryBW: internal error, should expect FreeDeviceMem to fail")); - return 0; - } - } - else - { - psRetOUT->eError = PVRSRVUnmapDeviceMemoryKM(psKernelMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - psUnmapDevMemIN->hKernelMemInfo, -#else - psUnmapDevMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - return 0; -} - - - -static IMG_INT -PVRSRVMapDeviceClassMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_DEVICECLASS_MEMORY *psMapDevClassMemIN, - PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *psMapDevClassMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_HANDLE hOSMapInfo; - IMG_HANDLE hDeviceClassBufferInt; - IMG_HANDLE hDevMemContextInt; - PVRSRV_HANDLE_TYPE eHandleType; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY); - - NEW_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc, 2) - - - psMapDevClassMemOUT->eError = - PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, - &hDeviceClassBufferInt, - &eHandleType, - psMapDevClassMemIN->hDeviceClassBuffer); - - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psMapDevClassMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevMemContextInt, - psMapDevClassMemIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - switch(eHandleType) - { -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - case PVRSRV_HANDLE_TYPE_DISP_BUFFER: - case PVRSRV_HANDLE_TYPE_BUF_BUFFER: -#else - case PVRSRV_HANDLE_TYPE_NONE: -#endif - break; - default: - psMapDevClassMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; - return 0; - } - - psMapDevClassMemOUT->eError = - PVRSRVMapDeviceClassMemoryKM(psPerProc, - hDevMemContextInt, - hDeviceClassBufferInt, - &psMemInfo, - &hOSMapInfo); - if(psMapDevClassMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - OSMemSet(&psMapDevClassMemOUT->sClientMemInfo, - 0, - sizeof(psMapDevClassMemOUT->sClientMemInfo)); - OSMemSet(&psMapDevClassMemOUT->sClientSyncInfo, - 0, - sizeof(psMapDevClassMemOUT->sClientSyncInfo)); - - psMapDevClassMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; - - psMapDevClassMemOUT->sClientMemInfo.pvLinAddr = 0; - psMapDevClassMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psMapDevClassMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psMapDevClassMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) - if (psMemInfo->sMemBlk.hOSMemHandle != 0) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientMemInfo.hMappingInfo, - psMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psMapDevClassMemIN->hDeviceClassBuffer); - } - else - { - psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = 0; - } -#else - psMapDevClassMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; -#endif - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psMapDevClassMemIN->hDeviceClassBuffer); - - psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo = IMG_NULL; - - - if(psMemInfo->psKernelSyncInfo) - { -#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) - psMapDevClassMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psMapDevClassMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapDevClassMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != 0) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo, - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo = 0; - } -#else - psMapDevClassMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; -#endif -#endif - - psMapDevClassMemOUT->sClientMemInfo.psClientSyncInfo = &psMapDevClassMemOUT->sClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapDevClassMemOUT->sClientSyncInfo.hKernelSyncInfo, - psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapDevClassMemOUT->sClientMemInfo.hKernelMemInfo); - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psMapDevClassMemOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVUnmapDeviceClassMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNMAP_DEVICECLASS_MEMORY *psUnmapDevClassMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DEVICECLASS_MEMORY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvKernelMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psUnmapDevClassMemIN->hKernelMemInfo, -#else - psUnmapDevClassMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVUnmapDeviceClassMemoryKM(pvKernelMemInfo); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - psUnmapDevClassMemIN->hKernelMemInfo, -#else - psUnmapDevClassMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - return 0; -} - - -#if defined(OS_PVRSRV_WRAP_EXT_MEM_BW) -IMG_INT -PVRSRVWrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, - PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc); -#else -static IMG_INT -PVRSRVWrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_WRAP_EXT_MEMORY *psWrapExtMemIN, - PVRSRV_BRIDGE_OUT_WRAP_EXT_MEMORY *psWrapExtMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt; - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - IMG_SYS_PHYADDR *psSysPAddr = IMG_NULL; - IMG_UINT32 ui32PageTableSize = 0; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_WRAP_EXT_MEMORY); - - NEW_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc, 2) - - - psWrapExtMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psWrapExtMemIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psWrapExtMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psWrapExtMemIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(psWrapExtMemIN->ui32NumPageTableEntries) - { - ui32PageTableSize = psWrapExtMemIN->ui32NumPageTableEntries - * sizeof(IMG_SYS_PHYADDR); - - ASSIGN_AND_EXIT_ON_ERROR(psWrapExtMemOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageTableSize, - (IMG_VOID **)&psSysPAddr, 0, - "Page Table")); - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - psSysPAddr, - psWrapExtMemIN->psSysPAddr, - ui32PageTableSize) != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32PageTableSize, (IMG_VOID *)psSysPAddr, 0); - - return -EFAULT; - } - } - - psWrapExtMemOUT->eError = - PVRSRVWrapExtMemoryKM(hDevCookieInt, - psPerProc, - hDevMemContextInt, - psWrapExtMemIN->ui32ByteSize, - psWrapExtMemIN->ui32PageOffset, - psWrapExtMemIN->bPhysContig, - psSysPAddr, - psWrapExtMemIN->pvLinAddr, - psWrapExtMemIN->ui32Flags, - &psMemInfo); - - if(psWrapExtMemIN->ui32NumPageTableEntries) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32PageTableSize, - (IMG_VOID *)psSysPAddr, 0); - - } - - if(psWrapExtMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - psWrapExtMemOUT->sClientMemInfo.pvLinAddrKM = - psMemInfo->pvLinAddrKM; - - - psWrapExtMemOUT->sClientMemInfo.pvLinAddr = 0; - psWrapExtMemOUT->sClientMemInfo.sDevVAddr = psMemInfo->sDevVAddr; - psWrapExtMemOUT->sClientMemInfo.ui32Flags = psMemInfo->ui32Flags; - psWrapExtMemOUT->sClientMemInfo.uAllocSize = psMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) -#else - psWrapExtMemOUT->sClientMemInfo.hMappingInfo = psMemInfo->sMemBlk.hOSMemHandle; -#endif - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - -#if defined (SUPPORT_SID_INTERFACE) - - if (psMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientMemInfo.hMappingInfo, - psMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psWrapExtMemOUT->sClientMemInfo.hMappingInfo = 0; - } -#endif - - -#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) - psWrapExtMemOUT->sClientSyncInfo.psSyncData = - psMemInfo->psKernelSyncInfo->psSyncData; - psWrapExtMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psWrapExtMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - - if (psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientSyncInfo.hMappingInfo, - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psWrapExtMemOUT->sClientSyncInfo.hMappingInfo = 0; - } -#else - psWrapExtMemOUT->sClientSyncInfo.hMappingInfo = - psMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; -#endif -#endif - - psWrapExtMemOUT->sClientMemInfo.psClientSyncInfo = &psWrapExtMemOUT->sClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psWrapExtMemOUT->sClientSyncInfo.hKernelSyncInfo, - (IMG_HANDLE)psMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psWrapExtMemOUT->sClientMemInfo.hKernelMemInfo); - - COMMIT_HANDLE_BATCH_OR_ERROR(psWrapExtMemOUT->eError, psPerProc) - - return 0; -} -#endif - -static IMG_INT -PVRSRVUnwrapExtMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_UNWRAP_EXT_MEMORY *psUnwrapExtMemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNWRAP_EXT_MEMORY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, - psUnwrapExtMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVUnwrapExtMemoryKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psUnwrapExtMemIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - return 0; -} - -static IMG_INT -PVRSRVGetFreeDeviceMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM *psGetFreeDeviceMemIN, - PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM *psGetFreeDeviceMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETFREE_DEVICEMEM); - - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psGetFreeDeviceMemOUT->eError = - PVRSRVGetFreeDeviceMemKM(psGetFreeDeviceMemIN->ui32Flags, - &psGetFreeDeviceMemOUT->ui32Total, - &psGetFreeDeviceMemOUT->ui32Free, - &psGetFreeDeviceMemOUT->ui32LargestBlock); - - return 0; -} - -static IMG_INT -PVRMMapOSMemHandleToMMapDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MHANDLE_TO_MMAP_DATA *psMMapDataIN, - PVRSRV_BRIDGE_OUT_MHANDLE_TO_MMAP_DATA *psMMapDataOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MHANDLE_TO_MMAP_DATA); - -#if defined (__linux__) || defined(__QNXNTO__) - psMMapDataOUT->eError = - PVRMMapOSMemHandleToMMapData(psPerProc, - psMMapDataIN->hMHandle, - &psMMapDataOUT->ui32MMapOffset, - &psMMapDataOUT->ui32ByteOffset, - &psMMapDataOUT->ui32RealByteSize, - &psMMapDataOUT->ui32UserVAddr); -#else - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psMMapDataIN); - - psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; -#endif - return 0; -} - - -static IMG_INT -PVRMMapReleaseMMapDataBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_RELEASE_MMAP_DATA *psMMapDataIN, - PVRSRV_BRIDGE_OUT_RELEASE_MMAP_DATA *psMMapDataOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RELEASE_MMAP_DATA); - -#if defined (__linux__) || defined(__QNXNTO__) - psMMapDataOUT->eError = - PVRMMapReleaseMMapData(psPerProc, - psMMapDataIN->hMHandle, - &psMMapDataOUT->bMUnmap, - &psMMapDataOUT->ui32RealByteSize, - &psMMapDataOUT->ui32UserVAddr); -#else - - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psMMapDataIN); - - psMMapDataOUT->eError = PVRSRV_ERROR_NOT_SUPPORTED; -#endif - return 0; -} - - -#if defined (SUPPORT_SID_INTERFACE) -static IMG_INT -PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS *psChgMemAttribIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hKernelMemInfo, - psChgMemAttribIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVChangeDeviceMemoryAttributesKM(hKernelMemInfo, psChgMemAttribIN->ui32Attribs); - - return 0; -} -#else -static IMG_INT -PVRSRVChangeDeviceMemoryAttributesBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CHG_DEV_MEM_ATTRIBS *psChgMemAttribIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - PVR_UNREFERENCED_PARAMETER(psChgMemAttribIN); - PVR_UNREFERENCED_PARAMETER(psRetOUT); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - return 0; -} -#endif - -#ifdef PDUMP -static IMG_INT -PDumpIsCaptureFrameBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_PDUMP_ISCAPTURING *psPDumpIsCapturingOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_ISCAPTURING); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psPDumpIsCapturingOUT->bIsCapturing = PDumpIsCaptureFrameKM(); - psPDumpIsCapturingOUT->eError = PVRSRV_OK; - - return 0; -} - -static IMG_INT -PDumpCommentBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_COMMENT *psPDumpCommentIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_COMMENT); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psRetOUT->eError = PDumpCommentKM(&psPDumpCommentIN->szComment[0], - psPDumpCommentIN->ui32Flags); - return 0; -} - -static IMG_INT -PDumpSetFrameBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_SETFRAME *psPDumpSetFrameIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SETFRAME); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psRetOUT->eError = PDumpSetFrameKM(psPDumpSetFrameIN->ui32Frame); - - return 0; -} - -static IMG_INT -PDumpRegWithFlagsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPREG *psPDumpRegDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REG); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpRegDumpIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PDumpRegWithFlagsKM (psPDumpRegDumpIN->szRegRegion, - psPDumpRegDumpIN->sHWReg.ui32RegAddr, - psPDumpRegDumpIN->sHWReg.ui32RegVal, - psPDumpRegDumpIN->ui32Flags); - - return 0; -} - -static IMG_INT -PDumpRegPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_REGPOL *psPDumpRegPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_REGPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpRegPolIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psRetOUT->eError = - PDumpRegPolWithFlagsKM(psPDumpRegPolIN->szRegRegion, - psPDumpRegPolIN->sHWReg.ui32RegAddr, - psPDumpRegPolIN->sHWReg.ui32RegVal, - psPDumpRegPolIN->ui32Mask, - psPDumpRegPolIN->ui32Flags, - PDUMP_POLL_OPERATOR_EQUAL); - - return 0; -} - -static IMG_INT -PDumpMemPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_MEMPOL *psPDumpMemPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psPDumpMemPolIN->hKernelMemInfo, -#else - psPDumpMemPolIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpMemPolKM(((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo), - psPDumpMemPolIN->ui32Offset, - psPDumpMemPolIN->ui32Value, - psPDumpMemPolIN->ui32Mask, - psPDumpMemPolIN->eOperator, - psPDumpMemPolIN->ui32Flags, - MAKEUNIQUETAG(pvMemInfo)); - - return 0; -} - -static IMG_INT -PDumpMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPMEM *psPDumpMemDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPMEM); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psPDumpMemDumpIN->hKernelMemInfo, -#else - psPDumpMemDumpIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpMemUM(psPerProc, - psPDumpMemDumpIN->pvAltLinAddr, - psPDumpMemDumpIN->pvLinAddr, - pvMemInfo, - psPDumpMemDumpIN->ui32Offset, - psPDumpMemDumpIN->ui32Bytes, - psPDumpMemDumpIN->ui32Flags, - MAKEUNIQUETAG(pvMemInfo)); - - return 0; -} - -static IMG_INT -PDumpBitmapBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_BITMAP *psPDumpBitmapIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContextInt; - - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, - psPDumpBitmapIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - psRetOUT->eError = - PVRSRVLookupHandle( psPerProc->psHandleBase, - &hDevMemContextInt, - psPDumpBitmapIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpBitmapKM(psDeviceNode, - &psPDumpBitmapIN->szFileName[0], - psPDumpBitmapIN->ui32FileOffset, - psPDumpBitmapIN->ui32Width, - psPDumpBitmapIN->ui32Height, - psPDumpBitmapIN->ui32StrideInBytes, - psPDumpBitmapIN->sDevBaseAddr, - hDevMemContextInt, - psPDumpBitmapIN->ui32Size, - psPDumpBitmapIN->ePixelFormat, - psPDumpBitmapIN->eMemFormat, - psPDumpBitmapIN->ui32Flags); - - return 0; -} - -static IMG_INT -PDumpReadRegBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_READREG *psPDumpReadRegIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPREADREG); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID **)&psDeviceNode, - psPDumpReadRegIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - psRetOUT->eError = - PDumpReadRegKM(&psPDumpReadRegIN->szRegRegion[0], - &psPDumpReadRegIN->szFileName[0], - psPDumpReadRegIN->ui32FileOffset, - psPDumpReadRegIN->ui32Address, - psPDumpReadRegIN->ui32Size, - psPDumpReadRegIN->ui32Flags); - - return 0; -} - -static IMG_INT -PDumpMemPagesBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_MEMPAGES *psPDumpMemPagesIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_MEMPAGES); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpMemPagesIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - return 0; -} - -static IMG_INT -PDumpDriverInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DRIVERINFO *psPDumpDriverInfoIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32PDumpFlags; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DRIVERINFO); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - ui32PDumpFlags = 0; - if(psPDumpDriverInfoIN->bContinuous) - { - ui32PDumpFlags |= PDUMP_FLAGS_CONTINUOUS; - } - psRetOUT->eError = - PDumpDriverInfoKM(&psPDumpDriverInfoIN->szString[0], - ui32PDumpFlags); - - return 0; -} - -static IMG_INT -PDumpSyncDumpBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPSYNC *psPDumpSyncDumpIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32Bytes = psPDumpSyncDumpIN->ui32Bytes; - IMG_VOID *pvSyncInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPSYNC); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSyncInfo, -#if defined (SUPPORT_SID_INTERFACE) - psPDumpSyncDumpIN->hKernelSyncInfo, -#else - psPDumpSyncDumpIN->psKernelSyncInfo, -#endif - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpMemUM(psPerProc, - psPDumpSyncDumpIN->pvAltLinAddr, - IMG_NULL, - ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, - psPDumpSyncDumpIN->ui32Offset, - ui32Bytes, - 0, - MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); - - return 0; -} - -static IMG_INT -PDumpSyncPolBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_SYNCPOL *psPDumpSyncPolIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32Offset; - IMG_VOID *pvSyncInfo; - IMG_UINT32 ui32Value; - IMG_UINT32 ui32Mask; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_SYNCPOL); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSyncInfo, -#if defined (SUPPORT_SID_INTERFACE) - psPDumpSyncPolIN->hKernelSyncInfo, -#else - psPDumpSyncPolIN->psKernelSyncInfo, -#endif - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if(psPDumpSyncPolIN->bIsRead) - { - ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); - } - else - { - ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete); - } - - - if (psPDumpSyncPolIN->bUseLastOpDumpVal) - { - if(psPDumpSyncPolIN->bIsRead) - { - ui32Value = ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncData->ui32LastReadOpDumpVal; - } - else - { - ui32Value = ((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncData->ui32LastOpDumpVal; - } - ui32Mask = 0xffffffff; - } - else - { - ui32Value = psPDumpSyncPolIN->ui32Value; - ui32Mask = psPDumpSyncPolIN->ui32Mask; - } - - psRetOUT->eError = - PDumpMemPolKM(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM, - ui32Offset, - ui32Value, - ui32Mask, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(((PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo)->psSyncDataMemInfoKM)); - - return 0; -} - - -static IMG_INT -PDumpCycleCountRegReadBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_CYCLE_COUNT_REG_READ *psPDumpCycleCountRegReadIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_CYCLE_COUNT_REG_READ); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psDeviceNode, - psPDumpCycleCountRegReadIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - PDumpCycleCountRegRead(&psDeviceNode->sDevId, - psPDumpCycleCountRegReadIN->ui32RegOffset, - psPDumpCycleCountRegReadIN->bLastFrame); - - psRetOUT->eError = PVRSRV_OK; - - return 0; -} - -static IMG_INT -PDumpPDDevPAddrBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_DUMPPDDEVPADDR *psPDumpPDDevPAddrIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_DUMPPDDEVPADDR); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvMemInfo, - psPDumpPDDevPAddrIN->hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PDumpPDDevPAddrKM((PVRSRV_KERNEL_MEM_INFO *)pvMemInfo, - psPDumpPDDevPAddrIN->ui32Offset, - psPDumpPDDevPAddrIN->sPDDevPAddr, - MAKEUNIQUETAG(pvMemInfo), - PDUMP_PD_UNIQUETAG); - return 0; -} - -static IMG_INT -PDumpStartInitPhaseBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STARTINITPHASE); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psRetOUT->eError = PDumpStartInitPhaseKM(); - - return 0; -} - -static IMG_INT -PDumpStopInitPhaseBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_PDUMP_STOPINITPHASE); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psPerProc); - - psRetOUT->eError = PDumpStopInitPhaseKM(); - - return 0; -} - -#endif - - -static IMG_INT -PVRSRVGetMiscInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_MISC_INFO *psGetMiscInfoIN, - PVRSRV_BRIDGE_OUT_GET_MISC_INFO *psGetMiscInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_MISC_INFO_KM sMiscInfo = {0}; -#endif - PVRSRV_ERROR eError; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_MISC_INFO); -#if defined (SUPPORT_SID_INTERFACE) - sMiscInfo.ui32StateRequest = psGetMiscInfoIN->sMiscInfo.ui32StateRequest; - sMiscInfo.ui32StatePresent = psGetMiscInfoIN->sMiscInfo.ui32StatePresent; - sMiscInfo.ui32MemoryStrLen = psGetMiscInfoIN->sMiscInfo.ui32MemoryStrLen; - sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr; - - OSMemCopy(&sMiscInfo.sCacheOpCtl, - &psGetMiscInfoIN->sMiscInfo.sCacheOpCtl, - sizeof(sMiscInfo.sCacheOpCtl)); -#else - - OSMemCopy(&psGetMiscInfoOUT->sMiscInfo, - &psGetMiscInfoIN->sMiscInfo, - sizeof(PVRSRV_MISC_INFO)); -#endif - - if (((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_MEMSTATS_PRESENT) != 0) && - ((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_DDKVERSION_PRESENT) != 0) && - ((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0)) - { - - psGetMiscInfoOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - if (((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_MEMSTATS_PRESENT) != 0) || - ((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_DDKVERSION_PRESENT) != 0) || - ((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0)) - { - -#if defined (SUPPORT_SID_INTERFACE) - ASSIGN_AND_EXIT_ON_ERROR(psGetMiscInfoOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, - (IMG_VOID **)&sMiscInfo.pszMemoryStr, 0, - "Output string buffer")); - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&sMiscInfo); - - - eError = CopyToUserWrapper(psPerProc, ui32BridgeID, - psGetMiscInfoIN->sMiscInfo.pszMemoryStr, - sMiscInfo.pszMemoryStr, - sMiscInfo.ui32MemoryStrLen); -#else - ASSIGN_AND_EXIT_ON_ERROR(psGetMiscInfoOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, - (IMG_VOID **)&psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0, - "Output string buffer")); - - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); - - - eError = CopyToUserWrapper(psPerProc, ui32BridgeID, - psGetMiscInfoIN->sMiscInfo.pszMemoryStr, - psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen); -#endif - - -#if defined (SUPPORT_SID_INTERFACE) - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sMiscInfo.ui32MemoryStrLen, - (IMG_VOID *)sMiscInfo.pszMemoryStr, 0); -#else - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - psGetMiscInfoOUT->sMiscInfo.ui32MemoryStrLen, - (IMG_VOID *)psGetMiscInfoOUT->sMiscInfo.pszMemoryStr, 0); -#endif - - - psGetMiscInfoOUT->sMiscInfo.pszMemoryStr = psGetMiscInfoIN->sMiscInfo.pszMemoryStr; - - if(eError != PVRSRV_OK) - { - - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoBW Error copy to user")); - return -EFAULT; - } - } - else - { -#if defined (SUPPORT_SID_INTERFACE) - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&sMiscInfo); -#else - psGetMiscInfoOUT->eError = PVRSRVGetMiscInfoKM(&psGetMiscInfoOUT->sMiscInfo); -#endif - } - - - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - -#if defined (SUPPORT_SID_INTERFACE) - if (sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) -#else - if (psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) -#endif - { - psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, -#if defined (SUPPORT_SID_INTERFACE) - sMiscInfo.sGlobalEventObject.hOSEventKM, -#else - psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.hOSEventKM, -#endif - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sGlobalEventObject.szName, - sMiscInfo.sGlobalEventObject.szName, - EVENTOBJNAME_MAXLENGTH); - -#endif - } - -#if defined (SUPPORT_SID_INTERFACE) - if (sMiscInfo.hSOCTimerRegisterOSMemHandle) -#else - if (psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle) -#endif - { - - psGetMiscInfoOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, -#if defined (SUPPORT_SID_INTERFACE) - sMiscInfo.hSOCTimerRegisterOSMemHandle, -#else - psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle, -#endif - PVRSRV_HANDLE_TYPE_SOC_TIMER, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - if (psGetMiscInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#if defined (SUPPORT_SID_INTERFACE) - else - { - psGetMiscInfoOUT->sMiscInfo.hSOCTimerRegisterOSMemHandle = 0; - } - - - psGetMiscInfoOUT->sMiscInfo.ui32StateRequest = sMiscInfo.ui32StateRequest; - psGetMiscInfoOUT->sMiscInfo.ui32StatePresent = sMiscInfo.ui32StatePresent; - - psGetMiscInfoOUT->sMiscInfo.pvSOCTimerRegisterKM = sMiscInfo.pvSOCTimerRegisterKM; - psGetMiscInfoOUT->sMiscInfo.pvSOCTimerRegisterUM = sMiscInfo.pvSOCTimerRegisterUM; - psGetMiscInfoOUT->sMiscInfo.pvSOCClockGateRegs = sMiscInfo.pvSOCClockGateRegs; - - psGetMiscInfoOUT->sMiscInfo.ui32SOCClockGateRegsSize = sMiscInfo.ui32SOCClockGateRegsSize; - - OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion, - &sMiscInfo.aui32DDKVersion, - sizeof(psGetMiscInfoOUT->sMiscInfo.aui32DDKVersion)); - OSMemCopy(&psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl, - &sMiscInfo.sCacheOpCtl, - sizeof(psGetMiscInfoOUT->sMiscInfo.sCacheOpCtl)); -#endif - - return 0; -} - -static IMG_INT -PVRSRVConnectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CONNECT_SERVICES *psConnectServicesIN, - PVRSRV_BRIDGE_OUT_CONNECT_SERVICES *psConnectServicesOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CONNECT_SERVICES); - -#if defined(PDUMP) - - if ((psConnectServicesIN->ui32Flags & SRV_FLAGS_PERSIST) != 0) - { - psPerProc->bPDumpPersistent = IMG_TRUE; - } - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - if ((psConnectServicesIN->ui32Flags & SRV_FLAGS_PDUMP_ACTIVE) != 0) - { - psPerProc->bPDumpActive = IMG_TRUE; - } -#endif -#else - PVR_UNREFERENCED_PARAMETER(psConnectServicesIN); -#endif - psConnectServicesOUT->hKernelServices = psPerProc->hPerProcData; - psConnectServicesOUT->eError = PVRSRV_OK; - - return 0; -} - -static IMG_INT -PVRSRVDisconnectBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVR_UNREFERENCED_PARAMETER(psPerProc); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DISCONNECT_SERVICES); - - - psRetOUT->eError = PVRSRV_OK; - - return 0; -} - -static IMG_INT -PVRSRVEnumerateDCBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUMCLASS *psEnumDispClassIN, - PVRSRV_BRIDGE_OUT_ENUMCLASS *psEnumDispClassOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVR_UNREFERENCED_PARAMETER(psPerProc); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_CLASS); - - psEnumDispClassOUT->eError = - PVRSRVEnumerateDCKM(psEnumDispClassIN->sDeviceClass, - &psEnumDispClassOUT->ui32NumDevices, - &psEnumDispClassOUT->ui32DevID[0]); - - return 0; -} - -static IMG_INT -PVRSRVOpenDCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceIN, - PVRSRV_BRIDGE_OUT_OPEN_DISPCLASS_DEVICE *psOpenDispClassDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_DISPCLASS_DEVICE); - - NEW_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc, 1) - - psOpenDispClassDeviceOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psOpenDispClassDeviceIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - psOpenDispClassDeviceOUT->eError = - PVRSRVOpenDCDeviceKM(psPerProc, - psOpenDispClassDeviceIN->ui32DeviceID, - hDevCookieInt, - &hDispClassInfoInt); - - if(psOpenDispClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psOpenDispClassDeviceOUT->hDeviceKM, - hDispClassInfoInt, - PVRSRV_HANDLE_TYPE_DISP_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - COMMIT_HANDLE_BATCH_OR_ERROR(psOpenDispClassDeviceOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVCloseDCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CLOSE_DISPCLASS_DEVICE *psCloseDispClassDeviceIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_DISPCLASS_DEVICE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psCloseDispClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVCloseDCDeviceKM(pvDispClassInfoInt, IMG_FALSE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psCloseDispClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - return 0; -} - -static IMG_INT -PVRSRVEnumDCFormatsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsIN, - PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_FORMATS *psEnumDispClassFormatsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_FORMATS); - - psEnumDispClassFormatsOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psEnumDispClassFormatsIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psEnumDispClassFormatsOUT->eError != PVRSRV_OK) - { - return 0; - } - - psEnumDispClassFormatsOUT->eError = - PVRSRVEnumDCFormatsKM(pvDispClassInfoInt, - &psEnumDispClassFormatsOUT->ui32Count, - psEnumDispClassFormatsOUT->asFormat); - - return 0; -} - -static IMG_INT -PVRSRVEnumDCDimsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsIN, - PVRSRV_BRIDGE_OUT_ENUM_DISPCLASS_DIMS *psEnumDispClassDimsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ENUM_DISPCLASS_DIMS); - - psEnumDispClassDimsOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psEnumDispClassDimsIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - - if(psEnumDispClassDimsOUT->eError != PVRSRV_OK) - { - return 0; - } - - psEnumDispClassDimsOUT->eError = - PVRSRVEnumDCDimsKM(pvDispClassInfoInt, - &psEnumDispClassDimsIN->sFormat, - &psEnumDispClassDimsOUT->ui32Count, - psEnumDispClassDimsOUT->asDim); - - return 0; -} - -static IMG_INT -PVRSRVGetDCSystemBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_SYSBUFFER *psGetDispClassSysBufferOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hBufferInt; - IMG_VOID *pvDispClassInfoInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_SYSBUFFER); - - NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc, 1) - - psGetDispClassSysBufferOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfoInt, - psGetDispClassSysBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDispClassSysBufferOUT->eError = - PVRSRVGetDCSystemBufferKM(pvDispClassInfoInt, - &hBufferInt); - - if(psGetDispClassSysBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psGetDispClassSysBufferOUT->hBuffer, - hBufferInt, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetDispClassSysBufferIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassSysBufferOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVGetDCInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_INFO *psGetDispClassInfoIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_INFO *psGetDispClassInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_INFO); - - psGetDispClassInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psGetDispClassInfoIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDispClassInfoOUT->eError = - PVRSRVGetDCInfoKM(pvDispClassInfo, - &psGetDispClassInfoOUT->sDisplayInfo); - - return 0; -} - -static IMG_INT -PVRSRVCreateDCSwapChainBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainIN, - PVRSRV_BRIDGE_OUT_CREATE_DISPCLASS_SWAPCHAIN *psCreateDispClassSwapChainOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_HANDLE hSwapChainInt; - IMG_UINT32 ui32SwapChainID; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_DISPCLASS_SWAPCHAIN); - - NEW_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc, 1) - - psCreateDispClassSwapChainOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psCreateDispClassSwapChainIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - - if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) - { - return 0; - } - - - ui32SwapChainID = psCreateDispClassSwapChainIN->ui32SwapChainID; - - psCreateDispClassSwapChainOUT->eError = - PVRSRVCreateDCSwapChainKM(psPerProc, pvDispClassInfo, - psCreateDispClassSwapChainIN->ui32Flags, - &psCreateDispClassSwapChainIN->sDstSurfAttrib, - &psCreateDispClassSwapChainIN->sSrcSurfAttrib, - psCreateDispClassSwapChainIN->ui32BufferCount, - psCreateDispClassSwapChainIN->ui32OEMFlags, - &hSwapChainInt, - &ui32SwapChainID); - - if(psCreateDispClassSwapChainOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psCreateDispClassSwapChainOUT->ui32SwapChainID = ui32SwapChainID; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psCreateDispClassSwapChainOUT->hSwapChain, - hSwapChainInt, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, - PVRSRV_HANDLE_ALLOC_FLAG_NONE, - psCreateDispClassSwapChainIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateDispClassSwapChainOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVDestroyDCSwapChainBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_DISPCLASS_SWAPCHAIN *psDestroyDispClassSwapChainIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_DISPCLASS_SWAPCHAIN); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &pvSwapChain, - psDestroyDispClassSwapChainIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVDestroyDCSwapChainKM(pvSwapChain); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroyDispClassSwapChainIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - - return 0; -} - -static IMG_INT -PVRSRVSetDCDstRectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassDstRectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTRECT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassDstRectIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassDstRectIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCDstRectKM(pvDispClassInfo, - pvSwapChain, - &psSetDispClassDstRectIN->sRect); - - return 0; -} - -static IMG_INT -PVRSRVSetDCSrcRectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT *psSetDispClassSrcRectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCRECT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassSrcRectIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassSrcRectIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCSrcRectKM(pvDispClassInfo, - pvSwapChain, - &psSetDispClassSrcRectIN->sRect); - - return 0; -} - -static IMG_INT -PVRSRVSetDCDstColourKeyBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_DSTCOLOURKEY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassColKeyIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassColKeyIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCDstColourKeyKM(pvDispClassInfo, - pvSwapChain, - psSetDispClassColKeyIN->ui32CKColour); - - return 0; -} - -static IMG_INT -PVRSRVSetDCSrcColourKeyBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY *psSetDispClassColKeyIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SET_DISPCLASS_SRCCOLOURKEY); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSetDispClassColKeyIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSetDispClassColKeyIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVSetDCSrcColourKeyKM(pvDispClassInfo, - pvSwapChain, - psSetDispClassColKeyIN->ui32CKColour); - - return 0; -} - -static IMG_INT -PVRSRVGetDCBuffersBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersIN, - PVRSRV_BRIDGE_OUT_GET_DISPCLASS_BUFFERS *psGetDispClassBuffersOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - IMG_UINT32 i; -#if defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE *pahBuffer; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_DISPCLASS_BUFFERS); - - NEW_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc, PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS) - - psGetDispClassBuffersOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psGetDispClassBuffersIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetDispClassBuffersOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSwapChain, - psGetDispClassBuffersIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN); - if(psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - psGetDispClassBuffersOUT->eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(IMG_HANDLE) * PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS, - (IMG_PVOID *)&pahBuffer, 0, - "Temp Swapchain Buffers"); - - if (psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } -#endif - - psGetDispClassBuffersOUT->eError = - PVRSRVGetDCBuffersKM(pvDispClassInfo, - pvSwapChain, - &psGetDispClassBuffersOUT->ui32BufferCount, -#if defined (SUPPORT_SID_INTERFACE) - pahBuffer); -#else - psGetDispClassBuffersOUT->ahBuffer); -#endif - if (psGetDispClassBuffersOUT->eError != PVRSRV_OK) - { - return 0; - } - - PVR_ASSERT(psGetDispClassBuffersOUT->ui32BufferCount <= PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS); - - for(i = 0; i < psGetDispClassBuffersOUT->ui32BufferCount; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hBufferExt; -#else - IMG_HANDLE hBufferExt; -#endif - - -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &hBufferExt, - pahBuffer[i], - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetDispClassBuffersIN->hSwapChain); -#else - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &hBufferExt, - psGetDispClassBuffersOUT->ahBuffer[i], - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetDispClassBuffersIN->hSwapChain); -#endif - - psGetDispClassBuffersOUT->ahBuffer[i] = hBufferExt; - } - -#if defined (SUPPORT_SID_INTERFACE) - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(IMG_HANDLE) * PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS, - (IMG_PVOID)pahBuffer, 0); -#endif - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetDispClassBuffersOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVSwapToDCBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_BUFFER *psSwapDispClassBufferIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChainBuf; -#if defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE hPrivateTag; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_BUFFER); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSwapDispClassBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupSubHandle(psPerProc->psHandleBase, - &pvSwapChainBuf, - psSwapDispClassBufferIN->hBuffer, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - psSwapDispClassBufferIN->hDeviceKM); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - if (psSwapDispClassBufferIN->hPrivateTag != 0) - { - psRetOUT->eError = - PVRSRVLookupSubHandle(psPerProc->psHandleBase, - &hPrivateTag, - psSwapDispClassBufferIN->hPrivateTag, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - psSwapDispClassBufferIN->hDeviceKM); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - else - { - hPrivateTag = IMG_NULL; - } -#endif - - - psRetOUT->eError = - PVRSRVSwapToDCBufferKM(pvDispClassInfo, - pvSwapChainBuf, - psSwapDispClassBufferIN->ui32SwapInterval, -#if defined (SUPPORT_SID_INTERFACE) - hPrivateTag, -#else - psSwapDispClassBufferIN->hPrivateTag, -#endif - psSwapDispClassBufferIN->ui32ClipRectCount, - psSwapDispClassBufferIN->sClipRect); - - return 0; -} - -static IMG_INT -PVRSRVSwapToDCSystemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SWAP_DISPCLASS_TO_SYSTEM *psSwapDispClassSystemIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvDispClassInfo; - IMG_VOID *pvSwapChain; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SWAP_DISPCLASS_TO_SYSTEM); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvDispClassInfo, - psSwapDispClassSystemIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_DISP_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupSubHandle(psPerProc->psHandleBase, - &pvSwapChain, - psSwapDispClassSystemIN->hSwapChain, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, - psSwapDispClassSystemIN->hDeviceKM); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - psRetOUT->eError = - PVRSRVSwapToDCSystemKM(pvDispClassInfo, - pvSwapChain); - - return 0; -} - -static IMG_INT -PVRSRVOpenBCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceIN, - PVRSRV_BRIDGE_OUT_OPEN_BUFFERCLASS_DEVICE *psOpenBufferClassDeviceOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hBufClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_OPEN_BUFFERCLASS_DEVICE); - - NEW_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc, 1) - - psOpenBufferClassDeviceOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psOpenBufferClassDeviceIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - psOpenBufferClassDeviceOUT->eError = - PVRSRVOpenBCDeviceKM(psPerProc, - psOpenBufferClassDeviceIN->ui32DeviceID, - hDevCookieInt, - &hBufClassInfo); - if(psOpenBufferClassDeviceOUT->eError != PVRSRV_OK) - { - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psOpenBufferClassDeviceOUT->hDeviceKM, - hBufClassInfo, - PVRSRV_HANDLE_TYPE_BUF_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psOpenBufferClassDeviceOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVCloseBCDeviceBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_CLOSE_BUFFERCLASS_DEVICE *psCloseBufferClassDeviceIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvBufClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CLOSE_BUFFERCLASS_DEVICE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psCloseBufferClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVCloseBCDeviceKM(pvBufClassInfo, IMG_FALSE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psCloseBufferClassDeviceIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - - return 0; -} - -static IMG_INT -PVRSRVGetBCInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_INFO *psGetBufferClassInfoIN, - PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_INFO *psGetBufferClassInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvBufClassInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_INFO); - - psGetBufferClassInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psGetBufferClassInfoIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psGetBufferClassInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetBufferClassInfoOUT->eError = - PVRSRVGetBCInfoKM(pvBufClassInfo, - &psGetBufferClassInfoOUT->sBufferInfo); - return 0; -} - -static IMG_INT -PVRSRVGetBCBufferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferIN, - PVRSRV_BRIDGE_OUT_GET_BUFFERCLASS_BUFFER *psGetBufferClassBufferOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_VOID *pvBufClassInfo; - IMG_HANDLE hBufferInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GET_BUFFERCLASS_BUFFER); - - NEW_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc, 1) - - psGetBufferClassBufferOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvBufClassInfo, - psGetBufferClassBufferIN->hDeviceKM, - PVRSRV_HANDLE_TYPE_BUF_INFO); - if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetBufferClassBufferOUT->eError = - PVRSRVGetBCBufferKM(pvBufClassInfo, - psGetBufferClassBufferIN->ui32BufferIndex, - &hBufferInt); - - if(psGetBufferClassBufferOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psGetBufferClassBufferOUT->hBuffer, - hBufferInt, - PVRSRV_HANDLE_TYPE_BUF_BUFFER, - (PVRSRV_HANDLE_ALLOC_FLAG)(PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE | PVRSRV_HANDLE_ALLOC_FLAG_SHARED), - psGetBufferClassBufferIN->hDeviceKM); - - COMMIT_HANDLE_BATCH_OR_ERROR(psGetBufferClassBufferOUT->eError, psPerProc) - - return 0; -} - - -static IMG_INT -PVRSRVAllocSharedSysMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemIN, - PVRSRV_BRIDGE_OUT_ALLOC_SHARED_SYS_MEM *psAllocSharedSysMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SHARED_SYS_MEM); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc, 1) - - psAllocSharedSysMemOUT->eError = - PVRSRVAllocSharedSysMemoryKM(psPerProc, - psAllocSharedSysMemIN->ui32Flags, - psAllocSharedSysMemIN->ui32Size, - &psKernelMemInfo); - if(psAllocSharedSysMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - OSMemSet(&psAllocSharedSysMemOUT->sClientMemInfo, - 0, - sizeof(psAllocSharedSysMemOUT->sClientMemInfo)); - - psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddrKM = - psKernelMemInfo->pvLinAddrKM; - - psAllocSharedSysMemOUT->sClientMemInfo.pvLinAddr = 0; - psAllocSharedSysMemOUT->sClientMemInfo.ui32Flags = - psKernelMemInfo->ui32Flags; - psAllocSharedSysMemOUT->sClientMemInfo.uAllocSize = - psKernelMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) - if (psKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo, - psKernelMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - } - else - { - psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo = 0; - } -#else - psAllocSharedSysMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; -#endif - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psAllocSharedSysMemOUT->sClientMemInfo.hKernelMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psAllocSharedSysMemOUT->eError, psPerProc) - - return 0; -} - -static IMG_INT -PVRSRVFreeSharedSysMemoryBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREE_SHARED_SYS_MEM *psFreeSharedSysMemIN, - PVRSRV_BRIDGE_OUT_FREE_SHARED_SYS_MEM *psFreeSharedSysMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SHARED_SYS_MEM); - - psFreeSharedSysMemOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psKernelMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psFreeSharedSysMemIN->hKernelMemInfo, -#else - psFreeSharedSysMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - - if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) - return 0; - - psFreeSharedSysMemOUT->eError = - PVRSRVFreeSharedSysMemoryKM(psKernelMemInfo); - if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) - return 0; -#if defined (SUPPORT_SID_INTERFACE) - if (psFreeSharedSysMemIN->hMappingInfo != 0) - { - psFreeSharedSysMemOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psFreeSharedSysMemIN->hMappingInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - if(psFreeSharedSysMemOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#endif - - psFreeSharedSysMemOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - psFreeSharedSysMemIN->hKernelMemInfo, -#else - psFreeSharedSysMemIN->psKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - return 0; -} - -static IMG_INT -PVRSRVMapMemInfoMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MAP_MEMINFO_MEM *psMapMemInfoMemIN, - PVRSRV_BRIDGE_OUT_MAP_MEMINFO_MEM *psMapMemInfoMemOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_HANDLE_TYPE eHandleType; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hParent; -#else - IMG_HANDLE hParent; -#endif - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MAP_MEMINFO_MEM); - - NEW_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc, 2) - - psMapMemInfoMemOUT->eError = - PVRSRVLookupHandleAnyType(psPerProc->psHandleBase, - (IMG_VOID **)&psKernelMemInfo, - &eHandleType, - psMapMemInfoMemIN->hKernelMemInfo); - if(psMapMemInfoMemOUT->eError != PVRSRV_OK) - { - return 0; - } - - switch (eHandleType) - { -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - case PVRSRV_HANDLE_TYPE_MEM_INFO: - case PVRSRV_HANDLE_TYPE_MEM_INFO_REF: - case PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO: -#else - case PVRSRV_HANDLE_TYPE_NONE: -#endif - break; - default: - psMapMemInfoMemOUT->eError = PVRSRV_ERROR_INVALID_HANDLE_TYPE; - return 0; - } - - - psMapMemInfoMemOUT->eError = - PVRSRVGetParentHandle(psPerProc->psHandleBase, - &hParent, - psMapMemInfoMemIN->hKernelMemInfo, - eHandleType); - if (psMapMemInfoMemOUT->eError != PVRSRV_OK) - { - return 0; - } -#if defined (SUPPORT_SID_INTERFACE) - if (hParent == 0) -#else - if (hParent == IMG_NULL) -#endif - { - hParent = psMapMemInfoMemIN->hKernelMemInfo; - } - - OSMemSet(&psMapMemInfoMemOUT->sClientMemInfo, - 0, - sizeof(psMapMemInfoMemOUT->sClientMemInfo)); - - psMapMemInfoMemOUT->sClientMemInfo.pvLinAddrKM = - psKernelMemInfo->pvLinAddrKM; - - psMapMemInfoMemOUT->sClientMemInfo.pvLinAddr = 0; - psMapMemInfoMemOUT->sClientMemInfo.sDevVAddr = - psKernelMemInfo->sDevVAddr; - psMapMemInfoMemOUT->sClientMemInfo.ui32Flags = - psKernelMemInfo->ui32Flags; - psMapMemInfoMemOUT->sClientMemInfo.uAllocSize = - psKernelMemInfo->uAllocSize; -#if defined (SUPPORT_SID_INTERFACE) - if (psKernelMemInfo->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo, - psKernelMemInfo->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - hParent); - } - else - { - psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = 0; - } -#else - psMapMemInfoMemOUT->sClientMemInfo.hMappingInfo = psKernelMemInfo->sMemBlk.hOSMemHandle; -#endif - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo, - psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - hParent); - - if(psKernelMemInfo->ui32Flags & PVRSRV_MEM_NO_SYNCOBJ) - { - - OSMemSet(&psMapMemInfoMemOUT->sClientSyncInfo, - 0, - sizeof (PVRSRV_CLIENT_SYNC_INFO)); - } - else - { - -#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS) - psMapMemInfoMemOUT->sClientSyncInfo.psSyncData = - psKernelMemInfo->psKernelSyncInfo->psSyncData; - psMapMemInfoMemOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr = - psKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr; - psMapMemInfoMemOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr = - psKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr; - -#if defined (SUPPORT_SID_INTERFACE) - if (psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle != IMG_NULL) - { - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo, - psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo); - } - else - { - psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo = 0; - } -#else - psMapMemInfoMemOUT->sClientSyncInfo.hMappingInfo = - psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle; -#endif -#endif - - psMapMemInfoMemOUT->sClientMemInfo.psClientSyncInfo = &psMapMemInfoMemOUT->sClientSyncInfo; - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psMapMemInfoMemOUT->sClientSyncInfo.hKernelSyncInfo, - psKernelMemInfo->psKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psMapMemInfoMemOUT->sClientMemInfo.hKernelMemInfo); - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psMapMemInfoMemOUT->eError, psPerProc) - - return 0; -} - - - -static IMG_INT -MMU_GetPDDevPAddrBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrIN, - PVRSRV_BRIDGE_OUT_GETMMU_PD_DEVPADDR *psGetMmuPDDevPAddrOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevMemContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_GETMMU_PD_DEVPADDR); - - psGetMmuPDDevPAddrOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevMemContextInt, - psGetMmuPDDevPAddrIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psGetMmuPDDevPAddrOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetMmuPDDevPAddrOUT->sPDDevPAddr = - BM_GetDeviceNode(hDevMemContextInt)->pfnMMUGetPDDevPAddr(BM_GetMMUContextFromMemContext(hDevMemContextInt)); - if(psGetMmuPDDevPAddrOUT->sPDDevPAddr.uiAddr) - { - psGetMmuPDDevPAddrOUT->eError = PVRSRV_OK; - } - else - { - psGetMmuPDDevPAddrOUT->eError = PVRSRV_ERROR_INVALID_PHYS_ADDR; - } - return 0; -} - - - -IMG_INT -DummyBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ -#if !defined(DEBUG) - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); -#endif - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - PVR_UNREFERENCED_PARAMETER(psBridgeOut); - PVR_UNREFERENCED_PARAMETER(psPerProc); - -#if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u (%s) mapped to " - "Dummy Wrapper (probably not what you want!)", - __FUNCTION__, ui32BridgeID, g_BridgeDispatchTable[ui32BridgeID].pszIOCName)); -#else - PVR_DPF((PVR_DBG_ERROR, "%s: BRIDGE ERROR: BridgeID %u mapped to " - "Dummy Wrapper (probably not what you want!)", - __FUNCTION__, ui32BridgeID)); -#endif - return -ENOTTY; -} - - -IMG_VOID -_SetDispatchTableEntry(IMG_UINT32 ui32Index, - const IMG_CHAR *pszIOCName, - BridgeWrapperFunction pfFunction, - const IMG_CHAR *pszFunctionName, - size_t in_size, size_t out_size) -{ - static IMG_UINT32 ui32PrevIndex = ~0UL; -#if !defined(DEBUG) - PVR_UNREFERENCED_PARAMETER(pszIOCName); -#endif -#if !defined(DEBUG_BRIDGE_KM_DISPATCH_TABLE) && !defined(DEBUG_BRIDGE_KM) - PVR_UNREFERENCED_PARAMETER(pszFunctionName); -#endif - -#if defined(DEBUG_BRIDGE_KM_DISPATCH_TABLE) - - PVR_DPF((PVR_DBG_WARNING, "%s: %d %s %s", __FUNCTION__, ui32Index, pszIOCName, pszFunctionName)); -#endif - - - if(g_BridgeDispatchTable[ui32Index].pfFunction) - { -#if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, - "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry for %s", - __FUNCTION__, pszIOCName, g_BridgeDispatchTable[ui32Index].pszIOCName)); -#else - PVR_DPF((PVR_DBG_ERROR, - "%s: BUG!: Adding dispatch table entry for %s clobbers an existing entry (index=%u)", - __FUNCTION__, pszIOCName, ui32Index)); -#endif - PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); - } - - - if((ui32PrevIndex != ~0UL) && - ((ui32Index >= ui32PrevIndex + DISPATCH_TABLE_GAP_THRESHOLD) || - (ui32Index <= ui32PrevIndex))) - { -#if defined(DEBUG_BRIDGE_KM) - PVR_DPF((PVR_DBG_WARNING, - "%s: There is a gap in the dispatch table between indices %u (%s) and %u (%s)", - __FUNCTION__, ui32PrevIndex, g_BridgeDispatchTable[ui32PrevIndex].pszIOCName, - ui32Index, pszIOCName)); -#else - PVR_DPF((PVR_DBG_WARNING, - "%s: There is a gap in the dispatch table between indices %u and %u (%s)", - __FUNCTION__, (IMG_UINT)ui32PrevIndex, (IMG_UINT)ui32Index, pszIOCName)); -#endif - PVR_DPF((PVR_DBG_ERROR, "NOTE: Enabling DEBUG_BRIDGE_KM_DISPATCH_TABLE may help debug this issue.")); - } - - g_BridgeDispatchTable[ui32Index].pfFunction = pfFunction; - g_BridgeDispatchTable[ui32Index].in_size = in_size; - g_BridgeDispatchTable[ui32Index].out_size = out_size; -#if defined(DEBUG_BRIDGE_KM) - g_BridgeDispatchTable[ui32Index].pszIOCName = pszIOCName; - g_BridgeDispatchTable[ui32Index].pszFunctionName = pszFunctionName; - g_BridgeDispatchTable[ui32Index].ui32CallCount = 0; - g_BridgeDispatchTable[ui32Index].ui32CopyFromUserTotalBytes = 0; -#endif - - ui32PrevIndex = ui32Index; -} - -static IMG_INT -PVRSRVInitSrvConnectBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_CONNECT); - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - - if((OSProcHasPrivSrvInit() == IMG_FALSE) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING) || PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) - { - psRetOUT->eError = PVRSRV_ERROR_SRV_CONNECT_FAILED; - return 0; - } - -#if defined (__linux__) || defined(__QNXNTO__) - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_TRUE); -#endif - psPerProc->bInitProcess = IMG_TRUE; - - psRetOUT->eError = PVRSRV_OK; - - return 0; -} - - -static IMG_INT -PVRSRVInitSrvDisconnectBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_INITSRV_DISCONNECT *psInitSrvDisconnectIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_INITSRV_DISCONNECT); - - if(!psPerProc->bInitProcess) - { - psRetOUT->eError = PVRSRV_ERROR_SRV_DISCONNECT_FAILED; - return 0; - } - - psPerProc->bInitProcess = IMG_FALSE; - - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RUNNING, IMG_FALSE); - PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_RAN, IMG_TRUE); - - psRetOUT->eError = PVRSRVFinaliseSystem(psInitSrvDisconnectIN->bInitSuccesful); - - PVRSRVSetInitServerState( PVRSRV_INIT_SERVER_SUCCESSFUL , - ((psRetOUT->eError == PVRSRV_OK) && (psInitSrvDisconnectIN->bInitSuccesful)) - ? IMG_TRUE : IMG_FALSE); - - return 0; -} - - -static IMG_INT -PVRSRVEventObjectWaitBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_WAIT *psEventObjectWaitIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hOSEventKM; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_WAIT); - - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hOSEventKM, - psEventObjectWaitIN->hOSEventKM, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = OSEventObjectWaitKM(hOSEventKM); - - return 0; -} - - -static IMG_INT -PVRSRVEventObjectOpenBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_OPEN *psEventObjectOpenIN, - PVRSRV_BRIDGE_OUT_EVENT_OBJECT_OPEN *psEventObjectOpenOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_EVENTOBJECT_KM sEventObject; - IMG_HANDLE hOSEvent; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_OPEN); - - NEW_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc, 1) - - psEventObjectOpenOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sEventObject.hOSEventKM, -#else - &psEventObjectOpenIN->sEventObject.hOSEventKM, -#endif - psEventObjectOpenIN->sEventObject.hOSEventKM, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); - - if(psEventObjectOpenOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - OSMemCopy(&sEventObject.szName, - &psEventObjectOpenIN->sEventObject.szName, - EVENTOBJNAME_MAXLENGTH); - - psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&sEventObject, &hOSEvent); -#else - psEventObjectOpenOUT->eError = OSEventObjectOpenKM(&psEventObjectOpenIN->sEventObject, &psEventObjectOpenOUT->hOSEvent); -#endif - - if(psEventObjectOpenOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psEventObjectOpenOUT->hOSEvent, - hOSEvent, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI); -#else - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psEventObjectOpenOUT->hOSEvent, - psEventObjectOpenOUT->hOSEvent, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI); -#endif - - COMMIT_HANDLE_BATCH_OR_ERROR(psEventObjectOpenOUT->eError, psPerProc) - - return 0; -} - - -static IMG_INT -PVRSRVEventObjectCloseBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_EVENT_OBJECT_CLOSE *psEventObjectCloseIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hOSEventKM; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_EVENTOBJECT_KM sEventObject; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_EVENT_OBJECT_CLOSE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sEventObject.hOSEventKM, -#else - &psEventObjectCloseIN->sEventObject.hOSEventKM, -#endif - psEventObjectCloseIN->sEventObject.hOSEventKM, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &hOSEventKM, - psEventObjectCloseIN->hOSEventKM, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - if(CopyFromUserWrapper(psPerProc, ui32BridgeID, - &sEventObject.szName, - &psEventObjectCloseIN->sEventObject.szName, - EVENTOBJNAME_MAXLENGTH) != PVRSRV_OK) - { - - return -EFAULT; - } - - psRetOUT->eError = OSEventObjectCloseKM(&sEventObject, hOSEventKM); -#else - psRetOUT->eError = OSEventObjectCloseKM(&psEventObjectCloseIN->sEventObject, hOSEventKM); -#endif - - return 0; -} - - -typedef struct _MODIFY_SYNC_OP_INFO -{ - IMG_HANDLE hResItem; - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - IMG_UINT32 ui32ModifyFlags; - IMG_UINT32 ui32ReadOpsPendingSnapShot; - IMG_UINT32 ui32WriteOpsPendingSnapShot; -} MODIFY_SYNC_OP_INFO; - - -static PVRSRV_ERROR DoQuerySyncOpsSatisfied(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo, - IMG_UINT32 ui32ReadOpsPendingSnapShot, - IMG_UINT32 ui32WriteOpsPendingSnapShot) -{ - IMG_UINT32 ui32WriteOpsPending; - IMG_UINT32 ui32ReadOpsPending; - - - if (!psKernelSyncInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - - - - - - - - - - ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; - ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - - if((ui32WriteOpsPending - ui32WriteOpsPendingSnapShot >= - ui32WriteOpsPending - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) && - (ui32ReadOpsPending - ui32ReadOpsPendingSnapShot >= - ui32ReadOpsPending - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) - { -#if defined(PDUMP) && !defined(SUPPORT_VGX) - - PDumpComment("Poll for read ops complete to reach value (pdump: %u, actual snapshot: %u)", - psKernelSyncInfo->psSyncData->ui32LastReadOpDumpVal, - ui32ReadOpsPendingSnapShot); - PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - psKernelSyncInfo->psSyncData->ui32LastReadOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); - - - PDumpComment("Poll for write ops complete to reach value (pdump: %u, actual snapshot: %u)", - psKernelSyncInfo->psSyncData->ui32LastOpDumpVal, - ui32WriteOpsPendingSnapShot); - PDumpMemPolKM(psKernelSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - psKernelSyncInfo->psSyncData->ui32LastOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); - - -#endif - return PVRSRV_OK; - } - else - { - return PVRSRV_ERROR_RETRY; - } -} - - -static PVRSRV_ERROR DoModifyCompleteSyncOps(MODIFY_SYNC_OP_INFO *psModSyncOpInfo) -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - - psKernelSyncInfo = psModSyncOpInfo->psKernelSyncInfo; - - if (!psKernelSyncInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - if((psModSyncOpInfo->ui32WriteOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32WriteOpsComplete) - || (psModSyncOpInfo->ui32ReadOpsPendingSnapShot != psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)) - { - return PVRSRV_ERROR_BAD_SYNC_STATE; - } - - - if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) - { - psKernelSyncInfo->psSyncData->ui32WriteOpsComplete++; - } - - - if(psModSyncOpInfo->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) - { - psKernelSyncInfo->psSyncData->ui32ReadOpsComplete++; - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - if (!pvParam) - { - PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psModSyncOpInfo = (MODIFY_SYNC_OP_INFO*)pvParam; - - if (psModSyncOpInfo->psKernelSyncInfo) - { - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if (DoQuerySyncOpsSatisfied(psModSyncOpInfo->psKernelSyncInfo, - psModSyncOpInfo->ui32ReadOpsPendingSnapShot, - psModSyncOpInfo->ui32WriteOpsPendingSnapShot) == PVRSRV_OK) - { - goto OpFlushedComplete; - } - PVR_DPF((PVR_DBG_WARNING, "ModifyCompleteSyncOpsCallBack: waiting for current Ops to flush")); - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: timeout whilst waiting for current Ops to flush.")); - PVR_DPF((PVR_DBG_ERROR, " Write ops pending snapshot = %d, write ops complete = %d", - psModSyncOpInfo->ui32WriteOpsPendingSnapShot, - psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32WriteOpsComplete)); - PVR_DPF((PVR_DBG_ERROR, " Read ops pending snapshot = %d, write ops complete = %d", - psModSyncOpInfo->ui32ReadOpsPendingSnapShot, - psModSyncOpInfo->psKernelSyncInfo->psSyncData->ui32ReadOpsComplete)); - - return PVRSRV_ERROR_TIMEOUT; - - OpFlushedComplete: - - DoModifyCompleteSyncOps(psModSyncOpInfo); - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(MODIFY_SYNC_OP_INFO), (IMG_VOID *)psModSyncOpInfo, 0); - - - - PVRSRVScheduleDeviceCallbacks(); - - return PVRSRV_OK; -} - - -static IMG_INT -PVRSRVCreateSyncInfoModObjBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ *psCreateSyncInfoModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVR_UNREFERENCED_PARAMETER(psBridgeIn); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_CREATE_SYNC_INFO_MOD_OBJ); - - NEW_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc, 1) - - ASSIGN_AND_EXIT_ON_ERROR(psCreateSyncInfoModObjOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(MODIFY_SYNC_OP_INFO), - (IMG_VOID **)&psModSyncOpInfo, 0, - "ModSyncOpInfo (MODIFY_SYNC_OP_INFO)")); - - psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; - - psCreateSyncInfoModObjOUT->eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psCreateSyncInfoModObjOUT->hKernelSyncInfoModObj, - psModSyncOpInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ, - PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); - - if (psCreateSyncInfoModObjOUT->eError != PVRSRV_OK) - { - return 0; - } - - psModSyncOpInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_MODIFY_SYNC_OPS, - psModSyncOpInfo, - 0, - &ModifyCompleteSyncOpsCallBack); - - COMMIT_HANDLE_BATCH_OR_ERROR(psCreateSyncInfoModObjOUT->eError, psPerProc) - - return 0; -} - - -static IMG_INT -PVRSRVDestroySyncInfoModObjBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DESTROY_SYNC_INFO_MOD_OBJ *psDestroySyncInfoModObjIN, - PVRSRV_BRIDGE_RETURN *psDestroySyncInfoModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_DESTROY_SYNC_INFO_MOD_OBJ); - - psDestroySyncInfoModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo != IMG_NULL) - { - - psDestroySyncInfoModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - psDestroySyncInfoModObjOUT->eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psDestroySyncInfoModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: PVRSRVReleaseHandle failed")); - return 0; - } - - psDestroySyncInfoModObjOUT->eError = ResManFreeResByPtr(psModSyncOpInfo->hResItem, CLEANUP_WITH_POLL); - if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed")); - return 0; - } - - return 0; -} - - -static IMG_INT -PVRSRVModifyPendingSyncOpsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsIN, - PVRSRV_BRIDGE_OUT_MODIFY_PENDING_SYNC_OPS *psModifySyncOpsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_PENDING_SYNC_OPS); - - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psModifySyncOpsIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } - - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelSyncInfo, - psModifySyncOpsIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo) - { - - psModifySyncOpsOUT->eError = PVRSRV_ERROR_RETRY; - PVR_DPF((PVR_DBG_VERBOSE, "PVRSRVModifyPendingSyncOpsBW: SyncInfo Modification object is not empty")); - return 0; - } - - - psModSyncOpInfo->psKernelSyncInfo = psKernelSyncInfo; - psModSyncOpInfo->ui32ModifyFlags = psModifySyncOpsIN->ui32ModifyFlags; - psModSyncOpInfo->ui32ReadOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - psModSyncOpInfo->ui32WriteOpsPendingSnapShot = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; - - - - psModifySyncOpsOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - psModifySyncOpsOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; - - if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC) - { - psKernelSyncInfo->psSyncData->ui32WriteOpsPending++; - } - - if(psModifySyncOpsIN->ui32ModifyFlags & PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC) - { - psKernelSyncInfo->psSyncData->ui32ReadOpsPending++; - } - - - psModifySyncOpsOUT->eError = ResManDissociateRes(psModSyncOpInfo->hResItem, - psPerProc->hResManContext); - - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyPendingSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } - - return 0; -} - - -static IMG_INT -PVRSRVModifyCompleteSyncOpsBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_MODIFY_COMPLETE_SYNC_OPS *psModifySyncOpsIN, - PVRSRV_BRIDGE_RETURN *psModifySyncOpsOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_MODIFY_COMPLETE_SYNC_OPS); - - psModifySyncOpsOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psModifySyncOpsIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) - { - - psModifySyncOpsOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - psModifySyncOpsOUT->eError = DoModifyCompleteSyncOps(psModSyncOpInfo); - - if (psModifySyncOpsOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVModifyCompleteSyncOpsBW: DoModifyCompleteSyncOps failed")); - return 0; - } - - psModSyncOpInfo->psKernelSyncInfo = IMG_NULL; - - - PVRSRVScheduleDeviceCallbacks(); - - return 0; -} - - -static IMG_INT -PVRSRVSyncOpsTakeTokenBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_TAKE_TOKEN *psSyncOpsTakeTokenIN, - PVRSRV_BRIDGE_OUT_SYNC_OPS_TAKE_TOKEN *psSyncOpsTakeTokenOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_TAKE_TOKEN); - - psSyncOpsTakeTokenOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelSyncInfo, - psSyncOpsTakeTokenIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psSyncOpsTakeTokenOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsTakeTokenBW: PVRSRVLookupHandle failed")); - return 0; - } - - - - psSyncOpsTakeTokenOUT->ui32ReadOpsPending = psKernelSyncInfo->psSyncData->ui32ReadOpsPending; - psSyncOpsTakeTokenOUT->ui32WriteOpsPending = psKernelSyncInfo->psSyncData->ui32WriteOpsPending; - - return 0; -} - - -static IMG_INT -PVRSRVSyncOpsFlushToTokenBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_TOKEN *psSyncOpsFlushToTokenIN, - PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToTokenOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - IMG_UINT32 ui32ReadOpsPendingSnapshot; - IMG_UINT32 ui32WriteOpsPendingSnapshot; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_TOKEN); - - psSyncOpsFlushToTokenOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psKernelSyncInfo, - psSyncOpsFlushToTokenIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psSyncOpsFlushToTokenOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToTokenBW: PVRSRVLookupHandle failed")); - return 0; - } - - ui32ReadOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32ReadOpsPendingSnapshot; - ui32WriteOpsPendingSnapshot = psSyncOpsFlushToTokenIN->ui32WriteOpsPendingSnapshot; - - psSyncOpsFlushToTokenOUT->eError = DoQuerySyncOpsSatisfied(psKernelSyncInfo, - ui32ReadOpsPendingSnapshot, - ui32WriteOpsPendingSnapshot); - - if (psSyncOpsFlushToTokenOUT->eError != PVRSRV_OK && psSyncOpsFlushToTokenOUT->eError != PVRSRV_ERROR_RETRY) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToTokenBW: DoQuerySyncOpsSatisfied failed")); - return 0; - } - - return 0; -} - - -static IMG_INT -PVRSRVSyncOpsFlushToModObjBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_MOD_OBJ *psSyncOpsFlushToModObjIN, - PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToModObjOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - MODIFY_SYNC_OP_INFO *psModSyncOpInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_MOD_OBJ); - - psSyncOpsFlushToModObjOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psModSyncOpInfo, - psSyncOpsFlushToModObjIN->hKernelSyncInfoModObj, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ); - if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: PVRSRVLookupHandle failed")); - return 0; - } - - if(psModSyncOpInfo->psKernelSyncInfo == IMG_NULL) - { - - psSyncOpsFlushToModObjOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - - psSyncOpsFlushToModObjOUT->eError = DoQuerySyncOpsSatisfied(psModSyncOpInfo->psKernelSyncInfo, - psModSyncOpInfo->ui32ReadOpsPendingSnapShot, - psModSyncOpInfo->ui32WriteOpsPendingSnapShot); - - if (psSyncOpsFlushToModObjOUT->eError != PVRSRV_OK && psSyncOpsFlushToModObjOUT->eError != PVRSRV_ERROR_RETRY) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToModObjBW: DoQuerySyncOpsSatisfied failed")); - return 0; - } - - return 0; -} - - -static IMG_INT -PVRSRVSyncOpsFlushToDeltaBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SYNC_OPS_FLUSH_TO_DELTA *psSyncOpsFlushToDeltaIN, - PVRSRV_BRIDGE_RETURN *psSyncOpsFlushToDeltaOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - IMG_UINT32 ui32DeltaRead; - IMG_UINT32 ui32DeltaWrite; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SYNC_OPS_FLUSH_TO_DELTA); - - psSyncOpsFlushToDeltaOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psSyncInfo, - psSyncOpsFlushToDeltaIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (psSyncOpsFlushToDeltaOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSyncOpsFlushToDeltaBW: PVRSRVLookupHandle failed")); - return 0; - } - - - ui32DeltaRead = psSyncInfo->psSyncData->ui32ReadOpsPending - psSyncInfo->psSyncData->ui32ReadOpsComplete; - ui32DeltaWrite = psSyncInfo->psSyncData->ui32WriteOpsPending - psSyncInfo->psSyncData->ui32WriteOpsComplete; - - if (ui32DeltaRead <= psSyncOpsFlushToDeltaIN->ui32Delta && ui32DeltaWrite <= psSyncOpsFlushToDeltaIN->ui32Delta) - { -#if defined(PDUMP) && !defined(SUPPORT_VGX) - - PDumpComment("Poll for read ops complete to delta (%u)", - psSyncOpsFlushToDeltaIN->ui32Delta); - psSyncOpsFlushToDeltaOUT->eError = - PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_GREATEREQUAL, - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - - PDumpComment("Poll for write ops complete to delta (%u)", - psSyncOpsFlushToDeltaIN->ui32Delta); - psSyncOpsFlushToDeltaOUT->eError = - PDumpMemPolKM(psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - psSyncInfo->psSyncData->ui32LastOpDumpVal, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_GREATEREQUAL, - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); -#endif - - psSyncOpsFlushToDeltaOUT->eError = PVRSRV_OK; - } - else - { - psSyncOpsFlushToDeltaOUT->eError = PVRSRV_ERROR_RETRY; - } - - return 0; -} - - -static PVRSRV_ERROR -FreeSyncInfoCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)pvParam; - - eError = PVRSRVFreeSyncInfoKM(psSyncInfo); - if (eError != PVRSRV_OK) - { - return eError; - } - - return PVRSRV_OK; -} - - -static IMG_INT -PVRSRVAllocSyncInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_ALLOC_SYNC_INFO *psAllocSyncInfoIN, - PVRSRV_BRIDGE_OUT_ALLOC_SYNC_INFO *psAllocSyncInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContext; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_ALLOC_SYNC_INFO); - - NEW_HANDLE_BATCH_OR_ERROR(psAllocSyncInfoOUT->eError, psPerProc, 1) - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_HANDLE *)&psDeviceNode, - psAllocSyncInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit; - } - - hDevMemContext = psDeviceNode->sDevMemoryInfo.pBMKernelContext; - - eError = PVRSRVAllocSyncInfoKM(psDeviceNode, - hDevMemContext, - &psSyncInfo); - - if (eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit; - } - - eError = PVRSRVAllocHandle(psPerProc->psHandleBase, - &psAllocSyncInfoOUT->hKernelSyncInfo, - psSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE); - - if(eError != PVRSRV_OK) - { - goto allocsyncinfo_errorexit_freesyncinfo; - } - - psSyncInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SYNC_INFO, - psSyncInfo, - 0, - FreeSyncInfoCallback); - - - goto allocsyncinfo_commit; - - - allocsyncinfo_errorexit_freesyncinfo: - PVRSRVFreeSyncInfoKM(psSyncInfo); - - allocsyncinfo_errorexit: - - - allocsyncinfo_commit: - psAllocSyncInfoOUT->eError = eError; - COMMIT_HANDLE_BATCH_OR_ERROR(eError, psPerProc); - - return 0; -} - - -static IMG_INT -PVRSRVFreeSyncInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_FREE_SYNC_INFO *psFreeSyncInfoIN, - PVRSRV_BRIDGE_RETURN *psFreeSyncInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_FREE_SYNC_INFO); - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psSyncInfo, - psFreeSyncInfoIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVLookupHandle failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psFreeSyncInfoIN->hKernelSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: PVRSRVReleaseHandle failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - eError = ResManFreeResByPtr(psSyncInfo->hResItem, CLEANUP_WITH_POLL); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed")); - psFreeSyncInfoOUT->eError = eError; - return 0; - } - - return 0; -} - - -PVRSRV_ERROR -CommonBridgeInit(IMG_VOID) -{ - IMG_UINT32 i; - - PVR_IO_NSTD(ENUM_DEVICES, PVRSRVEnumerateDevicesBW, 0, sizeof(PVRSRV_BRIDGE_OUT_ENUMDEVICE)); - PVR_IO_RW(ACQUIRE_DEVICEINFO, PVRSRVAcquireDeviceDataBW); - PVR_IO_INV(RELEASE_DEVICEINFO); - PVR_IO_RW(CREATE_DEVMEMCONTEXT, PVRSRVCreateDeviceMemContextBW); - PVR_IO_W(DESTROY_DEVMEMCONTEXT, PVRSRVDestroyDeviceMemContextBW); - PVR_IO_RW(GET_DEVMEM_HEAPINFO, PVRSRVGetDeviceMemHeapInfoBW); - PVR_IO_NSTD(ALLOC_DEVICEMEM, PVRSRVAllocDeviceMemBW, - sizeof(PVRSRV_BRIDGE_IN_ALLOCDEVICEMEM), - sizeof(PVRSRV_BRIDGE_OUT_ALLOCDEVICEMEM)); - - PVR_IO_NSTD(FREE_DEVICEMEM, PVRSRVFreeDeviceMemBW, - sizeof(PVRSRV_BRIDGE_IN_FREEDEVICEMEM), - sizeof(PVRSRV_BRIDGE_RETURN)); - - PVR_IO_NSTD(GETFREE_DEVICEMEM, PVRSRVGetFreeDeviceMemBW, - sizeof(PVRSRV_BRIDGE_IN_GETFREEDEVICEMEM), - sizeof(PVRSRV_BRIDGE_OUT_GETFREEDEVICEMEM)); - PVR_IO_INV(CREATE_COMMANDQUEUE); - PVR_IO_INV(DESTROY_COMMANDQUEUE); - PVR_IO_RW(MHANDLE_TO_MMAP_DATA, PVRMMapOSMemHandleToMMapDataBW); - PVR_IO_RW(CONNECT_SERVICES, PVRSRVConnectBW); - PVR_IO_NSTD(DISCONNECT_SERVICES, PVRSRVDisconnectBW, - 0, sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_INV(WRAP_DEVICE_MEM); - PVR_IO_INV(GET_DEVICEMEMINFO); - PVR_IO_INV(RESERVE_DEV_VIRTMEM); - PVR_IO_INV(FREE_DEV_VIRTMEM); - PVR_IO_INV(MAP_EXT_MEMORY); - PVR_IO_INV(UNMAP_EXT_MEMORY); - PVR_IO_RW(MAP_DEV_MEMORY, PVRSRVMapDeviceMemoryBW); - PVR_IO_W(UNMAP_DEV_MEMORY, PVRSRVUnmapDeviceMemoryBW); - PVR_IO_RW(MAP_DEVICECLASS_MEMORY, PVRSRVMapDeviceClassMemoryBW); - PVR_IO_W(UNMAP_DEVICECLASS_MEMORY, PVRSRVUnmapDeviceClassMemoryBW); - PVR_IO_INV(MAP_MEM_INFO_TO_USER); - PVR_IO_INV(UNMAP_MEM_INFO_FROM_USER); - PVR_IO_NSTD(EXPORT_DEVICEMEM, PVRSRVExportDeviceMemBW, - sizeof(PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM), - sizeof(PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM)); - PVR_IO_RW(RELEASE_MMAP_DATA, PVRMMapReleaseMMapDataBW); - - PVR_IO_W(CHG_DEV_MEM_ATTRIBS, PVRSRVChangeDeviceMemoryAttributesBW); - PVR_IO_NSTD(MAP_DEV_MEMORY_2, PVRSRVMapDeviceMemoryBW, - sizeof(PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY), - sizeof(PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY)); - PVR_IO_NSTD(EXPORT_DEVICEMEM_2, PVRSRVExportDeviceMemBW, - sizeof(PVRSRV_BRIDGE_IN_EXPORTDEVICEMEM), - sizeof(PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM)); - - PVR_IO_INV(PROCESS_SIMISR_EVENT); - PVR_IO_INV(REGISTER_SIM_PROCESS); - PVR_IO_INV(UNREGISTER_SIM_PROCESS); - PVR_IO_INV(MAPPHYSTOUSERSPACE); - PVR_IO_INV(UNMAPPHYSTOUSERSPACE); - PVR_IO_INV(GETPHYSTOUSERSPACEMAP); - PVR_IO_INV(GET_FB_STATS); - PVR_IO_RW(GET_MISC_INFO, PVRSRVGetMiscInfoBW); - PVR_IO_INV(RELEASE_MISC_INFO); - -#if defined (SUPPORT_OVERLAY_ROTATE_BLIT) - PVR_IO_INV(INIT_3D_OVL_BLT_RES); - PVR_IO_INV(DEINIT_3D_OVL_BLT_RES); -#endif - - - -#if defined(PDUMP) - PVR_IO_INV(PDUMP_INIT); - PVR_IO_W(PDUMP_MEMPOL, PDumpMemPolBW); - PVR_IO_W(PDUMP_DUMPMEM, PDumpMemBW); - PVR_IO_NSTD(PDUMP_REG, PDumpRegWithFlagsBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_DUMPREG), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_W(PDUMP_REGPOL, PDumpRegPolBW); - PVR_IO_W(PDUMP_COMMENT, PDumpCommentBW); - PVR_IO_W(PDUMP_SETFRAME, PDumpSetFrameBW); - PVR_IO_R(PDUMP_ISCAPTURING, PDumpIsCaptureFrameBW); - PVR_IO_NSTD(PDUMP_DUMPBITMAP, PDumpBitmapBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_BITMAP), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(PDUMP_DUMPREADREG, PDumpReadRegBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_READREG), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_W(PDUMP_SYNCPOL, PDumpSyncPolBW); - PVR_IO_W(PDUMP_DUMPSYNC, PDumpSyncDumpBW); - PVR_IO_W(PDUMP_MEMPAGES, PDumpMemPagesBW); - PVR_IO_W(PDUMP_DRIVERINFO, PDumpDriverInfoBW); - PVR_IO_W(PDUMP_DUMPPDDEVPADDR, PDumpPDDevPAddrBW); - PVR_IO_W(PDUMP_CYCLE_COUNT_REG_READ, PDumpCycleCountRegReadBW); - PVR_IO_NSTD(PDUMP_STARTINITPHASE, PDumpStartInitPhaseBW, - 0, sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(PDUMP_STOPINITPHASE, PDumpStopInitPhaseBW, - 0, sizeof(PVRSRV_BRIDGE_RETURN)); -#endif - - PVR_IO_INV(GET_OEMJTABLE); - PVR_IO_NSTD(ENUM_CLASS, PVRSRVEnumerateDCBW, - sizeof(PVRSRV_BRIDGE_IN_ENUMCLASS), - sizeof(PVRSRV_BRIDGE_OUT_ENUMCLASS)); - PVR_IO_RW(OPEN_DISPCLASS_DEVICE, PVRSRVOpenDCDeviceBW); - PVR_IO_W(CLOSE_DISPCLASS_DEVICE, PVRSRVCloseDCDeviceBW); - PVR_IO_RW(ENUM_DISPCLASS_FORMATS, PVRSRVEnumDCFormatsBW); - PVR_IO_RW(ENUM_DISPCLASS_DIMS, PVRSRVEnumDCDimsBW); - PVR_IO_RW(GET_DISPCLASS_SYSBUFFER, PVRSRVGetDCSystemBufferBW); - PVR_IO_RW(GET_DISPCLASS_INFO, PVRSRVGetDCInfoBW); - PVR_IO_RW(CREATE_DISPCLASS_SWAPCHAIN, PVRSRVCreateDCSwapChainBW); - PVR_IO_W(DESTROY_DISPCLASS_SWAPCHAIN, PVRSRVDestroyDCSwapChainBW); - PVR_IO_NSTD(SET_DISPCLASS_DSTRECT, PVRSRVSetDCDstRectBW, - sizeof(PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SET_DISPCLASS_SRCRECT, PVRSRVSetDCSrcRectBW, - sizeof(PVRSRV_BRIDGE_IN_SET_DISPCLASS_RECT), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SET_DISPCLASS_DSTCOLOURKEY, PVRSRVSetDCDstColourKeyBW, - sizeof(PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SET_DISPCLASS_SRCCOLOURKEY, PVRSRVSetDCSrcColourKeyBW, - sizeof(PVRSRV_BRIDGE_IN_SET_DISPCLASS_COLOURKEY), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_RW(GET_DISPCLASS_BUFFERS, PVRSRVGetDCBuffersBW); - PVR_IO_W(SWAP_DISPCLASS_TO_BUFFER, PVRSRVSwapToDCBufferBW); - PVR_IO_W(SWAP_DISPCLASS_TO_SYSTEM, PVRSRVSwapToDCSystemBW); - PVR_IO_RW(OPEN_BUFFERCLASS_DEVICE, PVRSRVOpenBCDeviceBW); - PVR_IO_W(CLOSE_BUFFERCLASS_DEVICE, PVRSRVCloseBCDeviceBW); - PVR_IO_RW(GET_BUFFERCLASS_INFO, PVRSRVGetBCInfoBW); - PVR_IO_RW(GET_BUFFERCLASS_BUFFER, PVRSRVGetBCBufferBW); - PVR_IO_RW(WRAP_EXT_MEMORY, PVRSRVWrapExtMemoryBW); - PVR_IO_W(UNWRAP_EXT_MEMORY, PVRSRVUnwrapExtMemoryBW); - PVR_IO_RW(ALLOC_SHARED_SYS_MEM, PVRSRVAllocSharedSysMemoryBW); - PVR_IO_RW(FREE_SHARED_SYS_MEM, PVRSRVFreeSharedSysMemoryBW); - PVR_IO_RW(MAP_MEMINFO_MEM, PVRSRVMapMemInfoMemBW); - PVR_IO_RW(GETMMU_PD_DEVPADDR, MMU_GetPDDevPAddrBW); - PVR_IO_NSTD(INITSRV_CONNECT, PVRSRVInitSrvConnectBW, - 0, sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_W(INITSRV_DISCONNECT, PVRSRVInitSrvDisconnectBW); - PVR_IO_W(EVENT_OBJECT_WAIT, PVRSRVEventObjectWaitBW); - PVR_IO_RW(EVENT_OBJECT_OPEN, PVRSRVEventObjectOpenBW); - PVR_IO_W(EVENT_OBJECT_CLOSE, PVRSRVEventObjectCloseBW); - PVR_IO_NSTD(CREATE_SYNC_INFO_MOD_OBJ, PVRSRVCreateSyncInfoModObjBW, - 0, sizeof(PVRSRV_BRIDGE_OUT_CREATE_SYNC_INFO_MOD_OBJ)); - PVR_IO_W(DESTROY_SYNC_INFO_MOD_OBJ, PVRSRVDestroySyncInfoModObjBW); - PVR_IO_RW(MODIFY_PENDING_SYNC_OPS, PVRSRVModifyPendingSyncOpsBW); - PVR_IO_W(MODIFY_COMPLETE_SYNC_OPS, PVRSRVModifyCompleteSyncOpsBW); - PVR_IO_RW(SYNC_OPS_TAKE_TOKEN, PVRSRVSyncOpsTakeTokenBW); - PVR_IO_W(SYNC_OPS_FLUSH_TO_TOKEN, PVRSRVSyncOpsFlushToTokenBW); - PVR_IO_W(SYNC_OPS_FLUSH_TO_MOD_OBJ, PVRSRVSyncOpsFlushToModObjBW); - PVR_IO_W(SYNC_OPS_FLUSH_TO_DELTA, PVRSRVSyncOpsFlushToDeltaBW); - PVR_IO_RW(ALLOC_SYNC_INFO, PVRSRVAllocSyncInfoBW); - PVR_IO_W(FREE_SYNC_INFO, PVRSRVFreeSyncInfoBW); - -#if defined (SUPPORT_SGX) - SetSGXDispatchTableEntry(); -#endif -#if defined (SUPPORT_VGX) - SetVGXDispatchTableEntry(); -#endif -#if defined (SUPPORT_MSVDX) - SetMSVDXDispatchTableEntry(); -#endif - - - - - for(i=0;iui32BridgeID; - IMG_INT err = -EFAULT; - - if(ui32BridgeID >= (BRIDGE_DISPATCH_TABLE_ENTRY_COUNT)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: ui32BridgeID = %d is out if range!", - __FUNCTION__, ui32BridgeID)); - goto return_fault; - } - - dte = &g_BridgeDispatchTable[ui32BridgeID]; - -#if defined(DEBUG_TRACE_BRIDGE_KM) - PVR_DPF((PVR_DBG_ERROR, "%s: %s", - __FUNCTION__, - dte->pszIOCName)); -#endif - -#if defined(DEBUG_BRIDGE_KM) - dte->ui32CallCount++; - g_BridgeGlobalStats.ui32IOCTLCount++; -#endif - - if (psBridgePackageKM->ui32InBufferSize != dte->in_size || - psBridgePackageKM->ui32OutBufferSize != dte->out_size) { - PVR_DPF((PVR_DBG_ERROR, "pvr: invalid param size for IOCTL#%d:\n" - " kern/user in,out: %d/%d,%d/%d\n", - ui32BridgeID, - dte->in_size, psBridgePackageKM->ui32InBufferSize, - dte->out_size, psBridgePackageKM->ui32OutBufferSize)); - err = -EINVAL; - goto return_fault; - } - - if(!psPerProc->bInitProcess) - { - if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RAN)) - { - if(!PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation failed. Driver unusable.", - __FUNCTION__)); - goto return_fault; - } - } - else - { - if(PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_RUNNING)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Initialisation is in progress", - __FUNCTION__)); - goto return_fault; - } - else - { - - switch(ui32BridgeID) - { - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_CONNECT_SERVICES): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_DISCONNECT_SERVICES): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_CONNECT): - case PVRSRV_GET_BRIDGE_ID(PVRSRV_BRIDGE_INITSRV_DISCONNECT): - break; - default: - PVR_DPF((PVR_DBG_ERROR, "%s: Driver initialisation not completed yet.", - __FUNCTION__)); - goto return_fault; - } - } - } - } - - - -#if defined(__linux__) - { - - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - - psBridgeIn = ((ENV_DATA *)psSysData->pvEnvSpecificData)->pvBridgeData; - psBridgeOut = (IMG_PVOID)((IMG_PBYTE)psBridgeIn + PVRSRV_MAX_BRIDGE_IN_SIZE); - - - if((psBridgePackageKM->ui32InBufferSize > PVRSRV_MAX_BRIDGE_IN_SIZE) || - (psBridgePackageKM->ui32OutBufferSize > PVRSRV_MAX_BRIDGE_OUT_SIZE)) - { - goto return_fault; - } - - - if(psBridgePackageKM->ui32InBufferSize > 0) - { - if(!OSAccessOK(PVR_VERIFY_READ, - psBridgePackageKM->pvParamIn, - psBridgePackageKM->ui32InBufferSize)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Invalid pvParamIn pointer", __FUNCTION__)); - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - psBridgeIn, - psBridgePackageKM->pvParamIn, - psBridgePackageKM->ui32InBufferSize) - != PVRSRV_OK) - { - goto return_fault; - } - } - } -#else - psBridgeIn = psBridgePackageKM->pvParamIn; - psBridgeOut = psBridgePackageKM->pvParamOut; -#endif - - pfBridgeHandler = (BridgeWrapperFunction)dte->pfFunction; - err = pfBridgeHandler(ui32BridgeID, - psBridgeIn, - psBridgeOut, - psPerProc); - if(err < 0) - { - goto return_fault; - } - - -#if defined(__linux__) - - if(CopyToUserWrapper(psPerProc, - ui32BridgeID, - psBridgePackageKM->pvParamOut, - psBridgeOut, - psBridgePackageKM->ui32OutBufferSize) - != PVRSRV_OK) - { - goto return_fault; - } -#endif - - err = 0; -return_fault: - - ReleaseHandleBatch(psPerProc); - - if (err) - PVR_DPF((PVR_DBG_ERROR, "pvr: ioctl#%d failed (%d)\n", - ui32BridgeID, err)); - - return err; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.h b/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.h deleted file mode 100644 index 9a7b577..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_pvr_bridge.h +++ /dev/null @@ -1,252 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __BRIDGED_PVR_BRIDGE_H__ -#define __BRIDGED_PVR_BRIDGE_H__ - -#include "pvr_bridge.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#if defined(__linux__) -#define PVRSRV_GET_BRIDGE_ID(X) _IOC_NR(X) -#else -#define PVRSRV_GET_BRIDGE_ID(X) ((X) - PVRSRV_IOWR(PVRSRV_BRIDGE_CORE_CMD_FIRST)) -#endif - -#ifndef ENOMEM -#define ENOMEM 12 -#endif -#ifndef EFAULT -#define EFAULT 14 -#endif -#ifndef ENOTTY -#define ENOTTY 25 -#endif - -#if defined(DEBUG_BRIDGE_KM) -PVRSRV_ERROR -CopyFromUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size); -PVRSRV_ERROR -CopyToUserWrapper(PVRSRV_PER_PROCESS_DATA *pProcData, - IMG_UINT32 ui32BridgeID, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Size); -#else -#define CopyFromUserWrapper(pProcData, ui32BridgeID, pvDest, pvSrc, ui32Size) \ - OSCopyFromUser(pProcData, pvDest, pvSrc, ui32Size) -#define CopyToUserWrapper(pProcData, ui32BridgeID, pvDest, pvSrc, ui32Size) \ - OSCopyToUser(pProcData, pvDest, pvSrc, ui32Size) -#endif - - -#define ASSIGN_AND_RETURN_ON_ERROR(error, src, res) \ - do \ - { \ - (error) = (src); \ - if ((error) != PVRSRV_OK) \ - { \ - return (res); \ - } \ - } while ((error) != PVRSRV_OK); - -#define ASSIGN_AND_EXIT_ON_ERROR(error, src) \ - ASSIGN_AND_RETURN_ON_ERROR(error, src, 0) - -#if defined (PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) -#ifdef INLINE_IS_PRAGMA -#pragma inline(NewHandleBatch) -#endif -static INLINE PVRSRV_ERROR -NewHandleBatch(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32BatchSize) -{ - PVRSRV_ERROR eError; - - PVR_ASSERT(!psPerProc->bHandlesBatched); - - eError = PVRSRVNewHandleBatch(psPerProc->psHandleBase, ui32BatchSize); - - if (eError == PVRSRV_OK) - { - psPerProc->bHandlesBatched = IMG_TRUE; - } - - return eError; -} - -#define NEW_HANDLE_BATCH_OR_ERROR(error, psPerProc, ui32BatchSize) \ - ASSIGN_AND_EXIT_ON_ERROR(error, NewHandleBatch(psPerProc, ui32BatchSize)) - -#ifdef INLINE_IS_PRAGMA -#pragma inline(CommitHandleBatch) -#endif -static INLINE PVRSRV_ERROR -CommitHandleBatch(PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVR_ASSERT(psPerProc->bHandlesBatched); - - psPerProc->bHandlesBatched = IMG_FALSE; - - return PVRSRVCommitHandleBatch(psPerProc->psHandleBase); -} - - -#define COMMIT_HANDLE_BATCH_OR_ERROR(error, psPerProc) \ - ASSIGN_AND_EXIT_ON_ERROR(error, CommitHandleBatch(psPerProc)) - -#ifdef INLINE_IS_PRAGMA -#pragma inline(ReleaseHandleBatch) -#endif -static INLINE IMG_VOID -ReleaseHandleBatch(PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - if (psPerProc->bHandlesBatched) - { - psPerProc->bHandlesBatched = IMG_FALSE; - - PVRSRVReleaseHandleBatch(psPerProc->psHandleBase); - } -} -#else -#define NEW_HANDLE_BATCH_OR_ERROR(error, psPerProc, ui32BatchSize) -#define COMMIT_HANDLE_BATCH_OR_ERROR(error, psPerProc) -#define ReleaseHandleBatch(psPerProc) -#endif - -IMG_INT -DummyBW(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc); - -typedef IMG_INT (*BridgeWrapperFunction)(IMG_UINT32 ui32BridgeID, - IMG_VOID *psBridgeIn, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc); - -typedef struct _PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY -{ - BridgeWrapperFunction pfFunction; - size_t in_size; - size_t out_size; -#if defined(DEBUG_BRIDGE_KM) - const IMG_CHAR *pszIOCName; - const IMG_CHAR *pszFunctionName; - IMG_UINT32 ui32CallCount; - IMG_UINT32 ui32CopyFromUserTotalBytes; - IMG_UINT32 ui32CopyToUserTotalBytes; -#endif -}PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY; - -#if defined(SUPPORT_VGX) || defined(SUPPORT_MSVDX) - #if defined(SUPPORT_VGX) - #define BRIDGE_DISPATCH_TABLE_ENTRY_COUNT (PVRSRV_BRIDGE_LAST_VGX_CMD+1) - #define PVRSRV_BRIDGE_LAST_DEVICE_CMD PVRSRV_BRIDGE_LAST_VGX_CMD - #else - #define BRIDGE_DISPATCH_TABLE_ENTRY_COUNT (PVRSRV_BRIDGE_LAST_MSVDX_CMD+1) - #define PVRSRV_BRIDGE_LAST_DEVICE_CMD PVRSRV_BRIDGE_LAST_MSVDX_CMD - #endif -#else - #if defined(SUPPORT_SGX) - #define BRIDGE_DISPATCH_TABLE_ENTRY_COUNT (PVRSRV_BRIDGE_LAST_SGX_CMD+1) - #define PVRSRV_BRIDGE_LAST_DEVICE_CMD PVRSRV_BRIDGE_LAST_SGX_CMD - #else - #define BRIDGE_DISPATCH_TABLE_ENTRY_COUNT (PVRSRV_BRIDGE_LAST_NON_DEVICE_CMD+1) - #define PVRSRV_BRIDGE_LAST_DEVICE_CMD PVRSRV_BRIDGE_LAST_NON_DEVICE_CMD - #endif -#endif - -extern PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY g_BridgeDispatchTable[BRIDGE_DISPATCH_TABLE_ENTRY_COUNT]; - -IMG_VOID -_SetDispatchTableEntry(IMG_UINT32 ui32Index, - const IMG_CHAR *pszIOCName, - BridgeWrapperFunction pfFunction, - const IMG_CHAR *pszFunctionName, - size_t in_size, size_t out_size); - -#define __set_table(id, fn, in_size, out_size) \ - _SetDispatchTableEntry(PVRSRV_GET_BRIDGE_ID(id), #id, \ - (BridgeWrapperFunction)fn, #fn, \ - in_size, out_size) - -#define PVR_IO_RW(id, fn) \ - __set_table(PVRSRV_BRIDGE_##id, fn, \ - sizeof(PVRSRV_BRIDGE_IN_##id), sizeof(PVRSRV_BRIDGE_OUT_##id)) - -#define PVR_IO_R(id, fn) \ - __set_table(PVRSRV_BRIDGE_##id, fn, 0, sizeof(PVRSRV_BRIDGE_OUT_##id)) - -#define PVR_IO_W(id, fn) \ - __set_table(PVRSRV_BRIDGE_##id, fn, sizeof(PVRSRV_BRIDGE_IN_##id), \ - sizeof(PVRSRV_BRIDGE_RETURN)) - -#define PVR_IO_NSTD(id, fn, in_size, out_size) \ - __set_table(PVRSRV_BRIDGE_##id, fn, in_size, out_size) - -#define PVR_IO_INV(id) \ - __set_table(PVRSRV_BRIDGE_##id, DummyBW, 0, 0) - -#define DISPATCH_TABLE_GAP_THRESHOLD 5 - -#if defined(DEBUG) -#define PVRSRV_BRIDGE_ASSERT_CMD(X, Y) PVR_ASSERT(X == PVRSRV_GET_BRIDGE_ID(Y)) -#else -#define PVRSRV_BRIDGE_ASSERT_CMD(X, Y) PVR_UNREFERENCED_PARAMETER(X) -#endif - - -#if defined(DEBUG_BRIDGE_KM) -typedef struct _PVRSRV_BRIDGE_GLOBAL_STATS -{ - IMG_UINT32 ui32IOCTLCount; - IMG_UINT32 ui32TotalCopyFromUserBytes; - IMG_UINT32 ui32TotalCopyToUserBytes; -}PVRSRV_BRIDGE_GLOBAL_STATS; - -extern PVRSRV_BRIDGE_GLOBAL_STATS g_BridgeGlobalStats; -#endif - - -PVRSRV_ERROR CommonBridgeInit(IMG_VOID); - -IMG_INT BridgedDispatchKM(PVRSRV_PER_PROCESS_DATA * psPerProc, - PVRSRV_BRIDGE_PACKAGE * psBridgePackageKM); - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.c b/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.c deleted file mode 100644 index dad0800..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.c +++ /dev/null @@ -1,89 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "img_defs.h" -#include "servicesint.h" -#include "bridged_support.h" - - -PVRSRV_ERROR -#if defined (SUPPORT_SID_INTERFACE) -PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psHandleBase, IMG_HANDLE *phOSMemHandle, IMG_SID hMHandle) -#else -PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psHandleBase, IMG_HANDLE *phOSMemHandle, IMG_HANDLE hMHandle) -#endif -{ - IMG_HANDLE hMHandleInt; - PVRSRV_HANDLE_TYPE eHandleType; - PVRSRV_ERROR eError; - - - eError = PVRSRVLookupHandleAnyType(psHandleBase, &hMHandleInt, - &eHandleType, - hMHandle); - if(eError != PVRSRV_OK) - { - return eError; - } - - switch(eHandleType) - { -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - case PVRSRV_HANDLE_TYPE_MEM_INFO: - case PVRSRV_HANDLE_TYPE_MEM_INFO_REF: - case PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO: - { - PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)hMHandleInt; - - *phOSMemHandle = psMemInfo->sMemBlk.hOSMemHandle; - - break; - } - case PVRSRV_HANDLE_TYPE_SYNC_INFO: - { - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)hMHandleInt; - PVRSRV_KERNEL_MEM_INFO *psMemInfo = psSyncInfo->psSyncDataMemInfoKM; - - *phOSMemHandle = psMemInfo->sMemBlk.hOSMemHandle; - - break; - } - case PVRSRV_HANDLE_TYPE_SOC_TIMER: - { - *phOSMemHandle = (IMG_VOID *)hMHandleInt; - break; - } -#else - case PVRSRV_HANDLE_TYPE_NONE: - *phOSMemHandle = (IMG_VOID *)hMHandleInt; - break; -#endif - default: - return PVRSRV_ERROR_BAD_MAPPING; - } - - return PVRSRV_OK; -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.h b/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.h deleted file mode 100644 index d027290..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/bridged_support.h +++ /dev/null @@ -1,47 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __BRIDGED_SUPPORT_H__ -#define __BRIDGED_SUPPORT_H__ - -#include "handle.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phOSMemHandle, IMG_SID hMHandle); -#else -PVRSRV_ERROR PVRSRVLookupOSMemHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phOSMemHandle, IMG_HANDLE hMHandle); -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c b/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c deleted file mode 100644 index 1e53295..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.c +++ /dev/null @@ -1,3744 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - - -#include - -#include "img_defs.h" - -#if defined(SUPPORT_SGX) - -#include "services.h" -#include "pvr_debug.h" -#include "pvr_bridge.h" -#include "sgx_bridge.h" -#include "perproc.h" -#include "power.h" -#include "pvr_bridge_km.h" -#include "sgx_bridge_km.h" -#include "sgx_options.h" - -#if defined(SUPPORT_MSVDX) - #include "msvdx_bridge.h" -#endif - -#include "bridged_pvr_bridge.h" -#include "bridged_sgx_bridge.h" -#include "sgxutils.h" -#include "buffer_manager.h" -#include "pdump_km.h" - -static IMG_INT -SGXGetClientInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETCLIENTINFO *psGetClientInfoIN, - PVRSRV_BRIDGE_OUT_GETCLIENTINFO *psGetClientInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_GETCLIENTINFO); - - psGetClientInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psGetClientInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psGetClientInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psGetClientInfoOUT->eError = - SGXGetClientInfoKM(hDevCookieInt, - &psGetClientInfoOUT->sClientInfo); - return 0; -} - -static IMG_INT -SGXReleaseClientInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_RELEASECLIENTINFO *psReleaseClientInfoIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_HANDLE hDevCookieInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_RELEASECLIENTINFO); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psReleaseClientInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookieInt)->pvDevice; - - PVR_ASSERT(psDevInfo->ui32ClientRefCount > 0); - - - if (psDevInfo->ui32ClientRefCount > 0) - { - psDevInfo->ui32ClientRefCount--; - } - - psRetOUT->eError = PVRSRV_OK; - - return 0; -} - - -static IMG_INT -SGXGetInternalDevInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO *psSGXGetInternalDevInfoIN, - PVRSRV_BRIDGE_OUT_GETINTERNALDEVINFO *psSGXGetInternalDevInfoOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; -#if defined (SUPPORT_SID_INTERFACE) - SGX_INTERNAL_DEVINFO_KM sSGXInternalDevInfo; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_GETINTERNALDEVINFO); - - psSGXGetInternalDevInfoOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXGetInternalDevInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXGetInternalDevInfoOUT->eError != PVRSRV_OK) - { - return 0; - } - - psSGXGetInternalDevInfoOUT->eError = - SGXGetInternalDevInfoKM(hDevCookieInt, -#if defined (SUPPORT_SID_INTERFACE) - &sSGXInternalDevInfo); -#else - &psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo); -#endif - - - psSGXGetInternalDevInfoOUT->eError = - PVRSRVAllocHandle(psPerProc->psHandleBase, - &psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, -#if defined (SUPPORT_SID_INTERFACE) - sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, -#else - psSGXGetInternalDevInfoOUT->sSGXInternalDevInfo.hHostCtlKernelMemInfoHandle, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - - return 0; -} - - -static IMG_INT -SGXDoKickBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_DOKICK *psDoKickIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_UINT32 i; - IMG_INT ret = 0; - IMG_UINT32 ui32NumDstSyncs; -#if defined (SUPPORT_SID_INTERFACE) - SGX_CCB_KICK_KM sCCBKickKM = {{0}}; - IMG_HANDLE ahSyncInfoHandles[16]; -#else - IMG_HANDLE *phKernelSyncInfoHandles = IMG_NULL; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_DOKICK); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psDoKickIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.hCCBKernelMemInfo, -#else - &psDoKickIN->sCCBKick.hCCBKernelMemInfo, -#endif - psDoKickIN->sCCBKick.hCCBKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - if (psDoKickIN->sCCBKick.ui32NumDstSyncObjects > 16) - { - return 0; - } - - if(psDoKickIN->sCCBKick.hTA3DSyncInfo != 0) -#else - if(psDoKickIN->sCCBKick.hTA3DSyncInfo != IMG_NULL) -#endif - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.hTA3DSyncInfo, -#else - &psDoKickIN->sCCBKick.hTA3DSyncInfo, -#endif - psDoKickIN->sCCBKick.hTA3DSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - -#if defined (SUPPORT_SID_INTERFACE) - if(psDoKickIN->sCCBKick.hTASyncInfo != 0) -#else - if(psDoKickIN->sCCBKick.hTASyncInfo != IMG_NULL) -#endif - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.hTASyncInfo, -#else - &psDoKickIN->sCCBKick.hTASyncInfo, -#endif - psDoKickIN->sCCBKick.hTASyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - -#if defined(FIX_HW_BRN_31620) - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psDoKickIN->sCCBKick.hDevMemContext, - psDoKickIN->sCCBKick.hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } -#endif - -#if defined (SUPPORT_SID_INTERFACE) - if(psDoKickIN->sCCBKick.h3DSyncInfo != 0) -#else - if(psDoKickIN->sCCBKick.h3DSyncInfo != IMG_NULL) -#endif - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.h3DSyncInfo, -#else - &psDoKickIN->sCCBKick.h3DSyncInfo, -#endif - psDoKickIN->sCCBKick.h3DSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - if (psDoKickIN->sCCBKick.ui32NumTASrcSyncs > SGX_MAX_TA_SRC_SYNCS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.ui32NumTASrcSyncs = psDoKickIN->sCCBKick.ui32NumTASrcSyncs; -#endif - for(i=0; isCCBKick.ui32NumTASrcSyncs; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ahTASrcKernelSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ahTASrcKernelSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ahTASrcKernelSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psDoKickIN->sCCBKick.ui32NumTADstSyncs > SGX_MAX_TA_DST_SYNCS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.ui32NumTADstSyncs = psDoKickIN->sCCBKick.ui32NumTADstSyncs; -#endif - for(i=0; isCCBKick.ui32NumTADstSyncs; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ahTADstKernelSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ahTADstKernelSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ahTADstKernelSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psDoKickIN->sCCBKick.ui32Num3DSrcSyncs > SGX_MAX_3D_SRC_SYNCS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.ui32Num3DSrcSyncs = psDoKickIN->sCCBKick.ui32Num3DSrcSyncs; -#endif - for(i=0; isCCBKick.ui32Num3DSrcSyncs; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ah3DSrcKernelSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ah3DSrcKernelSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ah3DSrcKernelSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#else - - if (psDoKickIN->sCCBKick.ui32NumSrcSyncs > SGX_MAX_SRC_SYNCS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.ui32NumSrcSyncs = psDoKickIN->sCCBKick.ui32NumSrcSyncs; -#endif - for(i=0; isCCBKick.ui32NumSrcSyncs; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ahSrcKernelSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ahSrcKernelSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ahSrcKernelSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#endif - - if (psDoKickIN->sCCBKick.ui32NumTAStatusVals > SGX_MAX_TA_STATUS_VALS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - for (i = 0; i < psDoKickIN->sCCBKick.ui32NumTAStatusVals; i++) - { - psRetOUT->eError = -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.asTAStatusUpdate[i].hKernelMemInfo, -#else - &psDoKickIN->sCCBKick.asTAStatusUpdate[i].hKernelMemInfo, -#endif - psDoKickIN->sCCBKick.asTAStatusUpdate[i].hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.asTAStatusUpdate[i].sCtlStatus = psDoKickIN->sCCBKick.asTAStatusUpdate[i].sCtlStatus; -#endif - -#else - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ahTAStatusSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ahTAStatusSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ahTAStatusSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); -#endif - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psDoKickIN->sCCBKick.ui32Num3DStatusVals > SGX_MAX_3D_STATUS_VALS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - for(i = 0; i < psDoKickIN->sCCBKick.ui32Num3DStatusVals; i++) - { - psRetOUT->eError = -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.as3DStatusUpdate[i].hKernelMemInfo, -#else - &psDoKickIN->sCCBKick.as3DStatusUpdate[i].hKernelMemInfo, -#endif - psDoKickIN->sCCBKick.as3DStatusUpdate[i].hKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.as3DStatusUpdate[i].sCtlStatus = psDoKickIN->sCCBKick.as3DStatusUpdate[i].sCtlStatus; -#endif -#else - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.ah3DStatusSyncInfo[i], -#else - &psDoKickIN->sCCBKick.ah3DStatusSyncInfo[i], -#endif - psDoKickIN->sCCBKick.ah3DStatusSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); -#endif - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - ui32NumDstSyncs = psDoKickIN->sCCBKick.ui32NumDstSyncObjects; - - if(ui32NumDstSyncs > 0) - { - if(!OSAccessOK(PVR_VERIFY_READ, - psDoKickIN->sCCBKick.pahDstSyncHandles, - ui32NumDstSyncs * sizeof(IMG_HANDLE))) - { - PVR_DPF((PVR_DBG_ERROR, "%s: SGXDoKickBW:" - " Invalid pasDstSyncHandles pointer", __FUNCTION__)); - return -EFAULT; - } - - psRetOUT->eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32NumDstSyncs * sizeof(IMG_HANDLE), - (IMG_VOID **)&phKernelSyncInfoHandles, - 0, - "Array of Synchronization Info Handles"); - if (psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - sCCBKickKM.pahDstSyncHandles = phKernelSyncInfoHandles; -#else - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - phKernelSyncInfoHandles, - psDoKickIN->sCCBKick.pahDstSyncHandles, - ui32NumDstSyncs * sizeof(IMG_HANDLE)) != PVRSRV_OK) - { - ret = -EFAULT; - goto PVRSRV_BRIDGE_SGX_DOKICK_RETURN_RESULT; - } - - - psDoKickIN->sCCBKick.pahDstSyncHandles = phKernelSyncInfoHandles; -#endif - - for( i = 0; i < ui32NumDstSyncs; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.pahDstSyncHandles[i], -#else - &psDoKickIN->sCCBKick.pahDstSyncHandles[i], -#endif - psDoKickIN->sCCBKick.pahDstSyncHandles[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_DOKICK_RETURN_RESULT; - } - - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM.hKernelHWSyncListMemInfo, -#else - &psDoKickIN->sCCBKick.hKernelHWSyncListMemInfo, -#endif - psDoKickIN->sCCBKick.hKernelHWSyncListMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(psRetOUT->eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_DOKICK_RETURN_RESULT; - } - } - -#if defined (SUPPORT_SID_INTERFACE) - OSMemCopy(&sCCBKickKM.sCommand, &psDoKickIN->sCCBKick.sCommand, sizeof(sCCBKickKM.sCommand)); - - sCCBKickKM.ui32NumDstSyncObjects = psDoKickIN->sCCBKick.ui32NumDstSyncObjects; - sCCBKickKM.ui32NumTAStatusVals = psDoKickIN->sCCBKick.ui32NumTAStatusVals; - sCCBKickKM.ui32Num3DStatusVals = psDoKickIN->sCCBKick.ui32Num3DStatusVals; - sCCBKickKM.bFirstKickOrResume = psDoKickIN->sCCBKick.bFirstKickOrResume; - sCCBKickKM.ui32CCBOffset = psDoKickIN->sCCBKick.ui32CCBOffset; - sCCBKickKM.bTADependency = psDoKickIN->sCCBKick.bTADependency; - -#if (defined(NO_HARDWARE) || defined(PDUMP)) - sCCBKickKM.bTerminateOrAbort = psDoKickIN->sCCBKick.bTerminateOrAbort; -#endif -#if defined(PDUMP) - sCCBKickKM.ui32CCBDumpWOff = psDoKickIN->sCCBKick.ui32CCBDumpWOff; -#endif - -#if defined(NO_HARDWARE) - sCCBKickKM.ui32WriteOpsPendingVal = psDoKickIN->sCCBKick.ui32WriteOpsPendingVal; -#endif -#endif - psRetOUT->eError = - SGXDoKickKM(hDevCookieInt, -#if defined (SUPPORT_SID_INTERFACE) - &sCCBKickKM); -#else - &psDoKickIN->sCCBKick); -#endif - -PVRSRV_BRIDGE_SGX_DOKICK_RETURN_RESULT: - - if(phKernelSyncInfoHandles) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32NumDstSyncs * sizeof(IMG_HANDLE), - (IMG_VOID *)phKernelSyncInfoHandles, - 0); - - } - return ret; -} - - -static IMG_INT -SGXScheduleProcessQueuesBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_SCHEDULE_PROCESS_QUEUES *psScheduleProcQIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_SCHEDULE_PROCESS_QUEUES); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psScheduleProcQIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = SGXScheduleProcessQueuesKM(hDevCookieInt); - - return 0; -} - - -#if defined(TRANSFER_QUEUE) -static IMG_INT -SGXSubmitTransferBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SUBMITTRANSFER *psSubmitTransferIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_TRANSFER_SGX_KICK *psKick; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_TRANSFER_SGX_KICK_KM sKickKM = {0}; -#endif - IMG_UINT32 i; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_SUBMITTRANSFER); - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - psKick = &psSubmitTransferIN->sKick; - -#if defined(FIX_HW_BRN_31620) - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psKick->hDevMemContext, - psKick->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } -#endif - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSubmitTransferIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.hCCBMemInfo, -#else - &psKick->hCCBMemInfo, -#endif - psKick->hCCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - if (psKick->hTASyncInfo != IMG_NULL) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.hTASyncInfo, -#else - &psKick->hTASyncInfo, -#endif - psKick->hTASyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.h3DSyncInfo, -#else - &psKick->h3DSyncInfo, -#endif - psKick->h3DSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psKick->ui32NumSrcSync > SGX_MAX_TRANSFER_SYNC_OPS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.ahSrcSyncInfo[i], -#else - &psKick->ahSrcSyncInfo[i], -#endif - psKick->ahSrcSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - if (psKick->ui32NumDstSync > SGX_MAX_TRANSFER_SYNC_OPS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } - for (i = 0; i < psKick->ui32NumDstSync; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.ahDstSyncInfo[i], -#else - &psKick->ahDstSyncInfo[i], -#endif - psKick->ahDstSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - -#if defined (SUPPORT_SID_INTERFACE) - sKickKM.sHWTransferContextDevVAddr = psKick->sHWTransferContextDevVAddr; - sKickKM.ui32SharedCmdCCBOffset = psKick->ui32SharedCmdCCBOffset; - sKickKM.ui32NumSrcSync = psKick->ui32NumSrcSync; - sKickKM.ui32NumDstSync = psKick->ui32NumDstSync; - sKickKM.ui32Flags = psKick->ui32Flags; - sKickKM.ui32PDumpFlags = psKick->ui32PDumpFlags; -#if defined(PDUMP) - sKickKM.ui32CCBDumpWOff = psKick->ui32CCBDumpWOff; -#endif - - psRetOUT->eError = SGXSubmitTransferKM(hDevCookieInt, &sKickKM); -#else - psRetOUT->eError = SGXSubmitTransferKM(hDevCookieInt, psKick); -#endif - - return 0; -} - - -#if defined(SGX_FEATURE_2D_HARDWARE) -static IMG_INT -SGXSubmit2DBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SUBMIT2D *psSubmit2DIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_2D_SGX_KICK *psKick; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_2D_SGX_KICK_KM sKickKM; -#endif - IMG_UINT32 i; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_SUBMIT2D); - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - - psKick = &psSubmit2DIN->sKick; - -#if defined(FIX_HW_BRN_31620) - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psKick->hDevMemContext, - psKick->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } -#endif - - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSubmit2DIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.hCCBMemInfo, -#else - &psKick->hCCBMemInfo, -#endif - psKick->hCCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - if (psKick->hTASyncInfo != 0) -#else - if (psKick->hTASyncInfo != IMG_NULL) -#endif - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.hTASyncInfo, -#else - &psKick->hTASyncInfo, -#endif - psKick->hTASyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#if defined (SUPPORT_SID_INTERFACE) - else - { - sKickKM.hTASyncInfo = IMG_NULL; - } -#endif - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.h3DSyncInfo, -#else - &psKick->h3DSyncInfo, -#endif - psKick->h3DSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#if defined (SUPPORT_SID_INTERFACE) - else - { - sKickKM.h3DSyncInfo = IMG_NULL; - } -#endif - - if (psKick->ui32NumSrcSync > SGX_MAX_2D_SRC_SYNC_OPS) - { - psRetOUT->eError = PVRSRV_ERROR_INVALID_PARAMS; - return 0; - } -#if defined (SUPPORT_SID_INTERFACE) - for (i = 0; i < SGX_MAX_2D_SRC_SYNC_OPS; i++) - { - if (i < psKick->ui32NumSrcSync) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &sKickKM.ahSrcSyncInfo[i], - psKick->ahSrcSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - else - { - sKickKM.ahSrcSyncInfo[i] = IMG_NULL; - } - } -#else - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &psKick->ahSrcSyncInfo[i], - psKick->ahSrcSyncInfo[i], - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#endif - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &sKickKM.hDstSyncInfo, -#else - &psKick->hDstSyncInfo, -#endif - psKick->hDstSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#if defined (SUPPORT_SID_INTERFACE) - else - { - sKickKM.hDstSyncInfo = IMG_NULL; - } - - - sKickKM.ui32SharedCmdCCBOffset = psKick->ui32SharedCmdCCBOffset; - sKickKM.ui32NumSrcSync = psKick->ui32NumSrcSync; - sKickKM.ui32PDumpFlags = psKick->ui32PDumpFlags; - sKickKM.sHW2DContextDevVAddr = psKick->sHW2DContextDevVAddr; -#if defined(PDUMP) - sKickKM.ui32CCBDumpWOff = psKick->ui32CCBDumpWOff; -#endif -#endif - - psRetOUT->eError = -#if defined (SUPPORT_SID_INTERFACE) - SGXSubmit2DKM(hDevCookieInt, &sKickKM); -#else - SGXSubmit2DKM(hDevCookieInt, psKick); -#endif - - return 0; -} -#endif -#endif - - -static IMG_INT -SGXGetMiscInfoBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXGETMISCINFO *psSGXGetMiscInfoIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hDevMemContextInt = 0; - PVRSRV_SGXDEV_INFO *psDevInfo; - SGX_MISC_INFO sMiscInfo; - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, - PVRSRV_BRIDGE_SGX_GETMISCINFO); - - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXGetMiscInfoIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - - if (psSGXGetMiscInfoIN->psMiscInfo->eRequest == SGX_MISC_INFO_REQUEST_MEMREAD) - { - psRetOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevMemContextInt, - psSGXGetMiscInfoIN->psMiscInfo->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } -#endif - - psDeviceNode = hDevCookieInt; - PVR_ASSERT(psDeviceNode != IMG_NULL); - if (psDeviceNode == IMG_NULL) - { - return -EFAULT; - } - - psDevInfo = psDeviceNode->pvDevice; - - - psRetOUT->eError = CopyFromUserWrapper(psPerProc, - ui32BridgeID, - &sMiscInfo, - psSGXGetMiscInfoIN->psMiscInfo, - sizeof(SGX_MISC_INFO)); - if (psRetOUT->eError != PVRSRV_OK) - { - return -EFAULT; - } - - { - psRetOUT->eError = SGXGetMiscInfoKM(psDevInfo, &sMiscInfo, psDeviceNode, hDevMemContextInt); - - if (psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - } - - - psRetOUT->eError = CopyToUserWrapper(psPerProc, - ui32BridgeID, - psSGXGetMiscInfoIN->psMiscInfo, - &sMiscInfo, - sizeof(SGX_MISC_INFO)); - if (psRetOUT->eError != PVRSRV_OK) - { - return -EFAULT; - } - return 0; -} - - -static IMG_INT -SGXReadHWPerfCBBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_READ_HWPERF_CB *psSGXReadHWPerfCBIN, - PVRSRV_BRIDGE_OUT_SGX_READ_HWPERF_CB *psSGXReadHWPerfCBOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_SGX_HWPERF_CB_ENTRY *psAllocated; - IMG_HANDLE hAllocatedHandle; - IMG_UINT32 ui32AllocatedSize; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_READ_HWPERF_CB); - - psSGXReadHWPerfCBOUT->eError =PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXReadHWPerfCBIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psSGXReadHWPerfCBOUT->eError != PVRSRV_OK) - { - return 0; - } - - ui32AllocatedSize = psSGXReadHWPerfCBIN->ui32ArraySize * - sizeof(psSGXReadHWPerfCBIN->psHWPerfCBData[0]); - ASSIGN_AND_EXIT_ON_ERROR(psSGXReadHWPerfCBOUT->eError, - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32AllocatedSize, - (IMG_VOID **)&psAllocated, - &hAllocatedHandle, - "Array of Hardware Performance Circular Buffer Data")); - - psSGXReadHWPerfCBOUT->eError = SGXReadHWPerfCBKM(hDevCookieInt, - psSGXReadHWPerfCBIN->ui32ArraySize, - psAllocated, - &psSGXReadHWPerfCBOUT->ui32DataCount, - &psSGXReadHWPerfCBOUT->ui32ClockSpeed, - &psSGXReadHWPerfCBOUT->ui32HostTimeStamp); - if (psSGXReadHWPerfCBOUT->eError == PVRSRV_OK) - { - psSGXReadHWPerfCBOUT->eError = CopyToUserWrapper(psPerProc, - ui32BridgeID, - psSGXReadHWPerfCBIN->psHWPerfCBData, - psAllocated, - ui32AllocatedSize); - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32AllocatedSize, - psAllocated, - hAllocatedHandle); - - - return 0; -} - - -static IMG_INT -SGXDevInitPart2BW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXDEVINITPART2 *psSGXDevInitPart2IN, - PVRSRV_BRIDGE_OUT_SGXDEVINITPART2 *psSGXDevInitPart2OUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_ERROR eError = PVRSRV_OK; -#else - PVRSRV_ERROR eError; -#endif - IMG_BOOL bDissociateFailed = IMG_FALSE; - IMG_BOOL bLookupFailed = IMG_FALSE; - IMG_BOOL bReleaseFailed = IMG_FALSE; - IMG_HANDLE hDummy; - IMG_UINT32 i; -#if defined (SUPPORT_SID_INTERFACE) - SGX_BRIDGE_INIT_INFO_KM asInitInfoKM = {0}; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_DEVINITPART2); - - - psSGXDevInitPart2OUT->ui32KMBuildOptions = SGX_BUILD_OPTIONS; - - if(!psPerProc->bInitProcess) - { - psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_PROCESS_NOT_INITIALISED; - return 0; - } - - psSGXDevInitPart2OUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXDevInitPart2IN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXDevInitPart2OUT->eError != PVRSRV_OK) - { - return 0; - } - - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - -#if defined(SGX_SUPPORT_HWPROFILING) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - -#if defined(SUPPORT_SGX_HWPERF) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_29702) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - -#if defined(FIX_HW_BRN_29823) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - - -#if defined(FIX_HW_BRN_31542) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - - for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; -#else - IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; -#endif - -#if defined (SUPPORT_SID_INTERFACE) - if (hHandle == 0) -#else - if (hHandle == IMG_NULL) -#endif - { - continue; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDummy, - hHandle, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } - } - - if (bLookupFailed) - { - PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A handle lookup failed")); - psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; - return 0; - } - - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelCCBMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelCCBCtlMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelCCBEventKickerMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelSGXHostCtlMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelSGXTA3DCtlMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelSGXMiscMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - -#if defined(SGX_SUPPORT_HWPROFILING) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelHWProfilingMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - -#if defined(SUPPORT_SGX_HWPERF) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelHWPerfCBMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelTASigBufferMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernel3DSigBufferMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_29702) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelCFIMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bLookupFailed = IMG_TRUE; - } -#endif - -#if defined(FIX_HW_BRN_29823) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelDummyTermStreamMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - - -#if defined(FIX_HW_BRN_31542) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAVDMStreamMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAIndexStreamMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAPDSMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAUSEMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAParamMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAPMPTMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWATPCMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelClearClipWAPSGRgnHdrMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, - &psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, - psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - &asInitInfoKM.hKernelEDMStatusBufferMemInfo, -#else - &psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, -#endif - psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } -#endif - - for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; - IMG_HANDLE *phHandleKM = &asInitInfoKM.asInitMemHandles[i]; - - if (hHandle == 0) -#else - IMG_HANDLE *phHandle = &psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; - - if (*phHandle == IMG_NULL) -#endif - continue; - - eError = PVRSRVLookupAndReleaseHandle(psPerProc->psHandleBase, -#if defined (SUPPORT_SID_INTERFACE) - phHandleKM, - hHandle, -#else - phHandle, - *phHandle, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - if (eError != PVRSRV_OK) - { - bReleaseFailed = IMG_TRUE; - } - } - - if (bReleaseFailed) - { - PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A handle release failed")); - psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; - - PVR_DBG_BREAK; - return 0; - } - - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBCtlMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBEventKickerMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBEventKickerMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXHostCtlMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXTA3DCtlMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#endif - - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXMiscMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - - -#if defined(SGX_SUPPORT_HWPROFILING) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelHWProfilingMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelHWProfilingMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#endif - -#if defined(SUPPORT_SGX_HWPERF) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelHWPerfCBMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelHWPerfCBMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#endif - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelTASigBufferMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelTASigBufferMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernel3DSigBufferMemInfo); -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernel3DSigBufferMemInfo); -#endif - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - -#if defined(FIX_HW_BRN_29702) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCFIMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCFIMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#endif - -#if defined(FIX_HW_BRN_29823) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelDummyTermStreamMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelDummyTermStreamMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#endif - -#if defined(FIX_HW_BRN_31542) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAVDMStreamMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAVDMStreamMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAIndexStreamMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAIndexStreamMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPDSMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPDSMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAUSEMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAUSEMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAParamMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAParamMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPMPTMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPMPTMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWATPCMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWATPCMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelClearClipWAPSGRgnHdrMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelClearClipWAPSGRgnHdrMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#endif - -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMSnapShotBufferMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); - - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMCtrlStreamBufferMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelVDMStateUpdateBufferMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) -#if defined (SUPPORT_SID_INTERFACE) - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelEDMStatusBufferMemInfo); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } -#else - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelEDMStatusBufferMemInfo); - bDissociateFailed |= (IMG_BOOL)(eError != PVRSRV_OK); -#endif -#endif - - for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE hHandle = asInitInfoKM.asInitMemHandles[i]; -#else - IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; -#endif - - if (hHandle == IMG_NULL) - continue; - - eError = PVRSRVDissociateDeviceMemKM(hDevCookieInt, hHandle); - if (eError != PVRSRV_OK) - { - bDissociateFailed = IMG_TRUE; - } - } - - - if(bDissociateFailed) - { -#if defined (SUPPORT_SID_INTERFACE) - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelCCBCtlMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXHostCtlMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXTA3DCtlMemInfo); -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXPTLAWriteBackMemInfo); -#endif - PVRSRVFreeDeviceMemKM(hDevCookieInt, asInitInfoKM.hKernelSGXMiscMemInfo); -#else - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelCCBCtlMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXHostCtlMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXTA3DCtlMemInfo); -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXPTLAWriteBackMemInfo); -#endif - PVRSRVFreeDeviceMemKM(hDevCookieInt, psSGXDevInitPart2IN->sInitInfo.hKernelSGXMiscMemInfo); -#endif - - for (i = 0; i < SGX_MAX_INIT_MEM_HANDLES; i++) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE hHandle = asInitInfoKM.asInitMemHandles[i]; - - if (hHandle == 0) -#else - IMG_HANDLE hHandle = psSGXDevInitPart2IN->sInitInfo.asInitMemHandles[i]; - - if (hHandle == IMG_NULL) -#endif - continue; - - PVRSRVFreeDeviceMemKM(hDevCookieInt, (PVRSRV_KERNEL_MEM_INFO *)hHandle); - - } - - PVR_DPF((PVR_DBG_ERROR, "DevInitSGXPart2BW: A dissociate failed")); - - psSGXDevInitPart2OUT->eError = PVRSRV_ERROR_INIT2_PHASE_FAILED; - - - PVR_DBG_BREAK; - return 0; - } - -#if defined (SUPPORT_SID_INTERFACE) - asInitInfoKM.sScripts = psSGXDevInitPart2IN->sInitInfo.sScripts; - asInitInfoKM.ui32ClientBuildOptions = psSGXDevInitPart2IN->sInitInfo.ui32ClientBuildOptions; - asInitInfoKM.sSGXStructSizes = psSGXDevInitPart2IN->sInitInfo.sSGXStructSizes; - asInitInfoKM.ui32CacheControl = psSGXDevInitPart2IN->sInitInfo.ui32CacheControl; - asInitInfoKM.ui32EDMTaskReg0 = psSGXDevInitPart2IN->sInitInfo.ui32EDMTaskReg0; - asInitInfoKM.ui32EDMTaskReg1 = psSGXDevInitPart2IN->sInitInfo.ui32EDMTaskReg1; - asInitInfoKM.ui32ClkGateStatusReg = psSGXDevInitPart2IN->sInitInfo.ui32ClkGateStatusReg; - asInitInfoKM.ui32ClkGateStatusMask = psSGXDevInitPart2IN->sInitInfo.ui32ClkGateStatusMask; - - OSMemCopy(&asInitInfoKM.asInitDevData , - &psSGXDevInitPart2IN->sInitInfo.asInitDevData, - sizeof(asInitInfoKM.asInitDevData)); - OSMemCopy(&asInitInfoKM.aui32HostKickAddr, - &psSGXDevInitPart2IN->sInitInfo.aui32HostKickAddr, - sizeof(asInitInfoKM.aui32HostKickAddr)); - - psSGXDevInitPart2OUT->eError = - DevInitSGXPart2KM(psPerProc, - hDevCookieInt, - &asInitInfoKM); -#else - psSGXDevInitPart2OUT->eError = - DevInitSGXPart2KM(psPerProc, - hDevCookieInt, - &psSGXDevInitPart2IN->sInitInfo); -#endif - - return 0; -} - - -static IMG_INT -SGXRegisterHWRenderContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_RENDER_CONTEXT *psSGXRegHWRenderContextIN, - PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT *psSGXRegHWRenderContextOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hHWRenderContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_REGISTER_HW_RENDER_CONTEXT); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXRegHWRenderContextOUT->eError, psPerProc, 1); - - psSGXRegHWRenderContextOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXRegHWRenderContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXRegHWRenderContextOUT->eError != PVRSRV_OK) - { - return 0; - } - - hHWRenderContextInt = - SGXRegisterHWRenderContextKM(hDevCookieInt, - &psSGXRegHWRenderContextIN->sHWRenderContextDevVAddr, - psPerProc); - - if (hHWRenderContextInt == IMG_NULL) - { - psSGXRegHWRenderContextOUT->eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT; - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psSGXRegHWRenderContextOUT->hHWRenderContext, - hHWRenderContextInt, - PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXRegHWRenderContextOUT->eError, psPerProc); - - return 0; -} - - -static IMG_INT -SGXUnregisterHWRenderContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT *psSGXUnregHWRenderContextIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hHWRenderContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_UNREGISTER_HW_RENDER_CONTEXT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hHWRenderContextInt, - psSGXUnregHWRenderContextIN->hHWRenderContext, - PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = SGXUnregisterHWRenderContextKM(hHWRenderContextInt, - psSGXUnregHWRenderContextIN->bForceCleanup); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXUnregHWRenderContextIN->hHWRenderContext, - PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT); - - return 0; -} - - -static IMG_INT -SGXRegisterHWTransferContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_TRANSFER_CONTEXT *psSGXRegHWTransferContextIN, - PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT *psSGXRegHWTransferContextOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hHWTransferContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_REGISTER_HW_TRANSFER_CONTEXT); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXRegHWTransferContextOUT->eError, psPerProc, 1); - - psSGXRegHWTransferContextOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXRegHWTransferContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXRegHWTransferContextOUT->eError != PVRSRV_OK) - { - return 0; - } - - hHWTransferContextInt = - SGXRegisterHWTransferContextKM(hDevCookieInt, - &psSGXRegHWTransferContextIN->sHWTransferContextDevVAddr, - psPerProc); - - if (hHWTransferContextInt == IMG_NULL) - { - psSGXRegHWTransferContextOUT->eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT; - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psSGXRegHWTransferContextOUT->hHWTransferContext, - hHWTransferContextInt, - PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXRegHWTransferContextOUT->eError, psPerProc); - - return 0; -} - - -static IMG_INT -SGXUnregisterHWTransferContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT *psSGXUnregHWTransferContextIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_HANDLE hHWTransferContextInt = 0; -#else - IMG_HANDLE hHWTransferContextInt; -#endif - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_UNREGISTER_HW_TRANSFER_CONTEXT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hHWTransferContextInt, - psSGXUnregHWTransferContextIN->hHWTransferContext, - PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = SGXUnregisterHWTransferContextKM(hHWTransferContextInt, - psSGXUnregHWTransferContextIN->bForceCleanup); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXUnregHWTransferContextIN->hHWTransferContext, - PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT); - - return 0; -} - - -#if defined(SGX_FEATURE_2D_HARDWARE) -static IMG_INT -SGXRegisterHW2DContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_REGISTER_HW_2D_CONTEXT *psSGXRegHW2DContextIN, - PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT *psSGXRegHW2DContextOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_HANDLE hHW2DContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_REGISTER_HW_2D_CONTEXT); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXRegHW2DContextOUT->eError, psPerProc, 1); - - psSGXRegHW2DContextOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXRegHW2DContextIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXRegHW2DContextOUT->eError != PVRSRV_OK) - { - return 0; - } - - hHW2DContextInt = - SGXRegisterHW2DContextKM(hDevCookieInt, - &psSGXRegHW2DContextIN->sHW2DContextDevVAddr, - psPerProc); - - if (hHW2DContextInt == IMG_NULL) - { - psSGXRegHW2DContextOUT->eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT; - return 0; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psSGXRegHW2DContextOUT->hHW2DContext, - hHW2DContextInt, - PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXRegHW2DContextOUT->eError, psPerProc); - - return 0; -} - - -static IMG_INT -SGXUnregisterHW2DContextBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT *psSGXUnregHW2DContextIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hHW2DContextInt; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_UNREGISTER_HW_2D_CONTEXT); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hHW2DContextInt, - psSGXUnregHW2DContextIN->hHW2DContext, - PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = SGXUnregisterHW2DContextKM(hHW2DContextInt, - psSGXUnregHW2DContextIN->bForceCleanup); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXUnregHW2DContextIN->hHW2DContext, - PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT); - - return 0; -} -#endif - -static IMG_INT -SGXFlushHWRenderTargetBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGX_FLUSH_HW_RENDER_TARGET *psSGXFlushHWRenderTargetIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_FLUSH_HW_RENDER_TARGET); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXFlushHWRenderTargetIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = SGXFlushHWRenderTargetKM(hDevCookieInt, psSGXFlushHWRenderTargetIN->sHWRTDataSetDevVAddr, IMG_FALSE); - - return 0; -} - - -static IMG_INT -SGX2DQueryBlitsCompleteBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE *ps2DQueryBltsCompleteIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_VOID *pvSyncInfo; - PVRSRV_SGXDEV_INFO *psDevInfo; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_2DQUERYBLTSCOMPLETE); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - ps2DQueryBltsCompleteIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvSyncInfo, - ps2DQueryBltsCompleteIN->hKernSyncInfo, - PVRSRV_HANDLE_TYPE_SYNC_INFO); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookieInt)->pvDevice; - - psRetOUT->eError = - SGX2DQueryBlitsCompleteKM(psDevInfo, - (PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo, - ps2DQueryBltsCompleteIN->bWaitForComplete); - - return 0; -} - - -static IMG_INT -SGXFindSharedPBDescBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC *psSGXFindSharedPBDescIN, - PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC *psSGXFindSharedPBDescOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_KERNEL_MEM_INFO *psSharedPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescSubKernelMemInfos = IMG_NULL; - IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount = 0; - IMG_UINT32 i; - IMG_HANDLE hSharedPBDesc = IMG_NULL; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXFindSharedPBDescOUT->eError, psPerProc, PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS + 4); - - psSGXFindSharedPBDescOUT->hSharedPBDesc = IMG_NULL; - - psSGXFindSharedPBDescOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXFindSharedPBDescIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psSGXFindSharedPBDescOUT->eError != PVRSRV_OK) - goto PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC_EXIT; - - psSGXFindSharedPBDescOUT->eError = - SGXFindSharedPBDescKM(psPerProc, hDevCookieInt, - psSGXFindSharedPBDescIN->bLockOnFailure, - psSGXFindSharedPBDescIN->ui32TotalPBSize, - &hSharedPBDesc, - &psSharedPBDescKernelMemInfo, - &psHWPBDescKernelMemInfo, - &psBlockKernelMemInfo, - &psHWBlockKernelMemInfo, - &ppsSharedPBDescSubKernelMemInfos, - &ui32SharedPBDescSubKernelMemInfosCount); - if(psSGXFindSharedPBDescOUT->eError != PVRSRV_OK) - goto PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC_EXIT; - - PVR_ASSERT(ui32SharedPBDescSubKernelMemInfosCount - <= PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS); - - psSGXFindSharedPBDescOUT->ui32SharedPBDescSubKernelMemInfoHandlesCount = - ui32SharedPBDescSubKernelMemInfosCount; - - if(hSharedPBDesc == IMG_NULL) - { - psSGXFindSharedPBDescOUT->hSharedPBDescKernelMemInfoHandle = 0; - - goto PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC_EXIT; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psSGXFindSharedPBDescOUT->hSharedPBDesc, - hSharedPBDesc, - PVRSRV_HANDLE_TYPE_SHARED_PB_DESC, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psSGXFindSharedPBDescOUT->hSharedPBDescKernelMemInfoHandle, - psSharedPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psSGXFindSharedPBDescOUT->hSharedPBDesc); - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psSGXFindSharedPBDescOUT->hHWPBDescKernelMemInfoHandle, - psHWPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psSGXFindSharedPBDescOUT->hSharedPBDesc); - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psSGXFindSharedPBDescOUT->hBlockKernelMemInfoHandle, - psBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psSGXFindSharedPBDescOUT->hSharedPBDesc); - - PVRSRVAllocSubHandleNR(psPerProc->psHandleBase, - &psSGXFindSharedPBDescOUT->hHWBlockKernelMemInfoHandle, - psHWBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psSGXFindSharedPBDescOUT->hSharedPBDesc); - - - for(i=0; ipsHandleBase, - &psSGXFindSharedPBDescOut->ahSharedPBDescSubKernelMemInfoHandles[i], - ppsSharedPBDescSubKernelMemInfos[i], - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_ALLOC_FLAG_MULTI, - psSGXFindSharedPBDescOUT->hSharedPBDescKernelMemInfoHandle); - } - -PVRSRV_BRIDGE_SGX_FINDSHAREDPBDESC_EXIT: - if (ppsSharedPBDescSubKernelMemInfos != IMG_NULL) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) * ui32SharedPBDescSubKernelMemInfosCount, - ppsSharedPBDescSubKernelMemInfos, - IMG_NULL); - } - - if(psSGXFindSharedPBDescOUT->eError != PVRSRV_OK) - { - if(hSharedPBDesc != IMG_NULL) - { - SGXUnrefSharedPBDescKM(hSharedPBDesc); - } - } - else - { - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXFindSharedPBDescOUT->eError, psPerProc); - } - - return 0; -} - - -static IMG_INT -SGXUnrefSharedPBDescBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC *psSGXUnrefSharedPBDescIN, - PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC *psSGXUnrefSharedPBDescOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hSharedPBDesc; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_UNREFSHAREDPBDESC); - - psSGXUnrefSharedPBDescOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - &hSharedPBDesc, - psSGXUnrefSharedPBDescIN->hSharedPBDesc, - PVRSRV_HANDLE_TYPE_SHARED_PB_DESC); - if(psSGXUnrefSharedPBDescOUT->eError != PVRSRV_OK) - { - return 0; - } - - psSGXUnrefSharedPBDescOUT->eError = - SGXUnrefSharedPBDescKM(hSharedPBDesc); - - if(psSGXUnrefSharedPBDescOUT->eError != PVRSRV_OK) - { - return 0; - } - - psSGXUnrefSharedPBDescOUT->eError = - PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXUnrefSharedPBDescIN->hSharedPBDesc, - PVRSRV_HANDLE_TYPE_SHARED_PB_DESC); - - return 0; -} - - -static IMG_INT -SGXAddSharedPBDescBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC *psSGXAddSharedPBDescIN, - PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC *psSGXAddSharedPBDescOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - PVRSRV_KERNEL_MEM_INFO *psSharedPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo; - IMG_UINT32 ui32KernelMemInfoHandlesCount = - psSGXAddSharedPBDescIN->ui32KernelMemInfoHandlesCount; - IMG_INT ret = 0; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID *phKernelMemInfoHandles = 0; -#else - IMG_HANDLE *phKernelMemInfoHandles = IMG_NULL; -#endif - PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfos = IMG_NULL; - IMG_UINT32 i; - PVRSRV_ERROR eError; - IMG_HANDLE hSharedPBDesc = IMG_NULL; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXAddSharedPBDescOUT->eError, psPerProc, 1); - - psSGXAddSharedPBDescOUT->hSharedPBDesc = IMG_NULL; - - PVR_ASSERT(ui32KernelMemInfoHandlesCount - <= PVRSRV_BRIDGE_SGX_SHAREDPBDESC_MAX_SUBMEMINFOS); - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &hDevCookieInt, - psSGXAddSharedPBDescIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psSharedPBDescKernelMemInfo, - psSGXAddSharedPBDescIN->hSharedPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psHWPBDescKernelMemInfo, - psSGXAddSharedPBDescIN->hHWPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psBlockKernelMemInfo, - psSGXAddSharedPBDescIN->hBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID **)&psHWBlockKernelMemInfo, - psSGXAddSharedPBDescIN->hHWBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - - if(!OSAccessOK(PVR_VERIFY_READ, - psSGXAddSharedPBDescIN->phKernelMemInfoHandles, - ui32KernelMemInfoHandlesCount * sizeof(IMG_HANDLE))) - { - PVR_DPF((PVR_DBG_ERROR, "%s: PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC:" - " Invalid phKernelMemInfos pointer", __FUNCTION__)); - ret = -EFAULT; - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32KernelMemInfoHandlesCount * sizeof(IMG_HANDLE), - (IMG_VOID **)&phKernelMemInfoHandles, - 0, - "Array of Handles"); - if (eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - phKernelMemInfoHandles, - psSGXAddSharedPBDescIN->phKernelMemInfoHandles, - ui32KernelMemInfoHandlesCount * sizeof(IMG_HANDLE)) - != PVRSRV_OK) - { - ret = -EFAULT; - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32KernelMemInfoHandlesCount * sizeof(PVRSRV_KERNEL_MEM_INFO *), - (IMG_VOID **)&ppsKernelMemInfos, - 0, - "Array of pointers to Kernel Memory Info"); - if (eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - for(i=0; ipsHandleBase, - (IMG_VOID **)&ppsKernelMemInfos[i], - phKernelMemInfoHandles[i], - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - } - - - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXAddSharedPBDescIN->hSharedPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - PVR_ASSERT(eError == PVRSRV_OK); - - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXAddSharedPBDescIN->hHWPBDescKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - PVR_ASSERT(eError == PVRSRV_OK); - - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXAddSharedPBDescIN->hBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO); - PVR_ASSERT(eError == PVRSRV_OK); - - - eError = PVRSRVReleaseHandle(psPerProc->psHandleBase, - psSGXAddSharedPBDescIN->hHWBlockKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - PVR_ASSERT(eError == PVRSRV_OK); - - for(i=0; ipsHandleBase, - phKernelMemInfoHandles[i], - PVRSRV_HANDLE_TYPE_MEM_INFO); - PVR_ASSERT(eError == PVRSRV_OK); - } - - eError = SGXAddSharedPBDescKM(psPerProc, hDevCookieInt, - psSharedPBDescKernelMemInfo, - psHWPBDescKernelMemInfo, - psBlockKernelMemInfo, - psHWBlockKernelMemInfo, - psSGXAddSharedPBDescIN->ui32TotalPBSize, - &hSharedPBDesc, - ppsKernelMemInfos, - ui32KernelMemInfoHandlesCount, - psSGXAddSharedPBDescIN->sHWPBDescDevVAddr); - - - if (eError != PVRSRV_OK) - { - goto PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT; - } - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psSGXAddSharedPBDescOUT->hSharedPBDesc, - hSharedPBDesc, - PVRSRV_HANDLE_TYPE_SHARED_PB_DESC, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - -PVRSRV_BRIDGE_SGX_ADDSHAREDPBDESC_RETURN_RESULT: - - if(phKernelMemInfoHandles) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - psSGXAddSharedPBDescIN->ui32KernelMemInfoHandlesCount * sizeof(IMG_HANDLE), - (IMG_VOID *)phKernelMemInfoHandles, - 0); - } - if(ppsKernelMemInfos) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - psSGXAddSharedPBDescIN->ui32KernelMemInfoHandlesCount * sizeof(PVRSRV_KERNEL_MEM_INFO *), - (IMG_VOID *)ppsKernelMemInfos, - 0); - } - - if(ret == 0 && eError == PVRSRV_OK) - { - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXAddSharedPBDescOUT->eError, psPerProc); - } - - psSGXAddSharedPBDescOUT->eError = eError; - - return ret; -} - -static IMG_INT -SGXGetInfoForSrvinitBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT *psSGXInfoForSrvinitIN, - PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT *psSGXInfoForSrvinitOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_HANDLE hDevCookieInt; - IMG_UINT32 i; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS]; -#endif - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGXINFO_FOR_SRVINIT); - - NEW_HANDLE_BATCH_OR_ERROR(psSGXInfoForSrvinitOUT->eError, psPerProc, PVRSRV_MAX_CLIENT_HEAPS); - - if(!psPerProc->bInitProcess) - { - psSGXInfoForSrvinitOUT->eError = PVRSRV_ERROR_PROCESS_NOT_INITIALISED; - return 0; - } - - psSGXInfoForSrvinitOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, &hDevCookieInt, - psSGXInfoForSrvinitIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - - if(psSGXInfoForSrvinitOUT->eError != PVRSRV_OK) - { - return 0; - } - - psSGXInfoForSrvinitOUT->eError = - SGXGetInfoForSrvinitKM(hDevCookieInt, -#if defined (SUPPORT_SID_INTERFACE) - &asHeapInfo[0], - &psSGXInfoForSrvinitOUT->sInitInfo.sPDDevPAddr); -#else - &psSGXInfoForSrvinitOUT->sInitInfo); -#endif - - if(psSGXInfoForSrvinitOUT->eError != PVRSRV_OK) - { - return 0; - } - - for(i = 0; i < PVRSRV_MAX_CLIENT_HEAPS; i++) - { - PVRSRV_HEAP_INFO *psHeapInfo; - - psHeapInfo = &psSGXInfoForSrvinitOUT->sInitInfo.asHeapInfo[i]; - -#if defined (SUPPORT_SID_INTERFACE) - if ((asHeapInfo[i].ui32HeapID != (IMG_UINT32)SGX_UNDEFINED_HEAP_ID) && - (asHeapInfo[i].hDevMemHeap != IMG_NULL)) - { - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &psHeapInfo->hDevMemHeap, - asHeapInfo[i].hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - } - else - { - psHeapInfo->hDevMemHeap = 0; - } - - psHeapInfo->ui32HeapID = asHeapInfo[i].ui32HeapID; - psHeapInfo->sDevVAddrBase = asHeapInfo[i].sDevVAddrBase; - psHeapInfo->ui32HeapByteSize = asHeapInfo[i].ui32HeapByteSize; - psHeapInfo->ui32Attribs = asHeapInfo[i].ui32Attribs; - psHeapInfo->ui32XTileStride = asHeapInfo[i].ui32XTileStride; -#else - if (psHeapInfo->ui32HeapID != (IMG_UINT32)SGX_UNDEFINED_HEAP_ID) - { - IMG_HANDLE hDevMemHeapExt; - - if (psHeapInfo->hDevMemHeap != IMG_NULL) - { - - PVRSRVAllocHandleNR(psPerProc->psHandleBase, - &hDevMemHeapExt, - psHeapInfo->hDevMemHeap, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_ALLOC_FLAG_SHARED); - psHeapInfo->hDevMemHeap = hDevMemHeapExt; - } - } -#endif - } - - COMMIT_HANDLE_BATCH_OR_ERROR(psSGXInfoForSrvinitOUT->eError, psPerProc); - - return 0; -} - -#if defined(PDUMP) -static IMG_VOID -DumpBufferArray(PVRSRV_PER_PROCESS_DATA *psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - PSGX_KICKTA_DUMP_BUFFER_KM psBufferArray, -#else - PSGX_KICKTA_DUMP_BUFFER psBufferArray, -#endif - IMG_UINT32 ui32BufferArrayLength, - IMG_BOOL bDumpPolls) -{ - IMG_UINT32 i; - - for (i=0; ipszName; - if (!pszName) - { - pszName = "Nameless buffer"; - } - - hUniqueTag = MAKEUNIQUETAG((PVRSRV_KERNEL_MEM_INFO *)psBuffer->hKernelMemInfo); - - #if defined(SUPPORT_SGX_NEW_STATUS_VALS) - psCtrlMemInfoKM = ((PVRSRV_KERNEL_MEM_INFO *)psBuffer->hCtrlKernelMemInfo); - ui32Offset = psBuffer->sCtrlDevVAddr.uiAddr - psCtrlMemInfoKM->sDevVAddr.uiAddr; - #else - psCtrlMemInfoKM = ((PVRSRV_KERNEL_MEM_INFO *)psBuffer->hKernelMemInfo)->psKernelSyncInfo->psSyncDataMemInfoKM; - ui32Offset = offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); - #endif - - if (psBuffer->ui32Start <= psBuffer->ui32End) - { - if (bDumpPolls) - { - PDUMPCOMMENTWITHFLAGS(0, "Wait for %s space\r\n", pszName); - PDUMPCBP(psCtrlMemInfoKM, - ui32Offset, - psBuffer->ui32Start, - psBuffer->ui32SpaceUsed, - psBuffer->ui32BufferSize, - 0, - MAKEUNIQUETAG(psCtrlMemInfoKM)); - } - - PDUMPCOMMENTWITHFLAGS(0, "%s\r\n", pszName); - PDUMPMEMUM(psPerProc, - IMG_NULL, - psBuffer->pvLinAddr, - (PVRSRV_KERNEL_MEM_INFO*)psBuffer->hKernelMemInfo, - psBuffer->ui32Start, - psBuffer->ui32End - psBuffer->ui32Start, - 0, - hUniqueTag); - } - else - { - - - if (bDumpPolls) - { - PDUMPCOMMENTWITHFLAGS(0, "Wait for %s space\r\n", pszName); - PDUMPCBP(psCtrlMemInfoKM, - ui32Offset, - psBuffer->ui32Start, - psBuffer->ui32BackEndLength, - psBuffer->ui32BufferSize, - 0, - MAKEUNIQUETAG(psCtrlMemInfoKM)); - } - PDUMPCOMMENTWITHFLAGS(0, "%s (part 1)\r\n", pszName); - PDUMPMEMUM(psPerProc, - IMG_NULL, - psBuffer->pvLinAddr, - (PVRSRV_KERNEL_MEM_INFO*)psBuffer->hKernelMemInfo, - psBuffer->ui32Start, - psBuffer->ui32BackEndLength, - 0, - hUniqueTag); - - if (bDumpPolls) - { - PDUMPMEMPOL(psCtrlMemInfoKM, - ui32Offset, - 0, - 0xFFFFFFFF, - PDUMP_POLL_OPERATOR_NOTEQUAL, - 0, - MAKEUNIQUETAG(psCtrlMemInfoKM)); - - PDUMPCOMMENTWITHFLAGS(0, "Wait for %s space\r\n", pszName); - PDUMPCBP(psCtrlMemInfoKM, - ui32Offset, - 0, - psBuffer->ui32End, - psBuffer->ui32BufferSize, - 0, - MAKEUNIQUETAG(psCtrlMemInfoKM)); - } - PDUMPCOMMENTWITHFLAGS(0, "%s (part 2)\r\n", pszName); - PDUMPMEMUM(psPerProc, - IMG_NULL, - psBuffer->pvLinAddr, - (PVRSRV_KERNEL_MEM_INFO*)psBuffer->hKernelMemInfo, - 0, - psBuffer->ui32End, - 0, - hUniqueTag); - } - } -} -static IMG_INT -SGXPDumpBufferArrayBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_BUFFER_ARRAY *psPDumpBufferArrayIN, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 i; -#if defined (SUPPORT_SID_INTERFACE) - SGX_KICKTA_DUMP_BUFFER *psUMPtr; - SGX_KICKTA_DUMP_BUFFER_KM *psKickTADumpBufferKM, *psKMPtr; -#else - SGX_KICKTA_DUMP_BUFFER *psKickTADumpBuffer; -#endif - IMG_UINT32 ui32BufferArrayLength = - psPDumpBufferArrayIN->ui32BufferArrayLength; - IMG_UINT32 ui32BufferArraySize = - ui32BufferArrayLength * sizeof(SGX_KICKTA_DUMP_BUFFER); - PVRSRV_ERROR eError = PVRSRV_ERROR_TOO_FEW_BUFFERS; - -#if defined (__QNXNTO__) - const IMG_UINT32 MAX_BUFFER_NAME_SIZE = 30; - IMG_PCHAR pszNamesBuffer, pszName; - IMG_UINT32 ui32NameBufferArraySize; -#endif - - PVR_UNREFERENCED_PARAMETER(psBridgeOut); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_BUFFER_ARRAY); - -#if defined (SUPPORT_SID_INTERFACE) - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32BufferArraySize, - (IMG_PVOID *)&psKickTADumpBufferKM, 0, - "Array of Kick Tile Accelerator Dump Buffer") != PVRSRV_OK) -#else - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32BufferArraySize, - (IMG_PVOID *)&psKickTADumpBuffer, 0, - "Array of Kick Tile Accelerator Dump Buffer") != PVRSRV_OK) -#endif - { - return -ENOMEM; - } - -#if !defined (SUPPORT_SID_INTERFACE) - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - psKickTADumpBuffer, - psPDumpBufferArrayIN->psBufferArray, - ui32BufferArraySize) != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBuffer, 0); - - return -EFAULT; - } -#endif - -#if defined (__QNXNTO__) - ui32NameBufferArraySize = ui32BufferArrayLength * MAX_BUFFER_NAME_SIZE; - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, ui32NameBufferArraySize, - (IMG_PVOID *)&pszNamesBuffer, 0, - "Kick Tile Accelerator Dump Buffer names") != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBuffer, 0); - return -ENOMEM; - } - - pszName = pszNamesBuffer; - for (i=0; ipsBufferArray[i]; - psKMPtr = &psKickTADumpBufferKM[i]; -#else - IMG_VOID *pvMemInfo; -#endif - - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psUMPtr->hKernelMemInfo, -#else - psKickTADumpBuffer[i].hKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRV_BRIDGE_SGX_PDUMP_BUFFER_ARRAY: " - "PVRSRVLookupHandle failed (%d)", eError)); - break; - } -#if defined (SUPPORT_SID_INTERFACE) - psKMPtr->hKernelMemInfo = pvMemInfo; -#else - psKickTADumpBuffer[i].hKernelMemInfo = pvMemInfo; -#endif - -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - eError = PVRSRVLookupHandle(psPerProc->psHandleBase, - &pvMemInfo, -#if defined (SUPPORT_SID_INTERFACE) - psUMPtr->hCtrlKernelMemInfo, -#else - psKickTADumpBuffer[i].hCtrlKernelMemInfo, -#endif - PVRSRV_HANDLE_TYPE_MEM_INFO); - - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRV_BRIDGE_SGX_PDUMP_BUFFER_ARRAY: " - "PVRSRVLookupHandle failed (%d)", eError)); - break; - } -#if defined (SUPPORT_SID_INTERFACE) - psKMPtr->hCtrlKernelMemInfo = pvMemInfo; - psKMPtr->sCtrlDevVAddr = psUMPtr->sCtrlDevVAddr; -#else - psKickTADumpBuffer[i].hCtrlKernelMemInfo = pvMemInfo; -#endif -#endif - -#if defined (SUPPORT_SID_INTERFACE) - psKMPtr->ui32SpaceUsed = psUMPtr->ui32SpaceUsed; - psKMPtr->ui32Start = psUMPtr->ui32Start; - psKMPtr->ui32End = psUMPtr->ui32End; - psKMPtr->ui32BufferSize = psUMPtr->ui32BufferSize; - psKMPtr->ui32BackEndLength = psUMPtr->ui32BackEndLength; - psKMPtr->uiAllocIndex = psUMPtr->uiAllocIndex; - psKMPtr->pvLinAddr = psUMPtr->pvLinAddr; - psKMPtr->pszName = psUMPtr->pszName; -#endif - } - - if(eError == PVRSRV_OK) - { - DumpBufferArray(psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - psKickTADumpBufferKM, -#else - psKickTADumpBuffer, -#endif - ui32BufferArrayLength, - psPDumpBufferArrayIN->bDumpPolls); - } - -#if defined (SUPPORT_SID_INTERFACE) - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBufferKM, 0); -#else - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32BufferArraySize, psKickTADumpBuffer, 0); -#endif - - -#if defined (__QNXNTO__) - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32NameBufferArraySize, pszNamesBuffer, 0); -#endif - - return 0; -} - -static IMG_INT -SGXPDump3DSignatureRegistersBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS *psPDump3DSignatureRegistersIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32RegisterArraySize = psPDump3DSignatureRegistersIN->ui32NumRegisters * sizeof(IMG_UINT32); - IMG_UINT32 *pui32Registers = IMG_NULL; - PVRSRV_SGXDEV_INFO *psDevInfo; -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - IMG_UINT32 ui32RegVal = 0; -#endif - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContextInt = 0; - IMG_UINT32 ui32MMUContextID; - IMG_INT ret = -EFAULT; - - PVR_UNREFERENCED_PARAMETER(psRetOUT); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_3D_SIGNATURE_REGISTERS); - - if (ui32RegisterArraySize == 0) - { - goto ExitNoError; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psDeviceNode, - psPDump3DSignatureRegistersIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpTASignatureRegistersBW: hDevCookie lookup failed")); - goto Exit; - } - - psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE, (SGX_FEATURE_MP_CORE_COUNT - 1) << EUR_CR_MASTER_CORE_ENABLE_SHIFT); -#if defined(PDUMP) - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_CORE, (SGX_FEATURE_MP_CORE_COUNT - 1) << EUR_CR_MASTER_CORE_ENABLE_SHIFT, - psPDump3DSignatureRegistersIN->bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0); -#endif -#endif - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32RegisterArraySize, - (IMG_PVOID *)&pui32Registers, 0, - "Array of Registers") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDump3DSignatureRegistersBW: OSAllocMem failed")); - goto Exit; - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - pui32Registers, - psPDump3DSignatureRegistersIN->pui32Registers, - ui32RegisterArraySize) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDump3DSignatureRegistersBW: CopyFromUserWrapper failed")); - goto Exit; - } - - PDump3DSignatureRegisters(&psDeviceNode->sDevId, - psPDump3DSignatureRegistersIN->ui32DumpFrameNum, - psPDump3DSignatureRegistersIN->bLastFrame, - pui32Registers, - psPDump3DSignatureRegistersIN->ui32NumRegisters); - - psRetOUT->eError = - PVRSRVLookupHandle( psPerProc->psHandleBase, - &hDevMemContextInt, - psPDump3DSignatureRegistersIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) - ui32MMUContextID = psDeviceNode->pfnMMUGetContextID((IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext); - - PDumpSignatureBuffer(&psDeviceNode->sDevId, - "out.tasig", "TA", 0, - psDevInfo->psKernelTASigBufferMemInfo->sDevVAddr, - (IMG_UINT32)psDevInfo->psKernelTASigBufferMemInfo->uAllocSize, - ui32MMUContextID, - 0 ); - PDumpSignatureBuffer(&psDeviceNode->sDevId, - "out.3dsig", "3D", 0, - psDevInfo->psKernel3DSigBufferMemInfo->sDevVAddr, - (IMG_UINT32)psDevInfo->psKernel3DSigBufferMemInfo->uAllocSize, - ui32MMUContextID, - 0 ); - -ExitNoError: - psRetOUT->eError = PVRSRV_OK; - ret = 0; -Exit: - if (pui32Registers != IMG_NULL) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32RegisterArraySize, pui32Registers, 0); - } - -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - if (psDevInfo != IMG_NULL) - { - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE, ui32RegVal); -#if defined(PDUMP) - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_CORE, ui32RegVal, - psPDump3DSignatureRegistersIN->bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0); -#endif - } -#endif - - return ret; -} - -static IMG_INT -SGXPDumpCounterRegistersBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_COUNTER_REGISTERS *psPDumpCounterRegistersIN, - IMG_VOID *psBridgeOut, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32RegisterArraySize = psPDumpCounterRegistersIN->ui32NumRegisters * sizeof(IMG_UINT32); - IMG_UINT32 *pui32Registers = IMG_NULL; - PVRSRV_DEVICE_NODE *psDeviceNode ; - IMG_INT ret = -EFAULT; - - PVR_UNREFERENCED_PARAMETER(psBridgeOut); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_COUNTER_REGISTERS); - - if (ui32RegisterArraySize == 0) - { - goto ExitNoError; - } - - if(PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psDeviceNode, - psPDumpCounterRegistersIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXPDumpCounterRegistersBW: hDevCookie lookup failed")); - ret = -ENOMEM; - goto Exit; - } - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32RegisterArraySize, - (IMG_PVOID *)&pui32Registers, 0, - "Array of Registers") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpCounterRegistersBW: OSAllocMem failed")); - ret = -ENOMEM; - goto Exit; - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - pui32Registers, - psPDumpCounterRegistersIN->pui32Registers, - ui32RegisterArraySize) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpCounterRegistersBW: CopyFromUserWrapper failed")); - goto Exit; - } - - PDumpCounterRegisters(&psDeviceNode->sDevId, - psPDumpCounterRegistersIN->ui32DumpFrameNum, - psPDumpCounterRegistersIN->bLastFrame, - pui32Registers, - psPDumpCounterRegistersIN->ui32NumRegisters); - -ExitNoError: - ret = 0; -Exit: - if (pui32Registers != IMG_NULL) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32RegisterArraySize, pui32Registers, 0); - } - - return ret; -} - -static IMG_INT -SGXPDumpTASignatureRegistersBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS *psPDumpTASignatureRegistersIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - IMG_UINT32 ui32RegisterArraySize = psPDumpTASignatureRegistersIN->ui32NumRegisters * sizeof(IMG_UINT32); - IMG_UINT32 *pui32Registers = IMG_NULL; -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - PVRSRV_SGXDEV_INFO *psDevInfo = IMG_NULL; - IMG_UINT32 ui32RegVal = 0; -#endif - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_INT ret = -EFAULT; - - PVR_UNREFERENCED_PARAMETER(psRetOUT); - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_TA_SIGNATURE_REGISTERS); - - if (ui32RegisterArraySize == 0) - { - goto ExitNoError; - } - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID**)&psDeviceNode, - psPDumpTASignatureRegistersIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpTASignatureRegistersBW: hDevCookie lookup failed")); - goto Exit; - } - -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - - psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - - - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE, (SGX_FEATURE_MP_CORE_COUNT - 1) << EUR_CR_MASTER_CORE_ENABLE_SHIFT); -#if defined(PDUMP) - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_CORE, (SGX_FEATURE_MP_CORE_COUNT - 1) << EUR_CR_MASTER_CORE_ENABLE_SHIFT, - psPDumpTASignatureRegistersIN->bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0); -#endif -#endif - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32RegisterArraySize, - (IMG_PVOID *)&pui32Registers, 0, - "Array of Registers") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpTASignatureRegistersBW: OSAllocMem failed")); - ret = -ENOMEM; - goto Exit; - } - - if(CopyFromUserWrapper(psPerProc, - ui32BridgeID, - pui32Registers, - psPDumpTASignatureRegistersIN->pui32Registers, - ui32RegisterArraySize) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpTASignatureRegistersBW: CopyFromUserWrapper failed")); - goto Exit; - } - - PDumpTASignatureRegisters(&psDeviceNode->sDevId, - psPDumpTASignatureRegistersIN->ui32DumpFrameNum, - psPDumpTASignatureRegistersIN->ui32TAKickCount, - psPDumpTASignatureRegistersIN->bLastFrame, - pui32Registers, - psPDumpTASignatureRegistersIN->ui32NumRegisters); - -ExitNoError: - psRetOUT->eError = PVRSRV_OK; - ret = 0; -Exit: - if (pui32Registers != IMG_NULL) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, ui32RegisterArraySize, pui32Registers, 0); - } - -#if defined(SGX_FEATURE_MP) && defined(FIX_HW_BRN_27270) - if (psDevInfo != IMG_NULL) - { - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE, ui32RegVal); -#if defined(PDUMP) - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_CORE, ui32RegVal, - psPDumpTASignatureRegistersIN->bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0); -#endif - } -#endif - - return ret; -} -static IMG_INT -SGXPDumpHWPerfCBBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB *psPDumpHWPerfCBIN, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ -#if defined(SUPPORT_SGX_HWPERF) -#if defined(__linux__) - PVRSRV_SGXDEV_INFO *psDevInfo; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContextInt = 0; - IMG_UINT32 ui32MMUContextID = 0; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_HWPERFCB); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, (IMG_VOID**)&psDeviceNode, - psPDumpHWPerfCBIN->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psDevInfo = psDeviceNode->pvDevice; - - psRetOUT->eError = - PVRSRVLookupHandle( psPerProc->psHandleBase, - &hDevMemContextInt, - psPDumpHWPerfCBIN->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) - ui32MMUContextID = psDeviceNode->pfnMMUGetContextID(hDevMemContextInt); - - PDumpHWPerfCBKM(&psDeviceNode->sDevId, - &psPDumpHWPerfCBIN->szFileName[0], - psPDumpHWPerfCBIN->ui32FileOffset, - psDevInfo->psKernelHWPerfCBMemInfo->sDevVAddr, - psDevInfo->psKernelHWPerfCBMemInfo->uAllocSize, - ui32MMUContextID, - psPDumpHWPerfCBIN->ui32PDumpFlags); - - return 0; -#else - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - PVR_UNREFERENCED_PARAMETER(psPDumpHWPerfCBIN); - PVR_UNREFERENCED_PARAMETER(psRetOUT); - PVR_UNREFERENCED_PARAMETER(psPerProc); - return 0; -#endif -#else - PVR_UNREFERENCED_PARAMETER(ui32BridgeID); - PVR_UNREFERENCED_PARAMETER(psPDumpHWPerfCBIN); - PVR_UNREFERENCED_PARAMETER(psRetOUT); - PVR_UNREFERENCED_PARAMETER(psPerProc); - return -EFAULT; -#endif -} - - -static IMG_INT -SGXPDumpSaveMemBW(IMG_UINT32 ui32BridgeID, - PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM *psPDumpSaveMem, - PVRSRV_BRIDGE_RETURN *psRetOUT, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_HANDLE hDevMemContextInt = 0; - IMG_UINT32 ui32MMUContextID; - - PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_SGX_PDUMP_SAVEMEM); - - psRetOUT->eError = - PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_VOID**)&psDeviceNode, - psPDumpSaveMem->hDevCookie, - PVRSRV_HANDLE_TYPE_DEV_NODE); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - psRetOUT->eError = - PVRSRVLookupHandle( psPerProc->psHandleBase, - &hDevMemContextInt, - psPDumpSaveMem->hDevMemContext, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT); - if(psRetOUT->eError != PVRSRV_OK) - { - return 0; - } - - - PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) - ui32MMUContextID = psDeviceNode->pfnMMUGetContextID(hDevMemContextInt); - - PDumpSaveMemKM(&psDeviceNode->sDevId, - &psPDumpSaveMem->szFileName[0], - psPDumpSaveMem->ui32FileOffset, - psPDumpSaveMem->sDevVAddr, - psPDumpSaveMem->ui32Size, - ui32MMUContextID, - psPDumpSaveMem->ui32PDumpFlags); - return 0; -} - -#endif - - - -IMG_VOID SetSGXDispatchTableEntry(IMG_VOID) -{ - - PVR_IO_NSTD(SGX_GETCLIENTINFO, SGXGetClientInfoBW, - sizeof(PVRSRV_BRIDGE_IN_GETCLIENTINFO), - sizeof(PVRSRV_BRIDGE_OUT_GETCLIENTINFO)); - PVR_IO_NSTD(SGX_RELEASECLIENTINFO, SGXReleaseClientInfoBW, - sizeof(PVRSRV_BRIDGE_IN_RELEASECLIENTINFO), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_GETINTERNALDEVINFO, SGXGetInternalDevInfoBW, - sizeof(PVRSRV_BRIDGE_IN_GETINTERNALDEVINFO), - sizeof(PVRSRV_BRIDGE_OUT_GETINTERNALDEVINFO)); - - PVR_IO_NSTD(SGX_DOKICK, SGXDoKickBW, - sizeof(PVRSRV_BRIDGE_IN_DOKICK), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_GETPHYSPAGEADDR, DummyBW, - sizeof(PVRSRV_BRIDGE_IN_GETPHYSPAGEADDR), - sizeof(PVRSRV_BRIDGE_OUT_GETPHYSPAGEADDR)); - PVR_IO_INV(SGX_READREGISTRYDWORD); - PVR_IO_NSTD(SGX_2DQUERYBLTSCOMPLETE, SGX2DQueryBlitsCompleteBW, - sizeof(PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_INV(SGX_GETMMUPDADDR); - -#if defined(TRANSFER_QUEUE) - PVR_IO_NSTD(SGX_SUBMITTRANSFER, SGXSubmitTransferBW, - sizeof(PVRSRV_BRIDGE_IN_SUBMITTRANSFER), - sizeof(PVRSRV_BRIDGE_RETURN)); -#endif - PVR_IO_NSTD(SGX_GETMISCINFO, SGXGetMiscInfoBW, - sizeof(PVRSRV_BRIDGE_IN_SGXGETMISCINFO), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGXINFO_FOR_SRVINIT, SGXGetInfoForSrvinitBW, - sizeof(PVRSRV_BRIDGE_IN_SGXINFO_FOR_SRVINIT), - sizeof(PVRSRV_BRIDGE_OUT_SGXINFO_FOR_SRVINIT)); - PVR_IO_NSTD(SGX_DEVINITPART2, SGXDevInitPart2BW, - sizeof(PVRSRV_BRIDGE_IN_SGXDEVINITPART2), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_FINDSHAREDPBDESC, SGXFindSharedPBDescBW, - sizeof(PVRSRV_BRIDGE_IN_SGXFINDSHAREDPBDESC), - sizeof(PVRSRV_BRIDGE_OUT_SGXFINDSHAREDPBDESC)); - PVR_IO_NSTD(SGX_UNREFSHAREDPBDESC, SGXUnrefSharedPBDescBW, - sizeof(PVRSRV_BRIDGE_IN_SGXUNREFSHAREDPBDESC), - sizeof(PVRSRV_BRIDGE_OUT_SGXUNREFSHAREDPBDESC)); - PVR_IO_NSTD(SGX_ADDSHAREDPBDESC, SGXAddSharedPBDescBW, - sizeof(PVRSRV_BRIDGE_IN_SGXADDSHAREDPBDESC), - sizeof(PVRSRV_BRIDGE_OUT_SGXADDSHAREDPBDESC)); - PVR_IO_RW(SGX_REGISTER_HW_RENDER_CONTEXT, SGXRegisterHWRenderContextBW); - PVR_IO_W(SGX_FLUSH_HW_RENDER_TARGET, SGXFlushHWRenderTargetBW); - PVR_IO_W(SGX_UNREGISTER_HW_RENDER_CONTEXT, SGXUnregisterHWRenderContextBW); -#if defined(SGX_FEATURE_2D_HARDWARE) - PVR_IO_NSTD(SGX_SUBMIT2D, SGXSubmit2DBW, - sizeof(PVRSRV_BRIDGE_IN_SUBMIT2D), - sizeof(PVRSRV_BRIDGE_OUT_SUBMIT2D)); - PVR_IO_NSTD(SGX_REGISTER_HW_2D_CONTEXT, SGXRegisterHW2DContextBW, - sizeof(PVRSRV_BRIDGE_IN_REGISTER_HW_2D_CONTEXT), - sizeof(PVRSRV_BRIDGE_OUT_REGISTER_HW_2D_CONTEXT)); - PVR_IO_NSTD(SGX_UNREGISTER_HW_2D_CONTEXT, SGXUnregisterHW2DContextBW, - sizeof(PVRSRV_BRIDGE_IN_UNREGISTER_HW_2D_CONTEXT), - sizeof(PVRSRV_BRIDGE_OUT_UNREGISTER_HW_2D_CONTEXT)); -#endif - PVR_IO_RW(SGX_REGISTER_HW_TRANSFER_CONTEXT, SGXRegisterHWTransferContextBW); - PVR_IO_W(SGX_UNREGISTER_HW_TRANSFER_CONTEXT, SGXUnregisterHWTransferContextBW); - PVR_IO_W(SGX_SCHEDULE_PROCESS_QUEUES, SGXScheduleProcessQueuesBW); - PVR_IO_RW(SGX_READ_HWPERF_CB, SGXReadHWPerfCBBW); -#if defined(PDUMP) - PVR_IO_NSTD(SGX_PDUMP_BUFFER_ARRAY, SGXPDumpBufferArrayBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_BUFFER_ARRAY), 0); - PVR_IO_NSTD(SGX_PDUMP_3D_SIGNATURE_REGISTERS, SGXPDump3DSignatureRegistersBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_3D_SIGNATURE_REGISTERS), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_PDUMP_COUNTER_REGISTERS, SGXPDumpCounterRegistersBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_COUNTER_REGISTERS), 0); - PVR_IO_NSTD(SGX_PDUMP_TA_SIGNATURE_REGISTERS, SGXPDumpTASignatureRegistersBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_TA_SIGNATURE_REGISTERS), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_PDUMP_HWPERFCB, SGXPDumpHWPerfCBBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_HWPERFCB), - sizeof(PVRSRV_BRIDGE_RETURN)); - PVR_IO_NSTD(SGX_PDUMP_SAVEMEM, SGXPDumpSaveMemBW, - sizeof(PVRSRV_BRIDGE_IN_PDUMP_SAVEMEM), - sizeof(PVRSRV_BRIDGE_RETURN)); -#endif -} - - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h b/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h deleted file mode 100644 index 204450c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/bridged/sgx/bridged_sgx_bridge.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __BRIDGED_SGX_BRIDGE_H__ -#define __BRIDGED_SGX_BRIDGE_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - - -IMG_VOID SetSGXDispatchTableEntry(IMG_VOID); - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/.gitignore b/drivers/staging/cdv/pvr/services4/srvkm/common/.gitignore deleted file mode 100644 index 2f89523..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/buffer_manager.c b/drivers/staging/cdv/pvr/services4/srvkm/common/buffer_manager.c deleted file mode 100644 index 3f8e527..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/buffer_manager.c +++ /dev/null @@ -1,2531 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" - -#include "sysconfig.h" -#include "hash.h" -#include "ra.h" -#include "pdump_km.h" -#include "lists.h" - -static IMG_BOOL -ZeroBuf(BM_BUF *pBuf, BM_MAPPING *pMapping, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags); -static IMG_VOID -BM_FreeMemory (IMG_VOID *pH, IMG_UINTPTR_T base, BM_MAPPING *psMapping); -static IMG_BOOL -BM_ImportMemory(IMG_VOID *pH, IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, IMG_UINTPTR_T *pBase); - -static IMG_BOOL -DevMemoryAlloc (BM_CONTEXT *pBMContext, - BM_MAPPING *pMapping, - IMG_SIZE_T *pActualSize, - IMG_UINT32 uFlags, - IMG_UINT32 dev_vaddr_alignment, - IMG_DEV_VIRTADDR *pDevVAddr); -static IMG_VOID -DevMemoryFree (BM_MAPPING *pMapping); - -static IMG_BOOL -AllocMemory (BM_CONTEXT *pBMContext, - BM_HEAP *psBMHeap, - IMG_DEV_VIRTADDR *psDevVAddr, - IMG_SIZE_T uSize, - IMG_UINT32 uFlags, - IMG_UINT32 uDevVAddrAlignment, - BM_BUF *pBuf) -{ - BM_MAPPING *pMapping; - IMG_UINTPTR_T uOffset; - RA_ARENA *pArena = IMG_NULL; - - PVR_DPF ((PVR_DBG_MESSAGE, - "AllocMemory (uSize=0x%x, uFlags=0x%x, align=0x%x)", - uSize, uFlags, uDevVAddrAlignment)); - - - - - if(uFlags & PVRSRV_MEM_RAM_BACKED_ALLOCATION) - { - if(uFlags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) - { - - PVR_DPF ((PVR_DBG_ERROR, "AllocMemory: combination of DevVAddr management and RAM backing mode unsupported")); - return IMG_FALSE; - } - - - - - if(psBMHeap->ui32Attribs - & (PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG - |PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG)) - { - - pArena = psBMHeap->pImportArena; - PVR_ASSERT(psBMHeap->sDevArena.psDeviceMemoryHeapInfo->ui32Attribs & PVRSRV_MEM_RAM_BACKED_ALLOCATION); - } - else - { - PVR_DPF ((PVR_DBG_ERROR, "AllocMemory: backing store type doesn't match heap")); - return IMG_FALSE; - } - - - if (!RA_Alloc(pArena, - uSize, - IMG_NULL, - (IMG_VOID*) &pMapping, - uFlags, - uDevVAddrAlignment, - 0, - (IMG_UINTPTR_T *)&(pBuf->DevVAddr.uiAddr))) - { - PVR_DPF((PVR_DBG_ERROR, "AllocMemory: RA_Alloc(0x%x) FAILED", uSize)); - return IMG_FALSE; - } - - uOffset = pBuf->DevVAddr.uiAddr - pMapping->DevVAddr.uiAddr; - if(pMapping->CpuVAddr) - { - pBuf->CpuVAddr = (IMG_VOID*) ((IMG_UINTPTR_T)pMapping->CpuVAddr + uOffset); - } - else - { - pBuf->CpuVAddr = IMG_NULL; - } - - if(uSize == pMapping->uSize) - { - pBuf->hOSMemHandle = pMapping->hOSMemHandle; - } - else - { - if(OSGetSubMemHandle(pMapping->hOSMemHandle, - uOffset, - uSize, - psBMHeap->ui32Attribs, - &pBuf->hOSMemHandle)!=PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "AllocMemory: OSGetSubMemHandle FAILED")); - return IMG_FALSE; - } - } - - - pBuf->CpuPAddr.uiAddr = pMapping->CpuPAddr.uiAddr + uOffset; - - if(uFlags & PVRSRV_MEM_ZERO) - { - if(!ZeroBuf(pBuf, pMapping, uSize, psBMHeap->ui32Attribs | uFlags)) - { - return IMG_FALSE; - } - } - } - else - { - if(uFlags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) - { - - PVR_ASSERT(psDevVAddr != IMG_NULL); - - if (psDevVAddr == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "AllocMemory: invalid parameter - psDevVAddr")); - return IMG_FALSE; - } - - - pBMContext->psDeviceNode->pfnMMUAlloc (psBMHeap->pMMUHeap, - uSize, - IMG_NULL, - PVRSRV_MEM_USER_SUPPLIED_DEVVADDR, - uDevVAddrAlignment, - psDevVAddr); - - - pBuf->DevVAddr = *psDevVAddr; - } - else - { - - - - pBMContext->psDeviceNode->pfnMMUAlloc (psBMHeap->pMMUHeap, - uSize, - IMG_NULL, - 0, - uDevVAddrAlignment, - &pBuf->DevVAddr); - } - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (struct _BM_MAPPING_), - (IMG_PVOID *)&pMapping, IMG_NULL, - "Buffer Manager Mapping") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "AllocMemory: OSAllocMem(0x%x) FAILED", sizeof(*pMapping))); - return IMG_FALSE; - } - - - pBuf->CpuVAddr = IMG_NULL; - pBuf->hOSMemHandle = 0; - pBuf->CpuPAddr.uiAddr = 0; - - - pMapping->CpuVAddr = IMG_NULL; - pMapping->CpuPAddr.uiAddr = 0; - pMapping->DevVAddr = pBuf->DevVAddr; - pMapping->psSysAddr = IMG_NULL; - pMapping->uSize = uSize; - pMapping->hOSMemHandle = 0; - } - - - pMapping->pArena = pArena; - - - pMapping->pBMHeap = psBMHeap; - pBuf->pMapping = pMapping; - - - PVR_DPF ((PVR_DBG_MESSAGE, - "AllocMemory: pMapping=%08x: DevV=%08X CpuV=%08x CpuP=%08X uSize=0x%x", - (IMG_UINTPTR_T)pMapping, - pMapping->DevVAddr.uiAddr, - (IMG_UINTPTR_T)pMapping->CpuVAddr, - pMapping->CpuPAddr.uiAddr, - pMapping->uSize)); - - PVR_DPF ((PVR_DBG_MESSAGE, - "AllocMemory: pBuf=%08x: DevV=%08X CpuV=%08x CpuP=%08X uSize=0x%x", - (IMG_UINTPTR_T)pBuf, - pBuf->DevVAddr.uiAddr, - (IMG_UINTPTR_T)pBuf->CpuVAddr, - pBuf->CpuPAddr.uiAddr, - uSize)); - - - PVR_ASSERT(((pBuf->DevVAddr.uiAddr) & (uDevVAddrAlignment - 1)) == 0); - - return IMG_TRUE; -} - - -static IMG_BOOL -WrapMemory (BM_HEAP *psBMHeap, - IMG_SIZE_T uSize, - IMG_SIZE_T ui32BaseOffset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psAddr, - IMG_VOID *pvCPUVAddr, - IMG_UINT32 uFlags, - BM_BUF *pBuf) -{ - IMG_DEV_VIRTADDR DevVAddr = {0}; - BM_MAPPING *pMapping; - IMG_BOOL bResult; - IMG_SIZE_T const ui32PageSize = HOST_PAGESIZE(); - - PVR_DPF ((PVR_DBG_MESSAGE, - "WrapMemory(psBMHeap=%08X, size=0x%x, offset=0x%x, bPhysContig=0x%x, pvCPUVAddr = 0x%08x, flags=0x%x)", - (IMG_UINTPTR_T)psBMHeap, uSize, ui32BaseOffset, bPhysContig, (IMG_UINTPTR_T)pvCPUVAddr, uFlags)); - - PVR_ASSERT((psAddr->uiAddr & (ui32PageSize - 1)) == 0); - - PVR_ASSERT(((IMG_UINTPTR_T)pvCPUVAddr & (ui32PageSize - 1)) == 0); - - uSize += ui32BaseOffset; - uSize = HOST_PAGEALIGN (uSize); - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*pMapping), - (IMG_PVOID *)&pMapping, IMG_NULL, - "Mocked-up mapping") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSAllocMem(0x%x) FAILED",sizeof(*pMapping))); - return IMG_FALSE; - } - - OSMemSet(pMapping, 0, sizeof (*pMapping)); - - pMapping->uSize = uSize; - pMapping->pBMHeap = psBMHeap; - - if(pvCPUVAddr) - { - pMapping->CpuVAddr = pvCPUVAddr; - - if (bPhysContig) - { - pMapping->eCpuMemoryOrigin = hm_wrapped_virtaddr; - pMapping->CpuPAddr = SysSysPAddrToCpuPAddr(psAddr[0]); - - if(OSRegisterMem(pMapping->CpuPAddr, - pMapping->CpuVAddr, - pMapping->uSize, - uFlags, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSRegisterMem Phys=0x%08X, Size=%d) failed", - pMapping->CpuPAddr.uiAddr, pMapping->uSize)); - goto fail_cleanup; - } - } - else - { - pMapping->eCpuMemoryOrigin = hm_wrapped_scatter_virtaddr; - pMapping->psSysAddr = psAddr; - - if(OSRegisterDiscontigMem(pMapping->psSysAddr, - pMapping->CpuVAddr, - pMapping->uSize, - uFlags, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSRegisterDiscontigMem Size=%d) failed", - pMapping->uSize)); - goto fail_cleanup; - } - } - } - else - { - if (bPhysContig) - { - pMapping->eCpuMemoryOrigin = hm_wrapped; - pMapping->CpuPAddr = SysSysPAddrToCpuPAddr(psAddr[0]); - - if(OSReservePhys(pMapping->CpuPAddr, - pMapping->uSize, - uFlags, - &pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSReservePhys Phys=0x%08X, Size=%d) failed", - pMapping->CpuPAddr.uiAddr, pMapping->uSize)); - goto fail_cleanup; - } - } - else - { - pMapping->eCpuMemoryOrigin = hm_wrapped_scatter; - pMapping->psSysAddr = psAddr; - - if(OSReserveDiscontigPhys(pMapping->psSysAddr, - pMapping->uSize, - uFlags, - &pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSReserveDiscontigPhys Size=%d) failed", - pMapping->uSize)); - goto fail_cleanup; - } - } - } - - - bResult = DevMemoryAlloc(psBMHeap->pBMContext, - pMapping, - IMG_NULL, - uFlags | PVRSRV_MEM_READ | PVRSRV_MEM_WRITE, - IMG_CAST_TO_DEVVADDR_UINT(ui32PageSize), - &DevVAddr); - if (!bResult) - { - PVR_DPF((PVR_DBG_ERROR, - "WrapMemory: DevMemoryAlloc(0x%x) failed", - pMapping->uSize)); - goto fail_cleanup; - } - - - pBuf->CpuPAddr.uiAddr = pMapping->CpuPAddr.uiAddr + ui32BaseOffset; - if(!ui32BaseOffset) - { - pBuf->hOSMemHandle = pMapping->hOSMemHandle; - } - else - { - if(OSGetSubMemHandle(pMapping->hOSMemHandle, - ui32BaseOffset, - (pMapping->uSize-ui32BaseOffset), - uFlags, - &pBuf->hOSMemHandle)!=PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WrapMemory: OSGetSubMemHandle failed")); - goto fail_cleanup; - } - } - if(pMapping->CpuVAddr) - { - pBuf->CpuVAddr = (IMG_VOID*) ((IMG_UINTPTR_T)pMapping->CpuVAddr + ui32BaseOffset); - } - pBuf->DevVAddr.uiAddr = pMapping->DevVAddr.uiAddr + IMG_CAST_TO_DEVVADDR_UINT(ui32BaseOffset); - - if(uFlags & PVRSRV_MEM_ZERO) - { - if(!ZeroBuf(pBuf, pMapping, uSize, uFlags)) - { - return IMG_FALSE; - } - } - - PVR_DPF ((PVR_DBG_MESSAGE, "DevVaddr.uiAddr=%08X", DevVAddr.uiAddr)); - PVR_DPF ((PVR_DBG_MESSAGE, - "WrapMemory: DevV=%08X CpuP=%08X uSize=0x%x", - pMapping->DevVAddr.uiAddr, pMapping->CpuPAddr.uiAddr, pMapping->uSize)); - PVR_DPF ((PVR_DBG_MESSAGE, - "WrapMemory: DevV=%08X CpuP=%08X uSize=0x%x", - pBuf->DevVAddr.uiAddr, pBuf->CpuPAddr.uiAddr, uSize)); - - pBuf->pMapping = pMapping; - return IMG_TRUE; - -fail_cleanup: - if(ui32BaseOffset && pBuf->hOSMemHandle) - { - OSReleaseSubMemHandle(pBuf->hOSMemHandle, uFlags); - } - - if(pMapping && (pMapping->CpuVAddr || pMapping->hOSMemHandle)) - { - switch(pMapping->eCpuMemoryOrigin) - { - case hm_wrapped: - OSUnReservePhys(pMapping->CpuVAddr, pMapping->uSize, uFlags, pMapping->hOSMemHandle); - break; - case hm_wrapped_virtaddr: - OSUnRegisterMem(pMapping->CpuVAddr, pMapping->uSize, uFlags, pMapping->hOSMemHandle); - break; - case hm_wrapped_scatter: - OSUnReserveDiscontigPhys(pMapping->CpuVAddr, pMapping->uSize, uFlags, pMapping->hOSMemHandle); - break; - case hm_wrapped_scatter_virtaddr: - OSUnRegisterDiscontigMem(pMapping->CpuVAddr, pMapping->uSize, uFlags, pMapping->hOSMemHandle); - break; - default: - break; - } - - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_MAPPING), pMapping, IMG_NULL); - - - return IMG_FALSE; -} - - -static IMG_BOOL -ZeroBuf(BM_BUF *pBuf, BM_MAPPING *pMapping, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags) -{ - IMG_VOID *pvCpuVAddr; - - if(pBuf->CpuVAddr) - { - OSMemSet(pBuf->CpuVAddr, 0, ui32Bytes); - } - else if(pMapping->eCpuMemoryOrigin == hm_contiguous - || pMapping->eCpuMemoryOrigin == hm_wrapped) - { - pvCpuVAddr = OSMapPhysToLin(pBuf->CpuPAddr, - ui32Bytes, - PVRSRV_HAP_KERNEL_ONLY - | (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK), - IMG_NULL); - if(!pvCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "ZeroBuf: OSMapPhysToLin for contiguous buffer failed")); - return IMG_FALSE; - } - OSMemSet(pvCpuVAddr, 0, ui32Bytes); - OSUnMapPhysToLin(pvCpuVAddr, - ui32Bytes, - PVRSRV_HAP_KERNEL_ONLY - | (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK), - IMG_NULL); - } - else - { - IMG_SIZE_T ui32BytesRemaining = ui32Bytes; - IMG_SIZE_T ui32CurrentOffset = 0; - IMG_CPU_PHYADDR CpuPAddr; - - - PVR_ASSERT(pBuf->hOSMemHandle); - - while(ui32BytesRemaining > 0) - { - IMG_SIZE_T ui32BlockBytes = MIN(ui32BytesRemaining, HOST_PAGESIZE()); - CpuPAddr = OSMemHandleToCpuPAddr(pBuf->hOSMemHandle, ui32CurrentOffset); - - if(CpuPAddr.uiAddr & (HOST_PAGESIZE() -1)) - { - ui32BlockBytes = - MIN(ui32BytesRemaining, (IMG_UINT32)(HOST_PAGEALIGN(CpuPAddr.uiAddr) - CpuPAddr.uiAddr)); - } - - pvCpuVAddr = OSMapPhysToLin(CpuPAddr, - ui32BlockBytes, - PVRSRV_HAP_KERNEL_ONLY - | (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK), - IMG_NULL); - if(!pvCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "ZeroBuf: OSMapPhysToLin while zeroing non-contiguous memory FAILED")); - return IMG_FALSE; - } - OSMemSet(pvCpuVAddr, 0, ui32BlockBytes); - OSUnMapPhysToLin(pvCpuVAddr, - ui32BlockBytes, - PVRSRV_HAP_KERNEL_ONLY - | (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK), - IMG_NULL); - - ui32BytesRemaining -= ui32BlockBytes; - ui32CurrentOffset += ui32BlockBytes; - } - } - - return IMG_TRUE; -} - -static IMG_VOID -FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) -{ - BM_MAPPING *pMapping; - /* PVRSRV_DEVICE_NODE *psDeviceNode; */ - - PVR_DPF ((PVR_DBG_MESSAGE, - "FreeBuf: pBuf=0x%x: DevVAddr=%08X CpuVAddr=0x%x CpuPAddr=%08X", - (IMG_UINTPTR_T)pBuf, pBuf->DevVAddr.uiAddr, - (IMG_UINTPTR_T)pBuf->CpuVAddr, pBuf->CpuPAddr.uiAddr)); - - - pMapping = pBuf->pMapping; - - /* XXX even below cache invalidate op is noop on SGX545, be better - * to check why under high GPU/mem load, below object reference could - * go madness. - */ -#if 0 - psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; - if (psDeviceNode->pfnCacheInvalidate) - { - psDeviceNode->pfnCacheInvalidate(psDeviceNode); - } -#endif - - if(ui32Flags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) - { - - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - - if(ui32Flags & PVRSRV_MEM_RAM_BACKED_ALLOCATION) - { - - PVR_DPF ((PVR_DBG_ERROR, "FreeBuf: combination of DevVAddr management and RAM backing mode unsupported")); - } - else - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_MAPPING), pMapping, IMG_NULL); - pBuf->pMapping = IMG_NULL; - } - } - } - else - { - - if(pBuf->hOSMemHandle != pMapping->hOSMemHandle) - { - - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - - OSReleaseSubMemHandle(pBuf->hOSMemHandle, ui32Flags); - } - } - if(ui32Flags & PVRSRV_MEM_RAM_BACKED_ALLOCATION) - { - - - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - - - - PVR_ASSERT(pBuf->ui32ExportCount == 0) - RA_Free (pBuf->pMapping->pArena, pBuf->DevVAddr.uiAddr, IMG_FALSE); - } - } - else - { - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - switch (pMapping->eCpuMemoryOrigin) - { - case hm_wrapped: - OSUnReservePhys(pMapping->CpuVAddr, pMapping->uSize, ui32Flags, pMapping->hOSMemHandle); - break; - case hm_wrapped_virtaddr: - OSUnRegisterMem(pMapping->CpuVAddr, pMapping->uSize, ui32Flags, pMapping->hOSMemHandle); - break; - case hm_wrapped_scatter: - OSUnReserveDiscontigPhys(pMapping->CpuVAddr, pMapping->uSize, ui32Flags, pMapping->hOSMemHandle); - break; - case hm_wrapped_scatter_virtaddr: - OSUnRegisterDiscontigMem(pMapping->CpuVAddr, pMapping->uSize, ui32Flags, pMapping->hOSMemHandle); - break; - default: - break; - } - } - if (bFromAllocator) - DevMemoryFree (pMapping); - - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_MAPPING), pMapping, IMG_NULL); - pBuf->pMapping = IMG_NULL; - } - } - } - - - if ((pBuf->ui32ExportCount == 0) && (pBuf->ui32RefCount == 0)) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_BUF), pBuf, IMG_NULL); - - } -} - -static PVRSRV_ERROR BM_DestroyContext_AnyCb(BM_HEAP *psBMHeap) -{ - if(psBMHeap->ui32Attribs - & (PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG - |PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG)) - { - if (psBMHeap->pImportArena) - { - IMG_BOOL bTestDelete = RA_TestDelete(psBMHeap->pImportArena); - if (!bTestDelete) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext_AnyCb: RA_TestDelete failed")); - return PVRSRV_ERROR_UNABLE_TO_DESTROY_BM_HEAP; - } - } - } - return PVRSRV_OK; -} - - -PVRSRV_ERROR -BM_DestroyContext(IMG_HANDLE hBMContext, - IMG_BOOL *pbDestroyed) -{ - PVRSRV_ERROR eError; - BM_CONTEXT *pBMContext = (BM_CONTEXT*)hBMContext; - - PVR_DPF ((PVR_DBG_MESSAGE, "BM_DestroyContext")); - - if (pbDestroyed != IMG_NULL) - { - *pbDestroyed = IMG_FALSE; - } - - - - if (pBMContext == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: Invalid handle")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - pBMContext->ui32RefCount--; - - if (pBMContext->ui32RefCount > 0) - { - - return PVRSRV_OK; - } - - - - - eError = List_BM_HEAP_PVRSRV_ERROR_Any(pBMContext->psBMHeap, &BM_DestroyContext_AnyCb); - if(eError != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: List_BM_HEAP_PVRSRV_ERROR_Any failed")); -#if 0 - - - - - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: Cleaning up with ResManFreeSpecial")); - if(ResManFreeSpecial() != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: ResManFreeSpecial failed %d",eError)); - } - -#endif - return eError; - } - else - { - - eError = ResManFreeResByPtr(pBMContext->hResItem, CLEANUP_WITH_POLL); - if(eError != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: ResManFreeResByPtr failed %d",eError)); - return eError; - } - - - if (pbDestroyed != IMG_NULL) - { - *pbDestroyed = IMG_TRUE; - } - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR BM_DestroyContextCallBack_AnyVaCb(BM_HEAP *psBMHeap, va_list va) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - psDeviceNode = va_arg(va, PVRSRV_DEVICE_NODE*); - - - if(psBMHeap->ui32Attribs - & (PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG - |PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG)) - { - if (psBMHeap->pImportArena) - { - RA_Delete (psBMHeap->pImportArena); - } - } - else - { - PVR_DPF((PVR_DBG_ERROR, "BM_DestroyContext: backing store type unsupported")); - return PVRSRV_ERROR_UNSUPPORTED_BACKING_STORE; - } - - - psDeviceNode->pfnMMUDelete(psBMHeap->pMMUHeap); - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_HEAP), psBMHeap, IMG_NULL); - - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - BM_CONTEXT *pBMContext = pvParam; - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_ERROR eError; - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - - - psDeviceNode = pBMContext->psDeviceNode; - - - - eError = List_BM_HEAP_PVRSRV_ERROR_Any_va(pBMContext->psBMHeap, - &BM_DestroyContextCallBack_AnyVaCb, - psDeviceNode); - if (eError != PVRSRV_OK) - { - return eError; - } - - - if (pBMContext->psMMUContext) - { - psDeviceNode->pfnMMUFinalise(pBMContext->psMMUContext); - } - - - - if (pBMContext->pBufferHash) - { - HASH_Delete(pBMContext->pBufferHash); - } - - if (pBMContext == psDeviceNode->sDevMemoryInfo.pBMKernelContext) - { - - psDeviceNode->sDevMemoryInfo.pBMKernelContext = IMG_NULL; - } - else - { - if (pBMContext->ppsThis != IMG_NULL) - { - - List_BM_CONTEXT_Remove(pBMContext); - } - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_CONTEXT), pBMContext, IMG_NULL); - - - return PVRSRV_OK; -} - - -static IMG_HANDLE BM_CreateContext_IncRefCount_AnyVaCb(BM_CONTEXT *pBMContext, va_list va) -{ - PRESMAN_CONTEXT hResManContext; - hResManContext = va_arg(va, PRESMAN_CONTEXT); - if(ResManFindResourceByPtr(hResManContext, pBMContext->hResItem) == PVRSRV_OK) - { - - pBMContext->ui32RefCount++; - return pBMContext; - } - return IMG_NULL; -} - -static IMG_VOID BM_CreateContext_InsertHeap_ForEachVaCb(BM_HEAP *psBMHeap, va_list va) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - BM_CONTEXT *pBMContext; - psDeviceNode = va_arg(va, PVRSRV_DEVICE_NODE*); - pBMContext = va_arg(va, BM_CONTEXT*); - switch(psBMHeap->sDevArena.DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_SHARED: - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED: - { - - psDeviceNode->pfnMMUInsertHeap(pBMContext->psMMUContext, psBMHeap->pMMUHeap); - break; - } - } -} - -IMG_HANDLE -BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_PHYADDR *psPDDevPAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_BOOL *pbCreated) -{ - BM_CONTEXT *pBMContext; - DEVICE_MEMORY_INFO *psDevMemoryInfo; - IMG_BOOL bKernelContext; - PRESMAN_CONTEXT hResManContext; - - PVR_DPF((PVR_DBG_MESSAGE, "BM_CreateContext")); - - if (psPerProc == IMG_NULL) - { - bKernelContext = IMG_TRUE; - hResManContext = psDeviceNode->hResManContext; - } - else - { - bKernelContext = IMG_FALSE; - hResManContext = psPerProc->hResManContext; - } - - if (pbCreated != IMG_NULL) - { - *pbCreated = IMG_FALSE; - } - - - psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; - - if (bKernelContext == IMG_FALSE) - { - IMG_HANDLE res = (IMG_HANDLE) List_BM_CONTEXT_Any_va(psDevMemoryInfo->pBMContext, - &BM_CreateContext_IncRefCount_AnyVaCb, - hResManContext); - if (res) - { - return res; - } - } - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (struct _BM_CONTEXT_), - (IMG_PVOID *)&pBMContext, IMG_NULL, - "Buffer Manager Context") != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_CreateContext: Alloc failed")); - return IMG_NULL; - } - OSMemSet(pBMContext, 0, sizeof (BM_CONTEXT)); - - - pBMContext->psDeviceNode = psDeviceNode; - - - - pBMContext->pBufferHash = HASH_Create(32); - if (pBMContext->pBufferHash==IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_CreateContext: HASH_Create failed")); - goto cleanup; - } - - if((IMG_NULL == psDeviceNode->pfnMMUInitialise) || (psDeviceNode->pfnMMUInitialise(psDeviceNode, - &pBMContext->psMMUContext, - psPDDevPAddr) != PVRSRV_OK)) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateContext: MMUInitialise failed")); - goto cleanup; - } - - if(bKernelContext) - { - - PVR_ASSERT(psDevMemoryInfo->pBMKernelContext == IMG_NULL); - psDevMemoryInfo->pBMKernelContext = pBMContext; - } - else - { - - - - - - PVR_ASSERT(psDevMemoryInfo->pBMKernelContext); - - if (psDevMemoryInfo->pBMKernelContext == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateContext: psDevMemoryInfo->pBMKernelContext invalid")); - goto cleanup; - } - - PVR_ASSERT(psDevMemoryInfo->pBMKernelContext->psBMHeap); - - - - - - pBMContext->psBMSharedHeap = psDevMemoryInfo->pBMKernelContext->psBMHeap; - - - - - List_BM_HEAP_ForEach_va(pBMContext->psBMSharedHeap, - &BM_CreateContext_InsertHeap_ForEachVaCb, - psDeviceNode, - pBMContext); - - - List_BM_CONTEXT_Insert(&psDevMemoryInfo->pBMContext, pBMContext); - } - - - pBMContext->ui32RefCount++; - - - pBMContext->hResItem = ResManRegisterRes(hResManContext, - RESMAN_TYPE_DEVICEMEM_CONTEXT, - pBMContext, - 0, - &BM_DestroyContextCallBack); - if (pBMContext->hResItem == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_CreateContext: ResManRegisterRes failed")); - goto cleanup; - } - - if (pbCreated != IMG_NULL) - { - *pbCreated = IMG_TRUE; - } - return (IMG_HANDLE)pBMContext; - -cleanup: - (IMG_VOID)BM_DestroyContextCallBack(pBMContext, 0, CLEANUP_WITH_POLL); - - return IMG_NULL; -} - - -static IMG_VOID *BM_CreateHeap_AnyVaCb(BM_HEAP *psBMHeap, va_list va) -{ - DEVICE_MEMORY_HEAP_INFO *psDevMemHeapInfo; - psDevMemHeapInfo = va_arg(va, DEVICE_MEMORY_HEAP_INFO*); - if (psBMHeap->sDevArena.ui32HeapID == psDevMemHeapInfo->ui32HeapID) - { - - return psBMHeap; - } - else - { - return IMG_NULL; - } -} - -IMG_HANDLE -BM_CreateHeap (IMG_HANDLE hBMContext, - DEVICE_MEMORY_HEAP_INFO *psDevMemHeapInfo) -{ - BM_CONTEXT *pBMContext = (BM_CONTEXT*)hBMContext; - PVRSRV_DEVICE_NODE *psDeviceNode; - BM_HEAP *psBMHeap; - - PVR_DPF((PVR_DBG_MESSAGE, "BM_CreateHeap")); - - if(!pBMContext) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateHeap: BM_CONTEXT null")); - return IMG_NULL; - } - - psDeviceNode = pBMContext->psDeviceNode; - - - - PVR_ASSERT((psDevMemHeapInfo->ui32HeapSize & (psDevMemHeapInfo->ui32DataPageSize - 1)) == 0); - PVR_ASSERT(psDevMemHeapInfo->ui32HeapSize > 0); - - - - - - - if(pBMContext->ui32RefCount > 0) - { - psBMHeap = (BM_HEAP*)List_BM_HEAP_Any_va(pBMContext->psBMHeap, - &BM_CreateHeap_AnyVaCb, - psDevMemHeapInfo); - - if (psBMHeap) - { - return psBMHeap; - } - } - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (BM_HEAP), - (IMG_PVOID *)&psBMHeap, IMG_NULL, - "Buffer Manager Heap") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateHeap: Alloc failed")); - return IMG_NULL; - } - - OSMemSet (psBMHeap, 0, sizeof (BM_HEAP)); - - psBMHeap->sDevArena.ui32HeapID = psDevMemHeapInfo->ui32HeapID; - psBMHeap->sDevArena.pszName = psDevMemHeapInfo->pszName; - psBMHeap->sDevArena.BaseDevVAddr = psDevMemHeapInfo->sDevVAddrBase; - psBMHeap->sDevArena.ui32Size = psDevMemHeapInfo->ui32HeapSize; - psBMHeap->sDevArena.DevMemHeapType = psDevMemHeapInfo->DevMemHeapType; - psBMHeap->sDevArena.ui32DataPageSize = psDevMemHeapInfo->ui32DataPageSize; - psBMHeap->sDevArena.psDeviceMemoryHeapInfo = psDevMemHeapInfo; - psBMHeap->ui32Attribs = psDevMemHeapInfo->ui32Attribs; - - - psBMHeap->pBMContext = pBMContext; - - psBMHeap->pMMUHeap = psDeviceNode->pfnMMUCreate (pBMContext->psMMUContext, - &psBMHeap->sDevArena, - &psBMHeap->pVMArena, - &psBMHeap->psMMUAttrib); - if (!psBMHeap->pMMUHeap) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateHeap: MMUCreate failed")); - goto ErrorExit; - } - - - psBMHeap->pImportArena = RA_Create (psDevMemHeapInfo->pszBSName, - 0, 0, IMG_NULL, - MAX(HOST_PAGESIZE(), psBMHeap->sDevArena.ui32DataPageSize), - &BM_ImportMemory, - &BM_FreeMemory, - IMG_NULL, - psBMHeap); - if(psBMHeap->pImportArena == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateHeap: RA_Create failed")); - goto ErrorExit; - } - - if(psBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG) - { - - - - - psBMHeap->pLocalDevMemArena = psDevMemHeapInfo->psLocalDevMemArena; - if(psBMHeap->pLocalDevMemArena == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_CreateHeap: LocalDevMemArena null")); - goto ErrorExit; - } - } - - - List_BM_HEAP_Insert(&pBMContext->psBMHeap, psBMHeap); - - return (IMG_HANDLE)psBMHeap; - - -ErrorExit: - - - if (psBMHeap->pMMUHeap != IMG_NULL) - { - psDeviceNode->pfnMMUDelete (psBMHeap->pMMUHeap); - - } - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_HEAP), psBMHeap, IMG_NULL); - - - return IMG_NULL; -} - -IMG_VOID -BM_DestroyHeap (IMG_HANDLE hDevMemHeap) -{ - BM_HEAP* psBMHeap = (BM_HEAP*)hDevMemHeap; - PVRSRV_DEVICE_NODE *psDeviceNode = psBMHeap->pBMContext->psDeviceNode; - - PVR_DPF((PVR_DBG_MESSAGE, "BM_DestroyHeap")); - - if(psBMHeap) - { - - if(psBMHeap->ui32Attribs - & (PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG - |PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG)) - { - if (psBMHeap->pImportArena) - { - RA_Delete (psBMHeap->pImportArena); - } - } - else - { - PVR_DPF((PVR_DBG_ERROR, "BM_DestroyHeap: backing store type unsupported")); - return; - } - - - psDeviceNode->pfnMMUDelete (psBMHeap->pMMUHeap); - - - List_BM_HEAP_Remove(psBMHeap); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_HEAP), psBMHeap, IMG_NULL); - - } - else - { - PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyHeap: invalid heap handle")); - } -} - - -IMG_BOOL -BM_Reinitialise (PVRSRV_DEVICE_NODE *psDeviceNode) -{ - - PVR_DPF((PVR_DBG_MESSAGE, "BM_Reinitialise")); - PVR_UNREFERENCED_PARAMETER(psDeviceNode); - - - return IMG_TRUE; -} - -IMG_BOOL -BM_Alloc ( IMG_HANDLE hDevMemHeap, - IMG_DEV_VIRTADDR *psDevVAddr, - IMG_SIZE_T uSize, - IMG_UINT32 *pui32Flags, - IMG_UINT32 uDevVAddrAlignment, - BM_HANDLE *phBuf) -{ - BM_BUF *pBuf; - BM_CONTEXT *pBMContext; - BM_HEAP *psBMHeap; - SYS_DATA *psSysData; - IMG_UINT32 uFlags; - - if (pui32Flags == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Alloc: invalid parameter")); - PVR_DBG_BREAK; - return IMG_FALSE; - } - - uFlags = *pui32Flags; - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_Alloc (uSize=0x%x, uFlags=0x%x, uDevVAddrAlignment=0x%x)", - uSize, uFlags, uDevVAddrAlignment)); - - SysAcquireData(&psSysData); - - psBMHeap = (BM_HEAP*)hDevMemHeap; - pBMContext = psBMHeap->pBMContext; - - if(uDevVAddrAlignment == 0) - { - uDevVAddrAlignment = 1; - } - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (BM_BUF), - (IMG_PVOID *)&pBuf, IMG_NULL, - "Buffer Manager buffer") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Alloc: BM_Buf alloc FAILED")); - return IMG_FALSE; - } - OSMemSet(pBuf, 0, sizeof (BM_BUF)); - - - if (AllocMemory(pBMContext, - psBMHeap, - psDevVAddr, - uSize, - uFlags, - uDevVAddrAlignment, - pBuf) != IMG_TRUE) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof (BM_BUF), pBuf, IMG_NULL); - - PVR_DPF((PVR_DBG_ERROR, "BM_Alloc: AllocMemory FAILED")); - return IMG_FALSE; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_Alloc (uSize=0x%x, uFlags=0x%x)", - uSize, uFlags)); - - - pBuf->ui32RefCount = 1; - *phBuf = (BM_HANDLE)pBuf; - *pui32Flags = uFlags | psBMHeap->ui32Attribs; - - - if(uFlags & PVRSRV_HAP_CACHETYPE_MASK) - { - *pui32Flags &= ~PVRSRV_HAP_CACHETYPE_MASK; - *pui32Flags |= (uFlags & PVRSRV_HAP_CACHETYPE_MASK); - } - - return IMG_TRUE; -} - - - -#if defined(PVR_LMA) -static IMG_BOOL -ValidSysPAddrArrayForDev(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_SYS_PHYADDR *psSysPAddr, IMG_UINT32 ui32PageCount, IMG_SIZE_T ui32PageSize) -{ - IMG_UINT32 i; - - for (i = 0; i < ui32PageCount; i++) - { - IMG_SYS_PHYADDR sStartSysPAddr = psSysPAddr[i]; - IMG_SYS_PHYADDR sEndSysPAddr; - - if (!SysVerifySysPAddrToDevPAddr(psDeviceNode->sDevId.eDeviceType, sStartSysPAddr)) - { - return IMG_FALSE; - } - - sEndSysPAddr.uiAddr = sStartSysPAddr.uiAddr + ui32PageSize; - - if (!SysVerifySysPAddrToDevPAddr(psDeviceNode->sDevId.eDeviceType, sEndSysPAddr)) - { - return IMG_FALSE; - } - } - - return IMG_TRUE; -} - -static IMG_BOOL -ValidSysPAddrRangeForDev(PVRSRV_DEVICE_NODE *psDeviceNode, IMG_SYS_PHYADDR sStartSysPAddr, IMG_SIZE_T ui32Range) -{ - IMG_SYS_PHYADDR sEndSysPAddr; - - if (!SysVerifySysPAddrToDevPAddr(psDeviceNode->sDevId.eDeviceType, sStartSysPAddr)) - { - return IMG_FALSE; - } - - sEndSysPAddr.uiAddr = sStartSysPAddr.uiAddr + ui32Range; - - if (!SysVerifySysPAddrToDevPAddr(psDeviceNode->sDevId.eDeviceType, sEndSysPAddr)) - { - return IMG_FALSE; - } - - return IMG_TRUE; -} - -#define WRAP_MAPPING_SIZE(ui32ByteSize, ui32PageOffset) HOST_PAGEALIGN((ui32ByteSize) + (ui32PageOffset)) - -#define WRAP_PAGE_COUNT(ui32ByteSize, ui32PageOffset, ui32HostPageSize) (WRAP_MAPPING_SIZE(ui32ByteSize, ui32PageOffset) / (ui32HostPageSize)) - -#endif - - -IMG_BOOL -BM_Wrap ( IMG_HANDLE hDevMemHeap, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Offset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psSysAddr, - IMG_VOID *pvCPUVAddr, - IMG_UINT32 *pui32Flags, - BM_HANDLE *phBuf) -{ - BM_BUF *pBuf; - BM_CONTEXT *psBMContext; - BM_HEAP *psBMHeap; - SYS_DATA *psSysData; - IMG_SYS_PHYADDR sHashAddress; - IMG_UINT32 uFlags; - - psBMHeap = (BM_HEAP*)hDevMemHeap; - psBMContext = psBMHeap->pBMContext; - - uFlags = psBMHeap->ui32Attribs & (PVRSRV_HAP_CACHETYPE_MASK | PVRSRV_HAP_MAPTYPE_MASK); - - if ((pui32Flags != IMG_NULL) && ((*pui32Flags & PVRSRV_HAP_CACHETYPE_MASK) != 0)) - { - uFlags &= ~PVRSRV_HAP_CACHETYPE_MASK; - uFlags |= *pui32Flags & PVRSRV_HAP_CACHETYPE_MASK; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_Wrap (uSize=0x%x, uOffset=0x%x, bPhysContig=0x%x, pvCPUVAddr=0x%x, uFlags=0x%x)", - ui32Size, ui32Offset, bPhysContig, (IMG_UINTPTR_T)pvCPUVAddr, uFlags)); - - SysAcquireData(&psSysData); - -#if defined(PVR_LMA) - if (bPhysContig) - { - if (!ValidSysPAddrRangeForDev(psBMContext->psDeviceNode, *psSysAddr, WRAP_MAPPING_SIZE(ui32Size, ui32Offset))) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Wrap: System address range invalid for device")); - return IMG_FALSE; - } - } - else - { - IMG_SIZE_T ui32HostPageSize = HOST_PAGESIZE(); - - if (!ValidSysPAddrArrayForDev(psBMContext->psDeviceNode, psSysAddr, WRAP_PAGE_COUNT(ui32Size, ui32Offset, ui32HostPageSize), ui32HostPageSize)) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Wrap: Array of system addresses invalid for device")); - return IMG_FALSE; - } - } -#endif - - sHashAddress = psSysAddr[0]; - - - sHashAddress.uiAddr += ui32Offset; - - - pBuf = (BM_BUF *)HASH_Retrieve(psBMContext->pBufferHash, sHashAddress.uiAddr); - - if(pBuf) - { - IMG_SIZE_T ui32MappingSize = HOST_PAGEALIGN (ui32Size + ui32Offset); - - - if(pBuf->pMapping->uSize == ui32MappingSize && (pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped || - pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped_virtaddr)) - { - PVR_DPF((PVR_DBG_MESSAGE, - "BM_Wrap (Matched previous Wrap! uSize=0x%x, uOffset=0x%x, SysAddr=%08X)", - ui32Size, ui32Offset, sHashAddress.uiAddr)); - - pBuf->ui32RefCount++; - *phBuf = (BM_HANDLE)pBuf; - if(pui32Flags) - *pui32Flags = uFlags; - - return IMG_TRUE; - } - else - { - - HASH_Remove(psBMContext->pBufferHash, (IMG_UINTPTR_T)sHashAddress.uiAddr); - } - } - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (BM_BUF), - (IMG_PVOID *)&pBuf, IMG_NULL, - "Buffer Manager buffer") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Wrap: BM_Buf alloc FAILED")); - return IMG_FALSE; - } - OSMemSet(pBuf, 0, sizeof (BM_BUF)); - - - if (WrapMemory (psBMHeap, ui32Size, ui32Offset, bPhysContig, psSysAddr, pvCPUVAddr, uFlags, pBuf) != IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Wrap: WrapMemory FAILED")); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof (BM_BUF), pBuf, IMG_NULL); - - return IMG_FALSE; - } - - - if(pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped || pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped_virtaddr) - { - - PVR_ASSERT(SysSysPAddrToCpuPAddr(sHashAddress).uiAddr == pBuf->CpuPAddr.uiAddr); - - if (!HASH_Insert (psBMContext->pBufferHash, sHashAddress.uiAddr, (IMG_UINTPTR_T)pBuf)) - { - FreeBuf (pBuf, uFlags, IMG_TRUE); - PVR_DPF((PVR_DBG_ERROR, "BM_Wrap: HASH_Insert FAILED")); - return IMG_FALSE; - } - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_Wrap (uSize=0x%x, uFlags=0x%x, devVAddr=%08X)", - ui32Size, uFlags, pBuf->DevVAddr.uiAddr)); - - - pBuf->ui32RefCount = 1; - *phBuf = (BM_HANDLE)pBuf; - if(pui32Flags) - { - - *pui32Flags = (uFlags & ~PVRSRV_HAP_MAPTYPE_MASK) | PVRSRV_HAP_MULTI_PROCESS; - } - - return IMG_TRUE; -} - -IMG_VOID -BM_Export (BM_HANDLE hBuf) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - pBuf->ui32ExportCount++; -} - -IMG_VOID -BM_FreeExport(BM_HANDLE hBuf, - IMG_UINT32 ui32Flags) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - pBuf->ui32ExportCount--; - FreeBuf (pBuf, ui32Flags, IMG_FALSE); -} - -IMG_VOID -BM_Free (BM_HANDLE hBuf, - IMG_UINT32 ui32Flags) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - SYS_DATA *psSysData; - IMG_SYS_PHYADDR sHashAddr; - - PVR_DPF ((PVR_DBG_MESSAGE, "BM_Free (h=0x%x)", (IMG_UINTPTR_T)hBuf)); - PVR_ASSERT (pBuf!=IMG_NULL); - - if (pBuf == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_Free: invalid parameter")); - return; - } - - SysAcquireData(&psSysData); - - pBuf->ui32RefCount--; - - if(pBuf->ui32RefCount == 0) - { - if(pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped || pBuf->pMapping->eCpuMemoryOrigin == hm_wrapped_virtaddr) - { - sHashAddr = SysCpuPAddrToSysPAddr(pBuf->CpuPAddr); - - HASH_Remove (pBuf->pMapping->pBMHeap->pBMContext->pBufferHash, (IMG_UINTPTR_T)sHashAddr.uiAddr); - } - FreeBuf (pBuf, ui32Flags, IMG_TRUE); - } -} - - -IMG_CPU_VIRTADDR -BM_HandleToCpuVaddr (BM_HANDLE hBuf) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - PVR_ASSERT (pBuf != IMG_NULL); - if (pBuf == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_HandleToCpuVaddr: invalid parameter")); - return IMG_NULL; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_HandleToCpuVaddr(h=0x%x)=0x%x", - (IMG_UINTPTR_T)hBuf, (IMG_UINTPTR_T)pBuf->CpuVAddr)); - return pBuf->CpuVAddr; -} - - -IMG_DEV_VIRTADDR -BM_HandleToDevVaddr (BM_HANDLE hBuf) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - PVR_ASSERT (pBuf != IMG_NULL); - if (pBuf == IMG_NULL) - { - IMG_DEV_VIRTADDR DevVAddr = {0}; - PVR_DPF((PVR_DBG_ERROR, "BM_HandleToDevVaddr: invalid parameter")); - return DevVAddr; - } - - PVR_DPF ((PVR_DBG_MESSAGE, "BM_HandleToDevVaddr(h=0x%x)=%08X", (IMG_UINTPTR_T)hBuf, pBuf->DevVAddr.uiAddr)); - return pBuf->DevVAddr; -} - - -IMG_SYS_PHYADDR -BM_HandleToSysPaddr (BM_HANDLE hBuf) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - PVR_ASSERT (pBuf != IMG_NULL); - - if (pBuf == IMG_NULL) - { - IMG_SYS_PHYADDR PhysAddr = {0}; - PVR_DPF((PVR_DBG_ERROR, "BM_HandleToSysPaddr: invalid parameter")); - return PhysAddr; - } - - PVR_DPF ((PVR_DBG_MESSAGE, "BM_HandleToSysPaddr(h=0x%x)=%08X", (IMG_UINTPTR_T)hBuf, pBuf->CpuPAddr.uiAddr)); - return SysCpuPAddrToSysPAddr (pBuf->CpuPAddr); -} - -IMG_HANDLE -BM_HandleToOSMemHandle(BM_HANDLE hBuf) -{ - BM_BUF *pBuf = (BM_BUF *)hBuf; - - PVR_ASSERT (pBuf != IMG_NULL); - - if (pBuf == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_HandleToOSMemHandle: invalid parameter")); - return IMG_NULL; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_HandleToOSMemHandle(h=0x%x)=0x%x", - (IMG_UINTPTR_T)hBuf, (IMG_UINTPTR_T)pBuf->hOSMemHandle)); - return pBuf->hOSMemHandle; -} - -static IMG_BOOL -DevMemoryAlloc (BM_CONTEXT *pBMContext, - BM_MAPPING *pMapping, - IMG_SIZE_T *pActualSize, - IMG_UINT32 uFlags, - IMG_UINT32 dev_vaddr_alignment, - IMG_DEV_VIRTADDR *pDevVAddr) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; -#ifdef PDUMP - IMG_UINT32 ui32PDumpSize = (IMG_UINT32)pMapping->uSize; -#endif - - psDeviceNode = pBMContext->psDeviceNode; - - if(uFlags & PVRSRV_MEM_INTERLEAVED) - { - - pMapping->uSize *= 2; - } - -#ifdef PDUMP - if(uFlags & PVRSRV_MEM_DUMMY) - { - - ui32PDumpSize = pMapping->pBMHeap->sDevArena.ui32DataPageSize; - } -#endif - - - if (!psDeviceNode->pfnMMUAlloc (pMapping->pBMHeap->pMMUHeap, - pMapping->uSize, - pActualSize, - 0, - dev_vaddr_alignment, - &(pMapping->DevVAddr))) - { - PVR_DPF((PVR_DBG_ERROR, "DevMemoryAlloc ERROR MMU_Alloc")); - return IMG_FALSE; - } - -#ifdef SUPPORT_SGX_MMU_BYPASS - EnableHostAccess(pBMContext->psMMUContext); -#endif - -#if defined(PDUMP) - - PDUMPMALLOCPAGES(&psDeviceNode->sDevId, - pMapping->DevVAddr.uiAddr, - pMapping->CpuVAddr, - pMapping->hOSMemHandle, - ui32PDumpSize, - pMapping->pBMHeap->sDevArena.ui32DataPageSize, -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - psDeviceNode->pfnMMUIsHeapShared(pMapping->pBMHeap->pMMUHeap), -#else - IMG_FALSE, -#endif - (IMG_HANDLE)pMapping); -#endif - - switch (pMapping->eCpuMemoryOrigin) - { - case hm_wrapped: - case hm_wrapped_virtaddr: - case hm_contiguous: - { - psDeviceNode->pfnMMUMapPages ( pMapping->pBMHeap->pMMUHeap, - pMapping->DevVAddr, - SysCpuPAddrToSysPAddr (pMapping->CpuPAddr), - pMapping->uSize, - uFlags, - (IMG_HANDLE)pMapping); - - *pDevVAddr = pMapping->DevVAddr; - break; - } - case hm_env: - { - psDeviceNode->pfnMMUMapShadow ( pMapping->pBMHeap->pMMUHeap, - pMapping->DevVAddr, - pMapping->uSize, - pMapping->CpuVAddr, - pMapping->hOSMemHandle, - pDevVAddr, - uFlags, - (IMG_HANDLE)pMapping); - break; - } - case hm_wrapped_scatter: - case hm_wrapped_scatter_virtaddr: - { - psDeviceNode->pfnMMUMapScatter (pMapping->pBMHeap->pMMUHeap, - pMapping->DevVAddr, - pMapping->psSysAddr, - pMapping->uSize, - uFlags, - (IMG_HANDLE)pMapping); - - *pDevVAddr = pMapping->DevVAddr; - break; - } - default: - PVR_DPF((PVR_DBG_ERROR, - "Illegal value %d for pMapping->eCpuMemoryOrigin", - pMapping->eCpuMemoryOrigin)); - return IMG_FALSE; - } - -#ifdef SUPPORT_SGX_MMU_BYPASS - DisableHostAccess(pBMContext->psMMUContext); -#endif - - return IMG_TRUE; -} - -static IMG_VOID -DevMemoryFree (BM_MAPPING *pMapping) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_DEV_PHYADDR sDevPAddr; -#ifdef PDUMP - IMG_UINT32 ui32PSize; -#endif - - psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; - sDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr); - - if (sDevPAddr.uiAddr != 0) - { -#ifdef PDUMP - - if(pMapping->ui32Flags & PVRSRV_MEM_DUMMY) - { - - ui32PSize = pMapping->pBMHeap->sDevArena.ui32DataPageSize; - } - else - { - ui32PSize = (IMG_UINT32)pMapping->uSize; - } - - PDUMPFREEPAGES(pMapping->pBMHeap, - pMapping->DevVAddr, - ui32PSize, - pMapping->pBMHeap->sDevArena.ui32DataPageSize, - (IMG_HANDLE)pMapping, - (pMapping->ui32Flags & PVRSRV_MEM_INTERLEAVED) ? IMG_TRUE : IMG_FALSE); -#endif - } - psDeviceNode->pfnMMUFree (pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr, IMG_CAST_TO_DEVVADDR_UINT(pMapping->uSize)); -} - -#ifndef XPROC_WORKAROUND_NUM_SHAREABLES -#define XPROC_WORKAROUND_NUM_SHAREABLES 4096 -#endif - -#define XPROC_WORKAROUND_BAD_SHAREINDEX 0773407734 - -static IMG_UINT32 gXProcWorkaroundShareIndex = XPROC_WORKAROUND_BAD_SHAREINDEX; - - -static struct BM_XProcWorkaround { - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32AllocFlags; - IMG_UINT32 ui32Size; - IMG_UINT32 ui32PageSize; - RA_ARENA *psArena; - IMG_SYS_PHYADDR sSysPAddr; - IMG_VOID *pvCpuVAddr; - IMG_HANDLE hOSMemHandle; -} *gXProcWorkaroundShareData; - -static IMG_UINT32 gXProcWorkaroundShareSize; -static IMG_UINT32 gXProcWorkaroundShareCount; - -PVRSRV_ERROR BM_XProcWorkaroundShareInit(void) -{ - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - XPROC_WORKAROUND_NUM_SHAREABLES * sizeof(struct BM_XProcWorkaround), - (IMG_PVOID *)&gXProcWorkaroundShareData, IMG_NULL, - "XProc Workaround") != PVRSRV_OK) - return PVRSRV_ERROR_OUT_OF_MEMORY; - - gXProcWorkaroundShareSize = XPROC_WORKAROUND_NUM_SHAREABLES; - gXProcWorkaroundShareCount = 0; - return PVRSRV_OK; -} - -void BM_XProcWorkaroundShareDestroy(void) -{ - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, gXProcWorkaroundShareSize * sizeof(struct BM_XProcWorkaround), - gXProcWorkaroundShareData, IMG_NULL); -} - -void XProcWorkaroundShareCheck(void) -{ - if (gXProcWorkaroundShareCount == gXProcWorkaroundShareSize) { - struct BM_XProcWorkaround *temp, *p; - IMG_UINT32 new_size = gXProcWorkaroundShareSize + gXProcWorkaroundShareSize / 2; - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - new_size * sizeof(struct BM_XProcWorkaround), - (IMG_PVOID *)&p, IMG_NULL, - "XProc Workaround") != PVRSRV_OK) - return; - memset(p, 0, new_size * sizeof(struct BM_XProcWorkaround)); - - memcpy(p, gXProcWorkaroundShareData, gXProcWorkaroundShareSize * sizeof(struct BM_XProcWorkaround)); - - temp = gXProcWorkaroundShareData; - gXProcWorkaroundShareData = p; - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, gXProcWorkaroundShareSize * sizeof(struct BM_XProcWorkaround), - temp, IMG_NULL); - - gXProcWorkaroundShareSize = new_size; - } -} - -PVRSRV_ERROR BM_XProcWorkaroundSetShareIndex(IMG_UINT32 ui32Index) -{ - - - - if (gXProcWorkaroundShareIndex != XPROC_WORKAROUND_BAD_SHAREINDEX) - { - PVR_DPF((PVR_DBG_ERROR, "No, it's already set!")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - gXProcWorkaroundShareIndex = ui32Index; - - return PVRSRV_OK; -} - -PVRSRV_ERROR BM_XProcWorkaroundUnsetShareIndex(IMG_UINT32 ui32Index) -{ - - - - if (gXProcWorkaroundShareIndex == XPROC_WORKAROUND_BAD_SHAREINDEX) - { - PVR_DPF((PVR_DBG_ERROR, "huh? how can it be bad??")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - if (gXProcWorkaroundShareIndex != ui32Index) - { - PVR_DPF((PVR_DBG_ERROR, "gXProcWorkaroundShareIndex == 0x%08x != 0x%08x == ui32Index", gXProcWorkaroundShareIndex, ui32Index)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - gXProcWorkaroundShareIndex = XPROC_WORKAROUND_BAD_SHAREINDEX; - - return PVRSRV_OK; -} - -PVRSRV_ERROR BM_XProcWorkaroundFindNewBufferAndSetShareIndex(IMG_UINT32 *pui32Index) -{ - - - - if (gXProcWorkaroundShareIndex != XPROC_WORKAROUND_BAD_SHAREINDEX) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - for (*pui32Index = 0; *pui32Index < gXProcWorkaroundShareSize; (*pui32Index)++) - { - if (gXProcWorkaroundShareData[*pui32Index].ui32RefCount == 0) - { - gXProcWorkaroundShareIndex = *pui32Index; - return PVRSRV_OK; - } - } - - PVR_DPF((PVR_DBG_ERROR, "ran out of shared buffers")); - return PVRSRV_ERROR_OUT_OF_MEMORY; -} - -IMG_UINT32 BM_XProcWorkaroundGetRefCount(IMG_UINT32 ui32Index) -{ - return gXProcWorkaroundShareData[ui32Index].ui32RefCount; -} - -static PVRSRV_ERROR -XProcWorkaroundAllocShareable(RA_ARENA *psArena, - IMG_UINT32 ui32AllocFlags, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PageSize, - IMG_VOID **ppvCpuVAddr, - IMG_HANDLE *phOSMemHandle) -{ - if ((ui32AllocFlags & PVRSRV_MEM_XPROC) == 0) - { - PVR_DPF((PVR_DBG_VERBOSE, "XProcWorkaroundAllocShareable: bad flags")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount > 0) - { - PVR_DPF((PVR_DBG_VERBOSE, - "XProcWorkaroundAllocShareable: re-using previously allocated pages")); - - ui32AllocFlags &= ~PVRSRV_HAP_MAPTYPE_MASK; - ui32AllocFlags |= PVRSRV_HAP_SINGLE_PROCESS; - - if (ui32AllocFlags != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags) - { - PVR_DPF((PVR_DBG_ERROR, - "Can't! Flags don't match! (I had 0x%08x, you gave 0x%08x)", - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags, - ui32AllocFlags)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (ui32Size != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32Size) - { - PVR_DPF((PVR_DBG_ERROR, - "Can't! Size doesn't match!")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (ui32PageSize != gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32PageSize) - { - PVR_DPF((PVR_DBG_ERROR, - "Can't! Page Size doesn't match!")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - *ppvCpuVAddr = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr; - *phOSMemHandle = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle; - - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount ++; - - return PVRSRV_OK; - } - else - { - if (psArena != IMG_NULL) - { - IMG_CPU_PHYADDR sCpuPAddr; - IMG_SYS_PHYADDR sSysPAddr; - - PVR_DPF((PVR_DBG_VERBOSE, - "XProcWorkaroundAllocShareable: making a NEW allocation from local mem")); - - if (!RA_Alloc (psArena, - ui32Size, - IMG_NULL, - IMG_NULL, - 0, - ui32PageSize, - 0, - (IMG_UINTPTR_T *)&sSysPAddr.uiAddr)) - { - PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: RA_Alloc(0x%x) FAILED", ui32Size)); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - if(OSReservePhys(sCpuPAddr, - ui32Size, - ui32AllocFlags, - (IMG_VOID **)&gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr, - &gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: OSReservePhys failed")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].sSysPAddr = sSysPAddr; - } - else - { - PVR_DPF((PVR_DBG_VERBOSE, "XProcWorkaroundAllocShareable: making a NEW allocation from OS")); - - ui32AllocFlags &= ~PVRSRV_HAP_MAPTYPE_MASK; - ui32AllocFlags |= PVRSRV_HAP_SINGLE_PROCESS; - - - if (OSAllocPages(ui32AllocFlags, - ui32Size, - ui32PageSize, - (IMG_VOID **)&gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr, - &gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "XProcWorkaroundAllocShareable: OSAllocPages(0x%x) failed", - ui32PageSize)); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } - - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].psArena = psArena; - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32AllocFlags = ui32AllocFlags; - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32Size = ui32Size; - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32PageSize = ui32PageSize; - - *ppvCpuVAddr = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].pvCpuVAddr; - *phOSMemHandle = gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].hOSMemHandle; - - gXProcWorkaroundShareData[gXProcWorkaroundShareIndex].ui32RefCount ++; - - gXProcWorkaroundShareCount++; - - XProcWorkaroundShareCheck(); - - return PVRSRV_OK; - } -} - -static PVRSRV_ERROR XProcWorkaroundHandleToSI(IMG_HANDLE hOSMemHandle, IMG_UINT32 *pui32SI) -{ - - IMG_UINT32 ui32SI; - IMG_BOOL bFound; - IMG_BOOL bErrorDups; - - bFound = IMG_FALSE; - bErrorDups = IMG_FALSE; - - for (ui32SI = 0; ui32SI < gXProcWorkaroundShareSize; ui32SI++) - { - if (gXProcWorkaroundShareData[ui32SI].ui32RefCount>0 && gXProcWorkaroundShareData[ui32SI].hOSMemHandle == hOSMemHandle) - { - if (bFound) - { - bErrorDups = IMG_TRUE; - } - else - { - *pui32SI = ui32SI; - bFound = IMG_TRUE; - } - } - } - - if (bErrorDups || !bFound) - { - return PVRSRV_ERROR_BM_BAD_SHAREMEM_HANDLE; - } - - return PVRSRV_OK; -} - -static IMG_VOID XProcWorkaroundFreeShareable(IMG_HANDLE hOSMemHandle) -{ - IMG_UINT32 ui32SI = (IMG_UINT32)((IMG_UINTPTR_T)hOSMemHandle & 0xffffU); - PVRSRV_ERROR eError; - - eError = XProcWorkaroundHandleToSI(hOSMemHandle, &ui32SI); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "bad handle")); - return; - } - - gXProcWorkaroundShareData[ui32SI].ui32RefCount --; - - PVR_DPF((PVR_DBG_VERBOSE, "Reduced refcount of SI[%d] from %d to %d", - ui32SI, gXProcWorkaroundShareData[ui32SI].ui32RefCount+1, gXProcWorkaroundShareData[ui32SI].ui32RefCount)); - - if (gXProcWorkaroundShareData[ui32SI].ui32RefCount == 0) - { - if (gXProcWorkaroundShareData[ui32SI].psArena != IMG_NULL) - { - IMG_SYS_PHYADDR sSysPAddr; - - if (gXProcWorkaroundShareData[ui32SI].pvCpuVAddr != IMG_NULL) - { - OSUnReservePhys(gXProcWorkaroundShareData[ui32SI].pvCpuVAddr, - gXProcWorkaroundShareData[ui32SI].ui32Size, - gXProcWorkaroundShareData[ui32SI].ui32AllocFlags, - gXProcWorkaroundShareData[ui32SI].hOSMemHandle); - } - sSysPAddr = gXProcWorkaroundShareData[ui32SI].sSysPAddr; - RA_Free (gXProcWorkaroundShareData[ui32SI].psArena, - sSysPAddr.uiAddr, - IMG_FALSE); - } - else - { - PVR_DPF((PVR_DBG_VERBOSE, "freeing OS memory")); - OSFreePages(gXProcWorkaroundShareData[ui32SI].ui32AllocFlags, - gXProcWorkaroundShareData[ui32SI].ui32PageSize, - gXProcWorkaroundShareData[ui32SI].pvCpuVAddr, - gXProcWorkaroundShareData[ui32SI].hOSMemHandle); - } - gXProcWorkaroundShareCount--; - } -} - - -static IMG_BOOL -BM_ImportMemory (IMG_VOID *pH, - IMG_SIZE_T uRequestSize, - IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINTPTR_T *pBase) -{ - BM_MAPPING *pMapping; - BM_HEAP *pBMHeap = pH; - BM_CONTEXT *pBMContext = pBMHeap->pBMContext; - IMG_BOOL bResult; - IMG_SIZE_T uSize; - IMG_SIZE_T uPSize; - IMG_SIZE_T uDevVAddrAlignment = 0; - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_ImportMemory (pBMContext=0x%x, uRequestSize=0x%x, uFlags=0x%x, uAlign=0x%x)", - (IMG_UINTPTR_T)pBMContext, uRequestSize, uFlags, uDevVAddrAlignment)); - - PVR_ASSERT (ppsMapping != IMG_NULL); - PVR_ASSERT (pBMContext != IMG_NULL); - - if (ppsMapping == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_ImportMemory: invalid parameter")); - goto fail_exit; - } - - uSize = HOST_PAGEALIGN (uRequestSize); - PVR_ASSERT (uSize >= uRequestSize); - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (BM_MAPPING), - (IMG_PVOID *)&pMapping, IMG_NULL, - "Buffer Manager Mapping") != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR, "BM_ImportMemory: failed BM_MAPPING alloc")); - goto fail_exit; - } - - pMapping->hOSMemHandle = 0; - pMapping->CpuVAddr = 0; - pMapping->DevVAddr.uiAddr = 0; - pMapping->CpuPAddr.uiAddr = 0; - pMapping->uSize = uSize; - pMapping->pBMHeap = pBMHeap; - pMapping->ui32Flags = uFlags; - - - if (pActualSize) - { - *pActualSize = uSize; - } - - - if(pMapping->ui32Flags & PVRSRV_MEM_DUMMY) - { - uPSize = pBMHeap->sDevArena.ui32DataPageSize; - } - else - { - uPSize = pMapping->uSize; - } - - if (uFlags & PVRSRV_MEM_XPROC) - { - IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs | PVRSRV_MEM_XPROC; - IMG_BOOL bBadBackingStoreType; - - bBadBackingStoreType = IMG_TRUE; - - if ((ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) != 0) - { -#ifndef MAX -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - uDevVAddrAlignment = MAX(pBMHeap->sDevArena.ui32DataPageSize, HOST_PAGESIZE()); - - - if (uPSize % uDevVAddrAlignment != 0) - { - PVR_DPF((PVR_DBG_ERROR, "Cannot use use this memory sharing workaround with allocations that might be suballocated")); - goto fail_mapping_alloc; - } - uDevVAddrAlignment = 0; - - - if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) - { - ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; - ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); - } - - - if (XProcWorkaroundAllocShareable(IMG_NULL, - ui32Attribs, - (IMG_UINT32)uPSize, - pBMHeap->sDevArena.ui32DataPageSize, - (IMG_VOID **)&pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "BM_ImportMemory: XProcWorkaroundAllocShareable(0x%x) failed", - uPSize)); - goto fail_mapping_alloc; - } - - - - - pMapping->eCpuMemoryOrigin = hm_env; - bBadBackingStoreType = IMG_FALSE; - } - - if ((ui32Attribs & PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG) != 0) - { - uDevVAddrAlignment = pBMHeap->sDevArena.ui32DataPageSize; - - if (uPSize % uDevVAddrAlignment != 0) - { - PVR_DPF((PVR_DBG_ERROR, "Cannot use use this memory sharing workaround with allocations that might be suballocated")); - goto fail_mapping_alloc; - } - uDevVAddrAlignment = 0; - - - if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) - { - ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; - ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); - } - - - if (XProcWorkaroundAllocShareable(pBMHeap->pLocalDevMemArena, - ui32Attribs, - (IMG_UINT32)uPSize, - pBMHeap->sDevArena.ui32DataPageSize, - (IMG_VOID **)&pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "BM_ImportMemory: XProcWorkaroundAllocShareable(0x%x) failed", - uPSize)); - goto fail_mapping_alloc; - } - - - - - pMapping->eCpuMemoryOrigin = hm_env; - bBadBackingStoreType = IMG_FALSE; - } - - if (bBadBackingStoreType) - { - PVR_DPF((PVR_DBG_ERROR, "Cannot use this memory sharing workaround with this type of backing store")); - goto fail_mapping_alloc; - } - } - else - - - - if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) - { - IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs; - - - if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) - { - ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; - ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); - } - - - if (OSAllocPages(ui32Attribs, - uPSize, - pBMHeap->sDevArena.ui32DataPageSize, - (IMG_VOID **)&pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "BM_ImportMemory: OSAllocPages(0x%x) failed", - uPSize)); - goto fail_mapping_alloc; - } - - - pMapping->eCpuMemoryOrigin = hm_env; - } - else if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG) - { - IMG_SYS_PHYADDR sSysPAddr; - IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs; - - - PVR_ASSERT(pBMHeap->pLocalDevMemArena != IMG_NULL); - - - if (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) - { - ui32Attribs &= ~PVRSRV_HAP_CACHETYPE_MASK; - ui32Attribs |= (pMapping->ui32Flags & PVRSRV_HAP_CACHETYPE_MASK); - } - - if (!RA_Alloc (pBMHeap->pLocalDevMemArena, - uPSize, - IMG_NULL, - IMG_NULL, - 0, - pBMHeap->sDevArena.ui32DataPageSize, - 0, - (IMG_UINTPTR_T *)&sSysPAddr.uiAddr)) - { - PVR_DPF((PVR_DBG_ERROR, "BM_ImportMemory: RA_Alloc(0x%x) FAILED", uPSize)); - goto fail_mapping_alloc; - } - - - pMapping->CpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - if(OSReservePhys(pMapping->CpuPAddr, - uPSize, - ui32Attribs, - &pMapping->CpuVAddr, - &pMapping->hOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "BM_ImportMemory: OSReservePhys failed")); - goto fail_dev_mem_alloc; - } - - - pMapping->eCpuMemoryOrigin = hm_contiguous; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "BM_ImportMemory: Invalid backing store type")); - goto fail_mapping_alloc; - } - - - bResult = DevMemoryAlloc (pBMContext, - pMapping, - IMG_NULL, - uFlags, - (IMG_UINT32)uDevVAddrAlignment, - &pMapping->DevVAddr); - if (!bResult) - { - PVR_DPF((PVR_DBG_ERROR, - "BM_ImportMemory: DevMemoryAlloc(0x%x) failed", - pMapping->uSize)); - goto fail_dev_mem_alloc; - } - - - - PVR_ASSERT (uDevVAddrAlignment>1?(pMapping->DevVAddr.uiAddr%uDevVAddrAlignment)==0:1); - - *pBase = pMapping->DevVAddr.uiAddr; - *ppsMapping = pMapping; - - PVR_DPF ((PVR_DBG_MESSAGE, "BM_ImportMemory: IMG_TRUE")); - return IMG_TRUE; - -fail_dev_mem_alloc: - if (pMapping && (pMapping->CpuVAddr || pMapping->hOSMemHandle)) - { - - if(pMapping->ui32Flags & PVRSRV_MEM_INTERLEAVED) - { - pMapping->uSize /= 2; - } - - if(pMapping->ui32Flags & PVRSRV_MEM_DUMMY) - { - uPSize = pBMHeap->sDevArena.ui32DataPageSize; - } - else - { - uPSize = pMapping->uSize; - } - - if (uFlags & PVRSRV_MEM_XPROC) - { - XProcWorkaroundFreeShareable(pMapping->hOSMemHandle); - } - else - if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) - { - OSFreePages(pBMHeap->ui32Attribs, - uPSize, - (IMG_VOID *)pMapping->CpuVAddr, - pMapping->hOSMemHandle); - } - else - { - IMG_SYS_PHYADDR sSysPAddr; - - if(pMapping->CpuVAddr) - { - OSUnReservePhys(pMapping->CpuVAddr, - uPSize, - pBMHeap->ui32Attribs, - pMapping->hOSMemHandle); - } - sSysPAddr = SysCpuPAddrToSysPAddr(pMapping->CpuPAddr); - RA_Free (pBMHeap->pLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - } - } -fail_mapping_alloc: - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_MAPPING), pMapping, IMG_NULL); - -fail_exit: - return IMG_FALSE; -} - - -static IMG_VOID -BM_FreeMemory (IMG_VOID *h, IMG_UINTPTR_T _base, BM_MAPPING *psMapping) -{ - BM_HEAP *pBMHeap = h; - IMG_SIZE_T uPSize; - - PVR_UNREFERENCED_PARAMETER (_base); - - PVR_DPF ((PVR_DBG_MESSAGE, - "BM_FreeMemory (h=0x%x, base=0x%x, psMapping=0x%x)", - (IMG_UINTPTR_T)h, _base, (IMG_UINTPTR_T)psMapping)); - - PVR_ASSERT (psMapping != IMG_NULL); - - if (psMapping == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "BM_FreeMemory: invalid parameter")); - return; - } - - DevMemoryFree (psMapping); - - - if((psMapping->ui32Flags & PVRSRV_MEM_INTERLEAVED) != 0) - { - psMapping->uSize /= 2; - } - - if(psMapping->ui32Flags & PVRSRV_MEM_DUMMY) - { - uPSize = psMapping->pBMHeap->sDevArena.ui32DataPageSize; - } - else - { - uPSize = psMapping->uSize; - } - - if (psMapping->ui32Flags & PVRSRV_MEM_XPROC) - { - XProcWorkaroundFreeShareable(psMapping->hOSMemHandle); - } - else - if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) - { - OSFreePages(pBMHeap->ui32Attribs, - uPSize, - (IMG_VOID *) psMapping->CpuVAddr, - psMapping->hOSMemHandle); - } - else if(pBMHeap->ui32Attribs & PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG) - { - IMG_SYS_PHYADDR sSysPAddr; - - OSUnReservePhys(psMapping->CpuVAddr, uPSize, pBMHeap->ui32Attribs, psMapping->hOSMemHandle); - - sSysPAddr = SysCpuPAddrToSysPAddr(psMapping->CpuPAddr); - - RA_Free (pBMHeap->pLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "BM_FreeMemory: Invalid backing store type")); - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BM_MAPPING), psMapping, IMG_NULL); - - - PVR_DPF((PVR_DBG_MESSAGE, - "..BM_FreeMemory (h=0x%x, base=0x%x)", - (IMG_UINTPTR_T)h, _base)); -} - -IMG_VOID BM_GetPhysPageAddr(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_DEV_VIRTADDR sDevVPageAddr, - IMG_DEV_PHYADDR *psDevPAddr) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - - PVR_DPF((PVR_DBG_MESSAGE, "BM_GetPhysPageAddr")); - - PVR_ASSERT (psMemInfo && psDevPAddr) - - - PVR_ASSERT((sDevVPageAddr.uiAddr & 0xFFF) == 0); - - - psDeviceNode = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->pBMContext->psDeviceNode; - - *psDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->pMMUHeap, - sDevVPageAddr); -} - - -MMU_CONTEXT* BM_GetMMUContext(IMG_HANDLE hDevMemHeap) -{ - BM_HEAP *pBMHeap = (BM_HEAP*)hDevMemHeap; - - PVR_DPF((PVR_DBG_VERBOSE, "BM_GetMMUContext")); - - return pBMHeap->pBMContext->psMMUContext; -} - -MMU_CONTEXT* BM_GetMMUContextFromMemContext(IMG_HANDLE hDevMemContext) -{ - BM_CONTEXT *pBMContext = (BM_CONTEXT*)hDevMemContext; - - PVR_DPF ((PVR_DBG_VERBOSE, "BM_GetMMUContextFromMemContext")); - - return pBMContext->psMMUContext; -} - -IMG_HANDLE BM_GetMMUHeap(IMG_HANDLE hDevMemHeap) -{ - PVR_DPF((PVR_DBG_VERBOSE, "BM_GetMMUHeap")); - - return (IMG_HANDLE)((BM_HEAP*)hDevMemHeap)->pMMUHeap; -} - - -PVRSRV_DEVICE_NODE* BM_GetDeviceNode(IMG_HANDLE hDevMemContext) -{ - PVR_DPF((PVR_DBG_VERBOSE, "BM_GetDeviceNode")); - - return ((BM_CONTEXT*)hDevMemContext)->psDeviceNode; -} - - -IMG_HANDLE BM_GetMappingHandle(PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - PVR_DPF((PVR_DBG_VERBOSE, "BM_GetMappingHandle")); - - return ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->hOSMemHandle; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/deviceclass.c b/drivers/staging/cdv/pvr/services4/srvkm/common/deviceclass.c deleted file mode 100644 index 13bfa8d..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/deviceclass.c +++ /dev/null @@ -1,2013 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "buffer_manager.h" -#include "kernelbuffer.h" -#include "kerneldisplay.h" -#include "pvr_bridge_km.h" -#include "pdump_km.h" -#include "deviceid.h" - -#include "lists.h" - -PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID); -PVRSRV_ERROR FreeDeviceID(SYS_DATA *psSysData, IMG_UINT32 ui32DevID); - -#if defined(SUPPORT_MISR_IN_THREAD) -void OSVSyncMISR(IMG_HANDLE, IMG_BOOL); -#endif - -#if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS) -IMG_VOID PVRSRVFreeCommandCompletePacketKM(IMG_HANDLE hCmdCookie, - IMG_BOOL bScheduleMISR); -#endif -typedef struct PVRSRV_DC_SRV2DISP_KMJTABLE_TAG *PPVRSRV_DC_SRV2DISP_KMJTABLE; - -typedef struct PVRSRV_DC_BUFFER_TAG -{ - - PVRSRV_DEVICECLASS_BUFFER sDeviceClassBuffer; - - struct PVRSRV_DISPLAYCLASS_INFO_TAG *psDCInfo; - struct PVRSRV_DC_SWAPCHAIN_TAG *psSwapChain; -} PVRSRV_DC_BUFFER; - -typedef struct PVRSRV_DC_SWAPCHAIN_TAG -{ - IMG_HANDLE hExtSwapChain; - IMG_UINT32 ui32SwapChainID; - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32Flags; - PVRSRV_QUEUE_INFO *psQueue; - PVRSRV_DC_BUFFER asBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; - IMG_UINT32 ui32BufferCount; - PVRSRV_DC_BUFFER *psLastFlipBuffer; - IMG_UINT32 ui32MinSwapInterval; - IMG_UINT32 ui32MaxSwapInterval; - struct PVRSRV_DISPLAYCLASS_INFO_TAG *psDCInfo; - struct PVRSRV_DC_SWAPCHAIN_TAG *psNext; -} PVRSRV_DC_SWAPCHAIN; - - -typedef struct PVRSRV_DC_SWAPCHAIN_REF_TAG -{ - struct PVRSRV_DC_SWAPCHAIN_TAG *psSwapChain; - IMG_HANDLE hResItem; -} PVRSRV_DC_SWAPCHAIN_REF; - - -typedef struct PVRSRV_DISPLAYCLASS_INFO_TAG -{ - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32DeviceID; - IMG_HANDLE hExtDevice; - PPVRSRV_DC_SRV2DISP_KMJTABLE psFuncTable; - IMG_HANDLE hDevMemContext; - PVRSRV_DC_BUFFER sSystemBuffer; - struct PVRSRV_DC_SWAPCHAIN_TAG *psDCSwapChainShared; -} PVRSRV_DISPLAYCLASS_INFO; - - -typedef struct PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO_TAG -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PRESMAN_ITEM hResItem; -} PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO; - - -typedef struct PVRSRV_BC_SRV2BUFFER_KMJTABLE_TAG *PPVRSRV_BC_SRV2BUFFER_KMJTABLE; - -typedef struct PVRSRV_BC_BUFFER_TAG -{ - - PVRSRV_DEVICECLASS_BUFFER sDeviceClassBuffer; - - struct PVRSRV_BUFFERCLASS_INFO_TAG *psBCInfo; -} PVRSRV_BC_BUFFER; - - -typedef struct PVRSRV_BUFFERCLASS_INFO_TAG -{ - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32DeviceID; - IMG_HANDLE hExtDevice; - PPVRSRV_BC_SRV2BUFFER_KMJTABLE psFuncTable; - IMG_HANDLE hDevMemContext; - - IMG_UINT32 ui32BufferCount; - PVRSRV_BC_BUFFER *psBuffer; - -} PVRSRV_BUFFERCLASS_INFO; - - -typedef struct PVRSRV_BUFFERCLASS_PERCONTEXT_INFO_TAG -{ - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - IMG_HANDLE hResItem; -} PVRSRV_BUFFERCLASS_PERCONTEXT_INFO; - - -static PVRSRV_DISPLAYCLASS_INFO* DCDeviceHandleToDCInfo (IMG_HANDLE hDeviceKM) -{ - PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; - - psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)hDeviceKM; - - return psDCPerContextInfo->psDCInfo; -} - - -static PVRSRV_BUFFERCLASS_INFO* BCDeviceHandleToBCInfo (IMG_HANDLE hDeviceKM) -{ - PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; - - psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)hDeviceKM; - - return psBCPerContextInfo->psBCInfo; -} - -static IMG_VOID PVRSRVEnumerateDCKM_ForEachVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - IMG_UINT *pui32DevCount; - IMG_UINT32 **ppui32DevID; - PVRSRV_DEVICE_CLASS peDeviceClass; - - pui32DevCount = va_arg(va, IMG_UINT*); - ppui32DevID = va_arg(va, IMG_UINT32**); - peDeviceClass = va_arg(va, PVRSRV_DEVICE_CLASS); - - if ((psDeviceNode->sDevId.eDeviceClass == peDeviceClass) - && (psDeviceNode->sDevId.eDeviceType == PVRSRV_DEVICE_TYPE_EXT)) - { - (*pui32DevCount)++; - if(*ppui32DevID) - { - *(*ppui32DevID)++ = psDeviceNode->sDevId.ui32DeviceIndex; - } - } -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVEnumerateDCKM (PVRSRV_DEVICE_CLASS DeviceClass, - IMG_UINT32 *pui32DevCount, - IMG_UINT32 *pui32DevID ) -{ - - IMG_UINT ui32DevCount = 0; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - - List_PVRSRV_DEVICE_NODE_ForEach_va(psSysData->psDeviceNodeList, - &PVRSRVEnumerateDCKM_ForEachVaCb, - &ui32DevCount, - &pui32DevID, - DeviceClass); - - if(pui32DevCount) - { - *pui32DevCount = ui32DevCount; - } - else if(pui32DevID == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVEnumerateDCKM: Invalid parameters")); - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - return PVRSRV_OK; -} - - -static -PVRSRV_ERROR PVRSRVRegisterDCDeviceKM (PVRSRV_DC_SRV2DISP_KMJTABLE *psFuncTable, - IMG_UINT32 *pui32DeviceID) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo = IMG_NULL; - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - - - - - - - - - - - - - - - - - SysAcquireData(&psSysData); - - - - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*psDCInfo), - (IMG_VOID **)&psDCInfo, IMG_NULL, - "Display Class Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterDCDeviceKM: Failed psDCInfo alloc")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet (psDCInfo, 0, sizeof(*psDCInfo)); - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE), - (IMG_VOID **)&psDCInfo->psFuncTable, IMG_NULL, - "Function table for SRVKM->DISPLAY") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterDCDeviceKM: Failed psFuncTable alloc")); - goto ErrorExit; - } - OSMemSet (psDCInfo->psFuncTable, 0, sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE)); - - - *psDCInfo->psFuncTable = *psFuncTable; - - - if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_DEVICE_NODE), - (IMG_VOID **)&psDeviceNode, IMG_NULL, - "Device Node") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterDCDeviceKM: Failed psDeviceNode alloc")); - goto ErrorExit; - } - OSMemSet (psDeviceNode, 0, sizeof(PVRSRV_DEVICE_NODE)); - - psDeviceNode->pvDevice = (IMG_VOID*)psDCInfo; - psDeviceNode->ui32pvDeviceSize = sizeof(*psDCInfo); - psDeviceNode->ui32RefCount = 1; - psDeviceNode->sDevId.eDeviceType = PVRSRV_DEVICE_TYPE_EXT; - psDeviceNode->sDevId.eDeviceClass = PVRSRV_DEVICE_CLASS_DISPLAY; - psDeviceNode->psSysData = psSysData; - - - if (AllocateDeviceID(psSysData, &psDeviceNode->sDevId.ui32DeviceIndex) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterBCDeviceKM: Failed to allocate Device ID")); - goto ErrorExit; - } - psDCInfo->ui32DeviceID = psDeviceNode->sDevId.ui32DeviceIndex; - if (pui32DeviceID) - { - *pui32DeviceID = psDeviceNode->sDevId.ui32DeviceIndex; - } - - - SysRegisterExternalDevice(psDeviceNode); - - - List_PVRSRV_DEVICE_NODE_Insert(&psSysData->psDeviceNodeList, psDeviceNode); - - return PVRSRV_OK; - -ErrorExit: - - if(psDCInfo->psFuncTable) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE), psDCInfo->psFuncTable, IMG_NULL); - psDCInfo->psFuncTable = IMG_NULL; - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DISPLAYCLASS_INFO), psDCInfo, IMG_NULL); - - - return PVRSRV_ERROR_OUT_OF_MEMORY; -} - -static PVRSRV_ERROR PVRSRVRemoveDCDeviceKM(IMG_UINT32 ui32DevIndex) -{ - SYS_DATA *psSysData; - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - - SysAcquireData(&psSysData); - - - psDeviceNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DevIndex, - IMG_FALSE, - PVRSRV_DEVICE_CLASS_DISPLAY); - if (!psDeviceNode) - { - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRemoveDCDeviceKM: requested device %d not present", ui32DevIndex)); - return PVRSRV_ERROR_NO_DEVICENODE_FOUND; - } - - - psDCInfo = (PVRSRV_DISPLAYCLASS_INFO*)psDeviceNode->pvDevice; - - - - - if(psDCInfo->ui32RefCount == 0) - { - - - List_PVRSRV_DEVICE_NODE_Remove(psDeviceNode); - - - SysRemoveExternalDevice(psDeviceNode); - - - - - PVR_ASSERT(psDCInfo->ui32RefCount == 0); - (IMG_VOID)FreeDeviceID(psSysData, ui32DevIndex); - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SRV2DISP_KMJTABLE), psDCInfo->psFuncTable, IMG_NULL); - psDCInfo->psFuncTable = IMG_NULL; - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DISPLAYCLASS_INFO), psDCInfo, IMG_NULL); - - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), psDeviceNode, IMG_NULL); - - } - else - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRemoveDCDeviceKM: failed as %d Services DC API connections are still open", psDCInfo->ui32RefCount)); - return PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE; - } - - return PVRSRV_OK; -} - - -static -PVRSRV_ERROR PVRSRVRegisterBCDeviceKM (PVRSRV_BC_SRV2BUFFER_KMJTABLE *psFuncTable, - IMG_UINT32 *pui32DeviceID) -{ - PVRSRV_BUFFERCLASS_INFO *psBCInfo = IMG_NULL; - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - - - - - - - - - - - - - - - SysAcquireData(&psSysData); - - - - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*psBCInfo), - (IMG_VOID **)&psBCInfo, IMG_NULL, - "Buffer Class Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterBCDeviceKM: Failed psBCInfo alloc")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet (psBCInfo, 0, sizeof(*psBCInfo)); - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_BC_SRV2BUFFER_KMJTABLE), - (IMG_VOID **)&psBCInfo->psFuncTable, IMG_NULL, - "Function table for SRVKM->BUFFER") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterBCDeviceKM: Failed psFuncTable alloc")); - goto ErrorExit; - } - OSMemSet (psBCInfo->psFuncTable, 0, sizeof(PVRSRV_BC_SRV2BUFFER_KMJTABLE)); - - - *psBCInfo->psFuncTable = *psFuncTable; - - - if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_DEVICE_NODE), - (IMG_VOID **)&psDeviceNode, IMG_NULL, - "Device Node") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterBCDeviceKM: Failed psDeviceNode alloc")); - goto ErrorExit; - } - OSMemSet (psDeviceNode, 0, sizeof(PVRSRV_DEVICE_NODE)); - - psDeviceNode->pvDevice = (IMG_VOID*)psBCInfo; - psDeviceNode->ui32pvDeviceSize = sizeof(*psBCInfo); - psDeviceNode->ui32RefCount = 1; - psDeviceNode->sDevId.eDeviceType = PVRSRV_DEVICE_TYPE_EXT; - psDeviceNode->sDevId.eDeviceClass = PVRSRV_DEVICE_CLASS_BUFFER; - psDeviceNode->psSysData = psSysData; - - - if (AllocateDeviceID(psSysData, &psDeviceNode->sDevId.ui32DeviceIndex) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterBCDeviceKM: Failed to allocate Device ID")); - goto ErrorExit; - } - psBCInfo->ui32DeviceID = psDeviceNode->sDevId.ui32DeviceIndex; - if (pui32DeviceID) - { - *pui32DeviceID = psDeviceNode->sDevId.ui32DeviceIndex; - } - - - List_PVRSRV_DEVICE_NODE_Insert(&psSysData->psDeviceNodeList, psDeviceNode); - - return PVRSRV_OK; - -ErrorExit: - - if(psBCInfo->psFuncTable) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PPVRSRV_BC_SRV2BUFFER_KMJTABLE), psBCInfo->psFuncTable, IMG_NULL); - psBCInfo->psFuncTable = IMG_NULL; - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BUFFERCLASS_INFO), psBCInfo, IMG_NULL); - - - return PVRSRV_ERROR_OUT_OF_MEMORY; -} - - -static PVRSRV_ERROR PVRSRVRemoveBCDeviceKM(IMG_UINT32 ui32DevIndex) -{ - SYS_DATA *psSysData; - PVRSRV_DEVICE_NODE *psDevNode; - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - - SysAcquireData(&psSysData); - - - psDevNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DevIndex, - IMG_FALSE, - PVRSRV_DEVICE_CLASS_BUFFER); - - if (!psDevNode) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRemoveBCDeviceKM: requested device %d not present", ui32DevIndex)); - return PVRSRV_ERROR_NO_DEVICENODE_FOUND; - } - - - - psBCInfo = (PVRSRV_BUFFERCLASS_INFO*)psDevNode->pvDevice; - - - - - if(psBCInfo->ui32RefCount == 0) - { - - - List_PVRSRV_DEVICE_NODE_Remove(psDevNode); - - - - - (IMG_VOID)FreeDeviceID(psSysData, ui32DevIndex); - - - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BC_SRV2BUFFER_KMJTABLE), psBCInfo->psFuncTable, IMG_NULL); - psBCInfo->psFuncTable = IMG_NULL; - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BUFFERCLASS_INFO), psBCInfo, IMG_NULL); - - (IMG_VOID)OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), psDevNode, IMG_NULL); - - } - else - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRemoveBCDeviceKM: failed as %d Services BC API connections are still open", psBCInfo->ui32RefCount)); - return PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE; - } - - return PVRSRV_OK; -} - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVCloseDCDeviceKM (IMG_HANDLE hDeviceKM, - IMG_BOOL bResManCallback) -{ - PVRSRV_ERROR eError; - PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; - - PVR_UNREFERENCED_PARAMETER(bResManCallback); - - psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)hDeviceKM; - - - eError = ResManFreeResByPtr(psDCPerContextInfo->hResItem, CLEANUP_WITH_POLL); - - return eError; -} - - -static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)pvParam; - psDCInfo = psDCPerContextInfo->psDCInfo; - - if(psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount != 0) - { - PVR_DPF((PVR_DBG_ERROR,"CloseDCDeviceCallBack: system buffer (0x%p) still mapped (refcount = %d)", - &psDCInfo->sSystemBuffer.sDeviceClassBuffer, - psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount)); - -#if 0 - - return PVRSRV_ERROR_STILL_MAPPED; -#endif - } - - psDCInfo->ui32RefCount--; - if(psDCInfo->ui32RefCount == 0) - { - - psDCInfo->psFuncTable->pfnCloseDCDevice(psDCInfo->hExtDevice); - - if (--psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount == 0) - { - PVRSRVFreeSyncInfoKM(psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo); - } - - psDCInfo->hDevMemContext = IMG_NULL; - psDCInfo->hExtDevice = IMG_NULL; - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO), psDCPerContextInfo, IMG_NULL); - - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVOpenDCDeviceKM (PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32DeviceID, - IMG_HANDLE hDevCookie, - IMG_HANDLE *phDeviceKM) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - - if(!phDeviceKM || !hDevCookie) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenDCDeviceKM: Invalid params")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - SysAcquireData(&psSysData); - - - psDeviceNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DeviceID, - IMG_FALSE, - PVRSRV_DEVICE_CLASS_DISPLAY); - if (!psDeviceNode) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenDCDeviceKM: no devnode matching index %d", ui32DeviceID)); - return PVRSRV_ERROR_NO_DEVICENODE_FOUND; - } - psDCInfo = (PVRSRV_DISPLAYCLASS_INFO*)psDeviceNode->pvDevice; - - - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*psDCPerContextInfo), - (IMG_VOID **)&psDCPerContextInfo, IMG_NULL, - "Display Class per Context Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenDCDeviceKM: Failed psDCPerContextInfo alloc")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet(psDCPerContextInfo, 0, sizeof(*psDCPerContextInfo)); - - if(psDCInfo->ui32RefCount++ == 0) - { - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevCookie; - - - psDCInfo->hDevMemContext = (IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext; - - - eError = PVRSRVAllocSyncInfoKM(IMG_NULL, - (IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext, - &psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenDCDeviceKM: Failed sync info alloc")); - psDCInfo->ui32RefCount--; - return eError; - } - - - eError = psDCInfo->psFuncTable->pfnOpenDCDevice(ui32DeviceID, - &psDCInfo->hExtDevice, - (PVRSRV_SYNC_DATA*)psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo->psSyncDataMemInfoKM->pvLinAddrKM); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenDCDeviceKM: Failed to open external DC device")); - psDCInfo->ui32RefCount--; - PVRSRVFreeSyncInfoKM(psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo); - return eError; - } - - psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount++; - psDCInfo->sSystemBuffer.sDeviceClassBuffer.ui32MemMapRefCount = 0; - } - - psDCPerContextInfo->psDCInfo = psDCInfo; - psDCPerContextInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DISPLAYCLASS_DEVICE, - psDCPerContextInfo, - 0, - &CloseDCDeviceCallBack); - - - *phDeviceKM = (IMG_HANDLE)psDCPerContextInfo; - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVEnumDCFormatsKM (IMG_HANDLE hDeviceKM, - IMG_UINT32 *pui32Count, - DISPLAY_FORMAT *psFormat) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - - if(!hDeviceKM || !pui32Count || !psFormat) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVEnumDCFormatsKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - - return psDCInfo->psFuncTable->pfnEnumDCFormats(psDCInfo->hExtDevice, pui32Count, psFormat); -} - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVEnumDCDimsKM (IMG_HANDLE hDeviceKM, - DISPLAY_FORMAT *psFormat, - IMG_UINT32 *pui32Count, - DISPLAY_DIMS *psDim) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - - if(!hDeviceKM || !pui32Count || !psFormat) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVEnumDCDimsKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - - return psDCInfo->psFuncTable->pfnEnumDCDims(psDCInfo->hExtDevice, psFormat, pui32Count, psDim); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetDCSystemBufferKM (IMG_HANDLE hDeviceKM, - IMG_HANDLE *phBuffer) -{ - PVRSRV_ERROR eError; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - IMG_HANDLE hExtBuffer; - - if(!hDeviceKM || !phBuffer) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetDCSystemBufferKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - - eError = psDCInfo->psFuncTable->pfnGetDCSystemBuffer(psDCInfo->hExtDevice, &hExtBuffer); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetDCSystemBufferKM: Failed to get valid buffer handle from external driver")); - return eError; - } - - - psDCInfo->sSystemBuffer.sDeviceClassBuffer.pfnGetBufferAddr = psDCInfo->psFuncTable->pfnGetBufferAddr; - psDCInfo->sSystemBuffer.sDeviceClassBuffer.hDevMemContext = psDCInfo->hDevMemContext; - psDCInfo->sSystemBuffer.sDeviceClassBuffer.hExtDevice = psDCInfo->hExtDevice; - psDCInfo->sSystemBuffer.sDeviceClassBuffer.hExtBuffer = hExtBuffer; - - psDCInfo->sSystemBuffer.psDCInfo = psDCInfo; - - - *phBuffer = (IMG_HANDLE)&(psDCInfo->sSystemBuffer); - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetDCInfoKM (IMG_HANDLE hDeviceKM, - DISPLAY_INFO *psDisplayInfo) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_ERROR eError; - - if(!hDeviceKM || !psDisplayInfo) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetDCInfoKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - - eError = psDCInfo->psFuncTable->pfnGetDCInfo(psDCInfo->hExtDevice, psDisplayInfo); - if (eError != PVRSRV_OK) - { - return eError; - } - - if (psDisplayInfo->ui32MaxSwapChainBuffers > PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS) - { - psDisplayInfo->ui32MaxSwapChainBuffers = PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS; - } - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVDestroyDCSwapChainKM(IMG_HANDLE hSwapChainRef) -{ - PVRSRV_ERROR eError; - PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef; - - if(!hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDestroyDCSwapChainKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psSwapChainRef = hSwapChainRef; - - eError = ResManFreeResByPtr(psSwapChainRef->hResItem, CLEANUP_WITH_POLL); - - return eError; -} - - -static PVRSRV_ERROR DestroyDCSwapChain(PVRSRV_DC_SWAPCHAIN *psSwapChain) -{ - PVRSRV_ERROR eError; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo = psSwapChain->psDCInfo; - IMG_UINT32 i; - - - if( psDCInfo->psDCSwapChainShared ) - { - if( psDCInfo->psDCSwapChainShared == psSwapChain ) - { - psDCInfo->psDCSwapChainShared = psSwapChain->psNext; - } - else - { - PVRSRV_DC_SWAPCHAIN *psCurrentSwapChain; - psCurrentSwapChain = psDCInfo->psDCSwapChainShared; - while( psCurrentSwapChain->psNext ) - { - if( psCurrentSwapChain->psNext != psSwapChain ) - { - psCurrentSwapChain = psCurrentSwapChain->psNext; - continue; - } - psCurrentSwapChain->psNext = psSwapChain->psNext; - break; - } - } - } - - - PVRSRVDestroyCommandQueueKM(psSwapChain->psQueue); - - - eError = psDCInfo->psFuncTable->pfnDestroyDCSwapChain(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DestroyDCSwapChainCallBack: Failed to destroy DC swap chain")); - return eError; - } - - - for(i=0; iui32BufferCount; i++) - { - if(psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo) - { - if (--psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount == 0) - { - PVRSRVFreeSyncInfoKM(psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - } - } - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SWAPCHAIN), psSwapChain, IMG_NULL); - - - return eError; -} - - -static PVRSRV_ERROR DestroyDCSwapChainRefCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF *) pvParam; - PVRSRV_ERROR eError = PVRSRV_OK; - IMG_UINT32 i; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - for (i = 0; i < psSwapChainRef->psSwapChain->ui32BufferCount; i++) - { - if (psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount != 0) - { - PVR_DPF((PVR_DBG_ERROR, "DestroyDCSwapChainRefCallBack: swapchain (0x%p) still mapped (ui32MemMapRefCount = %d)", - &psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer, - psSwapChainRef->psSwapChain->asBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount)); -#if 0 - - return PVRSRV_ERROR_STILL_MAPPED; -#endif - } - } - - if(--psSwapChainRef->psSwapChain->ui32RefCount == 0) - { - eError = DestroyDCSwapChain(psSwapChainRef->psSwapChain); - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SWAPCHAIN_REF), psSwapChainRef, IMG_NULL); - return eError; -} - -static PVRSRV_DC_SWAPCHAIN* PVRSRVFindSharedDCSwapChainKM(PVRSRV_DISPLAYCLASS_INFO *psDCInfo, - IMG_UINT32 ui32SwapChainID) -{ - PVRSRV_DC_SWAPCHAIN *psCurrentSwapChain; - - for(psCurrentSwapChain = psDCInfo->psDCSwapChainShared; - psCurrentSwapChain; - psCurrentSwapChain = psCurrentSwapChain->psNext) - { - if(psCurrentSwapChain->ui32SwapChainID == ui32SwapChainID) - return psCurrentSwapChain; - } - return IMG_NULL; -} - -static PVRSRV_ERROR PVRSRVCreateDCSwapChainRefKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - PVRSRV_DC_SWAPCHAIN *psSwapChain, - PVRSRV_DC_SWAPCHAIN_REF **ppsSwapChainRef) -{ - PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = IMG_NULL; - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_DC_SWAPCHAIN_REF), - (IMG_VOID **)&psSwapChainRef, IMG_NULL, - "Display Class Swapchain Reference") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainRefKM: Failed psSwapChainRef alloc")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet (psSwapChainRef, 0, sizeof(PVRSRV_DC_SWAPCHAIN_REF)); - - - psSwapChain->ui32RefCount++; - - - psSwapChainRef->psSwapChain = psSwapChain; - psSwapChainRef->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DISPLAYCLASS_SWAPCHAIN_REF, - psSwapChainRef, - 0, - &DestroyDCSwapChainRefCallBack); - *ppsSwapChainRef = psSwapChainRef; - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVCreateDCSwapChainKM (PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDeviceKM, - IMG_UINT32 ui32Flags, - DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib, - DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib, - IMG_UINT32 ui32BufferCount, - IMG_UINT32 ui32OEMFlags, - IMG_HANDLE *phSwapChainRef, - IMG_UINT32 *pui32SwapChainID) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain = IMG_NULL; - PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = IMG_NULL; - PVRSRV_SYNC_DATA *apsSyncData[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; - PVRSRV_QUEUE_INFO *psQueue = IMG_NULL; - PVRSRV_ERROR eError; - IMG_UINT32 i; - DISPLAY_INFO sDisplayInfo; - - - if(!hDeviceKM - || !psDstSurfAttrib - || !psSrcSurfAttrib - || !phSwapChainRef - || !pui32SwapChainID) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (ui32BufferCount > PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Too many buffers")); - return PVRSRV_ERROR_TOOMANYBUFFERS; - } - - if (ui32BufferCount < 2) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Too few buffers")); - return PVRSRV_ERROR_TOO_FEW_BUFFERS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - if( ui32Flags & PVRSRV_CREATE_SWAPCHAIN_QUERY ) - { - - psSwapChain = PVRSRVFindSharedDCSwapChainKM(psDCInfo, *pui32SwapChainID ); - if( psSwapChain ) - { - - eError = PVRSRVCreateDCSwapChainRefKM(psPerProc, - psSwapChain, - &psSwapChainRef); - if( eError != PVRSRV_OK ) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Couldn't create swap chain reference")); - return eError; - } - - *phSwapChainRef = (IMG_HANDLE)psSwapChainRef; - return PVRSRV_OK; - } - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: No shared SwapChain found for query")); - return PVRSRV_ERROR_FLIP_CHAIN_EXISTS; - } - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_DC_SWAPCHAIN), - (IMG_VOID **)&psSwapChain, IMG_NULL, - "Display Class Swapchain") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Failed psSwapChain alloc")); - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorExit; - } - OSMemSet (psSwapChain, 0, sizeof(PVRSRV_DC_SWAPCHAIN)); - - - eError = PVRSRVCreateCommandQueueKM(1024, &psQueue); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Failed to create CmdQueue")); - goto ErrorExit; - } - - - psSwapChain->psQueue = psQueue; - - - for(i=0; ihDevMemContext, - &psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Failed to alloc syninfo for psSwapChain")); - goto ErrorExit; - } - - psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount++; - - - psSwapChain->asBuffer[i].sDeviceClassBuffer.pfnGetBufferAddr = psDCInfo->psFuncTable->pfnGetBufferAddr; - psSwapChain->asBuffer[i].sDeviceClassBuffer.hDevMemContext = psDCInfo->hDevMemContext; - psSwapChain->asBuffer[i].sDeviceClassBuffer.hExtDevice = psDCInfo->hExtDevice; - - - psSwapChain->asBuffer[i].psDCInfo = psDCInfo; - psSwapChain->asBuffer[i].psSwapChain = psSwapChain; - - - apsSyncData[i] = (PVRSRV_SYNC_DATA*)psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->psSyncDataMemInfoKM->pvLinAddrKM; - } - - psSwapChain->ui32BufferCount = ui32BufferCount; - psSwapChain->psDCInfo = psDCInfo; - -#if defined(PDUMP) - PDUMPCOMMENT("Allocate DC swap chain (SwapChainID == %u, BufferCount == %u)", - *pui32SwapChainID, - ui32BufferCount); - PDUMPCOMMENT(" Src surface dimensions == %u x %u", - psSrcSurfAttrib->sDims.ui32Width, - psSrcSurfAttrib->sDims.ui32Height); - PDUMPCOMMENT(" Dst surface dimensions == %u x %u", - psDstSurfAttrib->sDims.ui32Width, - psDstSurfAttrib->sDims.ui32Height); -#endif - - eError = psDCInfo->psFuncTable->pfnGetDCInfo(psDCInfo->hExtDevice, &sDisplayInfo); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Failed to get DC info")); - return eError; - } - - psSwapChain->ui32MinSwapInterval = sDisplayInfo.ui32MinSwapInterval; - psSwapChain->ui32MaxSwapInterval = sDisplayInfo.ui32MaxSwapInterval; - - - eError = psDCInfo->psFuncTable->pfnCreateDCSwapChain(psDCInfo->hExtDevice, - ui32Flags, - psDstSurfAttrib, - psSrcSurfAttrib, - ui32BufferCount, - apsSyncData, - ui32OEMFlags, - &psSwapChain->hExtSwapChain, - &psSwapChain->ui32SwapChainID); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Failed to create 3rd party SwapChain")); - PDUMPCOMMENT("Swapchain allocation failed."); - goto ErrorExit; - } - - - eError = PVRSRVCreateDCSwapChainRefKM(psPerProc, - psSwapChain, - &psSwapChainRef); - if( eError != PVRSRV_OK ) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDCSwapChainKM: Couldn't create swap chain reference")); - PDUMPCOMMENT("Swapchain allocation failed."); - goto ErrorExit; - } - - psSwapChain->ui32RefCount = 1; - psSwapChain->ui32Flags = ui32Flags; - - - if( ui32Flags & PVRSRV_CREATE_SWAPCHAIN_SHARED ) - { - if(! psDCInfo->psDCSwapChainShared ) - { - psDCInfo->psDCSwapChainShared = psSwapChain; - } - else - { - PVRSRV_DC_SWAPCHAIN *psOldHead = psDCInfo->psDCSwapChainShared; - psDCInfo->psDCSwapChainShared = psSwapChain; - psSwapChain->psNext = psOldHead; - } - } - - - *pui32SwapChainID = psSwapChain->ui32SwapChainID; - - - *phSwapChainRef= (IMG_HANDLE)psSwapChainRef; - - return eError; - -ErrorExit: - - for(i=0; iasBuffer[i].sDeviceClassBuffer.psKernelSyncInfo) - { - if (--psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount == 0) - { - PVRSRVFreeSyncInfoKM(psSwapChain->asBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - } - } - } - - if(psQueue) - { - PVRSRVDestroyCommandQueueKM(psQueue); - } - - if(psSwapChain) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_SWAPCHAIN), psSwapChain, IMG_NULL); - - } - - return eError; -} - - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetDCDstRectKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef, - IMG_RECT *psRect) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - - if(!hDeviceKM || !hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSetDCDstRectKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef)->psSwapChain; - - return psDCInfo->psFuncTable->pfnSetDCDstRect(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - psRect); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetDCSrcRectKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef, - IMG_RECT *psRect) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - - if(!hDeviceKM || !hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSetDCSrcRectKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef)->psSwapChain; - - return psDCInfo->psFuncTable->pfnSetDCSrcRect(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - psRect); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetDCDstColourKeyKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef, - IMG_UINT32 ui32CKColour) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - - if(!hDeviceKM || !hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSetDCDstColourKeyKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef)->psSwapChain; - - return psDCInfo->psFuncTable->pfnSetDCDstColourKey(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - ui32CKColour); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetDCSrcColourKeyKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef, - IMG_UINT32 ui32CKColour) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - - if(!hDeviceKM || !hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSetDCSrcColourKeyKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef)->psSwapChain; - - return psDCInfo->psFuncTable->pfnSetDCSrcColourKey(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - ui32CKColour); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef, - IMG_UINT32 *pui32BufferCount, - IMG_HANDLE *phBuffer) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - IMG_HANDLE ahExtBuffer[PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS]; - PVRSRV_ERROR eError; - IMG_UINT32 i; - - if(!hDeviceKM || !hSwapChainRef || !phBuffer) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetDCBuffersKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChain = ((PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef)->psSwapChain; - - - eError = psDCInfo->psFuncTable->pfnGetDCBuffers(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - pui32BufferCount, - ahExtBuffer); - - PVR_ASSERT(*pui32BufferCount <= PVRSRV_MAX_DC_SWAPCHAIN_BUFFERS); - - - - - for(i=0; i<*pui32BufferCount; i++) - { - psSwapChain->asBuffer[i].sDeviceClassBuffer.hExtBuffer = ahExtBuffer[i]; - phBuffer[i] = (IMG_HANDLE)&psSwapChain->asBuffer[i]; - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hBuffer, - IMG_UINT32 ui32SwapInterval, - IMG_HANDLE hPrivateTag, - IMG_UINT32 ui32ClipRectCount, - IMG_RECT *psClipRect) -{ - PVRSRV_ERROR eError; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_BUFFER *psBuffer; - PVRSRV_QUEUE_INFO *psQueue; - DISPLAYCLASS_FLIP_COMMAND *psFlipCmd; - IMG_UINT32 i; - IMG_BOOL bAddReferenceToLast = IMG_TRUE; - IMG_UINT16 ui16SwapCommandID = DC_FLIP_COMMAND; - IMG_UINT32 ui32NumSrcSyncs = 1; - PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[2]; - PVRSRV_COMMAND *psCommand; - SYS_DATA *psSysData; - - if(!hDeviceKM || !hBuffer || !psClipRect) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psBuffer = (PVRSRV_DC_BUFFER*)hBuffer; - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - - - if(ui32SwapInterval < psBuffer->psSwapChain->ui32MinSwapInterval || - ui32SwapInterval > psBuffer->psSwapChain->ui32MaxSwapInterval) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Invalid swap interval. Requested %u, Allowed range %u-%u", - ui32SwapInterval, psBuffer->psSwapChain->ui32MinSwapInterval, psBuffer->psSwapChain->ui32MaxSwapInterval)); - return PVRSRV_ERROR_INVALID_SWAPINTERVAL; - } - -#if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS) - - if(psDCInfo->psFuncTable->pfnQuerySwapCommandID != IMG_NULL) - { - psDCInfo->psFuncTable->pfnQuerySwapCommandID(psDCInfo->hExtDevice, - psBuffer->psSwapChain->hExtSwapChain, - psBuffer->sDeviceClassBuffer.hExtBuffer, - hPrivateTag, - &ui16SwapCommandID, - &bAddReferenceToLast); - - } - -#endif - - - psQueue = psBuffer->psSwapChain->psQueue; - - - apsSrcSync[0] = psBuffer->sDeviceClassBuffer.psKernelSyncInfo; - - - - if(bAddReferenceToLast && psBuffer->psSwapChain->psLastFlipBuffer && - psBuffer != psBuffer->psSwapChain->psLastFlipBuffer) - { - apsSrcSync[1] = psBuffer->psSwapChain->psLastFlipBuffer->sDeviceClassBuffer.psKernelSyncInfo; - - - - ui32NumSrcSyncs++; - } - - - eError = PVRSRVInsertCommandKM (psQueue, - &psCommand, - psDCInfo->ui32DeviceID, - ui16SwapCommandID, - 0, - IMG_NULL, - ui32NumSrcSyncs, - apsSrcSync, - sizeof(DISPLAYCLASS_FLIP_COMMAND) + (sizeof(IMG_RECT) * ui32ClipRectCount)); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to get space in queue")); - goto Exit; - } - - - psFlipCmd = (DISPLAYCLASS_FLIP_COMMAND*)psCommand->pvData; - - - psFlipCmd->hExtDevice = psDCInfo->hExtDevice; - - - psFlipCmd->hExtSwapChain = psBuffer->psSwapChain->hExtSwapChain; - - - psFlipCmd->hExtBuffer = psBuffer->sDeviceClassBuffer.hExtBuffer; - - - psFlipCmd->hPrivateTag = hPrivateTag; - - - psFlipCmd->ui32ClipRectCount = ui32ClipRectCount; - - psFlipCmd->psClipRect = (IMG_RECT*)((IMG_UINT8*)psFlipCmd + sizeof(DISPLAYCLASS_FLIP_COMMAND)); - - for(i=0; ipsClipRect[i] = psClipRect[i]; - } - - - psFlipCmd->ui32SwapInterval = ui32SwapInterval; - - - eError = PVRSRVSubmitCommandKM (psQueue, psCommand); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to submit command")); - goto Exit; - } - - - - SysAcquireData(&psSysData); - eError = OSScheduleMISR(psSysData); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCBufferKM: Failed to schedule MISR")); - goto Exit; - } - - - psBuffer->psSwapChain->psLastFlipBuffer = psBuffer; - -Exit: - - if(eError == PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE) - { - eError = PVRSRV_ERROR_RETRY; - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM, - IMG_HANDLE hSwapChainRef) -{ - PVRSRV_ERROR eError; - PVRSRV_QUEUE_INFO *psQueue; - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - PVRSRV_DC_SWAPCHAIN *psSwapChain; - PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef; - DISPLAYCLASS_FLIP_COMMAND *psFlipCmd; - IMG_UINT32 ui32NumSrcSyncs = 1; - PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[2]; - PVRSRV_COMMAND *psCommand; - IMG_BOOL bAddReferenceToLast = IMG_TRUE; - IMG_UINT16 ui16SwapCommandID = DC_FLIP_COMMAND; - SYS_DATA *psSysData; - - if(!hDeviceKM || !hSwapChainRef) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDCInfo = DCDeviceHandleToDCInfo(hDeviceKM); - psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF*)hSwapChainRef; - psSwapChain = psSwapChainRef->psSwapChain; - - - psQueue = psSwapChain->psQueue; - -#if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS) - - if(psDCInfo->psFuncTable->pfnQuerySwapCommandID != IMG_NULL) - { - psDCInfo->psFuncTable->pfnQuerySwapCommandID(psDCInfo->hExtDevice, - psSwapChain->hExtSwapChain, - psDCInfo->sSystemBuffer.sDeviceClassBuffer.hExtBuffer, - 0, - &ui16SwapCommandID, - &bAddReferenceToLast); - - } - -#endif - - - apsSrcSync[0] = psDCInfo->sSystemBuffer.sDeviceClassBuffer.psKernelSyncInfo; - - - - if(bAddReferenceToLast && psSwapChain->psLastFlipBuffer) - { - - if (apsSrcSync[0] != psSwapChain->psLastFlipBuffer->sDeviceClassBuffer.psKernelSyncInfo) - { - apsSrcSync[1] = psSwapChain->psLastFlipBuffer->sDeviceClassBuffer.psKernelSyncInfo; - - - - ui32NumSrcSyncs++; - } - } - - - eError = PVRSRVInsertCommandKM (psQueue, - &psCommand, - psDCInfo->ui32DeviceID, - ui16SwapCommandID, - 0, - IMG_NULL, - ui32NumSrcSyncs, - apsSrcSync, - sizeof(DISPLAYCLASS_FLIP_COMMAND)); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to get space in queue")); - goto Exit; - } - - - psFlipCmd = (DISPLAYCLASS_FLIP_COMMAND*)psCommand->pvData; - - - psFlipCmd->hExtDevice = psDCInfo->hExtDevice; - - - psFlipCmd->hExtSwapChain = psSwapChain->hExtSwapChain; - - - psFlipCmd->hExtBuffer = psDCInfo->sSystemBuffer.sDeviceClassBuffer.hExtBuffer; - - - psFlipCmd->hPrivateTag = IMG_NULL; - - - psFlipCmd->ui32ClipRectCount = 0; - - psFlipCmd->ui32SwapInterval = 1; - - - eError = PVRSRVSubmitCommandKM (psQueue, psCommand); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to submit command")); - goto Exit; - } - - - SysAcquireData(&psSysData); - eError = OSScheduleMISR(psSysData); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVSwapToDCSystemKM: Failed to schedule MISR")); - goto Exit; - } - - - psSwapChain->psLastFlipBuffer = &psDCInfo->sSystemBuffer; - - eError = PVRSRV_OK; - -Exit: - - if(eError == PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE) - { - eError = PVRSRV_ERROR_RETRY; - } - - return eError; -} - - -static -PVRSRV_ERROR PVRSRVRegisterSystemISRHandler (PFN_ISR_HANDLER pfnISRHandler, - IMG_VOID *pvISRHandlerData, - IMG_UINT32 ui32ISRSourceMask, - IMG_UINT32 ui32DeviceID) -{ - SYS_DATA *psSysData; - PVRSRV_DEVICE_NODE *psDevNode; - - PVR_UNREFERENCED_PARAMETER(ui32ISRSourceMask); - - SysAcquireData(&psSysData); - - - psDevNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DeviceID, - IMG_TRUE); - - if (psDevNode == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterSystemISRHandler: Failed to get psDevNode")); - PVR_DBG_BREAK; - return PVRSRV_ERROR_NO_DEVICENODE_FOUND; - } - - - psDevNode->pvISRData = (IMG_VOID*) pvISRHandlerData; - - - psDevNode->pfnDeviceISR = pfnISRHandler; - - return PVRSRV_OK; -} - -static -IMG_VOID PVRSRVSetDCState_ForEachVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - PVRSRV_DISPLAYCLASS_INFO *psDCInfo; - IMG_UINT32 ui32State; - ui32State = va_arg(va, IMG_UINT32); - - if (psDeviceNode->sDevId.eDeviceClass == PVRSRV_DEVICE_CLASS_DISPLAY) - { - psDCInfo = (PVRSRV_DISPLAYCLASS_INFO *)psDeviceNode->pvDevice; - if (psDCInfo->psFuncTable->pfnSetDCState && psDCInfo->hExtDevice) - { - psDCInfo->psFuncTable->pfnSetDCState(psDCInfo->hExtDevice, ui32State); - } - } -} - - -IMG_VOID IMG_CALLCONV PVRSRVSetDCState(IMG_UINT32 ui32State) -{ - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - List_PVRSRV_DEVICE_NODE_ForEach_va(psSysData->psDeviceNodeList, - &PVRSRVSetDCState_ForEachVaCb, - ui32State); -} - - -IMG_EXPORT -IMG_BOOL PVRGetDisplayClassJTable(PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable) -{ - psJTable->ui32TableSize = sizeof(PVRSRV_DC_DISP2SRV_KMJTABLE); - psJTable->pfnPVRSRVRegisterDCDevice = &PVRSRVRegisterDCDeviceKM; - psJTable->pfnPVRSRVRemoveDCDevice = &PVRSRVRemoveDCDeviceKM; - psJTable->pfnPVRSRVOEMFunction = &SysOEMFunction; - psJTable->pfnPVRSRVRegisterCmdProcList = &PVRSRVRegisterCmdProcListKM; - psJTable->pfnPVRSRVRemoveCmdProcList = &PVRSRVRemoveCmdProcListKM; -#if defined(SUPPORT_MISR_IN_THREAD) - psJTable->pfnPVRSRVCmdComplete = &OSVSyncMISR; -#else - psJTable->pfnPVRSRVCmdComplete = &PVRSRVCommandCompleteKM; -#endif - psJTable->pfnPVRSRVRegisterSystemISRHandler = &PVRSRVRegisterSystemISRHandler; - psJTable->pfnPVRSRVRegisterPowerDevice = &PVRSRVRegisterPowerDevice; -#if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS) - psJTable->pfnPVRSRVFreeCmdCompletePacket = &PVRSRVFreeCommandCompletePacketKM; -#endif - - return IMG_TRUE; -} - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVCloseBCDeviceKM (IMG_HANDLE hDeviceKM, - IMG_BOOL bResManCallback) -{ - PVRSRV_ERROR eError; - PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; - - PVR_UNREFERENCED_PARAMETER(bResManCallback); - - psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)hDeviceKM; - - - eError = ResManFreeResByPtr(psBCPerContextInfo->hResItem, CLEANUP_WITH_POLL); - - return eError; -} - - -static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - IMG_UINT32 i; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)pvParam; - - psBCInfo = psBCPerContextInfo->psBCInfo; - - for (i = 0; i < psBCInfo->ui32BufferCount; i++) - { - if (psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount != 0) - { - PVR_DPF((PVR_DBG_ERROR, "CloseBCDeviceCallBack: buffer %d (0x%p) still mapped (ui32MemMapRefCount = %d)", - i, - &psBCInfo->psBuffer[i].sDeviceClassBuffer, - psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount)); - return PVRSRV_ERROR_STILL_MAPPED; - } - } - - psBCInfo->ui32RefCount--; - if(psBCInfo->ui32RefCount == 0) - { - - psBCInfo->psFuncTable->pfnCloseBCDevice(psBCInfo->ui32DeviceID, psBCInfo->hExtDevice); - - - for(i=0; iui32BufferCount; i++) - { - if(psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo) - { - if (--psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount == 0) - { - PVRSRVFreeSyncInfoKM(psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - } - } - } - - - if(psBCInfo->psBuffer) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BC_BUFFER) * psBCInfo->ui32BufferCount, psBCInfo->psBuffer, IMG_NULL); - psBCInfo->psBuffer = IMG_NULL; - } - } - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BUFFERCLASS_PERCONTEXT_INFO), psBCPerContextInfo, IMG_NULL); - - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVOpenBCDeviceKM (PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32DeviceID, - IMG_HANDLE hDevCookie, - IMG_HANDLE *phDeviceKM) -{ - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - IMG_UINT32 i; - PVRSRV_ERROR eError; - - if(!phDeviceKM || !hDevCookie) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Invalid params")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - SysAcquireData(&psSysData); - - - psDeviceNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DeviceID, - IMG_FALSE, - PVRSRV_DEVICE_CLASS_BUFFER); - if (!psDeviceNode) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: No devnode matching index %d", ui32DeviceID)); - return PVRSRV_ERROR_NO_DEVICENODE_FOUND; - } - psBCInfo = (PVRSRV_BUFFERCLASS_INFO*)psDeviceNode->pvDevice; - - - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*psBCPerContextInfo), - (IMG_VOID **)&psBCPerContextInfo, IMG_NULL, - "Buffer Class per Context Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Failed psBCPerContextInfo alloc")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet(psBCPerContextInfo, 0, sizeof(*psBCPerContextInfo)); - - if(psBCInfo->ui32RefCount++ == 0) - { - BUFFER_INFO sBufferInfo; - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevCookie; - - - psBCInfo->hDevMemContext = (IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext; - - - eError = psBCInfo->psFuncTable->pfnOpenBCDevice(ui32DeviceID, &psBCInfo->hExtDevice); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Failed to open external BC device")); - return eError; - } - - - eError = psBCInfo->psFuncTable->pfnGetBCInfo(psBCInfo->hExtDevice, &sBufferInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM : Failed to get BC Info")); - return eError; - } - - - psBCInfo->ui32BufferCount = sBufferInfo.ui32BufferCount; - - - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_BC_BUFFER) * sBufferInfo.ui32BufferCount, - (IMG_VOID **)&psBCInfo->psBuffer, - IMG_NULL, - "Array of Buffer Class Buffer"); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Failed to allocate BC buffers")); - return eError; - } - OSMemSet (psBCInfo->psBuffer, - 0, - sizeof(PVRSRV_BC_BUFFER) * sBufferInfo.ui32BufferCount); - - for(i=0; iui32BufferCount; i++) - { - - eError = PVRSRVAllocSyncInfoKM(IMG_NULL, - psBCInfo->hDevMemContext, - &psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Failed sync info alloc")); - goto ErrorExit; - } - - psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount++; - - - - - eError = psBCInfo->psFuncTable->pfnGetBCBuffer(psBCInfo->hExtDevice, - i, - psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->psSyncData, - &psBCInfo->psBuffer[i].sDeviceClassBuffer.hExtBuffer); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOpenBCDeviceKM: Failed to get BC buffers")); - goto ErrorExit; - } - - - psBCInfo->psBuffer[i].sDeviceClassBuffer.pfnGetBufferAddr = psBCInfo->psFuncTable->pfnGetBufferAddr; - psBCInfo->psBuffer[i].sDeviceClassBuffer.hDevMemContext = psBCInfo->hDevMemContext; - psBCInfo->psBuffer[i].sDeviceClassBuffer.hExtDevice = psBCInfo->hExtDevice; - psBCInfo->psBuffer[i].sDeviceClassBuffer.ui32MemMapRefCount = 0; - } - } - - psBCPerContextInfo->psBCInfo = psBCInfo; - psBCPerContextInfo->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_BUFFERCLASS_DEVICE, - psBCPerContextInfo, - 0, - &CloseBCDeviceCallBack); - - - *phDeviceKM = (IMG_HANDLE)psBCPerContextInfo; - - return PVRSRV_OK; - -ErrorExit: - - - for(i=0; iui32BufferCount; i++) - { - if(psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo) - { - if (--psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo->ui32RefCount == 0) - { - PVRSRVFreeSyncInfoKM(psBCInfo->psBuffer[i].sDeviceClassBuffer.psKernelSyncInfo); - } - } - } - - - if(psBCInfo->psBuffer) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_BC_BUFFER), psBCInfo->psBuffer, IMG_NULL); - psBCInfo->psBuffer = IMG_NULL; - } - - return eError; -} - - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetBCInfoKM (IMG_HANDLE hDeviceKM, - BUFFER_INFO *psBufferInfo) -{ - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - PVRSRV_ERROR eError; - - if(!hDeviceKM || !psBufferInfo) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetBCInfoKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psBCInfo = BCDeviceHandleToBCInfo(hDeviceKM); - - eError = psBCInfo->psFuncTable->pfnGetBCInfo(psBCInfo->hExtDevice, psBufferInfo); - - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetBCInfoKM : Failed to get BC Info")); - return eError; - } - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetBCBufferKM (IMG_HANDLE hDeviceKM, - IMG_UINT32 ui32BufferIndex, - IMG_HANDLE *phBuffer) -{ - PVRSRV_BUFFERCLASS_INFO *psBCInfo; - - if(!hDeviceKM || !phBuffer) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetBCBufferKM: Invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psBCInfo = BCDeviceHandleToBCInfo(hDeviceKM); - - if(ui32BufferIndex < psBCInfo->ui32BufferCount) - { - *phBuffer = (IMG_HANDLE)&psBCInfo->psBuffer[ui32BufferIndex]; - } - else - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetBCBufferKM: Buffer index %d out of range (%d)", ui32BufferIndex,psBCInfo->ui32BufferCount)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - return PVRSRV_OK; -} - - -IMG_EXPORT -IMG_BOOL PVRGetBufferClassJTable(PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable) -{ - psJTable->ui32TableSize = sizeof(PVRSRV_BC_BUFFER2SRV_KMJTABLE); - - psJTable->pfnPVRSRVRegisterBCDevice = &PVRSRVRegisterBCDeviceKM; - psJTable->pfnPVRSRVScheduleDevices = &PVRSRVScheduleDevicesKM; - psJTable->pfnPVRSRVRemoveBCDevice = &PVRSRVRemoveBCDeviceKM; - - return IMG_TRUE; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/deviceid.h b/drivers/staging/cdv/pvr/services4/srvkm/common/deviceid.h deleted file mode 100644 index 9a7bdb3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/deviceid.h +++ /dev/null @@ -1,36 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __DEVICEID_H__ -#define __DEVICEID_H__ - -#include "services.h" -#include "syscommon.h" - -PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID); -PVRSRV_ERROR FreeDeviceID(SYS_DATA *psSysData, IMG_UINT32 ui32DevID); - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/devicemem.c b/drivers/staging/cdv/pvr/services4/srvkm/common/devicemem.c deleted file mode 100644 index cb8dccb..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/devicemem.c +++ /dev/null @@ -1,1797 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include "services_headers.h" -#include "buffer_manager.h" -#include "pdump_km.h" -#include "pvr_bridge_km.h" -#include "osfunc.h" - -static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemHeap, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo); - -typedef struct _RESMAN_MAP_DEVICE_MEM_DATA_ -{ - - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - - PVRSRV_KERNEL_MEM_INFO *psSrcMemInfo; -} RESMAN_MAP_DEVICE_MEM_DATA; - -typedef struct _PVRSRV_DC_MAPINFO_ -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_UINT32 ui32RangeIndex; - IMG_UINT32 ui32TilingStride; - PVRSRV_DEVICECLASS_BUFFER *psDeviceClassBuffer; -} PVRSRV_DC_MAPINFO; - -static IMG_UINT32 g_ui32SyncUID = 0; - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *psHeapInfo) -#else - PVRSRV_HEAP_INFO *psHeapInfo) -#endif -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_UINT32 ui32HeapCount; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - IMG_UINT32 i; - - if (hDevCookie == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetDeviceMemHeapsKM: hDevCookie invalid")); - PVR_DBG_BREAK; - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevCookie; - - - ui32HeapCount = psDeviceNode->sDevMemoryInfo.ui32HeapCount; - psDeviceMemoryHeap = psDeviceNode->sDevMemoryInfo.psDeviceMemoryHeap; - - - PVR_ASSERT(ui32HeapCount <= PVRSRV_MAX_CLIENT_HEAPS); - - - for(i=0; isDevMemoryInfo.ui32HeapCount; - psDeviceMemoryHeap = psDeviceNode->sDevMemoryInfo.psDeviceMemoryHeap; - - - - PVR_ASSERT(ui32HeapCount <= PVRSRV_MAX_CLIENT_HEAPS); - - - - hDevMemContext = BM_CreateContext(psDeviceNode, - &sPDDevPAddr, - psPerProc, - pbCreated); - if (hDevMemContext == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateDeviceMemContextKM: Failed BM_CreateContext")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - for(i=0; i 0) - { - hDevMemHeap = BM_CreateHeap(hDevMemContext, - &psDeviceMemoryHeap[i]); - if (hDevMemHeap == IMG_NULL) - { - BM_DestroyContext(hDevMemContext, IMG_NULL); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } - else - { - hDevMemHeap = IMG_NULL; - } - - - psHeapInfo[ui32ClientHeapCount].ui32HeapID = psDeviceMemoryHeap[i].ui32HeapID; - psHeapInfo[ui32ClientHeapCount].hDevMemHeap = hDevMemHeap; - psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; - psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; - psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - pbShared[ui32ClientHeapCount] = IMG_FALSE; -#endif - - ui32ClientHeapCount++; - break; - } - } - } - - - *pui32ClientHeapCount = ui32ClientHeapCount; - *phDevMemContext = hDevMemContext; - - return PVRSRV_OK; -} - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContextKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_BOOL *pbDestroyed) -{ - PVR_UNREFERENCED_PARAMETER(hDevCookie); - - return BM_DestroyContext(hDevMemContext, pbDestroyed); -} - - - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_UINT32 *pui32ClientHeapCount, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *psHeapInfo, -#else - PVRSRV_HEAP_INFO *psHeapInfo, -#endif - IMG_BOOL *pbShared) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_UINT32 ui32HeapCount, ui32ClientHeapCount=0; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - IMG_HANDLE hDevMemHeap; - IMG_UINT32 i; - -#if !defined(PVR_SECURE_HANDLES) && !defined (SUPPORT_SID_INTERFACE) - PVR_UNREFERENCED_PARAMETER(pbShared); -#endif - - if (hDevCookie == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetDeviceMemHeapInfoKM: hDevCookie invalid")); - PVR_DBG_BREAK; - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevCookie; - - - - ui32HeapCount = psDeviceNode->sDevMemoryInfo.ui32HeapCount; - psDeviceMemoryHeap = psDeviceNode->sDevMemoryInfo.psDeviceMemoryHeap; - - - - PVR_ASSERT(ui32HeapCount <= PVRSRV_MAX_CLIENT_HEAPS); - - - for(i=0; i 0) - { - hDevMemHeap = BM_CreateHeap(hDevMemContext, - &psDeviceMemoryHeap[i]); - - if (hDevMemHeap == IMG_NULL) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } - else - { - hDevMemHeap = IMG_NULL; - } - - - psHeapInfo[ui32ClientHeapCount].ui32HeapID = psDeviceMemoryHeap[i].ui32HeapID; - psHeapInfo[ui32ClientHeapCount].hDevMemHeap = hDevMemHeap; - psHeapInfo[ui32ClientHeapCount].sDevVAddrBase = psDeviceMemoryHeap[i].sDevVAddrBase; - psHeapInfo[ui32ClientHeapCount].ui32HeapByteSize = psDeviceMemoryHeap[i].ui32HeapSize; - psHeapInfo[ui32ClientHeapCount].ui32Attribs = psDeviceMemoryHeap[i].ui32Attribs; -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) - pbShared[ui32ClientHeapCount] = IMG_FALSE; -#endif - - ui32ClientHeapCount++; - break; - } - } - } - - - *pui32ClientHeapCount = ui32ClientHeapCount; - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR AllocDeviceMem(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemHeap, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - BM_HANDLE hBuffer; - - PVRSRV_MEMBLK *psMemBlock; - IMG_BOOL bBMError; - - PVR_UNREFERENCED_PARAMETER(hDevCookie); - - *ppsMemInfo = IMG_NULL; - - if(OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_KERNEL_MEM_INFO), - (IMG_VOID **)&psMemInfo, IMG_NULL, - "Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"AllocDeviceMem: Failed to alloc memory for block")); - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - - OSMemSet(psMemInfo, 0, sizeof(*psMemInfo)); - - psMemBlock = &(psMemInfo->sMemBlk); - - - psMemInfo->ui32Flags = ui32Flags | PVRSRV_MEM_RAM_BACKED_ALLOCATION; - - bBMError = BM_Alloc (hDevMemHeap, - IMG_NULL, - ui32Size, - &psMemInfo->ui32Flags, - IMG_CAST_TO_DEVVADDR_UINT(ui32Alignment), - &hBuffer); - - if (!bBMError) - { - PVR_DPF((PVR_DBG_ERROR,"AllocDeviceMem: BM_Alloc Failed")); - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - psMemBlock->sDevVirtAddr = BM_HandleToDevVaddr(hBuffer); - psMemBlock->hOSMemHandle = BM_HandleToOSMemHandle(hBuffer); - - - psMemBlock->hBuffer = (IMG_HANDLE)hBuffer; - - - - psMemInfo->pvLinAddrKM = BM_HandleToCpuVaddr(hBuffer); - - psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - - psMemInfo->uAllocSize = ui32Size; - - - psMemInfo->pvSysBackupBuffer = IMG_NULL; - - - *ppsMemInfo = psMemInfo; - - - return (PVRSRV_OK); -} - -static PVRSRV_ERROR FreeDeviceMem2(PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_BOOL bFromAllocator) -{ - BM_HANDLE hBuffer; - - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - hBuffer = psMemInfo->sMemBlk.hBuffer; - - - if (bFromAllocator) - BM_Free(hBuffer, psMemInfo->ui32Flags); - else - BM_FreeExport(hBuffer, psMemInfo->ui32Flags); - - - if ((psMemInfo->pvSysBackupBuffer) && bFromAllocator) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->uAllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); - psMemInfo->pvSysBackupBuffer = IMG_NULL; - } - - if (psMemInfo->ui32RefCount == 0) - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - - - return(PVRSRV_OK); -} - -static PVRSRV_ERROR FreeDeviceMem(PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - BM_HANDLE hBuffer; - - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - hBuffer = psMemInfo->sMemBlk.hBuffer; - - - BM_Free(hBuffer, psMemInfo->ui32Flags); - - if(psMemInfo->pvSysBackupBuffer) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, psMemInfo->uAllocSize, psMemInfo->pvSysBackupBuffer, IMG_NULL); - psMemInfo->pvSysBackupBuffer = IMG_NULL; - } - - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - - - return(PVRSRV_OK); -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - PVRSRV_KERNEL_SYNC_INFO **ppsKernelSyncInfo) -{ - IMG_HANDLE hSyncDevMemHeap; - DEVICE_MEMORY_INFO *psDevMemoryInfo; - BM_CONTEXT *pBMContext; - PVRSRV_ERROR eError; - PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo; - PVRSRV_SYNC_DATA *psSyncData; - - eError = OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_KERNEL_SYNC_INFO), - (IMG_VOID **)&psKernelSyncInfo, IMG_NULL, - "Kernel Synchronization Info"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVAllocSyncInfoKM: Failed to alloc memory")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - psKernelSyncInfo->ui32RefCount = 0; - - - pBMContext = (BM_CONTEXT*)hDevMemContext; - psDevMemoryInfo = &pBMContext->psDeviceNode->sDevMemoryInfo; - - - hSyncDevMemHeap = psDevMemoryInfo->psDeviceMemoryHeap[psDevMemoryInfo->ui32SyncHeapID].hDevMemHeap; - - - - - eError = AllocDeviceMem(hDevCookie, - hSyncDevMemHeap, - PVRSRV_MEM_CACHE_CONSISTENT, - sizeof(PVRSRV_SYNC_DATA), - sizeof(IMG_UINT32), - &psKernelSyncInfo->psSyncDataMemInfoKM); - - if (eError != PVRSRV_OK) - { - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVAllocSyncInfoKM: Failed to alloc memory")); - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_SYNC_INFO), psKernelSyncInfo, IMG_NULL); - - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - psKernelSyncInfo->psSyncData = psKernelSyncInfo->psSyncDataMemInfoKM->pvLinAddrKM; - psSyncData = psKernelSyncInfo->psSyncData; - - psSyncData->ui32WriteOpsPending = 0; - psSyncData->ui32WriteOpsComplete = 0; - psSyncData->ui32ReadOpsPending = 0; - psSyncData->ui32ReadOpsComplete = 0; - psSyncData->ui32LastOpDumpVal = 0; - psSyncData->ui32LastReadOpDumpVal = 0; - -#if defined(PDUMP) - PDUMPCOMMENT("Allocating kernel sync object"); - PDUMPMEM(psKernelSyncInfo->psSyncDataMemInfoKM->pvLinAddrKM, - psKernelSyncInfo->psSyncDataMemInfoKM, - 0, - (IMG_UINT32)psKernelSyncInfo->psSyncDataMemInfoKM->uAllocSize, - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psKernelSyncInfo->psSyncDataMemInfoKM)); -#endif - - psKernelSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr = psKernelSyncInfo->psSyncDataMemInfoKM->sDevVAddr.uiAddr + offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete); - psKernelSyncInfo->sReadOpsCompleteDevVAddr.uiAddr = psKernelSyncInfo->psSyncDataMemInfoKM->sDevVAddr.uiAddr + offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete); - psKernelSyncInfo->ui32UID = g_ui32SyncUID++; - - - psKernelSyncInfo->psSyncDataMemInfoKM->psKernelSyncInfo = IMG_NULL; - - - *ppsKernelSyncInfo = psKernelSyncInfo; - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo) -{ - PVRSRV_ERROR eError; - - if (psKernelSyncInfo->ui32RefCount != 0) - { - PVR_DPF((PVR_DBG_ERROR, "oops: sync info ref count not zero at destruction")); - - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - eError = FreeDeviceMem(psKernelSyncInfo->psSyncDataMemInfoKM); - (IMG_VOID)OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_SYNC_INFO), psKernelSyncInfo, IMG_NULL); - - - return eError; -} - -static IMG_VOID freeWrapped(PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - IMG_HANDLE hOSWrapMem = psMemInfo->sMemBlk.hOSWrapMem; - - - if(psMemInfo->sMemBlk.psIntSysPAddr) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(IMG_SYS_PHYADDR), psMemInfo->sMemBlk.psIntSysPAddr, IMG_NULL); - psMemInfo->sMemBlk.psIntSysPAddr = IMG_NULL; - } - - if(hOSWrapMem) - { - OSReleasePhysPageAddr(hOSWrapMem); - } -} - - -#if defined (PVRSRV_FLUSH_KERNEL_OPS_LAST_ONLY) -static -PVRSRV_ERROR _PollUntilAtLeast(volatile IMG_UINT32* pui32WatchedValue, - IMG_UINT32 ui32MinimumValue, - IMG_UINT32 ui32Waitus, - IMG_UINT32 ui32Tries) -{ - PVRSRV_ERROR eError; - IMG_INT32 iDiff; - - for(;;) - { - SYS_DATA *psSysData = SysAcquireDataNoCheck(); - iDiff = *pui32WatchedValue - ui32MinimumValue; - - if (iDiff >= 0) - { - eError = PVRSRV_OK; - break; - } - - if(!ui32Tries) - { - eError = PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE; - break; - } - - ui32Tries--; - - - if (psSysData->psGlobalEventObject) - { - IMG_HANDLE hOSEventKM; - if(psSysData->psGlobalEventObject) - { - eError = OSEventObjectOpenKM(psSysData->psGlobalEventObject, &hOSEventKM); - if (eError |= PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "_PollUntilAtLeast: OSEventObjectOpen failed")); - goto Exit; - } - eError = OSEventObjectWaitKM(hOSEventKM); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "_PollUntilAtLeast: PVRSRVEventObjectWait failed")); - goto Exit; - } - eError = OSEventObjectCloseKM(psSysData->psGlobalEventObject, hOSEventKM); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "_PollUntilAtLeast: OSEventObjectClose failed")); - } - } - } - } -Exit: - return eError; -} - -static PVRSRV_ERROR FlushKernelOps(PVRSRV_SYNC_DATA *psSyncData) -{ - PVRSRV_ERROR eError; - - if(!psSyncData) - { - PVR_DPF((PVR_DBG_ERROR, "FlushKernelOps: invalid psSyncData")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - - - - - - - - - eError = _PollUntilAtLeast(&psSyncData->ui32ReadOpsComplete, - psSyncData->ui32ReadOpsPending, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FlushClientOps: Read ops pending timeout")); - PVR_DBG_BREAK; - return eError; - } - - eError = _PollUntilAtLeast(&psSyncData->ui32WriteOpsComplete, - psSyncData->ui32WriteOpsPending, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FlushClientOps: Write ops pending timeout")); - PVR_DBG_BREAK; - } - - return eError; -} -#endif - -static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Param, - IMG_BOOL bFromAllocator) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - - - psMemInfo->ui32RefCount--; - - if (psMemInfo->ui32RefCount == 0) - { - if(psMemInfo->ui32Flags & PVRSRV_MEM_EXPORTED) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMemInfo = 0; -#else - IMG_HANDLE hMemInfo = IMG_NULL; -#endif - - - eError = PVRSRVFindHandle(KERNEL_HANDLE_BASE, - &hMemInfo, - psMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: can't find exported meminfo in the global handle list")); - return eError; - } - - - eError = PVRSRVReleaseHandle(KERNEL_HANDLE_BASE, - hMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: PVRSRVReleaseHandle failed for exported meminfo")); - return eError; - } - } - -#if defined (PVRSRV_FLUSH_KERNEL_OPS_LAST_ONLY) - if (psMemInfo->psKernelSyncInfo) - { - if (psMemInfo->sShareMemWorkaround.bInUse) - { - - if (BM_XProcWorkaroundGetRefCount(psMemInfo->sShareMemWorkaround.ui32ShareIndex) - == 1) - { - FlushKernelOps(psMemInfo->psKernelSyncInfo->psSyncData); - } - } - else - { - - - - - - - - - FlushKernelOps(psMemInfo->psKernelSyncInfo->psSyncData); - } - } -#endif - - switch(psMemInfo->memType) - { - - case PVRSRV_MEMTYPE_WRAPPED: - freeWrapped(psMemInfo); - case PVRSRV_MEMTYPE_DEVICE: - if (psMemInfo->psKernelSyncInfo) - { - psMemInfo->psKernelSyncInfo->ui32RefCount--; - - if (psMemInfo->psKernelSyncInfo->ui32RefCount == 0) - { - eError = PVRSRVFreeSyncInfoKM(psMemInfo->psKernelSyncInfo); - } - } - case PVRSRV_MEMTYPE_DEVICECLASS: - break; - default: - PVR_DPF((PVR_DBG_ERROR, "FreeMemCallBackCommon: Unknown memType")); - eError = PVRSRV_ERROR_INVALID_MEMINFO; - } - } - - - if (eError == PVRSRV_OK) - { - eError = FreeDeviceMem2(psMemInfo, bFromAllocator); - } - - return eError; -} - -static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; - - PVR_UNREFERENCED_PARAMETER(bDummy); - - return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(hDevCookie); - - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (psMemInfo->sMemBlk.hResItem != IMG_NULL) - { - eError = ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); - } - else - { - - eError = FreeDeviceMemCallBack(psMemInfo, 0, CLEANUP_WITH_POLL); - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemHeap, - IMG_UINT32 ui32Flags, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Alignment, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - PVRSRV_ERROR eError; - BM_HEAP *psBMHeap; - IMG_HANDLE hDevMemContext; - - if (!hDevMemHeap || - (ui32Size == 0)) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - if (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK) - { - - if (((ui32Size % HOST_PAGESIZE()) != 0) || - ((ui32Alignment % HOST_PAGESIZE()) != 0)) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - } - - eError = AllocDeviceMem(hDevCookie, - hDevMemHeap, - ui32Flags, - ui32Size, - ui32Alignment, - &psMemInfo); - - if (eError != PVRSRV_OK) - { - return eError; - } - - if (ui32Flags & PVRSRV_MEM_NO_SYNCOBJ) - { - psMemInfo->psKernelSyncInfo = IMG_NULL; - } - else - { - - - - psBMHeap = (BM_HEAP*)hDevMemHeap; - hDevMemContext = (IMG_HANDLE)psBMHeap->pBMContext; - eError = PVRSRVAllocSyncInfoKM(hDevCookie, - hDevMemContext, - &psMemInfo->psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - goto free_mainalloc; - } - psMemInfo->psKernelSyncInfo->ui32RefCount++; - } - - - *ppsMemInfo = psMemInfo; - - if (ui32Flags & PVRSRV_MEM_NO_RESMAN) - { - psMemInfo->sMemBlk.hResItem = IMG_NULL; - } - else - { - - psMemInfo->sMemBlk.hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DEVICEMEM_ALLOCATION, - psMemInfo, - 0, - &FreeDeviceMemCallBack); - if (psMemInfo->sMemBlk.hResItem == IMG_NULL) - { - - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto free_mainalloc; - } - } - - - psMemInfo->ui32RefCount++; - - psMemInfo->memType = PVRSRV_MEMTYPE_DEVICE; - - - return (PVRSRV_OK); - -free_mainalloc: - FreeDeviceMem(psMemInfo); - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDissociateDeviceMemKM(IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode = hDevCookie; - - PVR_UNREFERENCED_PARAMETER(hDevCookie); - - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - eError = ResManDissociateRes(psMemInfo->sMemBlk.hResItem, psDeviceNode->hResManContext); - - PVR_ASSERT(eError == PVRSRV_OK); - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetFreeDeviceMemKM(IMG_UINT32 ui32Flags, - IMG_SIZE_T *pui32Total, - IMG_SIZE_T *pui32Free, - IMG_SIZE_T *pui32LargestBlock) -{ - - - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(pui32Total); - PVR_UNREFERENCED_PARAMETER(pui32Free); - PVR_UNREFERENCED_PARAMETER(pui32LargestBlock); - - return PVRSRV_OK; -} - - - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemoryKM (PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); -} - - -static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; - - PVR_UNREFERENCED_PARAMETER(bDummy); - - return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemContext, - IMG_SIZE_T uByteSize, - IMG_SIZE_T uPageOffset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psExtSysPAddr, - IMG_VOID *pvLinAddr, - IMG_UINT32 ui32Flags, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo) -{ - PVRSRV_KERNEL_MEM_INFO *psMemInfo = IMG_NULL; - DEVICE_MEMORY_INFO *psDevMemoryInfo; - IMG_SIZE_T ui32HostPageSize = HOST_PAGESIZE(); - IMG_HANDLE hDevMemHeap = IMG_NULL; - PVRSRV_DEVICE_NODE* psDeviceNode; - BM_HANDLE hBuffer; - PVRSRV_MEMBLK *psMemBlock; - IMG_BOOL bBMError; - BM_HEAP *psBMHeap; - PVRSRV_ERROR eError; - IMG_VOID *pvPageAlignedCPUVAddr; - IMG_SYS_PHYADDR *psIntSysPAddr = IMG_NULL; - IMG_HANDLE hOSWrapMem = IMG_NULL; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - IMG_UINT32 i; - IMG_SIZE_T uPageCount = 0; - - - psDeviceNode = (PVRSRV_DEVICE_NODE*)hDevCookie; - PVR_ASSERT(psDeviceNode != IMG_NULL); - - if (psDeviceNode == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVWrapExtMemoryKM: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if(pvLinAddr) - { - - uPageOffset = (IMG_UINTPTR_T)pvLinAddr & (ui32HostPageSize - 1); - - - uPageCount = HOST_PAGEALIGN(uByteSize + uPageOffset) / ui32HostPageSize; - pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)pvLinAddr - uPageOffset); - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - uPageCount * sizeof(IMG_SYS_PHYADDR), - (IMG_VOID **)&psIntSysPAddr, IMG_NULL, - "Array of Page Addresses") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVWrapExtMemoryKM: Failed to alloc memory for block")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - eError = OSAcquirePhysPageAddr(pvPageAlignedCPUVAddr, - uPageCount * ui32HostPageSize, - psIntSysPAddr, - &hOSWrapMem); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVWrapExtMemoryKM: Failed to alloc memory for block")); - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorExitPhase1; - } - - - psExtSysPAddr = psIntSysPAddr; - - - - bPhysContig = IMG_FALSE; - } - else - { - - } - - - psDevMemoryInfo = &((BM_CONTEXT*)hDevMemContext)->psDeviceNode->sDevMemoryInfo; - psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; - for(i=0; iui32MappingHeapID) - { - if(psDeviceMemoryHeap[i].DevMemHeapType == DEVICE_MEMORY_HEAP_PERCONTEXT) - { - - if (psDeviceMemoryHeap[i].ui32HeapSize > 0) - { - hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); - } - else - { - hDevMemHeap = IMG_NULL; - } - } - else - { - hDevMemHeap = psDevMemoryInfo->psDeviceMemoryHeap[i].hDevMemHeap; - } - break; - } - } - - if(hDevMemHeap == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVWrapExtMemoryKM: unable to find mapping heap")); - eError = PVRSRV_ERROR_UNABLE_TO_FIND_MAPPING_HEAP; - goto ErrorExitPhase2; - } - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO), - (IMG_VOID **)&psMemInfo, IMG_NULL, - "Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVWrapExtMemoryKM: Failed to alloc memory for block")); - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorExitPhase2; - } - - OSMemSet(psMemInfo, 0, sizeof(*psMemInfo)); - psMemInfo->ui32Flags = ui32Flags; - - psMemBlock = &(psMemInfo->sMemBlk); - - bBMError = BM_Wrap(hDevMemHeap, - uByteSize, - uPageOffset, - bPhysContig, - psExtSysPAddr, - IMG_NULL, - &psMemInfo->ui32Flags, - &hBuffer); - if (!bBMError) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVWrapExtMemoryKM: BM_Wrap Failed")); - eError = PVRSRV_ERROR_BAD_MAPPING; - goto ErrorExitPhase3; - } - - - psMemBlock->sDevVirtAddr = BM_HandleToDevVaddr(hBuffer); - psMemBlock->hOSMemHandle = BM_HandleToOSMemHandle(hBuffer); - psMemBlock->hOSWrapMem = hOSWrapMem; - psMemBlock->psIntSysPAddr = psIntSysPAddr; - - - psMemBlock->hBuffer = (IMG_HANDLE)hBuffer; - - - psMemInfo->pvLinAddrKM = BM_HandleToCpuVaddr(hBuffer); - psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->uAllocSize = uByteSize; - - - - psMemInfo->pvSysBackupBuffer = IMG_NULL; - - - - - psBMHeap = (BM_HEAP*)hDevMemHeap; - hDevMemContext = (IMG_HANDLE)psBMHeap->pBMContext; - eError = PVRSRVAllocSyncInfoKM(hDevCookie, - hDevMemContext, - &psMemInfo->psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - goto ErrorExitPhase4; - } - - psMemInfo->psKernelSyncInfo->ui32RefCount++; - - - psMemInfo->ui32RefCount++; - - psMemInfo->memType = PVRSRV_MEMTYPE_WRAPPED; - - - psMemInfo->sMemBlk.hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DEVICEMEM_WRAP, - psMemInfo, - 0, - &UnwrapExtMemoryCallBack); - - - *ppsMemInfo = psMemInfo; - - return PVRSRV_OK; - - - -ErrorExitPhase4: - if(psMemInfo) - { - FreeDeviceMem(psMemInfo); - - - - psMemInfo = IMG_NULL; - } - -ErrorExitPhase3: - if(psMemInfo) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - - } - -ErrorExitPhase2: - if(psIntSysPAddr) - { - OSReleasePhysPageAddr(hOSWrapMem); - } - -ErrorExitPhase1: - if(psIntSysPAddr) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, uPageCount * sizeof(IMG_SYS_PHYADDR), psIntSysPAddr, IMG_NULL); - - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemoryKM (PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); -} - - -static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_ERROR eError; - RESMAN_MAP_DEVICE_MEM_DATA *psMapData = pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - if(psMapData->psMemInfo->sMemBlk.psIntSysPAddr) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(IMG_SYS_PHYADDR), psMapData->psMemInfo->sMemBlk.psIntSysPAddr, IMG_NULL); - psMapData->psMemInfo->sMemBlk.psIntSysPAddr = IMG_NULL; - } - - if( psMapData->psMemInfo->psKernelSyncInfo ) - { - psMapData->psMemInfo->psKernelSyncInfo->ui32RefCount--; - if (psMapData->psMemInfo->psKernelSyncInfo->ui32RefCount == 0) - { - eError = PVRSRVFreeSyncInfoKM(psMapData->psMemInfo->psKernelSyncInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"UnmapDeviceMemoryCallBack: Failed to free sync info")); - return eError; - } - } - } - - eError = FreeDeviceMem(psMapData->psMemInfo); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"UnmapDeviceMemoryCallBack: Failed to free DST meminfo")); - return eError; - } - - - eError = FreeMemCallBackCommon(psMapData->psSrcMemInfo, 0, IMG_FALSE); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_MAP_DEVICE_MEM_DATA), psMapData, IMG_NULL); - - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - PVRSRV_KERNEL_MEM_INFO *psSrcMemInfo, - IMG_HANDLE hDstDevMemHeap, - PVRSRV_KERNEL_MEM_INFO **ppsDstMemInfo) -{ - PVRSRV_ERROR eError; - IMG_UINT32 i; - IMG_SIZE_T uPageCount, uPageOffset; - IMG_SIZE_T ui32HostPageSize = HOST_PAGESIZE(); - IMG_SYS_PHYADDR *psSysPAddr = IMG_NULL; - IMG_DEV_PHYADDR sDevPAddr; - BM_BUF *psBuf; - IMG_DEV_VIRTADDR sDevVAddr; - PVRSRV_KERNEL_MEM_INFO *psMemInfo = IMG_NULL; - BM_HANDLE hBuffer; - PVRSRV_MEMBLK *psMemBlock; - IMG_BOOL bBMError; - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_VOID *pvPageAlignedCPUVAddr; - RESMAN_MAP_DEVICE_MEM_DATA *psMapData = IMG_NULL; - - - if(!psSrcMemInfo || !hDstDevMemHeap || !ppsDstMemInfo) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceMemoryKM: invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - *ppsDstMemInfo = IMG_NULL; - - uPageOffset = psSrcMemInfo->sDevVAddr.uiAddr & (ui32HostPageSize - 1); - uPageCount = HOST_PAGEALIGN(psSrcMemInfo->uAllocSize + uPageOffset) / ui32HostPageSize; - pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)psSrcMemInfo->pvLinAddrKM - uPageOffset); - - - - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - uPageCount*sizeof(IMG_SYS_PHYADDR), - (IMG_VOID **)&psSysPAddr, IMG_NULL, - "Array of Page Addresses") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceMemoryKM: Failed to alloc memory for block")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - psBuf = psSrcMemInfo->sMemBlk.hBuffer; - - - psDeviceNode = psBuf->pMapping->pBMHeap->pBMContext->psDeviceNode; - - - sDevVAddr.uiAddr = psSrcMemInfo->sDevVAddr.uiAddr - IMG_CAST_TO_DEVVADDR_UINT(uPageOffset); - for(i=0; isDevId.eDeviceType, sDevPAddr); - - - sDevVAddr.uiAddr += IMG_CAST_TO_DEVVADDR_UINT(ui32HostPageSize); - } - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(RESMAN_MAP_DEVICE_MEM_DATA), - (IMG_VOID **)&psMapData, IMG_NULL, - "Resource Manager Map Data") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceMemoryKM: Failed to alloc resman map data")); - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorExit; - } - - if(OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_KERNEL_MEM_INFO), - (IMG_VOID **)&psMemInfo, IMG_NULL, - "Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceMemoryKM: Failed to alloc memory for block")); - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ErrorExit; - } - - OSMemSet(psMemInfo, 0, sizeof(*psMemInfo)); - psMemInfo->ui32Flags = psSrcMemInfo->ui32Flags; - - psMemBlock = &(psMemInfo->sMemBlk); - - bBMError = BM_Wrap(hDstDevMemHeap, - psSrcMemInfo->uAllocSize, - uPageOffset, - IMG_FALSE, - psSysPAddr, - pvPageAlignedCPUVAddr, - &psMemInfo->ui32Flags, - &hBuffer); - - if (!bBMError) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceMemoryKM: BM_Wrap Failed")); - eError = PVRSRV_ERROR_BAD_MAPPING; - goto ErrorExit; - } - - - psMemBlock->sDevVirtAddr = BM_HandleToDevVaddr(hBuffer); - psMemBlock->hOSMemHandle = BM_HandleToOSMemHandle(hBuffer); - - - psMemBlock->hBuffer = (IMG_HANDLE)hBuffer; - - - psMemBlock->psIntSysPAddr = psSysPAddr; - - - psMemInfo->pvLinAddrKM = psSrcMemInfo->pvLinAddrKM; - - - psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->uAllocSize = psSrcMemInfo->uAllocSize; - psMemInfo->psKernelSyncInfo = psSrcMemInfo->psKernelSyncInfo; - - - if(psMemInfo->psKernelSyncInfo) - { - psMemInfo->psKernelSyncInfo->ui32RefCount++; - } - - - - psMemInfo->pvSysBackupBuffer = IMG_NULL; - - - psMemInfo->ui32RefCount++; - - - psSrcMemInfo->ui32RefCount++; - - - BM_Export(psSrcMemInfo->sMemBlk.hBuffer); - - psMemInfo->memType = PVRSRV_MEMTYPE_MAPPED; - - - psMapData->psMemInfo = psMemInfo; - psMapData->psSrcMemInfo = psSrcMemInfo; - - - psMemInfo->sMemBlk.hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DEVICEMEM_MAPPING, - psMapData, - 0, - &UnmapDeviceMemoryCallBack); - - *ppsDstMemInfo = psMemInfo; - - return PVRSRV_OK; - - - -ErrorExit: - - if(psSysPAddr) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(IMG_SYS_PHYADDR), psSysPAddr, IMG_NULL); - - } - - if(psMemInfo) - { - - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - - } - - if(psMapData) - { - - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(RESMAN_MAP_DEVICE_MEM_DATA), psMapData, IMG_NULL); - - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo) -{ - if (!psMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); -} - - -static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_DC_MAPINFO *psDCMapInfo = pvParam; - PVRSRV_KERNEL_MEM_INFO *psMemInfo; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - psMemInfo = psDCMapInfo->psMemInfo; - -#if defined(SUPPORT_MEMORY_TILING) - if(psDCMapInfo->ui32TilingStride > 0) - { - PVRSRV_DEVICE_NODE *psDeviceNode = psDCMapInfo->psDeviceNode; - - if (psDeviceNode->pfnFreeMemTilingRange(psDeviceNode, - psDCMapInfo->ui32RangeIndex) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"UnmapDeviceClassMemoryCallBack: FreeMemTilingRange failed")); - } - } -#endif - - (psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)--; - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL); - - return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevMemContext, - IMG_HANDLE hDeviceClassBuffer, - PVRSRV_KERNEL_MEM_INFO **ppsMemInfo, - IMG_HANDLE *phOSMapInfo) -{ - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE* psDeviceNode; - PVRSRV_KERNEL_MEM_INFO *psMemInfo = IMG_NULL; - PVRSRV_DEVICECLASS_BUFFER *psDeviceClassBuffer; - IMG_SYS_PHYADDR *psSysPAddr; - IMG_VOID *pvCPUVAddr, *pvPageAlignedCPUVAddr; - IMG_BOOL bPhysContig; - BM_CONTEXT *psBMContext; - DEVICE_MEMORY_INFO *psDevMemoryInfo; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - IMG_HANDLE hDevMemHeap = IMG_NULL; - IMG_SIZE_T uByteSize; - IMG_SIZE_T ui32Offset; - IMG_SIZE_T ui32PageSize = HOST_PAGESIZE(); - BM_HANDLE hBuffer; - PVRSRV_MEMBLK *psMemBlock; - IMG_BOOL bBMError; - IMG_UINT32 i; - PVRSRV_DC_MAPINFO *psDCMapInfo = IMG_NULL; - - if(!hDeviceClassBuffer || !ppsMemInfo || !phOSMapInfo || !hDevMemContext) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_DC_MAPINFO), - (IMG_VOID **)&psDCMapInfo, IMG_NULL, - "PVRSRV_DC_MAPINFO") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: Failed to alloc memory for psDCMapInfo")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet(psDCMapInfo, 0, sizeof(PVRSRV_DC_MAPINFO)); - - psDeviceClassBuffer = (PVRSRV_DEVICECLASS_BUFFER*)hDeviceClassBuffer; - - - - - - - - - - - - - - - - - - - - - eError = psDeviceClassBuffer->pfnGetBufferAddr(psDeviceClassBuffer->hExtDevice, - psDeviceClassBuffer->hExtBuffer, - &psSysPAddr, - &uByteSize, - &pvCPUVAddr, - phOSMapInfo, - &bPhysContig, - &psDCMapInfo->ui32TilingStride); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: unable to get buffer address")); - goto ErrorExitPhase1; - } - - - psBMContext = (BM_CONTEXT*)psDeviceClassBuffer->hDevMemContext; - psDeviceNode = psBMContext->psDeviceNode; - psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; - psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; - for(i=0; iui32MappingHeapID) - { - if(psDeviceMemoryHeap[i].DevMemHeapType == DEVICE_MEMORY_HEAP_PERCONTEXT) - { - - if (psDeviceMemoryHeap[i].ui32HeapSize > 0) - { - hDevMemHeap = BM_CreateHeap(hDevMemContext, &psDeviceMemoryHeap[i]); - } - else - { - hDevMemHeap = IMG_NULL; - } - } - else - { - hDevMemHeap = psDevMemoryInfo->psDeviceMemoryHeap[i].hDevMemHeap; - } - break; - } - } - - if(hDevMemHeap == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: unable to find mapping heap")); - eError = PVRSRV_ERROR_UNABLE_TO_FIND_RESOURCE; - goto ErrorExitPhase1; - } - - - ui32Offset = ((IMG_UINTPTR_T)pvCPUVAddr) & (ui32PageSize - 1); - pvPageAlignedCPUVAddr = (IMG_VOID *)((IMG_UINTPTR_T)pvCPUVAddr - ui32Offset); - - eError = OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_KERNEL_MEM_INFO), - (IMG_VOID **)&psMemInfo, IMG_NULL, - "Kernel Memory Info"); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: Failed to alloc memory for block")); - goto ErrorExitPhase1; - } - - OSMemSet(psMemInfo, 0, sizeof(*psMemInfo)); - - psMemBlock = &(psMemInfo->sMemBlk); - - bBMError = BM_Wrap(hDevMemHeap, - uByteSize, - ui32Offset, - bPhysContig, - psSysPAddr, - pvPageAlignedCPUVAddr, - &psMemInfo->ui32Flags, - &hBuffer); - - if (!bBMError) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: BM_Wrap Failed")); - - eError = PVRSRV_ERROR_BAD_MAPPING; - goto ErrorExitPhase2; - } - - - psMemBlock->sDevVirtAddr = BM_HandleToDevVaddr(hBuffer); - psMemBlock->hOSMemHandle = BM_HandleToOSMemHandle(hBuffer); - - - psMemBlock->hBuffer = (IMG_HANDLE)hBuffer; - - - - psMemInfo->pvLinAddrKM = BM_HandleToCpuVaddr(hBuffer); - - - psMemInfo->sDevVAddr = psMemBlock->sDevVirtAddr; - psMemInfo->uAllocSize = uByteSize; - psMemInfo->psKernelSyncInfo = psDeviceClassBuffer->psKernelSyncInfo; - - - - psMemInfo->pvSysBackupBuffer = IMG_NULL; - - - psDCMapInfo->psMemInfo = psMemInfo; - psDCMapInfo->psDeviceClassBuffer = psDeviceClassBuffer; - -#if defined(SUPPORT_MEMORY_TILING) - psDCMapInfo->psDeviceNode = psDeviceNode; - - if(psDCMapInfo->ui32TilingStride > 0) - { - - eError = psDeviceNode->pfnAllocMemTilingRange(psDeviceNode, - psMemInfo, - psDCMapInfo->ui32TilingStride, - &psDCMapInfo->ui32RangeIndex); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVMapDeviceClassMemoryKM: AllocMemTilingRange failed")); - goto ErrorExitPhase3; - } - } -#endif - - - psMemInfo->sMemBlk.hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_DEVICECLASSMEM_MAPPING, - psDCMapInfo, - 0, - &UnmapDeviceClassMemoryCallBack); - - (psDeviceClassBuffer->ui32MemMapRefCount)++; - psMemInfo->ui32RefCount++; - - psMemInfo->memType = PVRSRV_MEMTYPE_DEVICECLASS; - - - *ppsMemInfo = psMemInfo; - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - PDUMPCOMMENT("Dump display surface"); - PDUMPMEM(IMG_NULL, psMemInfo, ui32Offset, psMemInfo->uAllocSize, PDUMP_FLAGS_CONTINUOUS, ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping); -#endif - return PVRSRV_OK; - -#if defined(SUPPORT_MEMORY_TILING) -ErrorExitPhase3: - if(psMemInfo) - { - FreeDeviceMem(psMemInfo); - - - - psMemInfo = IMG_NULL; - } -#endif - -ErrorExitPhase2: - if(psMemInfo) - { - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_KERNEL_MEM_INFO), psMemInfo, IMG_NULL); - } - -ErrorExitPhase1: - if(psDCMapInfo) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_KERNEL_MEM_INFO), psDCMapInfo, IMG_NULL); - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVChangeDeviceMemoryAttributesKM(IMG_HANDLE hKernelMemInfo, IMG_UINT32 ui32Attribs) -{ - PVRSRV_KERNEL_MEM_INFO *psKMMemInfo; - - if (hKernelMemInfo == IMG_NULL) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psKMMemInfo = (PVRSRV_KERNEL_MEM_INFO *)hKernelMemInfo; - - if (ui32Attribs & PVRSRV_CHANGEDEVMEM_ATTRIBS_CACHECOHERENT) - { - psKMMemInfo->ui32Flags |= PVRSRV_MEM_CACHE_CONSISTENT; - } - else - { - psKMMemInfo->ui32Flags &= ~PVRSRV_MEM_CACHE_CONSISTENT; - } - - return PVRSRV_OK; -} - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/handle.c b/drivers/staging/cdv/pvr/services4/srvkm/common/handle.c deleted file mode 100644 index d911b38..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/handle.c +++ /dev/null @@ -1,1873 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) -#include - -#include "services_headers.h" -#include "handle.h" - -#ifdef DEBUG -#define HANDLE_BLOCK_SHIFT 2 -#else -#define HANDLE_BLOCK_SHIFT 8 -#endif - -#define DIVIDE_BY_BLOCK_SIZE(i) (((IMG_UINT32)(i)) >> HANDLE_BLOCK_SHIFT) -#define MULTIPLY_BY_BLOCK_SIZE(i) (((IMG_UINT32)(i)) << HANDLE_BLOCK_SHIFT) - -#define HANDLE_BLOCK_SIZE MULTIPLY_BY_BLOCK_SIZE(1) -#define HANDLE_SUB_BLOCK_MASK (HANDLE_BLOCK_SIZE - 1) -#define HANDLE_BLOCK_MASK (~(HANDLE_SUB_BLOCK_MASK)) - -#define HANDLE_HASH_TAB_INIT_SIZE 32 - -#define INDEX_IS_VALID(psBase, i) ((i) < (psBase)->ui32TotalHandCount) - -#if defined (SUPPORT_SID_INTERFACE) -#define INDEX_TO_HANDLE(i) ((IMG_SID)((i) + 1)) -#define HANDLE_TO_INDEX(h) ((IMG_UINT32)(h) - 1) -#else -#define INDEX_TO_HANDLE(i) ((IMG_HANDLE)((IMG_UINTPTR_T)(i) + 1)) -#define HANDLE_TO_INDEX(h) ((IMG_UINT32)(IMG_UINTPTR_T)(h) - 1) - -#endif - -#define INDEX_TO_BLOCK_INDEX(i) DIVIDE_BY_BLOCK_SIZE(i) -#define BLOCK_INDEX_TO_INDEX(i) MULTIPLY_BY_BLOCK_SIZE(i) -#define INDEX_TO_SUB_BLOCK_INDEX(i) ((i) & HANDLE_SUB_BLOCK_MASK) - -#define INDEX_TO_INDEX_STRUCT_PTR(psArray, i) (&((psArray)[INDEX_TO_BLOCK_INDEX(i)])) -#define BASE_AND_INDEX_TO_INDEX_STRUCT_PTR(psBase, i) INDEX_TO_INDEX_STRUCT_PTR((psBase)->psHandleArray, i) - -#define INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, i) (BASE_AND_INDEX_TO_INDEX_STRUCT_PTR(psBase, i)->ui32FreeHandBlockCount) - -#define INDEX_TO_HANDLE_STRUCT_PTR(psBase, i) (BASE_AND_INDEX_TO_INDEX_STRUCT_PTR(psBase, i)->psHandle + INDEX_TO_SUB_BLOCK_INDEX(i)) - -#define HANDLE_TO_HANDLE_STRUCT_PTR(psBase, h) (INDEX_TO_HANDLE_STRUCT_PTR(psBase, HANDLE_TO_INDEX(h))) - -#define HANDLE_PTR_TO_INDEX(psHandle) ((psHandle)->ui32Index) -#define HANDLE_PTR_TO_HANDLE(psHandle) INDEX_TO_HANDLE(HANDLE_PTR_TO_INDEX(psHandle)) - -#define ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(a) (HANDLE_BLOCK_MASK & (a)) -#define ROUND_UP_TO_MULTIPLE_OF_BLOCK_SIZE(a) ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE((a) + HANDLE_BLOCK_SIZE - 1) - -#define DEFAULT_MAX_HANDLE 0x7fffffffu -#define DEFAULT_MAX_INDEX_PLUS_ONE ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(DEFAULT_MAX_HANDLE) - -#define HANDLES_BATCHED(psBase) ((psBase)->ui32HandBatchSize != 0) - -#define HANDLE_ARRAY_SIZE(handleCount) DIVIDE_BY_BLOCK_SIZE(ROUND_UP_TO_MULTIPLE_OF_BLOCK_SIZE(handleCount)) - -#define SET_FLAG(v, f) ((IMG_VOID)((v) |= (f))) -#define CLEAR_FLAG(v, f) ((IMG_VOID)((v) &= ~(f))) -#define TEST_FLAG(v, f) ((IMG_BOOL)(((v) & (f)) != 0)) - -#define TEST_ALLOC_FLAG(psHandle, f) TEST_FLAG((psHandle)->eFlag, f) - -#define SET_INTERNAL_FLAG(psHandle, f) SET_FLAG((psHandle)->eInternalFlag, f) -#define CLEAR_INTERNAL_FLAG(psHandle, f) CLEAR_FLAG((psHandle)->eInternalFlag, f) -#define TEST_INTERNAL_FLAG(psHandle, f) TEST_FLAG((psHandle)->eInternalFlag, f) - -#define BATCHED_HANDLE(psHandle) TEST_INTERNAL_FLAG(psHandle, INTERNAL_HANDLE_FLAG_BATCHED) - -#define SET_BATCHED_HANDLE(psHandle) SET_INTERNAL_FLAG(psHandle, INTERNAL_HANDLE_FLAG_BATCHED) - -#define SET_UNBATCHED_HANDLE(psHandle) CLEAR_INTERNAL_FLAG(psHandle, INTERNAL_HANDLE_FLAG_BATCHED) - -#define BATCHED_HANDLE_PARTIALLY_FREE(psHandle) TEST_INTERNAL_FLAG(psHandle, INTERNAL_HANDLE_FLAG_BATCHED_PARTIALLY_FREE) - -#define SET_BATCHED_HANDLE_PARTIALLY_FREE(psHandle) SET_INTERNAL_FLAG(psHandle, INTERNAL_HANDLE_FLAG_BATCHED_PARTIALLY_FREE) - -#define HANDLE_STRUCT_IS_FREE(psHandle) ((psHandle)->eType == PVRSRV_HANDLE_TYPE_NONE && (psHandle)->eInternalFlag == INTERNAL_HANDLE_FLAG_NONE) - -#ifdef MIN -#undef MIN -#endif - -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) - -struct sHandleList -{ - IMG_UINT32 ui32Prev; - IMG_UINT32 ui32Next; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hParent; -#else - IMG_HANDLE hParent; -#endif -}; - -enum ePVRSRVInternalHandleFlag -{ - INTERNAL_HANDLE_FLAG_NONE = 0x00, - INTERNAL_HANDLE_FLAG_BATCHED = 0x01, - INTERNAL_HANDLE_FLAG_BATCHED_PARTIALLY_FREE = 0x02, -}; - -struct sHandle -{ - - PVRSRV_HANDLE_TYPE eType; - - - IMG_VOID *pvData; - - - IMG_UINT32 ui32NextIndexPlusOne; - - - enum ePVRSRVInternalHandleFlag eInternalFlag; - - - PVRSRV_HANDLE_ALLOC_FLAG eFlag; - - - IMG_UINT32 ui32Index; - - - struct sHandleList sChildren; - - - struct sHandleList sSiblings; -}; - -struct sHandleIndex -{ - - struct sHandle *psHandle; - - - IMG_HANDLE hBlockAlloc; - - - IMG_UINT32 ui32FreeHandBlockCount; -}; - -struct _PVRSRV_HANDLE_BASE_ -{ - - IMG_HANDLE hBaseBlockAlloc; - - - IMG_HANDLE hArrayBlockAlloc; - - - struct sHandleIndex *psHandleArray; - - - HASH_TABLE *psHashTab; - - - IMG_UINT32 ui32FreeHandCount; - - - IMG_UINT32 ui32FirstFreeIndex; - - - IMG_UINT32 ui32MaxIndexPlusOne; - - - IMG_UINT32 ui32TotalHandCount; - - - IMG_UINT32 ui32LastFreeIndexPlusOne; - - - IMG_UINT32 ui32HandBatchSize; - - - IMG_UINT32 ui32TotalHandCountPreBatch; - - - IMG_UINT32 ui32FirstBatchIndexPlusOne; - - - IMG_UINT32 ui32BatchHandAllocFailures; - - - IMG_BOOL bPurgingEnabled; -}; - -enum eHandKey { - HAND_KEY_DATA = 0, - HAND_KEY_TYPE, - HAND_KEY_PARENT, - HAND_KEY_LEN -}; - -PVRSRV_HANDLE_BASE *gpsKernelHandleBase = IMG_NULL; - -typedef IMG_UINTPTR_T HAND_KEY[HAND_KEY_LEN]; - -#ifdef INLINE_IS_PRAGMA -#pragma inline(HandleListInit) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_SID hParent) -#else -IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_HANDLE hParent) -#endif -{ - psList->ui32Next = ui32Index; - psList->ui32Prev = ui32Index; - psList->hParent = hParent; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(InitParentList) -#endif -static INLINE -IMG_VOID InitParentList(struct sHandle *psHandle) -{ - IMG_UINT32 ui32Parent = HANDLE_PTR_TO_INDEX(psHandle); - - HandleListInit(ui32Parent, &psHandle->sChildren, INDEX_TO_HANDLE(ui32Parent)); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(InitChildEntry) -#endif -static INLINE -IMG_VOID InitChildEntry(struct sHandle *psHandle) -{ - HandleListInit(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings, IMG_NULL); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(HandleListIsEmpty) -#endif -static INLINE -IMG_BOOL HandleListIsEmpty(IMG_UINT32 ui32Index, struct sHandleList *psList) -{ - IMG_BOOL bIsEmpty; - - bIsEmpty = (IMG_BOOL)(psList->ui32Next == ui32Index); - -#ifdef DEBUG - { - IMG_BOOL bIsEmpty2; - - bIsEmpty2 = (IMG_BOOL)(psList->ui32Prev == ui32Index); - PVR_ASSERT(bIsEmpty == bIsEmpty2) - } -#endif - - return bIsEmpty; -} - -#ifdef DEBUG -#ifdef INLINE_IS_PRAGMA -#pragma inline(NoChildren) -#endif -static INLINE -IMG_BOOL NoChildren(struct sHandle *psHandle) -{ - PVR_ASSERT(psHandle->sChildren.hParent == HANDLE_PTR_TO_HANDLE(psHandle)) - - return HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sChildren); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(NoParent) -#endif -static INLINE -IMG_BOOL NoParent(struct sHandle *psHandle) -{ - if (HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings)) - { - PVR_ASSERT(psHandle->sSiblings.hParent == IMG_NULL) - - return IMG_TRUE; - } - else - { - PVR_ASSERT(psHandle->sSiblings.hParent != IMG_NULL) - } - return IMG_FALSE; -} -#endif -#ifdef INLINE_IS_PRAGMA -#pragma inline(ParentHandle) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -IMG_SID ParentHandle(struct sHandle *psHandle) -#else -IMG_HANDLE ParentHandle(struct sHandle *psHandle) -#endif -{ - return psHandle->sSiblings.hParent; -} - -#define LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, i, p, po, eo) \ - ((struct sHandleList *)((IMG_CHAR *)(INDEX_TO_HANDLE_STRUCT_PTR(psBase, i)) + (((i) == (p)) ? (po) : (eo)))) - -#ifdef INLINE_IS_PRAGMA -#pragma inline(HandleListInsertBefore) -#endif -static INLINE -IMG_VOID HandleListInsertBefore(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32InsIndex, struct sHandleList *psIns, IMG_SIZE_T uiParentOffset, IMG_UINT32 ui32EntryIndex, struct sHandleList *psEntry, IMG_SIZE_T uiEntryOffset, IMG_UINT32 ui32ParentIndex) -{ - - struct sHandleList *psPrevIns = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psIns->ui32Prev, ui32ParentIndex, uiParentOffset, uiEntryOffset); - - PVR_ASSERT(psEntry->hParent == IMG_NULL) - PVR_ASSERT(ui32InsIndex == psPrevIns->ui32Next) - PVR_ASSERT(LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32ParentIndex, ui32ParentIndex, uiParentOffset, uiParentOffset)->hParent == INDEX_TO_HANDLE(ui32ParentIndex)) - - psEntry->ui32Prev = psIns->ui32Prev; - psIns->ui32Prev = ui32EntryIndex; - psEntry->ui32Next = ui32InsIndex; - psPrevIns->ui32Next = ui32EntryIndex; - - psEntry->hParent = INDEX_TO_HANDLE(ui32ParentIndex); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(AdoptChild) -#endif -static INLINE -IMG_VOID AdoptChild(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psParent, struct sHandle *psChild) -{ - IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psParent->sChildren.hParent); - - PVR_ASSERT(ui32Parent == HANDLE_PTR_TO_INDEX(psParent)) - - HandleListInsertBefore(psBase, ui32Parent, &psParent->sChildren, offsetof(struct sHandle, sChildren), HANDLE_PTR_TO_INDEX(psChild), &psChild->sSiblings, offsetof(struct sHandle, sSiblings), ui32Parent); - -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(HandleListRemove) -#endif -static INLINE -IMG_VOID HandleListRemove(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32EntryIndex, struct sHandleList *psEntry, IMG_SIZE_T uiEntryOffset, IMG_SIZE_T uiParentOffset) -{ - if (!HandleListIsEmpty(ui32EntryIndex, psEntry)) - { - - struct sHandleList *psPrev = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psEntry->ui32Prev, HANDLE_TO_INDEX(psEntry->hParent), uiParentOffset, uiEntryOffset); - struct sHandleList *psNext = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psEntry->ui32Next, HANDLE_TO_INDEX(psEntry->hParent), uiParentOffset, uiEntryOffset); - - - PVR_ASSERT(psEntry->hParent != IMG_NULL) - - psPrev->ui32Next = psEntry->ui32Next; - psNext->ui32Prev = psEntry->ui32Prev; - - HandleListInit(ui32EntryIndex, psEntry, IMG_NULL); - } -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(UnlinkFromParent) -#endif -static INLINE -IMG_VOID UnlinkFromParent(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHandle) -{ - HandleListRemove(psBase, HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings, offsetof(struct sHandle, sSiblings), offsetof(struct sHandle, sChildren)); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(HandleListIterate) -#endif -static INLINE -PVRSRV_ERROR HandleListIterate(PVRSRV_HANDLE_BASE *psBase, struct sHandleList *psHead, IMG_SIZE_T uiParentOffset, IMG_SIZE_T uiEntryOffset, PVRSRV_ERROR (*pfnIterFunc)(PVRSRV_HANDLE_BASE *, struct sHandle *)) -{ - IMG_UINT32 ui32Index; - IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psHead->hParent); - - PVR_ASSERT(psHead->hParent != IMG_NULL) - - - for(ui32Index = psHead->ui32Next; ui32Index != ui32Parent; ) - { - struct sHandle *psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32Index); - - struct sHandleList *psEntry = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32Index, ui32Parent, uiParentOffset, uiEntryOffset); - PVRSRV_ERROR eError; - - PVR_ASSERT(psEntry->hParent == psHead->hParent) - - ui32Index = psEntry->ui32Next; - - eError = (*pfnIterFunc)(psBase, psHandle); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(IterateOverChildren) -#endif -static INLINE -PVRSRV_ERROR IterateOverChildren(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psParent, PVRSRV_ERROR (*pfnIterFunc)(PVRSRV_HANDLE_BASE *, struct sHandle *)) -{ - return HandleListIterate(psBase, &psParent->sChildren, offsetof(struct sHandle, sChildren), offsetof(struct sHandle, sSiblings), pfnIterFunc); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(GetHandleStructure) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -#endif -{ - IMG_UINT32 ui32Index = HANDLE_TO_INDEX(hHandle); - struct sHandle *psHandle; - - - if (!INDEX_IS_VALID(psBase, ui32Index)) - { - PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle index out of range (%u >= %u)", ui32Index, psBase->ui32TotalHandCount)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE; - } - - psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32Index); - if (psHandle->eType == PVRSRV_HANDLE_TYPE_NONE) - { - PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle not allocated (index: %u)", ui32Index)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return PVRSRV_ERROR_HANDLE_NOT_ALLOCATED; - } - - - if (eType != PVRSRV_HANDLE_TYPE_NONE && eType != psHandle->eType) - { - PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle type mismatch (%d != %d)", eType, psHandle->eType)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return PVRSRV_ERROR_HANDLE_TYPE_MISMATCH; - } - - - *ppsHandle = psHandle; - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(ParentIfPrivate) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -IMG_SID ParentIfPrivate(struct sHandle *psHandle) -#else -IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) -#endif -{ - return TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? - ParentHandle(psHandle) : IMG_NULL; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(InitKey) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) -#else -IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) -#endif -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - aKey[HAND_KEY_DATA] = (IMG_UINTPTR_T)pvData; - aKey[HAND_KEY_TYPE] = (IMG_UINTPTR_T)eType; - aKey[HAND_KEY_PARENT] = (IMG_UINTPTR_T)hParent; -} - -static -PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCount) -{ - struct sHandleIndex *psOldArray = psBase->psHandleArray; - IMG_HANDLE hOldArrayBlockAlloc = psBase->hArrayBlockAlloc; - IMG_UINT32 ui32OldCount = psBase->ui32TotalHandCount; - struct sHandleIndex *psNewArray = IMG_NULL; - IMG_HANDLE hNewArrayBlockAlloc = IMG_NULL; - PVRSRV_ERROR eError; - PVRSRV_ERROR eReturn = PVRSRV_OK; - IMG_UINT32 ui32Index; - - if (ui32NewCount == ui32OldCount) - { - return PVRSRV_OK; - } - - if (ui32NewCount != 0 && !psBase->bPurgingEnabled && - ui32NewCount < ui32OldCount) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (((ui32OldCount % HANDLE_BLOCK_SIZE) != 0) || - ((ui32NewCount % HANDLE_BLOCK_SIZE) != 0)) - { - PVR_ASSERT((ui32OldCount % HANDLE_BLOCK_SIZE) == 0) - PVR_ASSERT((ui32NewCount % HANDLE_BLOCK_SIZE) == 0) - - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (ui32NewCount != 0) - { - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - HANDLE_ARRAY_SIZE(ui32NewCount) * sizeof(struct sHandleIndex), - (IMG_VOID **)&psNewArray, - &hNewArrayBlockAlloc, - "Memory Area"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't allocate new handle array (%d)", eError)); - eReturn = eError; - goto error; - } - - if (ui32OldCount != 0) - { - OSMemCopy(psNewArray, psOldArray, HANDLE_ARRAY_SIZE(MIN(ui32NewCount, ui32OldCount)) * sizeof(struct sHandleIndex)); - } - } - - - for(ui32Index = ui32NewCount; ui32Index < ui32OldCount; ui32Index += HANDLE_BLOCK_SIZE) - { - struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psOldArray, ui32Index); - - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, - psIndex->psHandle, - psIndex->hBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't free handle structures (%d)", eError)); - } - } - - - for(ui32Index = ui32OldCount; ui32Index < ui32NewCount; ui32Index += HANDLE_BLOCK_SIZE) - { - - struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psNewArray, ui32Index); - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, - (IMG_VOID **)&psIndex->psHandle, - &psIndex->hBlockAlloc, - "Memory Area"); - if (eError != PVRSRV_OK) - { - psIndex->psHandle = IMG_NULL; - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't allocate handle structures (%d)", eError)); - eReturn = eError; - } - else - { - IMG_UINT32 ui32SubIndex; - - psIndex->ui32FreeHandBlockCount = HANDLE_BLOCK_SIZE; - - for(ui32SubIndex = 0; ui32SubIndex < HANDLE_BLOCK_SIZE; ui32SubIndex++) - { - struct sHandle *psHandle = psIndex->psHandle + ui32SubIndex; - - - psHandle->ui32Index = ui32SubIndex + ui32Index; - psHandle->eType = PVRSRV_HANDLE_TYPE_NONE; - psHandle->eInternalFlag = INTERNAL_HANDLE_FLAG_NONE; - psHandle->ui32NextIndexPlusOne = 0; - } - } - } - if (eReturn != PVRSRV_OK) - { - goto error; - } - -#ifdef DEBUG_MAX_HANDLE_COUNT - - if (ui32NewCount > DEBUG_MAX_HANDLE_COUNT) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Max handle count (%u) reached", DEBUG_MAX_HANDLE_COUNT)); - eReturn = PVRSRV_ERROR_OUT_OF_MEMORY; - goto error; - } -#endif - - if (psOldArray != IMG_NULL) - { - - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - HANDLE_ARRAY_SIZE(ui32OldCount) * sizeof(struct sHandleIndex), - psOldArray, - hOldArrayBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't free old handle array (%d)", eError)); - } - } - - psBase->psHandleArray = psNewArray; - psBase->hArrayBlockAlloc = hNewArrayBlockAlloc; - psBase->ui32TotalHandCount = ui32NewCount; - - if (ui32NewCount > ui32OldCount) - { - - PVR_ASSERT(psBase->ui32FreeHandCount + (ui32NewCount - ui32OldCount) > psBase->ui32FreeHandCount) - - - psBase->ui32FreeHandCount += (ui32NewCount - ui32OldCount); - - - if (psBase->ui32FirstFreeIndex == 0) - { - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0) - - psBase->ui32FirstFreeIndex = ui32OldCount; - } - else - { - if (!psBase->bPurgingEnabled) - { - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0) - PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0) - - INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne = ui32OldCount + 1; - } - } - - if (!psBase->bPurgingEnabled) - { - psBase->ui32LastFreeIndexPlusOne = ui32NewCount; - } - } - else - { - PVR_ASSERT(ui32NewCount == 0 || psBase->bPurgingEnabled) - PVR_ASSERT(ui32NewCount == 0 || psBase->ui32FirstFreeIndex <= ui32NewCount) - PVR_ASSERT(psBase->ui32FreeHandCount - (ui32OldCount - ui32NewCount) < psBase->ui32FreeHandCount) - - - psBase->ui32FreeHandCount -= (ui32OldCount - ui32NewCount); - - if (ui32NewCount == 0) - { - psBase->ui32FirstFreeIndex = 0; - psBase->ui32LastFreeIndexPlusOne = 0; - } - } - - PVR_ASSERT(psBase->ui32FirstFreeIndex <= psBase->ui32TotalHandCount) - - return PVRSRV_OK; - -error: - PVR_ASSERT(eReturn != PVRSRV_OK) - - if (psNewArray != IMG_NULL) - { - - for(ui32Index = ui32OldCount; ui32Index < ui32NewCount; ui32Index += HANDLE_BLOCK_SIZE) - { - struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psNewArray, ui32Index); - if (psIndex->psHandle != IMG_NULL) - { - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, - psIndex->psHandle, - psIndex->hBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't free handle structures (%d)", eError)); - } - } - } - - - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - HANDLE_ARRAY_SIZE(ui32NewCount) * sizeof(struct sHandleIndex), - psNewArray, - hNewArrayBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ReallocHandleArray: Couldn't free new handle array (%d)", eError)); - } - } - - return eReturn; -} - -static PVRSRV_ERROR FreeHandleArray(PVRSRV_HANDLE_BASE *psBase) -{ - return ReallocHandleArray(psBase, 0); -} - -static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHandle) -{ - HAND_KEY aKey; - IMG_UINT32 ui32Index = HANDLE_PTR_TO_INDEX(psHandle); - PVRSRV_ERROR eError; - - - InitKey(aKey, psBase, psHandle->pvData, psHandle->eType, ParentIfPrivate(psHandle)); - - if (!TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_MULTI) && !BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) - { -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle; - hHandle = (IMG_SID) HASH_Remove_Extended(psBase->psHashTab, aKey); -#else - IMG_HANDLE hHandle; - hHandle = (IMG_HANDLE) HASH_Remove_Extended(psBase->psHashTab, aKey); - -#endif - - PVR_ASSERT(hHandle != IMG_NULL) - PVR_ASSERT(hHandle == INDEX_TO_HANDLE(ui32Index)) - PVR_UNREFERENCED_PARAMETER(hHandle); - } - - - UnlinkFromParent(psBase, psHandle); - - - eError = IterateOverChildren(psBase, psHandle, FreeHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeHandle: Error whilst freeing subhandles (%d)", eError)); - return eError; - } - - - psHandle->eType = PVRSRV_HANDLE_TYPE_NONE; - - if (BATCHED_HANDLE(psHandle) && !BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) - { - - SET_BATCHED_HANDLE_PARTIALLY_FREE(psHandle); - - return PVRSRV_OK; - } - - - if (!psBase->bPurgingEnabled) - { - if (psBase->ui32FreeHandCount == 0) - { - PVR_ASSERT(psBase->ui32FirstFreeIndex == 0) - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0) - - psBase->ui32FirstFreeIndex = ui32Index; - } - else - { - - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0) - PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0) - INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne = ui32Index + 1; - } - - PVR_ASSERT(psHandle->ui32NextIndexPlusOne == 0) - - - psBase->ui32LastFreeIndexPlusOne = ui32Index + 1; - } - - psBase->ui32FreeHandCount++; - INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)++; - - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)<= HANDLE_BLOCK_SIZE) - -#ifdef DEBUG - { - IMG_UINT32 ui32BlockedIndex; - IMG_UINT32 ui32FreeHandCount = 0; - - for (ui32BlockedIndex = 0; ui32BlockedIndex < psBase->ui32TotalHandCount; ui32BlockedIndex += HANDLE_BLOCK_SIZE) - { - ui32FreeHandCount += INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32BlockedIndex); - } - - PVR_ASSERT(ui32FreeHandCount == psBase->ui32FreeHandCount) - } -#endif - - return PVRSRV_OK; -} - -static PVRSRV_ERROR FreeAllHandles(PVRSRV_HANDLE_BASE *psBase) -{ - IMG_UINT32 i; - PVRSRV_ERROR eError = PVRSRV_OK; - - if (psBase->ui32FreeHandCount == psBase->ui32TotalHandCount) - { - return eError; - } - - for (i = 0; i < psBase->ui32TotalHandCount; i++) - { - struct sHandle *psHandle; - - psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, i); - - if (psHandle->eType != PVRSRV_HANDLE_TYPE_NONE) - { - eError = FreeHandle(psBase, psHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeAllHandles: FreeHandle failed (%d)", eError)); - break; - } - - - if (psBase->ui32FreeHandCount == psBase->ui32TotalHandCount) - { - break; - } - } - } - - return eError; -} - -static PVRSRV_ERROR FreeHandleBase(PVRSRV_HANDLE_BASE *psBase) -{ - PVRSRV_ERROR eError; - - if (HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_WARNING, "FreeHandleBase: Uncommitted/Unreleased handle batch")); - PVRSRVReleaseHandleBatch(psBase); - } - - - eError = FreeAllHandles(psBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeHandleBase: Couldn't free handles (%d)", eError)); - return eError; - } - - - eError = FreeHandleArray(psBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeHandleBase: Couldn't free handle array (%d)", eError)); - return eError; - } - - if (psBase->psHashTab != IMG_NULL) - { - - HASH_Delete(psBase->psHashTab); - } - - eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*psBase), - psBase, - psBase->hBaseBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeHandleBase: Couldn't free handle base (%d)", eError)); - return eError; - } - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(FindHandle) -#endif -static INLINE -#if defined (SUPPORT_SID_INTERFACE) -IMG_SID FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) -#else -IMG_HANDLE FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) -#endif -{ - HAND_KEY aKey; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - InitKey(aKey, psBase, pvData, eType, hParent); - -#if defined (SUPPORT_SID_INTERFACE) - return (IMG_SID) HASH_Retrieve_Extended(psBase->psHashTab, aKey); -#else - return (IMG_HANDLE) HASH_Retrieve_Extended(psBase->psHashTab, aKey); -#endif -} - -static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Delta) -{ - PVRSRV_ERROR eError; - IMG_UINT32 ui32DeltaAdjusted = ROUND_UP_TO_MULTIPLE_OF_BLOCK_SIZE(ui32Delta); - IMG_UINT32 ui32NewTotalHandCount = psBase->ui32TotalHandCount + ui32DeltaAdjusted; -; - - PVR_ASSERT(ui32Delta != 0) - - - if (ui32NewTotalHandCount > psBase->ui32MaxIndexPlusOne || ui32NewTotalHandCount <= psBase->ui32TotalHandCount) - { - ui32NewTotalHandCount = psBase->ui32MaxIndexPlusOne; - - ui32DeltaAdjusted = ui32NewTotalHandCount - psBase->ui32TotalHandCount; - - if (ui32DeltaAdjusted < ui32Delta) - { - PVR_DPF((PVR_DBG_ERROR, "IncreaseHandleArraySize: Maximum handle limit reached (%d)", psBase->ui32MaxIndexPlusOne)); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } - - PVR_ASSERT(ui32DeltaAdjusted >= ui32Delta) - - - eError = ReallocHandleArray(psBase, ui32NewTotalHandCount); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "IncreaseHandleArraySize: ReallocHandleArray failed (%d)", eError)); - return eError; - } - - return PVRSRV_OK; -} - -static PVRSRV_ERROR EnsureFreeHandles(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Free) -{ - PVRSRV_ERROR eError; - - if (ui32Free > psBase->ui32FreeHandCount) - { - IMG_UINT32 ui32FreeHandDelta = ui32Free - psBase->ui32FreeHandCount; - eError = IncreaseHandleArraySize(psBase, ui32FreeHandDelta); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "EnsureFreeHandles: Couldn't allocate %u handles to ensure %u free handles (IncreaseHandleArraySize failed with error %d)", ui32FreeHandDelta, ui32Free, eError)); - - return eError; - } - } - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) -#else -static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) -#endif -{ - IMG_UINT32 ui32NewIndex = DEFAULT_MAX_INDEX_PLUS_ONE; - struct sHandle *psNewHandle = IMG_NULL; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle; -#else - IMG_HANDLE hHandle; -#endif - HAND_KEY aKey; - PVRSRV_ERROR eError; - - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - PVR_ASSERT(psBase != IMG_NULL) - PVR_ASSERT(psBase->psHashTab != IMG_NULL) - - if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) - { - - PVR_ASSERT(FindHandle(psBase, pvData, eType, hParent) == IMG_NULL) - } - - if (psBase->ui32FreeHandCount == 0 && HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_WARNING, "AllocHandle: Handle batch size (%u) was too small, allocating additional space", psBase->ui32HandBatchSize)); - } - - - eError = EnsureFreeHandles(psBase, 1); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "AllocHandle: EnsureFreeHandles failed (%d)", eError)); - return eError; - } - PVR_ASSERT(psBase->ui32FreeHandCount != 0) - - if (!psBase->bPurgingEnabled) - { - - ui32NewIndex = psBase->ui32FirstFreeIndex; - - - psNewHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32NewIndex); - } - else - { - IMG_UINT32 ui32BlockedIndex; - - - - PVR_ASSERT((psBase->ui32FirstFreeIndex % HANDLE_BLOCK_SIZE) == 0) - - for (ui32BlockedIndex = ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(psBase->ui32FirstFreeIndex); ui32BlockedIndex < psBase->ui32TotalHandCount; ui32BlockedIndex += HANDLE_BLOCK_SIZE) - { - struct sHandleIndex *psIndex = BASE_AND_INDEX_TO_INDEX_STRUCT_PTR(psBase, ui32BlockedIndex); - - if (psIndex->ui32FreeHandBlockCount == 0) - { - continue; - } - - for (ui32NewIndex = ui32BlockedIndex; ui32NewIndex < ui32BlockedIndex + HANDLE_BLOCK_SIZE; ui32NewIndex++) - { - psNewHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32NewIndex); - if (HANDLE_STRUCT_IS_FREE(psNewHandle)) - { - break; - } - } - } - psBase->ui32FirstFreeIndex = 0; - PVR_ASSERT(ui32NewIndex < psBase->ui32TotalHandCount) - } - PVR_ASSERT(psNewHandle != IMG_NULL) - - - hHandle = INDEX_TO_HANDLE(ui32NewIndex); - - - if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) - { - - InitKey(aKey, psBase, pvData, eType, hParent); - - - if (!HASH_Insert_Extended(psBase->psHashTab, aKey, (IMG_UINTPTR_T)hHandle)) - { - PVR_DPF((PVR_DBG_ERROR, "AllocHandle: Couldn't add handle to hash table")); - - return PVRSRV_ERROR_UNABLE_TO_ADD_HANDLE; - } - } - - psBase->ui32FreeHandCount--; - - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) <= HANDLE_BLOCK_SIZE) - PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) > 0) - - INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex)--; - - - if (!psBase->bPurgingEnabled) - { - - if (psBase->ui32FreeHandCount == 0) - { - PVR_ASSERT(psBase->ui32FirstFreeIndex == ui32NewIndex) - PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == (ui32NewIndex + 1)) - - psBase->ui32LastFreeIndexPlusOne = 0; - psBase->ui32FirstFreeIndex = 0; - } - else - { - - psBase->ui32FirstFreeIndex = (psNewHandle->ui32NextIndexPlusOne == 0) ? - ui32NewIndex + 1 : - psNewHandle->ui32NextIndexPlusOne - 1; - } - } - - - PVR_ASSERT(psNewHandle->ui32Index == ui32NewIndex) - - - psNewHandle->eType = eType; - psNewHandle->pvData = pvData; - psNewHandle->eInternalFlag = INTERNAL_HANDLE_FLAG_NONE; - psNewHandle->eFlag = eFlag; - - InitParentList(psNewHandle); -#if defined(DEBUG) - PVR_ASSERT(NoChildren(psNewHandle)) -#endif - - InitChildEntry(psNewHandle); -#if defined(DEBUG) - PVR_ASSERT(NoParent(psNewHandle)) -#endif - - if (HANDLES_BATCHED(psBase)) - { - - psNewHandle->ui32NextIndexPlusOne = psBase->ui32FirstBatchIndexPlusOne; - - psBase->ui32FirstBatchIndexPlusOne = ui32NewIndex + 1; - - - SET_BATCHED_HANDLE(psNewHandle); - } - else - { - psNewHandle->ui32NextIndexPlusOne = 0; - } - - - *phHandle = hHandle; - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) -#else -PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) -#endif -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle; -#else - IMG_HANDLE hHandle; -#endif - PVRSRV_ERROR eError; - -#if defined (SUPPORT_SID_INTERFACE) - *phHandle = 0; -#else - *phHandle = IMG_NULL; -#endif - - if (HANDLES_BATCHED(psBase)) - { - - psBase->ui32BatchHandAllocFailures++; - } - - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) - { - - hHandle = FindHandle(psBase, pvData, eType, IMG_NULL); -#if defined (SUPPORT_SID_INTERFACE) - if (hHandle != 0) -#else - if (hHandle != IMG_NULL) -#endif - { - struct sHandle *psHandle; - - eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocHandle: Lookup of existing handle failed")); - return eError; - } - - - if (TEST_FLAG(psHandle->eFlag & eFlag, PVRSRV_HANDLE_ALLOC_FLAG_SHARED)) - { - *phHandle = hHandle; - eError = PVRSRV_OK; - goto exit_ok; - } - -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; - } - } - - eError = AllocHandle(psBase, phHandle, pvData, eType, eFlag, IMG_NULL); - -exit_ok: - if (HANDLES_BATCHED(psBase) && (eError == PVRSRV_OK)) - { - psBase->ui32BatchHandAllocFailures--; - } - - return eError; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) -#else -PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) -#endif -{ - struct sHandle *psPHand; - struct sHandle *psCHand; - PVRSRV_ERROR eError; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hParentKey; - IMG_SID hHandle; - - *phHandle = 0; -#else - IMG_HANDLE hParentKey; - IMG_HANDLE hHandle; - - *phHandle = IMG_NULL; -#endif - - if (HANDLES_BATCHED(psBase)) - { - - psBase->ui32BatchHandAllocFailures++; - } - - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - hParentKey = TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? - hParent : IMG_NULL; - - - eError = GetHandleStructure(psBase, &psPHand, hParent, PVRSRV_HANDLE_TYPE_NONE); - if (eError != PVRSRV_OK) - { - return eError; - } - - if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) - { - - hHandle = FindHandle(psBase, pvData, eType, hParentKey); -#if defined (SUPPORT_SID_INTERFACE) - if (hHandle != 0) -#else - if (hHandle != IMG_NULL) -#endif - { - struct sHandle *psCHandle; - PVRSRV_ERROR eErr; - - eErr = GetHandleStructure(psBase, &psCHandle, hHandle, eType); - if (eErr != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocSubHandle: Lookup of existing handle failed")); - return eErr; - } - - PVR_ASSERT(hParentKey != IMG_NULL && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) - - - if (TEST_FLAG(psCHandle->eFlag & eFlag, PVRSRV_HANDLE_ALLOC_FLAG_SHARED) && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) - { - *phHandle = hHandle; - goto exit_ok; - } -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; - } - } - - eError = AllocHandle(psBase, &hHandle, pvData, eType, eFlag, hParentKey); - if (eError != PVRSRV_OK) - { - return eError; - } - - - psPHand = HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hParent); - - psCHand = HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle); - - AdoptChild(psBase, psPHand, psCHand); - - *phHandle = hHandle; - -exit_ok: - if (HANDLES_BATCHED(psBase)) - { - psBase->ui32BatchHandAllocFailures--; - } - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) -#endif -{ -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hHandle; -#else - IMG_HANDLE hHandle; -#endif - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - -#if defined (SUPPORT_SID_INTERFACE) - hHandle = (IMG_SID) FindHandle(psBase, pvData, eType, IMG_NULL); -#else - hHandle = (IMG_HANDLE) FindHandle(psBase, pvData, eType, IMG_NULL); -#endif - if (hHandle == IMG_NULL) - { - return PVRSRV_ERROR_HANDLE_NOT_FOUND; - } - - *phHandle = hHandle; - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_SID hHandle) -#else -PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle) -#endif -{ - struct sHandle *psHandle; - PVRSRV_ERROR eError; - - eError = GetHandleStructure(psBase, &psHandle, hHandle, PVRSRV_HANDLE_TYPE_NONE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandleAnyType: Error looking up handle (%d)", eError)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return eError; - } - - *ppvData = psHandle->pvData; - *peType = psHandle->eType; - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -#endif -{ - struct sHandle *psHandle; - PVRSRV_ERROR eError; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) -#if defined (SUPPORT_SID_INTERFACE) - PVR_ASSERT(hHandle != 0) -#endif - - eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandle: Error looking up handle (%d)", eError)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return eError; - } - - *ppvData = psHandle->pvData; - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType, IMG_SID hAncestor) -#else -PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor) -#endif -{ - struct sHandle *psPHand; - struct sHandle *psCHand; - PVRSRV_ERROR eError; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) -#if defined (SUPPORT_SID_INTERFACE) - PVR_ASSERT(hHandle != 0) -#endif - - eError = GetHandleStructure(psBase, &psCHand, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupSubHandle: Error looking up subhandle (%d)", eError)); - return eError; - } - - - for (psPHand = psCHand; ParentHandle(psPHand) != hAncestor; ) - { - eError = GetHandleStructure(psBase, &psPHand, ParentHandle(psPHand), PVRSRV_HANDLE_TYPE_NONE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupSubHandle: Subhandle doesn't belong to given ancestor")); - return PVRSRV_ERROR_INVALID_SUBHANDLE; - } - } - - *ppvData = psCHand->pvData; - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phParent, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -#endif -{ - struct sHandle *psHandle; - PVRSRV_ERROR eError; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetParentHandle: Error looking up subhandle (%d)", eError)); - return eError; - } - - *phParent = ParentHandle(psHandle); - - return PVRSRV_OK; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -#endif -{ - struct sHandle *psHandle; - PVRSRV_ERROR eError; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupAndReleaseHandle: Error looking up handle (%d)", eError)); -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#endif - return eError; - } - - *ppvData = psHandle->pvData; - - eError = FreeHandle(psBase, psHandle); - - return eError; -} - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) -#else -PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -#endif -{ - struct sHandle *psHandle; - PVRSRV_ERROR eError; - - PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) - - eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVReleaseHandle: Error looking up handle (%d)", eError)); - return eError; - } - - eError = FreeHandle(psBase, psHandle); - - return eError; -} - -PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize) -{ - PVRSRV_ERROR eError; - - if (HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVNewHandleBatch: There is a handle batch already in use (size %u)", psBase->ui32HandBatchSize)); - return PVRSRV_ERROR_HANDLE_BATCH_IN_USE; - } - - if (ui32BatchSize == 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVNewHandleBatch: Invalid batch size (%u)", ui32BatchSize)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - eError = EnsureFreeHandles(psBase, ui32BatchSize); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVNewHandleBatch: EnsureFreeHandles failed (error %d)", eError)); - return eError; - } - - psBase->ui32HandBatchSize = ui32BatchSize; - - - psBase->ui32TotalHandCountPreBatch = psBase->ui32TotalHandCount; - - PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0) - - PVR_ASSERT(psBase->ui32FirstBatchIndexPlusOne == 0) - - PVR_ASSERT(HANDLES_BATCHED(psBase)) - - return PVRSRV_OK; -} - -static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, IMG_BOOL bCommit) -{ - - IMG_UINT32 ui32IndexPlusOne; - IMG_BOOL bCommitBatch = bCommit; - - if (!HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: There is no handle batch")); - return PVRSRV_ERROR_INVALID_PARAMS; - - } - - if (psBase->ui32BatchHandAllocFailures != 0) - { - if (bCommit) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: Attempting to commit batch with handle allocation failures.")); - } - bCommitBatch = IMG_FALSE; - } - - PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0 || !bCommit) - - ui32IndexPlusOne = psBase->ui32FirstBatchIndexPlusOne; - while(ui32IndexPlusOne != 0) - { - struct sHandle *psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32IndexPlusOne - 1); - IMG_UINT32 ui32NextIndexPlusOne = psHandle->ui32NextIndexPlusOne; - PVR_ASSERT(BATCHED_HANDLE(psHandle)) - - psHandle->ui32NextIndexPlusOne = 0; - - if (!bCommitBatch || BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) - { - PVRSRV_ERROR eError; - - - if (!BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) - { - - SET_UNBATCHED_HANDLE(psHandle); - } - - eError = FreeHandle(psBase, psHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: Error freeing handle (%d)", eError)); - } - PVR_ASSERT(eError == PVRSRV_OK) - } - else - { - - SET_UNBATCHED_HANDLE(psHandle); - } - - ui32IndexPlusOne = ui32NextIndexPlusOne; - } - -#ifdef DEBUG - if (psBase->ui32TotalHandCountPreBatch != psBase->ui32TotalHandCount) - { - IMG_UINT32 ui32Delta = psBase->ui32TotalHandCount - psBase->ui32TotalHandCountPreBatch; - - PVR_ASSERT(psBase->ui32TotalHandCount > psBase->ui32TotalHandCountPreBatch) - - PVR_DPF((PVR_DBG_WARNING, "PVRSRVHandleBatchCommitOrRelease: The batch size was too small. Batch size was %u, but needs to be %u", psBase->ui32HandBatchSize, psBase->ui32HandBatchSize + ui32Delta)); - - } -#endif - - psBase->ui32HandBatchSize = 0; - psBase->ui32FirstBatchIndexPlusOne = 0; - psBase->ui32TotalHandCountPreBatch = 0; - psBase->ui32BatchHandAllocFailures = 0; - - if (psBase->ui32BatchHandAllocFailures != 0 && bCommit) - { - PVR_ASSERT(!bCommitBatch) - - return PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE; - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase) -{ - return PVRSRVHandleBatchCommitOrRelease(psBase, IMG_TRUE); -} - -IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase) -{ - (IMG_VOID) PVRSRVHandleBatchCommitOrRelease(psBase, IMG_FALSE); -} - -PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle) -{ - IMG_UINT32 ui32MaxHandleRounded; - - if (HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSetMaxHandle: Limit cannot be set whilst in batch mode")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - if (ui32MaxHandle == 0 || ui32MaxHandle > DEFAULT_MAX_HANDLE) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSetMaxHandle: Limit must be between %u and %u, inclusive", 0, DEFAULT_MAX_HANDLE)); - - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - if (psBase->ui32TotalHandCount != 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSetMaxHandle: Limit cannot be set because handles have already been allocated")); - - return PVRSRV_ERROR_INVALID_PARAMS; - } - - ui32MaxHandleRounded = ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(ui32MaxHandle); - - - if (ui32MaxHandleRounded != 0 && ui32MaxHandleRounded < psBase->ui32MaxIndexPlusOne) - { - psBase->ui32MaxIndexPlusOne = ui32MaxHandleRounded; - } - - PVR_ASSERT(psBase->ui32MaxIndexPlusOne != 0) - PVR_ASSERT(psBase->ui32MaxIndexPlusOne <= DEFAULT_MAX_INDEX_PLUS_ONE) - PVR_ASSERT((psBase->ui32MaxIndexPlusOne % HANDLE_BLOCK_SIZE) == 0) - - return PVRSRV_OK; -} - -IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase) -{ - return psBase->ui32MaxIndexPlusOne; -} - -PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase) -{ - if (psBase->bPurgingEnabled) - { - PVR_DPF((PVR_DBG_WARNING, "PVRSRVEnableHandlePurging: Purging already enabled")); - return PVRSRV_OK; - } - - - if (psBase->ui32TotalHandCount != 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVEnableHandlePurging: Handles have already been allocated")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psBase->bPurgingEnabled = IMG_TRUE; - - return PVRSRV_OK; -} - -PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase) -{ - IMG_UINT32 ui32BlockIndex; - IMG_UINT32 ui32NewHandCount; - - if (!psBase->bPurgingEnabled) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPurgeHandles: Purging not enabled for this handle base")); - return PVRSRV_ERROR_NOT_SUPPORTED; - } - - if (HANDLES_BATCHED(psBase)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPurgeHandles: Purging not allowed whilst in batch mode")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - PVR_ASSERT((psBase->ui32TotalHandCount % HANDLE_BLOCK_SIZE) == 0) - - for (ui32BlockIndex = INDEX_TO_BLOCK_INDEX(psBase->ui32TotalHandCount); ui32BlockIndex != 0; ui32BlockIndex--) - { - if (psBase->psHandleArray[ui32BlockIndex - 1].ui32FreeHandBlockCount != HANDLE_BLOCK_SIZE) - { - break; - } - } - ui32NewHandCount = BLOCK_INDEX_TO_INDEX(ui32BlockIndex); - - - if (ui32NewHandCount <= (psBase->ui32TotalHandCount/2)) - { - PVRSRV_ERROR eError; - - - - eError = ReallocHandleArray(psBase, ui32NewHandCount); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase) -{ - PVRSRV_HANDLE_BASE *psBase; - IMG_HANDLE hBlockAlloc; - PVRSRV_ERROR eError; - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(*psBase), - (IMG_PVOID *)&psBase, - &hBlockAlloc, - "Handle Base"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocHandleBase: Couldn't allocate handle base (%d)", eError)); - return eError; - } - OSMemSet(psBase, 0, sizeof(*psBase)); - - - psBase->psHashTab = HASH_Create_Extended(HANDLE_HASH_TAB_INIT_SIZE, sizeof(HAND_KEY), HASH_Func_Default, HASH_Key_Comp_Default); - if (psBase->psHashTab == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocHandleBase: Couldn't create data pointer hash table\n")); - (IMG_VOID)PVRSRVFreeHandleBase(psBase); - return PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE; - } - - psBase->hBaseBlockAlloc = hBlockAlloc; - - psBase->ui32MaxIndexPlusOne = DEFAULT_MAX_INDEX_PLUS_ONE; - - *ppsBase = psBase; - - return PVRSRV_OK; -} - -PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase) -{ - PVRSRV_ERROR eError; - - PVR_ASSERT(psBase != gpsKernelHandleBase) - - eError = FreeHandleBase(psBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeHandleBase: FreeHandleBase failed (%d)", eError)); - } - - return eError; -} - -PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) -{ - PVRSRV_ERROR eError; - - PVR_ASSERT(gpsKernelHandleBase == IMG_NULL) - - eError = PVRSRVAllocHandleBase(&gpsKernelHandleBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleInit: PVRSRVAllocHandleBase failed (%d)", eError)); - goto error; - } - - eError = PVRSRVEnableHandlePurging(gpsKernelHandleBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleInit: PVRSRVEnableHandlePurging failed (%d)", eError)); - goto error; - } - - return PVRSRV_OK; -error: - (IMG_VOID) PVRSRVHandleDeInit(); - return eError; -} - -PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if (gpsKernelHandleBase != IMG_NULL) - { - eError = FreeHandleBase(gpsKernelHandleBase); - if (eError == PVRSRV_OK) - { - gpsKernelHandleBase = IMG_NULL; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleDeInit: FreeHandleBase failed (%d)", eError)); - } - } - - return eError; -} -#else -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/hash.c b/drivers/staging/cdv/pvr/services4/srvkm/common/hash.c deleted file mode 100644 index e5dd781..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/hash.c +++ /dev/null @@ -1,506 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "pvr_debug.h" -#include "img_defs.h" -#include "services.h" -#include "servicesint.h" -#include "hash.h" -#include "osfunc.h" - -#define PRIVATE_MAX(a,b) ((a)>(b)?(a):(b)) - -#define KEY_TO_INDEX(pHash, key, uSize) \ - ((pHash)->pfnHashFunc((pHash)->uKeySize, (key), (uSize)) % (uSize)) - -#define KEY_COMPARE(pHash, pKey1, pKey2) \ - ((pHash)->pfnKeyComp((pHash)->uKeySize, (pKey1), (pKey2))) - -struct _BUCKET_ -{ - - struct _BUCKET_ *pNext; - - - IMG_UINTPTR_T v; - - - IMG_UINTPTR_T k[]; -}; -typedef struct _BUCKET_ BUCKET; - -struct _HASH_TABLE_ -{ - - BUCKET **ppBucketTable; - - - IMG_UINT32 uSize; - - - IMG_UINT32 uCount; - - - IMG_UINT32 uMinimumSize; - - - IMG_UINT32 uKeySize; - - - HASH_FUNC *pfnHashFunc; - - - HASH_KEY_COMP *pfnKeyComp; -}; - -IMG_UINT32 -HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen) -{ - IMG_UINTPTR_T *p = (IMG_UINTPTR_T *)pKey; - IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T)); - IMG_UINT32 ui; - IMG_UINT32 uHashKey = 0; - - PVR_UNREFERENCED_PARAMETER(uHashTabLen); - - PVR_ASSERT((uKeySize % sizeof(IMG_UINTPTR_T)) == 0); - - for (ui = 0; ui < uKeyLen; ui++) - { - IMG_UINT32 uHashPart = (IMG_UINT32)*p++; - - uHashPart += (uHashPart << 12); - uHashPart ^= (uHashPart >> 22); - uHashPart += (uHashPart << 4); - uHashPart ^= (uHashPart >> 9); - uHashPart += (uHashPart << 10); - uHashPart ^= (uHashPart >> 2); - uHashPart += (uHashPart << 7); - uHashPart ^= (uHashPart >> 12); - - uHashKey += uHashPart; - } - - return uHashKey; -} - -IMG_BOOL -HASH_Key_Comp_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2) -{ - IMG_UINTPTR_T *p1 = (IMG_UINTPTR_T *)pKey1; - IMG_UINTPTR_T *p2 = (IMG_UINTPTR_T *)pKey2; - IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T)); - IMG_UINT32 ui; - - PVR_ASSERT((uKeySize % sizeof(IMG_UINTPTR_T)) == 0); - - for (ui = 0; ui < uKeyLen; ui++) - { - if (*p1++ != *p2++) - return IMG_FALSE; - } - - return IMG_TRUE; -} - -static PVRSRV_ERROR -_ChainInsert (HASH_TABLE *pHash, BUCKET *pBucket, BUCKET **ppBucketTable, IMG_UINT32 uSize) -{ - IMG_UINT32 uIndex; - - PVR_ASSERT (pBucket != IMG_NULL); - PVR_ASSERT (ppBucketTable != IMG_NULL); - PVR_ASSERT (uSize != 0); - - if ((pBucket == IMG_NULL) || (ppBucketTable == IMG_NULL) || (uSize == 0)) - { - PVR_DPF((PVR_DBG_ERROR, "_ChainInsert: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - uIndex = KEY_TO_INDEX(pHash, pBucket->k, uSize); - pBucket->pNext = ppBucketTable[uIndex]; - ppBucketTable[uIndex] = pBucket; - - return PVRSRV_OK; -} - -static PVRSRV_ERROR -_Rehash (HASH_TABLE *pHash, - BUCKET **ppOldTable, IMG_UINT32 uOldSize, - BUCKET **ppNewTable, IMG_UINT32 uNewSize) -{ - IMG_UINT32 uIndex; - for (uIndex=0; uIndex< uOldSize; uIndex++) - { - BUCKET *pBucket; - pBucket = ppOldTable[uIndex]; - while (pBucket != IMG_NULL) - { - PVRSRV_ERROR eError; - BUCKET *pNextBucket = pBucket->pNext; - eError = _ChainInsert (pHash, pBucket, ppNewTable, uNewSize); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "_Rehash: call to _ChainInsert failed")); - return eError; - } - pBucket = pNextBucket; - } - } - return PVRSRV_OK; -} - -static IMG_BOOL -_Resize (HASH_TABLE *pHash, IMG_UINT32 uNewSize) -{ - if (uNewSize != pHash->uSize) - { - BUCKET **ppNewTable; - IMG_UINT32 uIndex; - - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Resize: oldsize=0x%x newsize=0x%x count=0x%x", - pHash->uSize, uNewSize, pHash->uCount)); - - OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof (BUCKET *) * uNewSize, - (IMG_PVOID*)&ppNewTable, IMG_NULL, - "Hash Table Buckets"); - if (ppNewTable == IMG_NULL) - return IMG_FALSE; - - for (uIndex=0; uIndexppBucketTable, pHash->uSize, ppNewTable, uNewSize) != PVRSRV_OK) - { - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(BUCKET*) * uNewSize, ppNewTable, IMG_NULL); - return IMG_FALSE; - } - - OSFreeMem (PVRSRV_PAGEABLE_SELECT, sizeof(BUCKET *)*pHash->uSize, pHash->ppBucketTable, IMG_NULL); - - pHash->ppBucketTable = ppNewTable; - pHash->uSize = uNewSize; - } - return IMG_TRUE; -} - - -HASH_TABLE * HASH_Create_Extended (IMG_UINT32 uInitialLen, IMG_SIZE_T uKeySize, HASH_FUNC *pfnHashFunc, HASH_KEY_COMP *pfnKeyComp) -{ - HASH_TABLE *pHash; - IMG_UINT32 uIndex; - - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Create_Extended: InitialSize=0x%x", uInitialLen)); - - if(OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(HASH_TABLE), - (IMG_VOID **)&pHash, IMG_NULL, - "Hash Table") != PVRSRV_OK) - { - return IMG_NULL; - } - - pHash->uCount = 0; - pHash->uSize = uInitialLen; - pHash->uMinimumSize = uInitialLen; - pHash->uKeySize = (IMG_UINT32)uKeySize; - pHash->pfnHashFunc = pfnHashFunc; - pHash->pfnKeyComp = pfnKeyComp; - - OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof (BUCKET *) * pHash->uSize, - (IMG_PVOID*)&pHash->ppBucketTable, IMG_NULL, - "Hash Table Buckets"); - - if (pHash->ppBucketTable == IMG_NULL) - { - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(HASH_TABLE), pHash, IMG_NULL); - - return IMG_NULL; - } - - for (uIndex=0; uIndexuSize; uIndex++) - pHash->ppBucketTable[uIndex] = IMG_NULL; - return pHash; -} - -HASH_TABLE * HASH_Create (IMG_UINT32 uInitialLen) -{ - return HASH_Create_Extended(uInitialLen, sizeof(IMG_UINTPTR_T), - &HASH_Func_Default, &HASH_Key_Comp_Default); -} - -IMG_VOID -HASH_Delete (HASH_TABLE *pHash) -{ - if (pHash != IMG_NULL) - { - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Delete")); - - PVR_ASSERT (pHash->uCount==0); - if(pHash->uCount != 0) - { - PVR_DPF ((PVR_DBG_ERROR, "HASH_Delete: leak detected in hash table!")); - PVR_DPF ((PVR_DBG_ERROR, "Likely Cause: client drivers not freeing alocations before destroying devmemcontext")); - } - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(BUCKET *)*pHash->uSize, pHash->ppBucketTable, IMG_NULL); - pHash->ppBucketTable = IMG_NULL; - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(HASH_TABLE), pHash, IMG_NULL); - - } -} - -IMG_BOOL -HASH_Insert_Extended (HASH_TABLE *pHash, IMG_VOID *pKey, IMG_UINTPTR_T v) -{ - BUCKET *pBucket; - - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Insert_Extended: Hash=0x%08x, pKey=0x%08x, v=0x%x", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey, v)); - - PVR_ASSERT (pHash != IMG_NULL); - - if (pHash == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "HASH_Insert_Extended: invalid parameter")); - return IMG_FALSE; - } - - if(OSAllocMem(PVRSRV_PAGEABLE_SELECT, - sizeof(BUCKET) + pHash->uKeySize, - (IMG_VOID **)&pBucket, IMG_NULL, - "Hash Table entry") != PVRSRV_OK) - { - return IMG_FALSE; - } - - pBucket->v = v; - - OSMemCopy(pBucket->k, pKey, pHash->uKeySize); - if (_ChainInsert (pHash, pBucket, pHash->ppBucketTable, pHash->uSize) != PVRSRV_OK) - { - OSFreeMem(PVRSRV_PAGEABLE_SELECT, - sizeof(BUCKET) + pHash->uKeySize, - pBucket, IMG_NULL); - return IMG_FALSE; - } - - pHash->uCount++; - - - if (pHash->uCount << 1 > pHash->uSize) - { - - - _Resize (pHash, pHash->uSize << 1); - } - - - return IMG_TRUE; -} - -IMG_BOOL -HASH_Insert (HASH_TABLE *pHash, IMG_UINTPTR_T k, IMG_UINTPTR_T v) -{ - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Insert: Hash=0x%x, k=0x%x, v=0x%x", - (IMG_UINTPTR_T)pHash, k, v)); - - return HASH_Insert_Extended(pHash, &k, v); -} - -IMG_UINTPTR_T -HASH_Remove_Extended(HASH_TABLE *pHash, IMG_VOID *pKey) -{ - BUCKET **ppBucket; - IMG_UINT32 uIndex; - - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Remove_Extended: Hash=0x%x, pKey=0x%x", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey)); - - PVR_ASSERT (pHash != IMG_NULL); - - if (pHash == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "HASH_Remove_Extended: Null hash table")); - return 0; - } - - uIndex = KEY_TO_INDEX(pHash, pKey, pHash->uSize); - - for (ppBucket = &(pHash->ppBucketTable[uIndex]); ppBucket && *ppBucket != IMG_NULL; ppBucket = &((*ppBucket)->pNext)) - { - - if (KEY_COMPARE(pHash, (*ppBucket)->k, pKey)) - { - BUCKET *pBucket = *ppBucket; - IMG_UINTPTR_T v = pBucket->v; - (*ppBucket) = pBucket->pNext; - - OSFreeMem(PVRSRV_PAGEABLE_SELECT, sizeof(BUCKET) + pHash->uKeySize, pBucket, IMG_NULL); - - - pHash->uCount--; - - - if (pHash->uSize > (pHash->uCount << 2) && - pHash->uSize > pHash->uMinimumSize) - { - - - _Resize (pHash, - PRIVATE_MAX (pHash->uSize >> 1, - pHash->uMinimumSize)); - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Remove_Extended: Hash=0x%x, pKey=0x%x = 0x%x", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey, v)); - return v; - } - } - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Remove_Extended: Hash=0x%x, pKey=0x%x = 0x0 !!!!", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey)); - return 0; -} - -IMG_UINTPTR_T -HASH_Remove (HASH_TABLE *pHash, IMG_UINTPTR_T k) -{ - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Remove: Hash=0x%x, k=0x%x", - (IMG_UINTPTR_T)pHash, k)); - - return HASH_Remove_Extended(pHash, &k); -} - -IMG_UINTPTR_T -HASH_Retrieve_Extended (HASH_TABLE *pHash, IMG_VOID *pKey) -{ - BUCKET **ppBucket; - IMG_UINT32 uIndex; - - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Retrieve_Extended: Hash=0x%x, pKey=0x%x", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey)); - - PVR_ASSERT (pHash != IMG_NULL); - - if (pHash == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "HASH_Retrieve_Extended: Null hash table")); - return 0; - } - - uIndex = KEY_TO_INDEX(pHash, pKey, pHash->uSize); - - for (ppBucket = &(pHash->ppBucketTable[uIndex]); *ppBucket != IMG_NULL; ppBucket = &((*ppBucket)->pNext)) - { - - if (KEY_COMPARE(pHash, (*ppBucket)->k, pKey)) - { - BUCKET *pBucket = *ppBucket; - IMG_UINTPTR_T v = pBucket->v; - - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Retrieve: Hash=0x%x, pKey=0x%x = 0x%x", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey, v)); - return v; - } - } - PVR_DPF ((PVR_DBG_MESSAGE, - "HASH_Retrieve: Hash=0x%x, pKey=0x%x = 0x0 !!!!", - (IMG_UINTPTR_T)pHash, (IMG_UINTPTR_T)pKey)); - return 0; -} - -IMG_UINTPTR_T -HASH_Retrieve (HASH_TABLE *pHash, IMG_UINTPTR_T k) -{ - PVR_DPF ((PVR_DBG_MESSAGE, "HASH_Retrieve: Hash=0x%x, k=0x%x", - (IMG_UINTPTR_T)pHash, k)); - return HASH_Retrieve_Extended(pHash, &k); -} - -PVRSRV_ERROR -HASH_Iterate(HASH_TABLE *pHash, HASH_pfnCallback pfnCallback) -{ - IMG_UINT32 uIndex; - for (uIndex=0; uIndex < pHash->uSize; uIndex++) - { - BUCKET *pBucket; - pBucket = pHash->ppBucketTable[uIndex]; - while (pBucket != IMG_NULL) - { - PVRSRV_ERROR eError; - BUCKET *pNextBucket = pBucket->pNext; - - eError = pfnCallback((IMG_UINTPTR_T) ((IMG_VOID *) *(pBucket->k)), (IMG_UINTPTR_T) pBucket->v); - - - if (eError != PVRSRV_OK) - return eError; - - pBucket = pNextBucket; - } - } - return PVRSRV_OK; -} - -#ifdef HASH_TRACE -IMG_VOID -HASH_Dump (HASH_TABLE *pHash) -{ - IMG_UINT32 uIndex; - IMG_UINT32 uMaxLength=0; - IMG_UINT32 uEmptyCount=0; - - PVR_ASSERT (pHash != IMG_NULL); - for (uIndex=0; uIndexuSize; uIndex++) - { - BUCKET *pBucket; - IMG_UINT32 uLength = 0; - if (pHash->ppBucketTable[uIndex] == IMG_NULL) - { - uEmptyCount++; - } - for (pBucket=pHash->ppBucketTable[uIndex]; - pBucket != IMG_NULL; - pBucket = pBucket->pNext) - { - uLength++; - } - uMaxLength = PRIVATE_MAX (uMaxLength, uLength); - } - - PVR_TRACE(("hash table: uMinimumSize=%d size=%d count=%d", - pHash->uMinimumSize, pHash->uSize, pHash->uCount)); - PVR_TRACE((" empty=%d max=%d", uEmptyCount, uMaxLength)); -} -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/lists.c b/drivers/staging/cdv/pvr/services4/srvkm/common/lists.c deleted file mode 100644 index 1081781..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/lists.c +++ /dev/null @@ -1,99 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "lists.h" -#include "services_headers.h" - -IMPLEMENT_LIST_ANY_VA(BM_HEAP) -IMPLEMENT_LIST_ANY_2(BM_HEAP, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_ANY_VA_2(BM_HEAP, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_FOR_EACH_VA(BM_HEAP) -IMPLEMENT_LIST_REMOVE(BM_HEAP) -IMPLEMENT_LIST_INSERT(BM_HEAP) - -IMPLEMENT_LIST_ANY_VA(BM_CONTEXT) -IMPLEMENT_LIST_ANY_VA_2(BM_CONTEXT, IMG_HANDLE, IMG_NULL) -IMPLEMENT_LIST_ANY_VA_2(BM_CONTEXT, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_FOR_EACH(BM_CONTEXT) -IMPLEMENT_LIST_REMOVE(BM_CONTEXT) -IMPLEMENT_LIST_INSERT(BM_CONTEXT) - -IMPLEMENT_LIST_ANY_2(PVRSRV_DEVICE_NODE, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_ANY_VA(PVRSRV_DEVICE_NODE) -IMPLEMENT_LIST_ANY_VA_2(PVRSRV_DEVICE_NODE, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_FOR_EACH(PVRSRV_DEVICE_NODE) -IMPLEMENT_LIST_FOR_EACH_VA(PVRSRV_DEVICE_NODE) -IMPLEMENT_LIST_INSERT(PVRSRV_DEVICE_NODE) -IMPLEMENT_LIST_REMOVE(PVRSRV_DEVICE_NODE) - -IMPLEMENT_LIST_ANY_VA(PVRSRV_POWER_DEV) -IMPLEMENT_LIST_ANY_VA_2(PVRSRV_POWER_DEV, PVRSRV_ERROR, PVRSRV_OK) -IMPLEMENT_LIST_INSERT(PVRSRV_POWER_DEV) -IMPLEMENT_LIST_REMOVE(PVRSRV_POWER_DEV) - - -IMG_VOID* MatchDeviceKM_AnyVaCb(PVRSRV_DEVICE_NODE* psDeviceNode, va_list va) -{ - IMG_UINT32 ui32DevIndex; - IMG_BOOL bIgnoreClass; - PVRSRV_DEVICE_CLASS eDevClass; - - ui32DevIndex = va_arg(va, IMG_UINT32); - bIgnoreClass = va_arg(va, IMG_BOOL); - if (!bIgnoreClass) - { - eDevClass = va_arg(va, PVRSRV_DEVICE_CLASS); - } - else - { - - - eDevClass = PVRSRV_DEVICE_CLASS_FORCE_I32; - } - - if ((bIgnoreClass || psDeviceNode->sDevId.eDeviceClass == eDevClass) && - psDeviceNode->sDevId.ui32DeviceIndex == ui32DevIndex) - { - return psDeviceNode; - } - return IMG_NULL; -} - -IMG_VOID* MatchPowerDeviceIndex_AnyVaCb(PVRSRV_POWER_DEV *psPowerDev, va_list va) -{ - IMG_UINT32 ui32DeviceIndex; - - ui32DeviceIndex = va_arg(va, IMG_UINT32); - - if (psPowerDev->ui32DeviceIndex == ui32DeviceIndex) - { - return psPowerDev; - } - else - { - return IMG_NULL; - } -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/mem.c b/drivers/staging/cdv/pvr/services4/srvkm/common/mem.c deleted file mode 100644 index 5b5d1ac..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/mem.c +++ /dev/null @@ -1,153 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "pvr_bridge_km.h" - - -static PVRSRV_ERROR -FreeSharedSysMemCallBack(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bDummy) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - OSFreePages(psKernelMemInfo->ui32Flags, - psKernelMemInfo->uAllocSize, - psKernelMemInfo->pvLinAddrKM, - psKernelMemInfo->sMemBlk.hOSMemHandle); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO), - psKernelMemInfo, - IMG_NULL); - - - return PVRSRV_OK; -} - - -IMG_EXPORT PVRSRV_ERROR -PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_UINT32 ui32Flags, - IMG_SIZE_T uSize, - PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo) -{ - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO), - (IMG_VOID **)&psKernelMemInfo, IMG_NULL, - "Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVAllocSharedSysMemoryKM: Failed to alloc memory for meminfo")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - OSMemSet(psKernelMemInfo, 0, sizeof(*psKernelMemInfo)); - - ui32Flags &= ~PVRSRV_HAP_MAPTYPE_MASK; - ui32Flags |= PVRSRV_HAP_MULTI_PROCESS; - psKernelMemInfo->ui32Flags = ui32Flags; - psKernelMemInfo->uAllocSize = uSize; - - if(OSAllocPages(psKernelMemInfo->ui32Flags, - psKernelMemInfo->uAllocSize, - (IMG_UINT32)HOST_PAGESIZE(), - &psKernelMemInfo->pvLinAddrKM, - &psKernelMemInfo->sMemBlk.hOSMemHandle) - != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVAllocSharedSysMemoryKM: Failed to alloc memory for block")); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO), - psKernelMemInfo, - 0); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - psKernelMemInfo->sMemBlk.hResItem = - ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SHARED_MEM_INFO, - psKernelMemInfo, - 0, - &FreeSharedSysMemCallBack); - - *ppsKernelMemInfo = psKernelMemInfo; - - return PVRSRV_OK; -} - - -IMG_EXPORT PVRSRV_ERROR -PVRSRVFreeSharedSysMemoryKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo) -{ - PVRSRV_ERROR eError; - - if(psKernelMemInfo->sMemBlk.hResItem) - { - eError = ResManFreeResByPtr(psKernelMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); - } - else - { - eError = FreeSharedSysMemCallBack(psKernelMemInfo, 0, CLEANUP_WITH_POLL); - } - - return eError; -} - - -IMG_EXPORT PVRSRV_ERROR -PVRSRVDissociateMemFromResmanKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if(!psKernelMemInfo) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if(psKernelMemInfo->sMemBlk.hResItem) - { - eError = ResManDissociateRes(psKernelMemInfo->sMemBlk.hResItem, IMG_NULL); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDissociateMemFromResmanKM: ResManDissociateRes failed")); - PVR_DBG_BREAK; - return eError; - } - - psKernelMemInfo->sMemBlk.hResItem = IMG_NULL; - } - - return eError; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/mem_debug.c b/drivers/staging/cdv/pvr/services4/srvkm/common/mem_debug.c deleted file mode 100644 index e721fb3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/mem_debug.c +++ /dev/null @@ -1,250 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef MEM_DEBUG_C -#define MEM_DEBUG_C - -#if defined(PVRSRV_DEBUG_OS_MEMORY) - -#include "img_types.h" -#include "services_headers.h" - -#if defined (__cplusplus) -extern "C" -{ -#endif - -#define STOP_ON_ERROR 0 - - - - - - - - - - IMG_BOOL MemCheck(const IMG_PVOID pvAddr, const IMG_UINT8 ui8Pattern, IMG_SIZE_T uSize) - { - IMG_UINT8 *pui8Addr; - for (pui8Addr = (IMG_UINT8*)pvAddr; uSize > 0; uSize--, pui8Addr++) - { - if (*pui8Addr != ui8Pattern) - { - return IMG_FALSE; - } - } - return IMG_TRUE; - } - - - - IMG_VOID OSCheckMemDebug(IMG_PVOID pvCpuVAddr, IMG_SIZE_T uSize, const IMG_CHAR *pszFileName, const IMG_UINT32 uLine) - { - OSMEM_DEBUG_INFO const *psInfo = (OSMEM_DEBUG_INFO *)((IMG_UINT32)pvCpuVAddr - TEST_BUFFER_PADDING_STATUS); - - - if (pvCpuVAddr == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "Pointer 0x%X : null pointer" - " - referenced %s:%d - allocated %s:%d", - pvCpuVAddr, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - - - if (((IMG_UINT32)pvCpuVAddr&3) != 0) - { - PVR_DPF((PVR_DBG_ERROR, "Pointer 0x%X : invalid alignment" - " - referenced %s:%d - allocated %s:%d", - pvCpuVAddr, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - - - if (!MemCheck((IMG_PVOID)psInfo->sGuardRegionBefore, 0xB1, sizeof(psInfo->sGuardRegionBefore))) - { - PVR_DPF((PVR_DBG_ERROR, "Pointer 0x%X : guard region before overwritten" - " - referenced %s:%d - allocated %s:%d", - pvCpuVAddr, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - - - if (uSize != psInfo->uSize) - { - PVR_DPF((PVR_DBG_WARNING, "Pointer 0x%X : supplied size was different to stored size (0x%X != 0x%X)" - " - referenced %s:%d - allocated %s:%d", - pvCpuVAddr, uSize, psInfo->uSize, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - - - if ((0x01234567 ^ psInfo->uSizeParityCheck) != psInfo->uSize) - { - PVR_DPF((PVR_DBG_WARNING, "Pointer 0x%X : stored size parity error (0x%X != 0x%X)" - " - referenced %s:%d - allocated %s:%d", - pvCpuVAddr, psInfo->uSize, 0x01234567 ^ psInfo->uSizeParityCheck, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - else - { - - uSize = psInfo->uSize; - } - - - if (uSize) - { - if (!MemCheck((IMG_VOID*)((IMG_UINT32)pvCpuVAddr + uSize), 0xB2, TEST_BUFFER_PADDING_AFTER)) - { - PVR_DPF((PVR_DBG_ERROR, "Pointer 0x%X : guard region after overwritten" - " - referenced from %s:%d - allocated from %s:%d", - pvCpuVAddr, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - } - } - - - if (psInfo->eValid != isAllocated) - { - PVR_DPF((PVR_DBG_ERROR, "Pointer 0x%X : not allocated (freed? %d)" - " - referenced %s:%d - freed %s:%d", - pvCpuVAddr, psInfo->eValid == isFree, - pszFileName, uLine, - psInfo->sFileName, psInfo->uLineNo)); - while (STOP_ON_ERROR); - } - } - - IMG_VOID debug_strcpy(IMG_CHAR *pDest, const IMG_CHAR *pSrc) - { - IMG_SIZE_T i = 0; - - for (; i < 128; i++) - { - *pDest = *pSrc; - if (*pSrc == '\0') break; - pDest++; - pSrc++; - } - } - - PVRSRV_ERROR OSAllocMem_Debug_Wrapper(IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Size, - IMG_PVOID *ppvCpuVAddr, - IMG_HANDLE *phBlockAlloc, - IMG_CHAR *pszFilename, - IMG_UINT32 ui32Line) - { - OSMEM_DEBUG_INFO *psInfo; - - PVRSRV_ERROR eError; - - eError = OSAllocMem_Debug_Linux_Memory_Allocations(ui32Flags, - ui32Size + TEST_BUFFER_PADDING, - ppvCpuVAddr, - phBlockAlloc, - pszFilename, - ui32Line); - - if (eError != PVRSRV_OK) - { - return eError; - } - - - OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + TEST_BUFFER_PADDING_STATUS, 0xBB, ui32Size); - OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + ui32Size + TEST_BUFFER_PADDING_STATUS, 0xB2, TEST_BUFFER_PADDING_AFTER); - - - psInfo = (OSMEM_DEBUG_INFO *)(*ppvCpuVAddr); - - OSMemSet(psInfo->sGuardRegionBefore, 0xB1, sizeof(psInfo->sGuardRegionBefore)); - debug_strcpy(psInfo->sFileName, pszFilename); - psInfo->uLineNo = ui32Line; - psInfo->eValid = isAllocated; - psInfo->uSize = ui32Size; - psInfo->uSizeParityCheck = 0x01234567 ^ ui32Size; - - - *ppvCpuVAddr = (IMG_PVOID) ((IMG_UINT32)*ppvCpuVAddr)+TEST_BUFFER_PADDING_STATUS; - -#ifdef PVRSRV_LOG_MEMORY_ALLOCS - - PVR_TRACE(("Allocated pointer (after debug info): 0x%X from %s:%d", *ppvCpuVAddr, pszFilename, ui32Line)); -#endif - - return PVRSRV_OK; - } - - PVRSRV_ERROR OSFreeMem_Debug_Wrapper(IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Size, - IMG_PVOID pvCpuVAddr, - IMG_HANDLE hBlockAlloc, - IMG_CHAR *pszFilename, - IMG_UINT32 ui32Line) - { - OSMEM_DEBUG_INFO *psInfo; - - - OSCheckMemDebug(pvCpuVAddr, ui32Size, pszFilename, ui32Line); - - - OSMemSet(pvCpuVAddr, 0xBF, ui32Size + TEST_BUFFER_PADDING_AFTER); - - - psInfo = (OSMEM_DEBUG_INFO *)((IMG_UINT32) pvCpuVAddr - TEST_BUFFER_PADDING_STATUS); - - - psInfo->uSize = 0; - psInfo->uSizeParityCheck = 0; - psInfo->eValid = isFree; - psInfo->uLineNo = ui32Line; - debug_strcpy(psInfo->sFileName, pszFilename); - - return OSFreeMem_Debug_Linux_Memory_Allocations(ui32Flags, ui32Size + TEST_BUFFER_PADDING, psInfo, hBlockAlloc, pszFilename, ui32Line); - } - -#if defined (__cplusplus) - -} -#endif - -#endif - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/metrics.c b/drivers/staging/cdv/pvr/services4/srvkm/common/metrics.c deleted file mode 100644 index 640eb04..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/metrics.c +++ /dev/null @@ -1,160 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "metrics.h" - -#if defined(SUPPORT_VGX) -#include "vgxapi_km.h" -#endif - -#if defined(SUPPORT_SGX) -#include "sgxapi_km.h" -#endif - -#if defined(DEBUG) || defined(TIMING) - -static volatile IMG_UINT32 *pui32TimerRegister = 0; - -#define PVRSRV_TIMER_TOTAL_IN_TICKS(X) asTimers[X].ui32Total -#define PVRSRV_TIMER_TOTAL_IN_MS(X) ((1000*asTimers[X].ui32Total)/ui32TicksPerMS) -#define PVRSRV_TIMER_COUNT(X) asTimers[X].ui32Count - - -Temporal_Data asTimers[PVRSRV_NUM_TIMERS]; - - -IMG_UINT32 PVRSRVTimeNow(IMG_VOID) -{ - if (!pui32TimerRegister) - { - static IMG_BOOL bFirstTime = IMG_TRUE; - - if (bFirstTime) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVTimeNow: No timer register set up")); - - bFirstTime = IMG_FALSE; - } - - return 0; - } - -#if defined(__sh__) - - return (0xffffffff-*pui32TimerRegister); - -#else - - return 0; - -#endif -} - - -static IMG_UINT32 PVRSRVGetCPUFreq(IMG_VOID) -{ - IMG_UINT32 ui32Time1, ui32Time2; - - ui32Time1 = PVRSRVTimeNow(); - - OSWaitus(1000000); - - ui32Time2 = PVRSRVTimeNow(); - - PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetCPUFreq: timer frequency = %d Hz", ui32Time2 - ui32Time1)); - - return (ui32Time2 - ui32Time1); -} - - -IMG_VOID PVRSRVSetupMetricTimers(IMG_VOID *pvDevInfo) -{ - IMG_UINT32 ui32Loop; - - PVR_UNREFERENCED_PARAMETER(pvDevInfo); - - for(ui32Loop=0; ui32Loop < (PVRSRV_NUM_TIMERS); ui32Loop++) - { - asTimers[ui32Loop].ui32Total = 0; - asTimers[ui32Loop].ui32Count = 0; - } - - - #if defined(__sh__) - - - - - - *TCR_2 = TIMER_DIVISOR; - - - *TCOR_2 = *TCNT_2 = (IMG_UINT)0xffffffff; - - - *TST_REG |= (IMG_UINT8)0x04; - - pui32TimerRegister = (IMG_UINT32 *)TCNT_2; - - #else - - pui32TimerRegister = 0; - - #endif - -} - - -IMG_VOID PVRSRVOutputMetricTotals(IMG_VOID) -{ - IMG_UINT32 ui32TicksPerMS, ui32Loop; - - ui32TicksPerMS = PVRSRVGetCPUFreq(); - - if (!ui32TicksPerMS) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVOutputMetricTotals: Failed to get CPU Freq")); - return; - } - - for(ui32Loop=0; ui32Loop < (PVRSRV_NUM_TIMERS); ui32Loop++) - { - if (asTimers[ui32Loop].ui32Count & 0x80000000L) - { - PVR_DPF((PVR_DBG_WARNING,"PVRSRVOutputMetricTotals: Timer %u is still ON", ui32Loop)); - } - } -#if 0 - - PVR_DPF((PVR_DBG_ERROR," Timer(%u): Total = %u",PVRSRV_TIMER_EXAMPLE_1, PVRSRV_TIMER_TOTAL_IN_TICKS(PVRSRV_TIMER_EXAMPLE_1))); - PVR_DPF((PVR_DBG_ERROR," Timer(%u): Time = %ums",PVRSRV_TIMER_EXAMPLE_1, PVRSRV_TIMER_TOTAL_IN_MS(PVRSRV_TIMER_EXAMPLE_1))); - PVR_DPF((PVR_DBG_ERROR," Timer(%u): Count = %u",PVRSRV_TIMER_EXAMPLE_1, PVRSRV_TIMER_COUNT(PVRSRV_TIMER_EXAMPLE_1))); -#endif -} - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/osfunc_common.c b/drivers/staging/cdv/pvr/services4/srvkm/common/osfunc_common.c deleted file mode 100644 index e0a46da..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/osfunc_common.c +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "img_types.h" -#include "services_headers.h" -#include "osfunc.h" - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/pdump_common.c b/drivers/staging/cdv/pvr/services4/srvkm/common/pdump_common.c deleted file mode 100644 index fbec2a1..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/pdump_common.c +++ /dev/null @@ -1,2371 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(PDUMP) -#include - -#include "services_headers.h" -#include "perproc.h" - -#include "pdump_km.h" -#include "pdump_int.h" - -#if !defined(PDUMP_TEMP_BUFFER_SIZE) -#define PDUMP_TEMP_BUFFER_SIZE (64 * 1024U) -#endif - -#if 1 -#define PDUMP_DBG(a) PDumpOSDebugPrintf (a) -#else -#define PDUMP_DBG(a) -#endif - - -#define PTR_PLUS(t, p, x) ((t)(((IMG_CHAR *)(p)) + (x))) -#define VPTR_PLUS(p, x) PTR_PLUS(IMG_VOID *, p, x) -#define VPTR_INC(p, x) ((p) = VPTR_PLUS(p, x)) -#define MAX_PDUMP_MMU_CONTEXTS (32) -static IMG_VOID *gpvTempBuffer = IMG_NULL; -static IMG_HANDLE ghTempBufferBlockAlloc; -static IMG_UINT16 gui16MMUContextUsage = 0; - -#if defined(PDUMP_DEBUG_OUTFILES) -IMG_UINT32 g_ui32EveryLineCounter = 1U; -#endif - -#ifdef INLINE_IS_PRAGMA -#pragma inline(_PDumpIsPersistent) -#endif -static INLINE -IMG_BOOL _PDumpIsPersistent(IMG_VOID) -{ - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - - if(psPerProc == IMG_NULL) - { - - return IMG_FALSE; - } - return psPerProc->bPDumpPersistent; -} - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - -static INLINE -IMG_BOOL _PDumpIsProcessActive(IMG_VOID) -{ - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc == IMG_NULL) - { - - return IMG_TRUE; - } - return psPerProc->bPDumpActive; -} - -#endif - -#if defined(PDUMP_DEBUG_OUTFILES) -static INLINE -IMG_UINT32 _PDumpGetPID(IMG_VOID) -{ - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc == IMG_NULL) - { - - return 0; - } - return psPerProc->ui32PID; -} -#endif - -static IMG_VOID *GetTempBuffer(IMG_VOID) -{ - - if (gpvTempBuffer == IMG_NULL) - { - PVRSRV_ERROR eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - PDUMP_TEMP_BUFFER_SIZE, - &gpvTempBuffer, - &ghTempBufferBlockAlloc, - "PDUMP Temporary Buffer"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "GetTempBuffer: OSAllocMem failed: %d", eError)); - } - } - - return gpvTempBuffer; -} - -static IMG_VOID FreeTempBuffer(IMG_VOID) -{ - - if (gpvTempBuffer != IMG_NULL) - { - PVRSRV_ERROR eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - PDUMP_TEMP_BUFFER_SIZE, - gpvTempBuffer, - ghTempBufferBlockAlloc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeTempBuffer: OSFreeMem failed: %d", eError)); - } - else - { - gpvTempBuffer = IMG_NULL; - } - } -} - -IMG_VOID PDumpInitCommon(IMG_VOID) -{ - - (IMG_VOID) GetTempBuffer(); - - - PDumpInit(); -} - -IMG_VOID PDumpDeInitCommon(IMG_VOID) -{ - - FreeTempBuffer(); - - - PDumpDeInit(); -} - -IMG_BOOL PDumpIsSuspended(IMG_VOID) -{ - return PDumpOSIsSuspended(); -} - -IMG_BOOL PDumpIsCaptureFrameKM(IMG_VOID) -{ -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if( _PDumpIsProcessActive() ) - { - return PDumpOSIsCaptureFrameKM(); - } - return IMG_FALSE; -#else - return PDumpOSIsCaptureFrameKM(); -#endif -} - -PVRSRV_ERROR PDumpSetFrameKM(IMG_UINT32 ui32Frame) -{ -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if( _PDumpIsProcessActive() ) - { - return PDumpOSSetFrameKM(ui32Frame); - } - return PVRSRV_OK; -#else - return PDumpOSSetFrameKM(ui32Frame); -#endif -} - -PVRSRV_ERROR PDumpRegWithFlagsKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32Data, - IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING() - PDUMP_DBG(("PDumpRegWithFlagsKM")); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "WRW :%s:0x%08X 0x%08X\r\n", - pszPDumpRegName, ui32Reg, ui32Data); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpRegKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32Data) -{ - return PDumpRegWithFlagsKM(pszPDumpRegName, ui32Reg, ui32Data, PDUMP_FLAGS_CONTINUOUS); -} - -PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Flags, - PDUMP_POLL_OPERATOR eOperator) -{ - - #define POLL_DELAY 1000U - #define POLL_COUNT_LONG (2000000000U / POLL_DELAY) - #define POLL_COUNT_SHORT (1000000U / POLL_DELAY) - - PVRSRV_ERROR eErr; - IMG_UINT32 ui32PollCount; - - PDUMP_GET_SCRIPT_STRING(); - PDUMP_DBG(("PDumpRegPolWithFlagsKM")); - if ( _PDumpIsPersistent() ) - { - - return PVRSRV_OK; - } - -#if 0 - if (((ui32RegAddr == EUR_CR_EVENT_STATUS) && - (ui32RegValue & ui32Mask & EUR_CR_EVENT_STATUS_TA_FINISHED_MASK) != 0) || - ((ui32RegAddr == EUR_CR_EVENT_STATUS) && - (ui32RegValue & ui32Mask & EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK) != 0) || - ((ui32RegAddr == EUR_CR_EVENT_STATUS) && - (ui32RegValue & ui32Mask & EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK) != 0)) - { - ui32PollCount = POLL_COUNT_LONG; - } - else -#endif - { - ui32PollCount = POLL_COUNT_LONG; - } - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "POL :%s:0x%08X 0x%08X 0x%08X %d %u %d\r\n", - pszPDumpRegName, ui32RegAddr, ui32RegValue, - ui32Mask, eOperator, ui32PollCount, POLL_DELAY); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpRegPolKM(IMG_CHAR *pszPDumpRegName, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask, PDUMP_POLL_OPERATOR eOperator) -{ - return PDumpRegPolWithFlagsKM(pszPDumpRegName, ui32RegAddr, ui32RegValue, ui32Mask, PDUMP_FLAGS_CONTINUOUS, eOperator); -} - -PVRSRV_ERROR PDumpMallocPages (PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_UINT32 ui32DevVAddr, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32PageSize, - IMG_BOOL bShared, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_PUINT8 pui8LinAddr; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32NumPages; - IMG_DEV_PHYADDR sDevPAddr; - IMG_UINT32 ui32Page; - IMG_UINT32 ui32Flags = PDUMP_FLAGS_CONTINUOUS; - - PDUMP_GET_SCRIPT_STRING(); -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - ui32Flags |= ( _PDumpIsPersistent() || bShared ) ? PDUMP_FLAGS_PERSISTENT : 0; -#else - PVR_UNREFERENCED_PARAMETER(bShared); - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; -#endif - - -#if !defined(LINUX) - PVR_ASSERT(((IMG_UINTPTR_T)pvLinAddr & HOST_PAGEMASK) == 0); -#endif - - PVR_ASSERT(((IMG_UINT32) ui32DevVAddr & HOST_PAGEMASK) == 0); - PVR_ASSERT(((IMG_UINT32) ui32NumBytes & HOST_PAGEMASK) == 0); - - - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "-- MALLOC :%s:VA_%08X 0x%08X %u\r\n", - psDevID->pszPDumpDevName, ui32DevVAddr, ui32NumBytes, ui32PageSize); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - - pui8LinAddr = (IMG_PUINT8) pvLinAddr; - ui32Offset = 0; - ui32NumPages = ui32NumBytes / ui32PageSize; - while (ui32NumPages) - { - ui32NumPages--; - - - - - - - - - - - - PDumpOSCPUVAddrToDevPAddr(psDevID->eDeviceType, - hOSMemHandle, - ui32Offset, - pui8LinAddr, - ui32PageSize, - &sDevPAddr); - ui32Page = (IMG_UINT32)(sDevPAddr.uiAddr / ui32PageSize); - - pui8LinAddr += ui32PageSize; - ui32Offset += ui32PageSize; - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "MALLOC :%s:PA_%08X%08X %u %u 0x%08X\r\n", - psDevID->pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - ui32Page * ui32PageSize, - ui32PageSize, - ui32PageSize, - ui32Page * ui32PageSize); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - } - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpMallocPageTable (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32PTSize, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_DEV_PHYADDR sDevPAddr; - - PDUMP_GET_SCRIPT_STRING(); - - PVR_ASSERT(((IMG_UINTPTR_T)pvLinAddr & (ui32PTSize - 1)) == 0); - ui32Flags |= PDUMP_FLAGS_CONTINUOUS; - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; - - - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "-- MALLOC :%s:PAGE_TABLE 0x%08X %u\r\n", - psDevId->pszPDumpDevName, - ui32PTSize, - ui32PTSize); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - - - - - - - PDumpOSCPUVAddrToDevPAddr(psDevId->eDeviceType, - hOSMemHandle, - ui32Offset, - (IMG_PUINT8) pvLinAddr, - ui32PTSize, - &sDevPAddr); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "MALLOC :%s:PA_%08X%08X 0x%X %u 0x%08X\r\n", - psDevId->pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr, - ui32PTSize, - ui32PTSize, - sDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpFreePages (BM_HEAP *psBMHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32PageSize, - IMG_HANDLE hUniqueTag, - IMG_BOOL bInterleaved) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32NumPages, ui32PageCounter; - IMG_DEV_PHYADDR sDevPAddr; - IMG_UINT32 ui32Flags = PDUMP_FLAGS_CONTINUOUS; - PVRSRV_DEVICE_NODE *psDeviceNode; - - PDUMP_GET_SCRIPT_STRING(); - - PVR_ASSERT(((IMG_UINT32) sDevVAddr.uiAddr & (ui32PageSize - 1)) == 0); - PVR_ASSERT(((IMG_UINT32) ui32NumBytes & (ui32PageSize - 1)) == 0); - - psDeviceNode = psBMHeap->pBMContext->psDeviceNode; - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; - - - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "-- FREE :%s:VA_%08X\r\n", - psDeviceNode->sDevId.pszPDumpDevName, sDevVAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - { - PVRSRV_DEVICE_NODE *psDeviceNode = psBMHeap->pBMContext->psDeviceNode; - - if( psDeviceNode->pfnMMUIsHeapShared(psBMHeap->pMMUHeap) ) - { - ui32Flags |= PDUMP_FLAGS_PERSISTENT; - } - } -#endif - PDumpOSWriteString2(hScript, ui32Flags); - - - - ui32NumPages = ui32NumBytes / ui32PageSize; - for (ui32PageCounter = 0; ui32PageCounter < ui32NumPages; ui32PageCounter++) - { - if (!bInterleaved || (ui32PageCounter % 2) == 0) - { - sDevPAddr = psDeviceNode->pfnMMUGetPhysPageAddr(psBMHeap->pMMUHeap, sDevVAddr); - - PVR_ASSERT(sDevPAddr.uiAddr != 0) - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "FREE :%s:PA_%08X%08X\r\n", - psDeviceNode->sDevId.pszPDumpDevName, (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, sDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - } - else - { - - } - - sDevVAddr.uiAddr += ui32PageSize; - } - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpFreePageTable (PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32PTSize, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_DEV_PHYADDR sDevPAddr; - - PDUMP_GET_SCRIPT_STRING(); - - PVR_UNREFERENCED_PARAMETER(ui32PTSize); - ui32Flags |= PDUMP_FLAGS_CONTINUOUS; - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; - - - PVR_ASSERT(((IMG_UINTPTR_T)pvLinAddr & (ui32PTSize-1UL)) == 0); - - - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "-- FREE :%s:PAGE_TABLE\r\n", psDevID->pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - - - - - - - PDumpOSCPUVAddrToDevPAddr(psDevID->eDeviceType, - hOSMemHandle, - 0, - (IMG_PUINT8) pvLinAddr, - ui32PTSize, - &sDevPAddr); - - { - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "FREE :%s:PA_%08X%08X\r\n", - psDevID->pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpPDRegWithFlags(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32Data, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_CHAR *pszRegString; - PDUMP_GET_SCRIPT_STRING() - - if(psMMUAttrib->pszPDRegRegion != IMG_NULL) - { - pszRegString = psMMUAttrib->pszPDRegRegion; - } - else - { - pszRegString = psMMUAttrib->sDevId.pszPDumpRegName; - } - - - -#if defined(SGX_FEATURE_36BIT_MMU) - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, - "WRW :%s:$1 :%s:PA_%08X%08X:0x0\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag, - (ui32Data & psMMUAttrib->ui32PDEMask) << psMMUAttrib->ui32PDEAlignShift); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "SHR :%s:$1 :%s:$1 0x4\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, - "WRW :%s:0x%08X: %s:$1\r\n", - pszRegString, - ui32Reg, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); -#else - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "WRW :%s:0x%08X :%s:PA_%08X%08X:0x%08X\r\n", - pszRegString, - ui32Reg, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - (ui32Data & psMMUAttrib->ui32PDEMask) << psMMUAttrib->ui32PDEAlignShift, - ui32Data & ~psMMUAttrib->ui32PDEMask); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); -#endif - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpPDReg (PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32Data, - IMG_HANDLE hUniqueTag) -{ - return PDumpPDRegWithFlags(psMMUAttrib, ui32Reg, ui32Data, PDUMP_FLAGS_CONTINUOUS, hUniqueTag); -} - -PVRSRV_ERROR PDumpMemPolKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - PDUMP_POLL_OPERATOR eOperator, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - #define MEMPOLL_DELAY (1000) - #define MEMPOLL_COUNT (2000000000 / MEMPOLL_DELAY) - - PVRSRV_ERROR eErr; - IMG_UINT32 ui32PageOffset; - IMG_UINT8 *pui8LinAddr; - IMG_DEV_PHYADDR sDevPAddr; - IMG_DEV_VIRTADDR sDevVPageAddr; - PDUMP_MMU_ATTRIB *psMMUAttrib; - - PDUMP_GET_SCRIPT_STRING(); - - if (PDumpOSIsSuspended()) - { - return PVRSRV_OK; - } - - if ( _PDumpIsPersistent() ) - { - - return PVRSRV_OK; - } - - - PVR_ASSERT((ui32Offset + sizeof(IMG_UINT32)) <= psMemInfo->uAllocSize); - - psMMUAttrib = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - - - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "-- POL :%s:VA_%08X 0x%08X 0x%08X %d %d %d\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMemInfo->sDevVAddr.uiAddr + ui32Offset, - ui32Value, - ui32Mask, - eOperator, - MEMPOLL_COUNT, - MEMPOLL_DELAY); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - pui8LinAddr = psMemInfo->pvLinAddrKM; - - - pui8LinAddr += ui32Offset; - - - - - PDumpOSCPUVAddrToPhysPages(psMemInfo->sMemBlk.hOSMemHandle, - ui32Offset, - pui8LinAddr, - psMMUAttrib->ui32DataPageMask, - &ui32PageOffset); - - - sDevVPageAddr.uiAddr = psMemInfo->sDevVAddr.uiAddr + ui32Offset - ui32PageOffset; - - PVR_ASSERT((sDevVPageAddr.uiAddr & psMMUAttrib->ui32DataPageMask) == 0); - - - BM_GetPhysPageAddr(psMemInfo, sDevVPageAddr, &sDevPAddr); - - - sDevPAddr.uiAddr += ui32PageOffset; - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "POL :%s:PA_%08X%08X:0x%08X 0x%08X 0x%08X %d %d %d\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr & ~(psMMUAttrib->ui32DataPageMask), - sDevPAddr.uiAddr & (psMMUAttrib->ui32DataPageMask), - ui32Value, - ui32Mask, - eOperator, - MEMPOLL_COUNT, - MEMPOLL_DELAY); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpMemKM(IMG_PVOID pvAltLinAddr, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32NumPages; - IMG_UINT32 ui32PageByteOffset; - IMG_UINT32 ui32BlockBytes; - IMG_UINT8* pui8LinAddr; - IMG_UINT8* pui8DataLinAddr = IMG_NULL; - IMG_DEV_VIRTADDR sDevVPageAddr; - IMG_DEV_VIRTADDR sDevVAddr; - IMG_DEV_PHYADDR sDevPAddr; - IMG_UINT32 ui32ParamOutPos; - PDUMP_MMU_ATTRIB *psMMUAttrib; - IMG_UINT32 ui32DataPageSize; - - PDUMP_GET_SCRIPT_AND_FILE_STRING(); - - - if (ui32Bytes == 0 || PDumpOSIsSuspended()) - { - return PVRSRV_OK; - } - - psMMUAttrib = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - - - - PVR_ASSERT((ui32Offset + ui32Bytes) <= psMemInfo->uAllocSize); - - if (!PDumpOSJTInitialised()) - { - return PVRSRV_ERROR_PDUMP_NOT_AVAILABLE; - } - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - { - BM_HEAP *pHeap = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap; - PVRSRV_DEVICE_NODE *psDeviceNode = pHeap->pBMContext->psDeviceNode; - - if( psDeviceNode->pfnMMUIsHeapShared(pHeap->pMMUHeap) ) - { - ui32Flags |= PDUMP_FLAGS_PERSISTENT; - } - } -#endif - - - if(pvAltLinAddr) - { - pui8DataLinAddr = pvAltLinAddr; - } - else if(psMemInfo->pvLinAddrKM) - { - pui8DataLinAddr = (IMG_UINT8 *)psMemInfo->pvLinAddrKM + ui32Offset; - } - pui8LinAddr = (IMG_UINT8 *)psMemInfo->pvLinAddrKM; - sDevVAddr = psMemInfo->sDevVAddr; - - - sDevVAddr.uiAddr += ui32Offset; - pui8LinAddr += ui32Offset; - - PVR_ASSERT(pui8DataLinAddr); - - PDumpOSCheckForSplitting(PDumpOSGetStream(PDUMP_STREAM_PARAM2), ui32Bytes, ui32Flags); - - ui32ParamOutPos = PDumpOSGetStreamOffset(PDUMP_STREAM_PARAM2); - - - - if(!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_PARAM2), - pui8DataLinAddr, - ui32Bytes, - ui32Flags)) - { - return PVRSRV_ERROR_PDUMP_BUFFER_FULL; - } - - if (PDumpOSGetParamFileNum() == 0) - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%.prm"); - } - else - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%_%u.prm", PDumpOSGetParamFileNum()); - } - if(eErr != PVRSRV_OK) - { - return eErr; - } - - - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "-- LDB :%s:VA_%08X%08X:0x%08X 0x%08X 0x%08X %s\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - psMemInfo->sDevVAddr.uiAddr, - ui32Offset, - ui32Bytes, - ui32ParamOutPos, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - - - PDumpOSCPUVAddrToPhysPages(psMemInfo->sMemBlk.hOSMemHandle, - ui32Offset, - pui8LinAddr, - psMMUAttrib->ui32DataPageMask, - &ui32PageByteOffset); - ui32DataPageSize = psMMUAttrib->ui32DataPageMask + 1; - ui32NumPages = (ui32PageByteOffset + ui32Bytes + psMMUAttrib->ui32DataPageMask) / ui32DataPageSize; - - while(ui32NumPages) - { - ui32NumPages--; - - - sDevVPageAddr.uiAddr = sDevVAddr.uiAddr - ui32PageByteOffset; - - if (ui32DataPageSize <= PDUMP_TEMP_BUFFER_SIZE) - { - - PVR_ASSERT((sDevVPageAddr.uiAddr & psMMUAttrib->ui32DataPageMask) == 0); - } - - - BM_GetPhysPageAddr(psMemInfo, sDevVPageAddr, &sDevPAddr); - - - sDevPAddr.uiAddr += ui32PageByteOffset; - - - if (ui32PageByteOffset + ui32Bytes > ui32DataPageSize) - { - - ui32BlockBytes = ui32DataPageSize - ui32PageByteOffset; - } - else - { - - ui32BlockBytes = ui32Bytes; - } - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "LDB :%s:PA_%08X%08X:0x%08X 0x%08X 0x%08X %s\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr & ~(psMMUAttrib->ui32DataPageMask), - sDevPAddr.uiAddr & (psMMUAttrib->ui32DataPageMask), - ui32BlockBytes, - ui32ParamOutPos, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - -#if defined(SGX_FEATURE_VARIABLE_MMU_PAGE_SIZE) - - ui32PageByteOffset = (ui32PageByteOffset + ui32BlockBytes) % ui32DataPageSize; -#else - - ui32PageByteOffset = 0; -#endif - - ui32Bytes -= ui32BlockBytes; - - sDevVAddr.uiAddr += ui32BlockBytes; - - pui8LinAddr += ui32BlockBytes; - - ui32ParamOutPos += ui32BlockBytes; - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpMemPDEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_BOOL bInitialisePages, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2) -{ - PDUMP_MMU_ATTRIB sMMUAttrib; - - - sMMUAttrib = *psMMUAttrib; - sMMUAttrib.ui32PTSize = (IMG_UINT32)HOST_PAGESIZE(); - return PDumpMemPTEntriesKM( &sMMUAttrib, - hOSMemHandle, - pvLinAddr, - ui32Bytes, - ui32Flags, - bInitialisePages, - hUniqueTag1, - hUniqueTag2); -} - -PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_BOOL bInitialisePages, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32NumPages; - IMG_UINT32 ui32PageOffset; - IMG_UINT32 ui32BlockBytes; - IMG_UINT8* pui8LinAddr; - IMG_DEV_PHYADDR sDevPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32ParamOutPos; - IMG_UINT32 ui32PageMask; - - PDUMP_GET_SCRIPT_AND_FILE_STRING(); - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; - - if (PDumpOSIsSuspended()) - { - return PVRSRV_OK; - } - - if (!PDumpOSJTInitialised()) - { - return PVRSRV_ERROR_PDUMP_NOT_AVAILABLE; - } - - if (!pvLinAddr) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - PDumpOSCheckForSplitting(PDumpOSGetStream(PDUMP_STREAM_PARAM2), ui32Bytes, ui32Flags); - - ui32ParamOutPos = PDumpOSGetStreamOffset(PDUMP_STREAM_PARAM2); - - if (bInitialisePages) - { - - - - if (!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_PARAM2), - pvLinAddr, - ui32Bytes, - ui32Flags | PDUMP_FLAGS_CONTINUOUS)) - { - return PVRSRV_ERROR_PDUMP_BUFFER_FULL; - } - - if (PDumpOSGetParamFileNum() == 0) - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%.prm"); - } - else - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%_%u.prm", PDumpOSGetParamFileNum()); - } - if(eErr != PVRSRV_OK) - { - return eErr; - } - } - - - - - - - ui32PageMask = psMMUAttrib->ui32PTSize - 1; - - - - - ui32PageOffset = (IMG_UINT32)((IMG_UINTPTR_T)pvLinAddr & (psMMUAttrib->ui32PTSize - 1)); - ui32NumPages = (ui32PageOffset + ui32Bytes + psMMUAttrib->ui32PTSize - 1) / psMMUAttrib->ui32PTSize; - pui8LinAddr = (IMG_UINT8*) pvLinAddr; - - while (ui32NumPages) - { - ui32NumPages--; - - - - - - - sCpuPAddr = OSMapLinToCPUPhys(hOSMemHandle, pui8LinAddr); - sDevPAddr = SysCpuPAddrToDevPAddr(psMMUAttrib->sDevId.eDeviceType, sCpuPAddr); - - - if (ui32PageOffset + ui32Bytes > psMMUAttrib->ui32PTSize) - { - - ui32BlockBytes = psMMUAttrib->ui32PTSize - ui32PageOffset; - } - else - { - - ui32BlockBytes = ui32Bytes; - } - - - - - if (bInitialisePages) - { - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "LDB :%s:PA_%08X%08X:0x%08X 0x%08X 0x%08X %s\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - sDevPAddr.uiAddr & ~ui32PageMask, - sDevPAddr.uiAddr & ui32PageMask, - ui32BlockBytes, - ui32ParamOutPos, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); - } - else - { - for (ui32Offset = 0; ui32Offset < ui32BlockBytes; ui32Offset += sizeof(IMG_UINT32)) - { - IMG_UINT32 ui32PTE = *((IMG_UINT32 *)(IMG_UINTPTR_T)(pui8LinAddr + ui32Offset)); - - if ((ui32PTE & psMMUAttrib->ui32PDEMask) != 0) - { - -#if defined(SGX_FEATURE_36BIT_MMU) - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:$1 :%s:PA_%08X%08X:0x0\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag2, - (ui32PTE & psMMUAttrib->ui32PDEMask) << psMMUAttrib->ui32PTEAlignShift); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); - eErr = PDumpOSBufprintf(hScript, ui32MaxLenScript, "SHR :%s:$1 :%s:$1 0x4\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); - eErr = PDumpOSBufprintf(hScript, ui32MaxLenScript, "OR :%s:$1 :%s:$1 0x%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName, - ui32PTE & ~psMMUAttrib->ui32PDEMask); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:$1\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag1, - (sDevPAddr.uiAddr + ui32Offset) & ~ui32PageMask, - (sDevPAddr.uiAddr + ui32Offset) & ui32PageMask, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); -#else - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:PA_%08X%08X:0x%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - (sDevPAddr.uiAddr + ui32Offset) & ~ui32PageMask, - (sDevPAddr.uiAddr + ui32Offset) & ui32PageMask, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag2, - (ui32PTE & psMMUAttrib->ui32PDEMask) << psMMUAttrib->ui32PTEAlignShift, - ui32PTE & ~psMMUAttrib->ui32PDEMask); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); -#endif - } - else - { -#if !defined(FIX_HW_BRN_31620) - PVR_ASSERT((ui32PTE & psMMUAttrib->ui32PTEValid) == 0UL); -#endif - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X 0x%08X%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - (sDevPAddr.uiAddr + ui32Offset) & ~ui32PageMask, - (sDevPAddr.uiAddr + ui32Offset) & ui32PageMask, - (ui32PTE << psMMUAttrib->ui32PTEAlignShift), - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag2); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags | PDUMP_FLAGS_CONTINUOUS); - } - } - } - - - - - ui32PageOffset = 0; - - ui32Bytes -= ui32BlockBytes; - - pui8LinAddr += ui32BlockBytes; - - ui32ParamOutPos += ui32BlockBytes; - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpPDDevPAddrKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_DEV_PHYADDR sPDDevPAddr, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32PageByteOffset; - IMG_DEV_VIRTADDR sDevVAddr; - IMG_DEV_VIRTADDR sDevVPageAddr; - IMG_DEV_PHYADDR sDevPAddr; - IMG_UINT32 ui32Flags = PDUMP_FLAGS_CONTINUOUS; - IMG_UINT32 ui32ParamOutPos; - PDUMP_MMU_ATTRIB *psMMUAttrib; - IMG_UINT32 ui32PageMask; - - PDUMP_GET_SCRIPT_AND_FILE_STRING(); - - if (!PDumpOSJTInitialised()) - { - return PVRSRV_ERROR_PDUMP_NOT_AVAILABLE; - } - - psMMUAttrib = ((BM_BUF*)psMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - ui32PageMask = psMMUAttrib->ui32PTSize - 1; - - ui32ParamOutPos = PDumpOSGetStreamOffset(PDUMP_STREAM_PARAM2); - - - if(!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_PARAM2), - (IMG_UINT8 *)&sPDDevPAddr, - sizeof(IMG_DEV_PHYADDR), - ui32Flags)) - { - return PVRSRV_ERROR_PDUMP_BUFFER_FULL; - } - - if (PDumpOSGetParamFileNum() == 0) - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%.prm"); - } - else - { - eErr = PDumpOSSprintf(pszFileName, ui32MaxLenFileName, "%%0%%_%u.prm", PDumpOSGetParamFileNum()); - } - if(eErr != PVRSRV_OK) - { - return eErr; - } - - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "-- LDB :%s:PA_0x%08X%08X:0x%08X 0x%08X 0x%08X %s\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - sPDDevPAddr.uiAddr & ~ui32PageMask, - sPDDevPAddr.uiAddr & ui32PageMask, - sizeof(IMG_DEV_PHYADDR), - ui32ParamOutPos, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - - sDevVAddr = psMemInfo->sDevVAddr; - ui32PageByteOffset = sDevVAddr.uiAddr & ui32PageMask; - - sDevVPageAddr.uiAddr = sDevVAddr.uiAddr - ui32PageByteOffset; - PVR_ASSERT((sDevVPageAddr.uiAddr & 0xFFF) == 0); - - BM_GetPhysPageAddr(psMemInfo, sDevVPageAddr, &sDevPAddr); - sDevPAddr.uiAddr += ui32PageByteOffset + ui32Offset; - - if ((sPDDevPAddr.uiAddr & psMMUAttrib->ui32PDEMask) != 0UL) - { -#if defined(SGX_FEATURE_36BIT_MMU) - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:$1 :%s:PA_%08X%08X:0x0\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag2, - sPDDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLenScript, "AND :%s:$2 :%s:$1 0xFFFFFFFF\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:$2\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag1, - (sDevPAddr.uiAddr) & ~(psMMUAttrib->ui32DataPageMask), - (sDevPAddr.uiAddr) & (psMMUAttrib->ui32DataPageMask), - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLenScript, "SHR :%s:$2 :%s:$1 0x20\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:$2\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)hUniqueTag1, - (sDevPAddr.uiAddr + 4) & ~(psMMUAttrib->ui32DataPageMask), - (sDevPAddr.uiAddr + 4) & (psMMUAttrib->ui32DataPageMask), - psMMUAttrib->sDevId.pszPDumpDevName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); -#else - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:PA_%08X%08X:0x%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - sDevPAddr.uiAddr & ~ui32PageMask, - sDevPAddr.uiAddr & ui32PageMask, - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag2, - sPDDevPAddr.uiAddr & psMMUAttrib->ui32PDEMask, - sPDDevPAddr.uiAddr & ~psMMUAttrib->ui32PDEMask); - if(eErr != PVRSRV_OK) - { - return eErr; - } -#endif - } - else - { - PVR_ASSERT(!(sDevPAddr.uiAddr & psMMUAttrib->ui32PTEValid)); - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X 0x%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag1, - sDevPAddr.uiAddr & ~ui32PageMask, - sDevPAddr.uiAddr & ui32PageMask, - sPDDevPAddr.uiAddr); - if(eErr != PVRSRV_OK) - { - return eErr; - } - } - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - - - - -PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - IMG_CHAR pszCommentPrefix[] = "-- "; -#if defined(PDUMP_DEBUG_OUTFILES) - IMG_CHAR pszTemp[256]; -#endif - IMG_UINT32 ui32LenCommentPrefix; - PDUMP_GET_SCRIPT_STRING(); - PDUMP_DBG(("PDumpCommentKM")); -#if defined(PDUMP_DEBUG_OUTFILES) - - ui32Flags |= ( _PDumpIsPersistent() ) ? PDUMP_FLAGS_PERSISTENT : 0; -#endif - - PDumpOSVerifyLineEnding(pszComment, ui32MaxLen); - - - ui32LenCommentPrefix = PDumpOSBuflen(pszCommentPrefix, sizeof(pszCommentPrefix)); - - - - if (!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_SCRIPT2), - (IMG_UINT8*)pszCommentPrefix, - ui32LenCommentPrefix, - ui32Flags)) - { -#if defined(PDUMP_DEBUG_OUTFILES) - if(ui32Flags & PDUMP_FLAGS_CONTINUOUS) - { - PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s (continuous set)", - g_ui32EveryLineCounter, pszComment)); - return PVRSRV_ERROR_PDUMP_BUFFER_FULL; - } - else if(ui32Flags & PDUMP_FLAGS_PERSISTENT) - { - PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s (persistent set)", - g_ui32EveryLineCounter, pszComment)); - return PVRSRV_ERROR_CMD_NOT_PROCESSED; - } - else - { - PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %d: %s", - g_ui32EveryLineCounter, pszComment)); - return PVRSRV_ERROR_CMD_NOT_PROCESSED; - } -#else - PVR_DPF((PVR_DBG_WARNING, "Incomplete comment, %s", - pszComment)); - return PVRSRV_ERROR_CMD_NOT_PROCESSED; -#endif - } - -#if defined(PDUMP_DEBUG_OUTFILES) - - eErr = PDumpOSSprintf(pszTemp, 256, "%d-%d %s", - _PDumpGetPID(), - g_ui32EveryLineCounter, - pszComment); - - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "%s", - pszTemp); -#else - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "%s", - pszComment); -#endif - if( (eErr != PVRSRV_OK) && - (eErr != PVRSRV_ERROR_PDUMP_BUF_OVERFLOW)) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpCommentWithFlags(IMG_UINT32 ui32Flags, IMG_CHAR * pszFormat, ...) -{ - PVRSRV_ERROR eErr; - PDUMP_va_list ap; - PDUMP_GET_MSG_STRING(); - - - PDUMP_va_start(ap, pszFormat); - eErr = PDumpOSVSprintf(pszMsg, ui32MaxLen, pszFormat, ap); - PDUMP_va_end(ap); - - if(eErr != PVRSRV_OK) - { - return eErr; - } - return PDumpCommentKM(pszMsg, ui32Flags); -} - -PVRSRV_ERROR PDumpComment(IMG_CHAR *pszFormat, ...) -{ - PVRSRV_ERROR eErr; - PDUMP_va_list ap; - PDUMP_GET_MSG_STRING(); - - - PDUMP_va_start(ap, pszFormat); - eErr = PDumpOSVSprintf(pszMsg, ui32MaxLen, pszFormat, ap); - PDUMP_va_end(ap); - - if(eErr != PVRSRV_OK) - { - return eErr; - } - return PDumpCommentKM(pszMsg, PDUMP_FLAGS_CONTINUOUS); -} - -PVRSRV_ERROR PDumpDriverInfoKM(IMG_CHAR *pszString, IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32MsgLen; - PDUMP_GET_MSG_STRING(); - - - eErr = PDumpOSSprintf(pszMsg, ui32MaxLen, "%s", pszString); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - - PDumpOSVerifyLineEnding(pszMsg, ui32MaxLen); - ui32MsgLen = PDumpOSBuflen(pszMsg, ui32MaxLen); - - if (!PDumpOSWriteString(PDumpOSGetStream(PDUMP_STREAM_DRIVERINFO), - (IMG_UINT8*)pszMsg, - ui32MsgLen, - ui32Flags)) - { - if (ui32Flags & PDUMP_FLAGS_CONTINUOUS) - { - return PVRSRV_ERROR_PDUMP_BUFFER_FULL; - } - else - { - return PVRSRV_ERROR_CMD_NOT_PROCESSED; - } - } - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpBitmapKM( PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Width, - IMG_UINT32 ui32Height, - IMG_UINT32 ui32StrideInBytes, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_HANDLE hDevMemContext, - IMG_UINT32 ui32Size, - PDUMP_PIXEL_FORMAT ePixelFormat, - PDUMP_MEM_FORMAT eMemFormat, - IMG_UINT32 ui32PDumpFlags) -{ - PVRSRV_DEVICE_IDENTIFIER *psDevId = &psDeviceNode->sDevId; - IMG_UINT32 ui32MMUContextID; - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - if ( _PDumpIsPersistent() ) - { - return PVRSRV_OK; - } - - PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump bitmap of render\r\n"); - - - ui32MMUContextID = psDeviceNode->pfnMMUGetContextID( hDevMemContext ); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "SII %s %s.bin :%s:v%x:0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X 0x%08X\r\n", - pszFileName, - pszFileName, - psDevId->pszPDumpDevName, - ui32MMUContextID, - sDevBaseAddr.uiAddr, - ui32Size, - ui32FileOffset, - ePixelFormat, - ui32Width, - ui32Height, - ui32StrideInBytes, - eMemFormat); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpOSWriteString2( hScript, ui32PDumpFlags); - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpReadRegKM ( IMG_CHAR *pszPDumpRegName, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Address, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PDumpFlags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - PVR_UNREFERENCED_PARAMETER(ui32Size); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "SAB :%s:0x%08X 0x%08X %s\r\n", - pszPDumpRegName, - ui32Address, - ui32FileOffset, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpOSWriteString2( hScript, ui32PDumpFlags); - - return PVRSRV_OK; -} - -IMG_BOOL PDumpTestNextFrame(IMG_UINT32 ui32CurrentFrame) -{ - IMG_BOOL bFrameDumped; - - - - (IMG_VOID) PDumpSetFrameKM(ui32CurrentFrame + 1); - bFrameDumped = PDumpIsCaptureFrameKM(); - (IMG_VOID) PDumpSetFrameKM(ui32CurrentFrame); - - return bFrameDumped; -} - -static PVRSRV_ERROR PDumpSignatureRegister (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Address, - IMG_UINT32 ui32Size, - IMG_UINT32 *pui32FileOffset, - IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "SAB :%s:0x%08X 0x%08X %s\r\n", - psDevId->pszPDumpRegName, - ui32Address, - *pui32FileOffset, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpOSWriteString2(hScript, ui32Flags); - *pui32FileOffset += ui32Size; - return PVRSRV_OK; -} - -static IMG_VOID PDumpRegisterRange(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters, - IMG_UINT32 *pui32FileOffset, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32Flags) -{ - IMG_UINT32 i; - for (i = 0; i < ui32NumRegisters; i++) - { - PDumpSignatureRegister(psDevId, pszFileName, pui32Registers[i], ui32Size, pui32FileOffset, ui32Flags); - } -} - -PVRSRV_ERROR PDump3DSignatureRegisters(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32FileOffset, ui32Flags; - - PDUMP_GET_FILE_STRING(); - - ui32Flags = bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0; - ui32FileOffset = 0; - - PDumpCommentWithFlags(ui32Flags, "\r\n-- Dump 3D signature registers\r\n"); - eErr = PDumpOSSprintf(pszFileName, ui32MaxLen, "out%u_3d.sig", ui32DumpFrameNum); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpRegisterRange(psDevId, - pszFileName, - pui32Registers, - ui32NumRegisters, - &ui32FileOffset, - sizeof(IMG_UINT32), - ui32Flags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpTASignatureRegisters (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_UINT32 ui32TAKickCount, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32FileOffset, ui32Flags; - - PDUMP_GET_FILE_STRING(); - - ui32Flags = bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0; - ui32FileOffset = ui32TAKickCount * ui32NumRegisters * sizeof(IMG_UINT32); - - PDumpCommentWithFlags(ui32Flags, "\r\n-- Dump TA signature registers\r\n"); - eErr = PDumpOSSprintf(pszFileName, ui32MaxLen, "out%u_ta.sig", ui32DumpFrameNum); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpRegisterRange(psDevId, - pszFileName, - pui32Registers, - ui32NumRegisters, - &ui32FileOffset, - sizeof(IMG_UINT32), - ui32Flags); - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpCounterRegisters (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32FileOffset, ui32Flags; - - PDUMP_GET_FILE_STRING(); - - ui32Flags = bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0UL; - ui32FileOffset = 0UL; - - PDumpCommentWithFlags(ui32Flags, "\r\n-- Dump counter registers\r\n"); - eErr = PDumpOSSprintf(pszFileName, ui32MaxLen, "out%u.perf", ui32DumpFrameNum); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpRegisterRange(psDevId, - pszFileName, - pui32Registers, - ui32NumRegisters, - &ui32FileOffset, - sizeof(IMG_UINT32), - ui32Flags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpRegRead(IMG_CHAR *pszPDumpRegName, - const IMG_UINT32 ui32RegOffset, - IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "RDW :%s:0x%X\r\n", - pszPDumpRegName, - ui32RegOffset); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpSaveMemKM (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32PDumpFlags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "SAB :%s:v%x:0x%08X 0x%08X 0x%08X %s.bin\r\n", - psDevId->pszPDumpDevName, - ui32MMUContextID, - sDevBaseAddr.uiAddr, - ui32Size, - ui32FileOffset, - pszFileName); - if(eErr != PVRSRV_OK) - { - return eErr; - } - - PDumpOSWriteString2(hScript, ui32PDumpFlags); - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpCycleCountRegRead(PVRSRV_DEVICE_IDENTIFIER *psDevId, - const IMG_UINT32 ui32RegOffset, - IMG_BOOL bLastFrame) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "RDW :%s:0x%X\r\n", - psDevId->pszPDumpRegName, - ui32RegOffset); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, bLastFrame ? PDUMP_FLAGS_LASTFRAME : 0); - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpSignatureBuffer (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_CHAR *pszBufferType, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32PDumpFlags) -{ - PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump microkernel %s signature Buffer\r\n", - pszBufferType); - PDumpCommentWithFlags(ui32PDumpFlags, "Buffer format (sizes in 32-bit words):\r\n"); - PDumpCommentWithFlags(ui32PDumpFlags, "\tNumber of signatures per sample (1)\r\n"); - PDumpCommentWithFlags(ui32PDumpFlags, "\tNumber of samples (1)\r\n"); - PDumpCommentWithFlags(ui32PDumpFlags, "\tSignature register offsets (1 * number of signatures)\r\n"); - PDumpCommentWithFlags(ui32PDumpFlags, "\tSignature sample values (number of samples * number of signatures)\r\n"); - PDumpCommentWithFlags(ui32PDumpFlags, "Note: If buffer is full, last sample is final state after test completed\r\n"); - return PDumpSaveMemKM(psDevId, pszFileName, ui32FileOffset, sDevBaseAddr, ui32Size, - ui32MMUContextID, ui32PDumpFlags); -} - - -PVRSRV_ERROR PDumpHWPerfCBKM (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32PDumpFlags) -{ - PDumpCommentWithFlags(ui32PDumpFlags, "\r\n-- Dump Hardware Performance Circular Buffer\r\n"); - return PDumpSaveMemKM(psDevId, pszFileName, ui32FileOffset, sDevBaseAddr, ui32Size, - ui32MMUContextID, ui32PDumpFlags); -} - - -PVRSRV_ERROR PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo, - IMG_UINT32 ui32ROffOffset, - IMG_UINT32 ui32WPosVal, - IMG_UINT32 ui32PacketSize, - IMG_UINT32 ui32BufferSize, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - PVRSRV_ERROR eErr; - IMG_UINT32 ui32PageOffset; - IMG_UINT8 *pui8LinAddr; - IMG_DEV_VIRTADDR sDevVAddr; - IMG_DEV_PHYADDR sDevPAddr; - IMG_DEV_VIRTADDR sDevVPageAddr; - - PDUMP_MMU_ATTRIB *psMMUAttrib; - - PDUMP_GET_SCRIPT_STRING(); - - psMMUAttrib = ((BM_BUF*)psROffMemInfo->sMemBlk.hBuffer)->pMapping->pBMHeap->psMMUAttrib; - - - PVR_ASSERT((ui32ROffOffset + sizeof(IMG_UINT32)) <= psROffMemInfo->uAllocSize); - - pui8LinAddr = psROffMemInfo->pvLinAddrKM; - sDevVAddr = psROffMemInfo->sDevVAddr; - - - pui8LinAddr += ui32ROffOffset; - sDevVAddr.uiAddr += ui32ROffOffset; - - - - - PDumpOSCPUVAddrToPhysPages(psROffMemInfo->sMemBlk.hOSMemHandle, - ui32ROffOffset, - pui8LinAddr, - psMMUAttrib->ui32DataPageMask, - &ui32PageOffset); - - - sDevVPageAddr.uiAddr = sDevVAddr.uiAddr - ui32PageOffset; - - PVR_ASSERT((sDevVPageAddr.uiAddr & 0xFFF) == 0); - - - BM_GetPhysPageAddr(psROffMemInfo, sDevVPageAddr, &sDevPAddr); - - - sDevPAddr.uiAddr += ui32PageOffset; - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLen, - "CBP :%s:PA_%08X%08X:0x%08X 0x%08X 0x%08X 0x%08X\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr & ~(psMMUAttrib->ui32DataPageMask), - sDevPAddr.uiAddr & (psMMUAttrib->ui32DataPageMask), - ui32WPosVal, - ui32PacketSize, - ui32BufferSize); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpIDLWithFlags(IMG_UINT32 ui32Clocks, IMG_UINT32 ui32Flags) -{ - PVRSRV_ERROR eErr; - PDUMP_GET_SCRIPT_STRING(); - PDUMP_DBG(("PDumpIDLWithFlags")); - - eErr = PDumpOSBufprintf(hScript, ui32MaxLen, "IDL %u\r\n", ui32Clocks); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, ui32Flags); - return PVRSRV_OK; -} - - -PVRSRV_ERROR PDumpIDL(IMG_UINT32 ui32Clocks) -{ - return PDumpIDLWithFlags(ui32Clocks, PDUMP_FLAGS_CONTINUOUS); -} - -PVRSRV_ERROR PDumpMemUM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_PVOID pvAltLinAddrUM, - IMG_PVOID pvLinAddrUM, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag) -{ - IMG_VOID *pvAddrUM; - IMG_VOID *pvAddrKM; - IMG_UINT32 ui32BytesDumped; - IMG_UINT32 ui32CurrentOffset; - - if (psMemInfo->pvLinAddrKM != IMG_NULL && pvAltLinAddrUM == IMG_NULL) - { - - return PDumpMemKM(IMG_NULL, - psMemInfo, - ui32Offset, - ui32Bytes, - ui32Flags, - hUniqueTag); - } - - pvAddrUM = (pvAltLinAddrUM != IMG_NULL) ? pvAltLinAddrUM : ((pvLinAddrUM != IMG_NULL) ? VPTR_PLUS(pvLinAddrUM, ui32Offset) : IMG_NULL); - - pvAddrKM = GetTempBuffer(); - - - PVR_ASSERT(pvAddrUM != IMG_NULL && pvAddrKM != IMG_NULL); - if (pvAddrUM == IMG_NULL || pvAddrKM == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpMemUM: Nothing to dump")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if (ui32Bytes > PDUMP_TEMP_BUFFER_SIZE) - { - PDumpCommentWithFlags(ui32Flags, "Dumping 0x%08x bytes of memory, in blocks of 0x%08x bytes", ui32Bytes, (IMG_UINT32)PDUMP_TEMP_BUFFER_SIZE); - } - - ui32CurrentOffset = ui32Offset; - for (ui32BytesDumped = 0; ui32BytesDumped < ui32Bytes;) - { - PVRSRV_ERROR eError; - IMG_UINT32 ui32BytesToDump = MIN(PDUMP_TEMP_BUFFER_SIZE, ui32Bytes - ui32BytesDumped); - - eError = OSCopyFromUser(psPerProc, - pvAddrKM, - pvAddrUM, - ui32BytesToDump); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpMemUM: OSCopyFromUser failed (%d)", eError)); - return eError; - } - - eError = PDumpMemKM(pvAddrKM, - psMemInfo, - ui32CurrentOffset, - ui32BytesToDump, - ui32Flags, - hUniqueTag); - - if (eError != PVRSRV_OK) - { - - if (ui32BytesDumped != 0) - { - PVR_DPF((PVR_DBG_ERROR, "PDumpMemUM: PDumpMemKM failed (%d)", eError)); - } - return eError; - } - - VPTR_INC(pvAddrUM, ui32BytesToDump); - ui32CurrentOffset += ui32BytesToDump; - ui32BytesDumped += ui32BytesToDump; - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR _PdumpAllocMMUContext(IMG_UINT32 *pui32MMUContextID) -{ - IMG_UINT32 i; - - - for(i=0; ipvLinAddrKM & psMMUAttrib->ui32DataPageMask); - - - sDevVPageAddr.uiAddr = uiAddr - ui32PageOffset; - - - BM_GetPhysPageAddr(psMemInfo, sDevVPageAddr, &sDevPAddr); - - - sDevPAddr.uiAddr += ui32PageOffset; - - PDumpOSBufprintf(hScript, - ui32MaxLen, - "SAB :%s:PA_%08X%08X:0x%08X 0x%08X 0x%08X %s\r\n", - psMMUAttrib->sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)hUniqueTag, - sDevPAddr.uiAddr & ~psMMUAttrib->ui32DataPageMask, - sDevPAddr.uiAddr & psMMUAttrib->ui32DataPageMask, - ui32Size, - ui32FileOffset, - pszFileName); - - PDumpOSWriteString2(hScript, ui32PDumpFlags); - - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpRegBasedCBP(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegOffset, - IMG_UINT32 ui32WPosVal, - IMG_UINT32 ui32PacketSize, - IMG_UINT32 ui32BufferSize, - IMG_UINT32 ui32Flags) -{ - PDUMP_GET_SCRIPT_STRING(); - - PDumpOSBufprintf(hScript, - ui32MaxLen, - "CBP :%s:0x%08X 0x%08X 0x%08X 0x%08X\r\n", - pszPDumpRegName, - ui32RegOffset, - ui32WPosVal, - ui32PacketSize, - ui32BufferSize); - PDumpOSWriteString2(hScript, ui32Flags); - - return PVRSRV_OK; -} - - - -#include "syscommon.h" - -IMG_EXPORT IMG_VOID PDumpConnectionNotify(IMG_VOID) -{ - SYS_DATA *psSysData; - PVRSRV_DEVICE_NODE *psThis; - PVR_DPF((PVR_DBG_WARNING, "PDump has connected.")); - - - SysAcquireData(&psSysData); - - psThis = psSysData->psDeviceNodeList; - while (psThis) - { - if (psThis->pfnPDumpInitDevice) - { - - psThis->pfnPDumpInitDevice(psThis); - } - psThis = psThis->psNext; - } -} - -IMG_UINT32 DbgWrite(PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32BCount, IMG_UINT32 ui32Flags) -{ - IMG_UINT32 ui32BytesWritten = 0; - IMG_UINT32 ui32Off = 0; - PDBG_STREAM_CONTROL psCtrl = psStream->psCtrl; - - - if ((ui32Flags & PDUMP_FLAGS_NEVER) != 0) - { - return ui32BCount; - } - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - if ( (_PDumpIsProcessActive() == IMG_FALSE ) && - ((ui32Flags & PDUMP_FLAGS_PERSISTENT) == 0) ) - { - return ui32BCount; - } -#endif - - - if ( ((ui32Flags & PDUMP_FLAGS_PERSISTENT) != 0) && (psCtrl->bInitPhaseComplete) ) - { - while (ui32BCount > 0) - { - - - - ui32BytesWritten = PDumpOSDebugDriverWrite( psStream, - PDUMP_WRITE_MODE_PERSISTENT, - &pui8Data[ui32Off], ui32BCount, 1, 0); - - if (ui32BytesWritten == 0) - { - PDumpOSReleaseExecution(); - } - - if (ui32BytesWritten != 0xFFFFFFFFU) - { - ui32Off += ui32BytesWritten; - ui32BCount -= ui32BytesWritten; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "DbgWrite: Failed to send persistent data")); - if( (psCtrl->ui32Flags & DEBUG_FLAGS_READONLY) != 0) - { - - PDumpSuspendKM(); - } - return 0xFFFFFFFFU; - } - } - - - ui32BCount = ui32Off; ui32Off = 0; ui32BytesWritten = 0; - } - - while (((IMG_UINT32) ui32BCount > 0) && (ui32BytesWritten != 0xFFFFFFFFU)) - { - if ((ui32Flags & PDUMP_FLAGS_CONTINUOUS) != 0) - { - - - if (((psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) != 0) && - (psCtrl->ui32Start == 0xFFFFFFFFU) && - (psCtrl->ui32End == 0xFFFFFFFFU) && - psCtrl->bInitPhaseComplete) - { - ui32BytesWritten = ui32BCount; - } - else - { - ui32BytesWritten = PDumpOSDebugDriverWrite( psStream, - PDUMP_WRITE_MODE_CONTINUOUS, - &pui8Data[ui32Off], ui32BCount, 1, 0); - } - } - else - { - if (ui32Flags & PDUMP_FLAGS_LASTFRAME) - { - IMG_UINT32 ui32DbgFlags; - - ui32DbgFlags = 0; - if (ui32Flags & PDUMP_FLAGS_RESETLFBUFFER) - { - ui32DbgFlags |= WRITELF_FLAGS_RESETBUF; - } - - ui32BytesWritten = PDumpOSDebugDriverWrite( psStream, - PDUMP_WRITE_MODE_LASTFRAME, - &pui8Data[ui32Off], ui32BCount, 1, ui32DbgFlags); - } - else - { - ui32BytesWritten = PDumpOSDebugDriverWrite( psStream, - PDUMP_WRITE_MODE_BINCM, - &pui8Data[ui32Off], ui32BCount, 1, 0); - } - } - - - - - if (ui32BytesWritten == 0) - { - PDumpOSReleaseExecution(); - } - - if (ui32BytesWritten != 0xFFFFFFFFU) - { - ui32Off += ui32BytesWritten; - ui32BCount -= ui32BytesWritten; - } - - - } - - - - return ui32BytesWritten; -} - - - -#else -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/perproc.c b/drivers/staging/cdv/pvr/services4/srvkm/common/perproc.c deleted file mode 100644 index eb73166..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/perproc.c +++ /dev/null @@ -1,305 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "resman.h" -#include "handle.h" -#include "perproc.h" -#include "osperproc.h" -#if defined(TTRACE) -#include "ttrace.h" -#endif - -#define HASH_TAB_INIT_SIZE 32 - -static HASH_TABLE *psHashTab = IMG_NULL; - -static PVRSRV_ERROR FreePerProcessData(PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_ERROR eError; - IMG_UINTPTR_T uiPerProc; - - PVR_ASSERT(psPerProc != IMG_NULL); - - if (psPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - uiPerProc = HASH_Remove(psHashTab, (IMG_UINTPTR_T)psPerProc->ui32PID); - if (uiPerProc == 0) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: Couldn't find process in per-process data hash table")); - - PVR_ASSERT(psPerProc->ui32PID == 0); - } - else - { - PVR_ASSERT((PVRSRV_PER_PROCESS_DATA *)uiPerProc == psPerProc); - PVR_ASSERT(((PVRSRV_PER_PROCESS_DATA *)uiPerProc)->ui32PID == psPerProc->ui32PID); - } - - - if (psPerProc->psHandleBase != IMG_NULL) - { - eError = PVRSRVFreeHandleBase(psPerProc->psHandleBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: Couldn't free handle base for process (%d)", eError)); - return eError; - } - } - - - if (psPerProc->hPerProcData != IMG_NULL) - { - eError = PVRSRVReleaseHandle(KERNEL_HANDLE_BASE, psPerProc->hPerProcData, PVRSRV_HANDLE_TYPE_PERPROC_DATA); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: Couldn't release per-process data handle (%d)", eError)); - return eError; - } - } - - - eError = OSPerProcessPrivateDataDeInit(psPerProc->hOsPrivateData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: OSPerProcessPrivateDataDeInit failed (%d)", eError)); - return eError; - } - - eError = OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(*psPerProc), - psPerProc, - psPerProc->hBlockAlloc); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreePerProcessData: Couldn't free per-process data (%d)", eError)); - return eError; - } - - return PVRSRV_OK; -} - - -PVRSRV_PER_PROCESS_DATA *PVRSRVPerProcessData(IMG_UINT32 ui32PID) -{ - PVRSRV_PER_PROCESS_DATA *psPerProc; - - PVR_ASSERT(psHashTab != IMG_NULL); - - - psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); - return psPerProc; -} - - -PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flags) -{ - PVRSRV_PER_PROCESS_DATA *psPerProc; - IMG_HANDLE hBlockAlloc; - PVRSRV_ERROR eError = PVRSRV_OK; - - if (psHashTab == IMG_NULL) - { - return PVRSRV_ERROR_INIT_FAILURE; - } - - - psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); - - if (psPerProc == IMG_NULL) - { - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(*psPerProc), - (IMG_PVOID *)&psPerProc, - &hBlockAlloc, - "Per Process Data"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't allocate per-process data (%d)", eError)); - return eError; - } - OSMemSet(psPerProc, 0, sizeof(*psPerProc)); - psPerProc->hBlockAlloc = hBlockAlloc; - - if (!HASH_Insert(psHashTab, (IMG_UINTPTR_T)ui32PID, (IMG_UINTPTR_T)psPerProc)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't insert per-process data into hash table")); - eError = PVRSRV_ERROR_INSERT_HASH_TABLE_DATA_FAILED; - goto failure; - } - - psPerProc->ui32PID = ui32PID; - psPerProc->ui32RefCount = 0; - -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if (ui32Flags == SRV_FLAGS_PDUMP_ACTIVE) - { - psPerProc->bPDumpActive = IMG_TRUE; - } -#else - PVR_UNREFERENCED_PARAMETER(ui32Flags); -#endif - - - eError = OSPerProcessPrivateDataInit(&psPerProc->hOsPrivateData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: OSPerProcessPrivateDataInit failed (%d)", eError)); - goto failure; - } - - - eError = PVRSRVAllocHandle(KERNEL_HANDLE_BASE, - &psPerProc->hPerProcData, - psPerProc, - PVRSRV_HANDLE_TYPE_PERPROC_DATA, - PVRSRV_HANDLE_ALLOC_FLAG_NONE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't allocate handle for per-process data (%d)", eError)); - goto failure; - } - - - eError = PVRSRVAllocHandleBase(&psPerProc->psHandleBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't allocate handle base for process (%d)", eError)); - goto failure; - } - - - eError = OSPerProcessSetHandleOptions(psPerProc->psHandleBase); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't set handle options (%d)", eError)); - goto failure; - } - - - eError = PVRSRVResManConnect(psPerProc, &psPerProc->hResManContext); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataConnect: Couldn't register with the resource manager")); - goto failure; - } -#if defined (TTRACE) - PVRSRVTimeTraceBufferCreate(ui32PID); -#endif - } - - psPerProc->ui32RefCount++; - PVR_DPF((PVR_DBG_MESSAGE, - "PVRSRVPerProcessDataConnect: Process 0x%x has ref-count %d", - ui32PID, psPerProc->ui32RefCount)); - - return eError; - -failure: - (IMG_VOID)FreePerProcessData(psPerProc); - return eError; -} - - -IMG_VOID PVRSRVPerProcessDataDisconnect(IMG_UINT32 ui32PID) -{ - PVRSRV_ERROR eError; - PVRSRV_PER_PROCESS_DATA *psPerProc; - - PVR_ASSERT(psHashTab != IMG_NULL); - - psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); - if (psPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataDealloc: Couldn't locate per-process data for PID %u", ui32PID)); - } - else - { - psPerProc->ui32RefCount--; - if (psPerProc->ui32RefCount == 0) - { - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVPerProcessDataDisconnect: " - "Last close from process 0x%x received", ui32PID)); - -#if defined (TTRACE) - PVRSRVTimeTraceBufferDestroy(ui32PID); -#endif - - - PVRSRVResManDisconnect(psPerProc->hResManContext, IMG_FALSE); - - - eError = FreePerProcessData(psPerProc); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataDisconnect: Error freeing per-process data")); - } - } - } - - eError = PVRSRVPurgeHandles(KERNEL_HANDLE_BASE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataDisconnect: Purge of global handle pool failed (%d)", eError)); - } -} - - -PVRSRV_ERROR PVRSRVPerProcessDataInit(IMG_VOID) -{ - PVR_ASSERT(psHashTab == IMG_NULL); - - - psHashTab = HASH_Create(HASH_TAB_INIT_SIZE); - if (psHashTab == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVPerProcessDataInit: Couldn't create per-process data hash table")); - return PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE; - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR PVRSRVPerProcessDataDeInit(IMG_VOID) -{ - - if (psHashTab != IMG_NULL) - { - - HASH_Delete(psHashTab); - psHashTab = IMG_NULL; - } - - return PVRSRV_OK; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/power.c b/drivers/staging/cdv/pvr/services4/srvkm/common/power.c deleted file mode 100644 index 21d7ad4..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/power.c +++ /dev/null @@ -1,719 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "pdump_km.h" - -#include "lists.h" - -static IMG_BOOL gbInitServerRunning = IMG_FALSE; -static IMG_BOOL gbInitServerRan = IMG_FALSE; -static IMG_BOOL gbInitSuccessful = IMG_FALSE; - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_STATE eInitServerState, IMG_BOOL bState) -{ - - switch(eInitServerState) - { - case PVRSRV_INIT_SERVER_RUNNING: - gbInitServerRunning = bState; - break; - case PVRSRV_INIT_SERVER_RAN: - gbInitServerRan = bState; - break; - case PVRSRV_INIT_SERVER_SUCCESSFUL: - gbInitSuccessful = bState; - break; - default: - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVSetInitServerState : Unknown state %x", eInitServerState)); - return PVRSRV_ERROR_UNKNOWN_INIT_SERVER_STATE; - } - - return PVRSRV_OK; -} - -IMG_EXPORT -IMG_BOOL PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_STATE eInitServerState) -{ - IMG_BOOL bReturnVal; - - switch(eInitServerState) - { - case PVRSRV_INIT_SERVER_RUNNING: - bReturnVal = gbInitServerRunning; - break; - case PVRSRV_INIT_SERVER_RAN: - bReturnVal = gbInitServerRan; - break; - case PVRSRV_INIT_SERVER_SUCCESSFUL: - bReturnVal = gbInitSuccessful; - break; - default: - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVGetInitServerState : Unknown state %x", eInitServerState)); - bReturnVal = IMG_FALSE; - } - - return bReturnVal; -} - -static IMG_BOOL _IsSystemStatePowered(PVRSRV_SYS_POWER_STATE eSystemPowerState) -{ - return (IMG_BOOL)(eSystemPowerState < PVRSRV_SYS_POWER_STATE_D2); -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32 ui32CallerID, - IMG_BOOL bSystemPowerEvent) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - IMG_UINT32 ui32Timeout = 1000000; - IMG_BOOL bTryLock = (ui32CallerID == ISR_ID); - - SysAcquireData(&psSysData); - - eError = OSPowerLockWrap(bTryLock); - if (eError != PVRSRV_OK) - { - return eError; - } - - do - { - eError = OSLockResource(&psSysData->sPowerStateChangeResource, - ui32CallerID); - if (eError == PVRSRV_OK) - { - break; - } - else if (bTryLock) - { - - - eError = PVRSRV_ERROR_RETRY; - break; - } - - OSWaitus(1); - ui32Timeout--; - } while (ui32Timeout > 0); - - if (eError != PVRSRV_OK) - { - OSPowerLockUnwrap(); - } - - - if ((eError == PVRSRV_OK) && - !bSystemPowerEvent && - !_IsSystemStatePowered(psSysData->eCurrentPowerState)) - { - - PVRSRVPowerUnlock(ui32CallerID); - eError = PVRSRV_ERROR_RETRY; - } - - return eError; -} - - -IMG_EXPORT -IMG_VOID PVRSRVPowerUnlock(IMG_UINT32 ui32CallerID) -{ - OSUnlockResource(&gpsSysData->sPowerStateChangeResource, ui32CallerID); - OSPowerLockUnwrap(); -} - - -static PVRSRV_ERROR PVRSRVDevicePrePowerStateKM_AnyVaCb(PVRSRV_POWER_DEV *psPowerDevice, va_list va) -{ - PVRSRV_DEV_POWER_STATE eNewDevicePowerState; - PVRSRV_ERROR eError; - - - IMG_BOOL bAllDevices; - IMG_UINT32 ui32DeviceIndex; - PVRSRV_DEV_POWER_STATE eNewPowerState; - - - bAllDevices = va_arg(va, IMG_BOOL); - ui32DeviceIndex = va_arg(va, IMG_UINT32); - eNewPowerState = va_arg(va, PVRSRV_DEV_POWER_STATE); - - if (bAllDevices || (ui32DeviceIndex == psPowerDevice->ui32DeviceIndex)) - { - eNewDevicePowerState = (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) ? - psPowerDevice->eDefaultPowerState : eNewPowerState; - - if (psPowerDevice->eCurrentPowerState != eNewDevicePowerState) - { - if (psPowerDevice->pfnPrePower != IMG_NULL) - { - - eError = psPowerDevice->pfnPrePower(psPowerDevice->hDevCookie, - eNewDevicePowerState, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - - eError = SysDevicePrePowerState(psPowerDevice->ui32DeviceIndex, - eNewDevicePowerState, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - return eError; - } - } - } - - return PVRSRV_OK; -} - -static -PVRSRV_ERROR PVRSRVDevicePrePowerStateKM(IMG_BOOL bAllDevices, - IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - - eError = List_PVRSRV_POWER_DEV_PVRSRV_ERROR_Any_va(psSysData->psPowerDeviceList, - &PVRSRVDevicePrePowerStateKM_AnyVaCb, - bAllDevices, - ui32DeviceIndex, - eNewPowerState); - - return eError; -} - -static PVRSRV_ERROR PVRSRVDevicePostPowerStateKM_AnyVaCb(PVRSRV_POWER_DEV *psPowerDevice, va_list va) -{ - PVRSRV_DEV_POWER_STATE eNewDevicePowerState; - PVRSRV_ERROR eError; - - - IMG_BOOL bAllDevices; - IMG_UINT32 ui32DeviceIndex; - PVRSRV_DEV_POWER_STATE eNewPowerState; - - - bAllDevices = va_arg(va, IMG_BOOL); - ui32DeviceIndex = va_arg(va, IMG_UINT32); - eNewPowerState = va_arg(va, PVRSRV_DEV_POWER_STATE); - - if (bAllDevices || (ui32DeviceIndex == psPowerDevice->ui32DeviceIndex)) - { - eNewDevicePowerState = (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) ? - psPowerDevice->eDefaultPowerState : eNewPowerState; - - if (psPowerDevice->eCurrentPowerState != eNewDevicePowerState) - { - - eError = SysDevicePostPowerState(psPowerDevice->ui32DeviceIndex, - eNewDevicePowerState, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - return eError; - } - - if (psPowerDevice->pfnPostPower != IMG_NULL) - { - - eError = psPowerDevice->pfnPostPower(psPowerDevice->hDevCookie, - eNewDevicePowerState, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - psPowerDevice->eCurrentPowerState = eNewDevicePowerState; - } - } - return PVRSRV_OK; -} - -static -PVRSRV_ERROR PVRSRVDevicePostPowerStateKM(IMG_BOOL bAllDevices, - IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - - eError = List_PVRSRV_POWER_DEV_PVRSRV_ERROR_Any_va(psSysData->psPowerDeviceList, - &PVRSRVDevicePostPowerStateKM_AnyVaCb, - bAllDevices, - ui32DeviceIndex, - eNewPowerState); - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetDevicePowerStateKM(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - IMG_UINT32 ui32CallerID, - IMG_BOOL bRetainMutex) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - eError = PVRSRVPowerLock(ui32CallerID, IMG_FALSE); - if(eError != PVRSRV_OK) - { - return eError; - } - - #if defined(PDUMP) - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) - { - - - - - eError = PVRSRVDevicePrePowerStateKM(IMG_FALSE, ui32DeviceIndex, PVRSRV_DEV_POWER_STATE_ON); - if(eError != PVRSRV_OK) - { - goto Exit; - } - - eError = PVRSRVDevicePostPowerStateKM(IMG_FALSE, ui32DeviceIndex, PVRSRV_DEV_POWER_STATE_ON); - - if (eError != PVRSRV_OK) - { - goto Exit; - } - - PDUMPSUSPEND(); - } - #endif - - eError = PVRSRVDevicePrePowerStateKM(IMG_FALSE, ui32DeviceIndex, eNewPowerState); - if(eError != PVRSRV_OK) - { - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) - { - PDUMPRESUME(); - } - goto Exit; - } - - eError = PVRSRVDevicePostPowerStateKM(IMG_FALSE, ui32DeviceIndex, eNewPowerState); - - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) - { - PDUMPRESUME(); - } - -Exit: - - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVSetDevicePowerStateKM : Transition to %d FAILED 0x%x", eNewPowerState, eError)); - } - - if (!bRetainMutex || (eError != PVRSRV_OK)) - { - PVRSRVPowerUnlock(ui32CallerID); - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSystemPrePowerStateKM(PVRSRV_SYS_POWER_STATE eNewSysPowerState) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - PVRSRV_DEV_POWER_STATE eNewDevicePowerState; - - SysAcquireData(&psSysData); - - - eError = PVRSRVPowerLock(KERNEL_ID, IMG_TRUE); - if(eError != PVRSRV_OK) - { - return eError; - } - - if (_IsSystemStatePowered(eNewSysPowerState) != - _IsSystemStatePowered(psSysData->eCurrentPowerState)) - { - if (_IsSystemStatePowered(eNewSysPowerState)) - { - - eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_DEFAULT; - } - else - { - eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_OFF; - } - - - eError = PVRSRVDevicePrePowerStateKM(IMG_TRUE, 0, eNewDevicePowerState); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - } - - if (eNewSysPowerState != psSysData->eCurrentPowerState) - { - - eError = SysSystemPrePowerState(eNewSysPowerState); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - } - - return eError; - -ErrorExit: - - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVSystemPrePowerStateKM: Transition from %d to %d FAILED 0x%x", - psSysData->eCurrentPowerState, eNewSysPowerState, eError)); - - - psSysData->eFailedPowerState = eNewSysPowerState; - - PVRSRVPowerUnlock(KERNEL_ID); - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSystemPostPowerStateKM(PVRSRV_SYS_POWER_STATE eNewSysPowerState) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - SYS_DATA *psSysData; - PVRSRV_DEV_POWER_STATE eNewDevicePowerState; - - SysAcquireData(&psSysData); - - if (eNewSysPowerState != psSysData->eCurrentPowerState) - { - - eError = SysSystemPostPowerState(eNewSysPowerState); - if (eError != PVRSRV_OK) - { - goto Exit; - } - } - - if (_IsSystemStatePowered(eNewSysPowerState) != - _IsSystemStatePowered(psSysData->eCurrentPowerState)) - { - if (_IsSystemStatePowered(eNewSysPowerState)) - { - - eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_DEFAULT; - } - else - { - eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_OFF; - } - - - eError = PVRSRVDevicePostPowerStateKM(IMG_TRUE, 0, eNewDevicePowerState); - if (eError != PVRSRV_OK) - { - goto Exit; - } - } - - PVR_DPF((PVR_DBG_MESSAGE, - "PVRSRVSystemPostPowerStateKM: System Power Transition from %d to %d OK", - psSysData->eCurrentPowerState, eNewSysPowerState)); - - psSysData->eCurrentPowerState = eNewSysPowerState; - -Exit: - - PVRSRVPowerUnlock(KERNEL_ID); - - - if (_IsSystemStatePowered(eNewSysPowerState) && - PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) - { - - - - PVRSRVScheduleDeviceCallbacks(); - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE eNewSysPowerState) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - eError = PVRSRVSystemPrePowerStateKM(eNewSysPowerState); - if(eError != PVRSRV_OK) - { - goto ErrorExit; - } - - eError = PVRSRVSystemPostPowerStateKM(eNewSysPowerState); - if(eError != PVRSRV_OK) - { - goto ErrorExit; - } - - - psSysData->eFailedPowerState = PVRSRV_SYS_POWER_STATE_Unspecified; - - return PVRSRV_OK; - -ErrorExit: - - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVSetPowerStateKM: Transition from %d to %d FAILED 0x%x", - psSysData->eCurrentPowerState, eNewSysPowerState, eError)); - - - psSysData->eFailedPowerState = eNewSysPowerState; - - return eError; -} - - -PVRSRV_ERROR PVRSRVRegisterPowerDevice(IMG_UINT32 ui32DeviceIndex, - PFN_PRE_POWER pfnPrePower, - PFN_POST_POWER pfnPostPower, - PFN_PRE_CLOCKSPEED_CHANGE pfnPreClockSpeedChange, - PFN_POST_CLOCKSPEED_CHANGE pfnPostClockSpeedChange, - IMG_HANDLE hDevCookie, - PVRSRV_DEV_POWER_STATE eCurrentPowerState, - PVRSRV_DEV_POWER_STATE eDefaultPowerState) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - PVRSRV_POWER_DEV *psPowerDevice; - - if (pfnPrePower == IMG_NULL && - pfnPostPower == IMG_NULL) - { - return PVRSRVRemovePowerDevice(ui32DeviceIndex); - } - - SysAcquireData(&psSysData); - - eError = OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_POWER_DEV), - (IMG_VOID **)&psPowerDevice, IMG_NULL, - "Power Device"); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterPowerDevice: Failed to alloc PVRSRV_POWER_DEV")); - return eError; - } - - - psPowerDevice->pfnPrePower = pfnPrePower; - psPowerDevice->pfnPostPower = pfnPostPower; - psPowerDevice->pfnPreClockSpeedChange = pfnPreClockSpeedChange; - psPowerDevice->pfnPostClockSpeedChange = pfnPostClockSpeedChange; - psPowerDevice->hDevCookie = hDevCookie; - psPowerDevice->ui32DeviceIndex = ui32DeviceIndex; - psPowerDevice->eCurrentPowerState = eCurrentPowerState; - psPowerDevice->eDefaultPowerState = eDefaultPowerState; - - - List_PVRSRV_POWER_DEV_Insert(&(psSysData->psPowerDeviceList), psPowerDevice); - - return (PVRSRV_OK); -} - - -PVRSRV_ERROR PVRSRVRemovePowerDevice (IMG_UINT32 ui32DeviceIndex) -{ - SYS_DATA *psSysData; - PVRSRV_POWER_DEV *psPowerDev; - - SysAcquireData(&psSysData); - - - psPowerDev = (PVRSRV_POWER_DEV*) - List_PVRSRV_POWER_DEV_Any_va(psSysData->psPowerDeviceList, - &MatchPowerDeviceIndex_AnyVaCb, - ui32DeviceIndex); - - if (psPowerDev) - { - List_PVRSRV_POWER_DEV_Remove(psPowerDev); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_POWER_DEV), psPowerDev, IMG_NULL); - - } - - return (PVRSRV_OK); -} - - -IMG_EXPORT -IMG_BOOL PVRSRVIsDevicePowered(IMG_UINT32 ui32DeviceIndex) -{ - SYS_DATA *psSysData; - PVRSRV_POWER_DEV *psPowerDevice; - - SysAcquireData(&psSysData); - - - if (OSIsResourceLocked(&psSysData->sPowerStateChangeResource, KERNEL_ID) || - OSIsResourceLocked(&psSysData->sPowerStateChangeResource, ISR_ID)) - { - return IMG_FALSE; - } - - psPowerDevice = (PVRSRV_POWER_DEV*) - List_PVRSRV_POWER_DEV_Any_va(psSysData->psPowerDeviceList, - &MatchPowerDeviceIndex_AnyVaCb, - ui32DeviceIndex); - return (psPowerDevice && (psPowerDevice->eCurrentPowerState == PVRSRV_DEV_POWER_STATE_ON)) - ? IMG_TRUE : IMG_FALSE; -} - - -PVRSRV_ERROR PVRSRVDevicePreClockSpeedChange(IMG_UINT32 ui32DeviceIndex, - IMG_BOOL bIdleDevice, - IMG_VOID *pvInfo) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - SYS_DATA *psSysData; - PVRSRV_POWER_DEV *psPowerDevice; - - PVR_UNREFERENCED_PARAMETER(pvInfo); - - SysAcquireData(&psSysData); - - if (bIdleDevice) - { - - eError = PVRSRVPowerLock(KERNEL_ID, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDevicePreClockSpeedChange : failed to acquire lock, error:0x%x", eError)); - return eError; - } - } - - - psPowerDevice = (PVRSRV_POWER_DEV*) - List_PVRSRV_POWER_DEV_Any_va(psSysData->psPowerDeviceList, - &MatchPowerDeviceIndex_AnyVaCb, - ui32DeviceIndex); - - if (psPowerDevice && psPowerDevice->pfnPostClockSpeedChange) - { - eError = psPowerDevice->pfnPreClockSpeedChange(psPowerDevice->hDevCookie, - bIdleDevice, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVDevicePreClockSpeedChange : Device %u failed, error:0x%x", - ui32DeviceIndex, eError)); - } - } - - if (bIdleDevice && eError != PVRSRV_OK) - { - PVRSRVPowerUnlock(KERNEL_ID); - } - - return eError; -} - - -IMG_VOID PVRSRVDevicePostClockSpeedChange(IMG_UINT32 ui32DeviceIndex, - IMG_BOOL bIdleDevice, - IMG_VOID *pvInfo) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - PVRSRV_POWER_DEV *psPowerDevice; - - PVR_UNREFERENCED_PARAMETER(pvInfo); - - SysAcquireData(&psSysData); - - - psPowerDevice = (PVRSRV_POWER_DEV*) - List_PVRSRV_POWER_DEV_Any_va(psSysData->psPowerDeviceList, - &MatchPowerDeviceIndex_AnyVaCb, - ui32DeviceIndex); - - if (psPowerDevice && psPowerDevice->pfnPostClockSpeedChange) - { - eError = psPowerDevice->pfnPostClockSpeedChange(psPowerDevice->hDevCookie, - bIdleDevice, - psPowerDevice->eCurrentPowerState); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVDevicePostClockSpeedChange : Device %u failed, error:0x%x", - ui32DeviceIndex, eError)); - } - } - - - if (bIdleDevice) - { - - PVRSRVPowerUnlock(KERNEL_ID); - } -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/pvrsrv.c b/drivers/staging/cdv/pvr/services4/srvkm/common/pvrsrv.c deleted file mode 100644 index 968144f..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/pvrsrv.c +++ /dev/null @@ -1,1338 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "buffer_manager.h" -#include "pvr_bridge_km.h" -#include "handle.h" -#include "perproc.h" -#include "pdump_km.h" -#include "deviceid.h" -#include "ra.h" -#if defined(TTRACE) -#include "ttrace.h" -#endif - -#include "pvrversion.h" - -#include "lists.h" - -IMG_UINT32 g_ui32InitFlags; - -#define INIT_DATA_ENABLE_PDUMPINIT 0x1U -#define INIT_DATA_ENABLE_TTARCE 0x2U - -PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID) -{ - SYS_DEVICE_ID* psDeviceWalker; - SYS_DEVICE_ID* psDeviceEnd; - - psDeviceWalker = &psSysData->sDeviceID[0]; - psDeviceEnd = psDeviceWalker + psSysData->ui32NumDevices; - - - while (psDeviceWalker < psDeviceEnd) - { - if (!psDeviceWalker->bInUse) - { - psDeviceWalker->bInUse = IMG_TRUE; - *pui32DevID = psDeviceWalker->uiID; - return PVRSRV_OK; - } - psDeviceWalker++; - } - - PVR_DPF((PVR_DBG_ERROR,"AllocateDeviceID: No free and valid device IDs available!")); - - - PVR_ASSERT(psDeviceWalker < psDeviceEnd); - - return PVRSRV_ERROR_NO_FREE_DEVICEIDS_AVALIABLE; -} - - -PVRSRV_ERROR FreeDeviceID(SYS_DATA *psSysData, IMG_UINT32 ui32DevID) -{ - SYS_DEVICE_ID* psDeviceWalker; - SYS_DEVICE_ID* psDeviceEnd; - - psDeviceWalker = &psSysData->sDeviceID[0]; - psDeviceEnd = psDeviceWalker + psSysData->ui32NumDevices; - - - while (psDeviceWalker < psDeviceEnd) - { - - if ( - (psDeviceWalker->uiID == ui32DevID) && - (psDeviceWalker->bInUse) - ) - { - psDeviceWalker->bInUse = IMG_FALSE; - return PVRSRV_OK; - } - psDeviceWalker++; - } - - PVR_DPF((PVR_DBG_ERROR,"FreeDeviceID: no matching dev ID that is in use!")); - - - PVR_ASSERT(psDeviceWalker < psDeviceEnd); - - return PVRSRV_ERROR_INVALID_DEVICEID; -} - - -#ifndef ReadHWReg -IMG_EXPORT -IMG_UINT32 ReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset) -{ - return *(volatile IMG_UINT32*)((IMG_UINTPTR_T)pvLinRegBaseAddr+ui32Offset); -} -#endif - - -#ifndef WriteHWReg -IMG_EXPORT -IMG_VOID WriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value) -{ - PVR_DPF((PVR_DBG_MESSAGE,"WriteHWReg Base:%x, Offset: %x, Value %x", - (IMG_UINTPTR_T)pvLinRegBaseAddr,ui32Offset,ui32Value)); - - *(IMG_UINT32*)((IMG_UINTPTR_T)pvLinRegBaseAddr+ui32Offset) = ui32Value; -} -#endif - - -#ifndef WriteHWRegs -IMG_EXPORT -IMG_VOID WriteHWRegs(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Count, PVRSRV_HWREG *psHWRegs) -{ - while (ui32Count) - { - WriteHWReg (pvLinRegBaseAddr, psHWRegs->ui32RegAddr, psHWRegs->ui32RegVal); - psHWRegs++; - ui32Count--; - } -} -#endif - -static IMG_VOID PVRSRVEnumerateDevicesKM_ForEachVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - IMG_UINT *pui32DevCount; - PVRSRV_DEVICE_IDENTIFIER **ppsDevIdList; - - pui32DevCount = va_arg(va, IMG_UINT*); - ppsDevIdList = va_arg(va, PVRSRV_DEVICE_IDENTIFIER**); - - if (psDeviceNode->sDevId.eDeviceType != PVRSRV_DEVICE_TYPE_EXT) - { - *(*ppsDevIdList) = psDeviceNode->sDevId; - (*ppsDevIdList)++; - (*pui32DevCount)++; - } -} - - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevicesKM(IMG_UINT32 *pui32NumDevices, - PVRSRV_DEVICE_IDENTIFIER *psDevIdList) -{ - SYS_DATA *psSysData; - IMG_UINT32 i; - - if (!pui32NumDevices || !psDevIdList) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVEnumerateDevicesKM: Invalid params")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - SysAcquireData(&psSysData); - - - - for (i=0; ipsDeviceNodeList, - &PVRSRVEnumerateDevicesKM_ForEachVaCb, - pui32NumDevices, - &psDevIdList); - - - return PVRSRV_OK; -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) -{ - PVRSRV_ERROR eError; - - eError = BM_XProcWorkaroundShareInit(); - if (eError != PVRSRV_OK) - { - goto Error; - } - - eError = ResManInit(); - if (eError != PVRSRV_OK) - { - goto Error; - } - - eError = PVRSRVPerProcessDataInit(); - if(eError != PVRSRV_OK) - { - goto Error; - } - - - eError = PVRSRVHandleInit(); - if(eError != PVRSRV_OK) - { - goto Error; - } - - - eError = OSCreateResource(&psSysData->sPowerStateChangeResource); - if (eError != PVRSRV_OK) - { - goto Error; - } - - - psSysData->eCurrentPowerState = PVRSRV_SYS_POWER_STATE_D0; - psSysData->eFailedPowerState = PVRSRV_SYS_POWER_STATE_Unspecified; - - - if(OSAllocMem( PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_EVENTOBJECT) , - (IMG_VOID **)&psSysData->psGlobalEventObject, 0, - "Event Object") != PVRSRV_OK) - { - - goto Error; - } - - if(OSEventObjectCreateKM("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) - { - goto Error; - } - - - psSysData->pfnHighResTimerCreate = OSFuncHighResTimerCreate; - psSysData->pfnHighResTimerGetus = OSFuncHighResTimerGetus; - psSysData->pfnHighResTimerDestroy = OSFuncHighResTimerDestroy; - -#if defined(TTRACE) - eError = PVRSRVTimeTraceInit(); - if (eError != PVRSRV_OK) - goto Error; - g_ui32InitFlags |= INIT_DATA_ENABLE_TTARCE; -#endif - - - PDUMPINIT(); - g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT; - - return eError; - -Error: - PVRSRVDeInit(psSysData); - return eError; -} - - - -IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) -{ - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(psSysData); - - if (psSysData == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed - invalid param")); - return; - } -#if defined(TTRACE) - - if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTARCE) > 0) - { - PVRSRVTimeTraceDeinit(); - } -#endif - - if( (g_ui32InitFlags & INIT_DATA_ENABLE_PDUMPINIT) > 0) - { - PDUMPDEINIT(); - } - - - if(psSysData->psGlobalEventObject) - { - OSEventObjectDestroyKM(psSysData->psGlobalEventObject); - OSFreeMem( PVRSRV_PAGEABLE_SELECT, - sizeof(PVRSRV_EVENTOBJECT), - psSysData->psGlobalEventObject, - 0); - psSysData->psGlobalEventObject = IMG_NULL; - } - - eError = PVRSRVHandleDeInit(); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed")); - } - - eError = PVRSRVPerProcessDataDeInit(); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVPerProcessDataDeInit failed")); - } - - ResManDeInit(); - - BM_XProcWorkaroundShareDestroy(); -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVRegisterDevice(PSYS_DATA psSysData, - PVRSRV_ERROR (*pfnRegisterDevice)(PVRSRV_DEVICE_NODE*), - IMG_UINT32 ui32SOCInterruptBit, - IMG_UINT32 *pui32DeviceIndex) -{ - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode; - - - if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_DEVICE_NODE), - (IMG_VOID **)&psDeviceNode, IMG_NULL, - "Device Node") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterDevice : Failed to alloc memory for psDeviceNode")); - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - OSMemSet (psDeviceNode, 0, sizeof(PVRSRV_DEVICE_NODE)); - - eError = pfnRegisterDevice(psDeviceNode); - if (eError != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_DEVICE_NODE), psDeviceNode, IMG_NULL); - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterDevice : Failed to register device")); - return (PVRSRV_ERROR_DEVICE_REGISTER_FAILED); - } - - - - - - - psDeviceNode->ui32RefCount = 1; - psDeviceNode->psSysData = psSysData; - psDeviceNode->ui32SOCInterruptBit = ui32SOCInterruptBit; - - - AllocateDeviceID(psSysData, &psDeviceNode->sDevId.ui32DeviceIndex); - - - List_PVRSRV_DEVICE_NODE_Insert(&psSysData->psDeviceNodeList, psDeviceNode); - - - *pui32DeviceIndex = psDeviceNode->sDevId.ui32DeviceIndex; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVInitialiseDevice (IMG_UINT32 ui32DevIndex) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVInitialiseDevice")); - - SysAcquireData(&psSysData); - - - psDeviceNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DevIndex, - IMG_TRUE); - if(!psDeviceNode) - { - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVInitialiseDevice: requested device is not present")); - return PVRSRV_ERROR_INIT_FAILURE; - } - PVR_ASSERT (psDeviceNode->ui32RefCount > 0); - - - - eError = PVRSRVResManConnect(IMG_NULL, &psDeviceNode->hResManContext); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVInitialiseDevice: Failed PVRSRVResManConnect call")); - return eError; - } - - - if(psDeviceNode->pfnInitDevice != IMG_NULL) - { - eError = psDeviceNode->pfnInitDevice(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVInitialiseDevice: Failed InitDevice call")); - return eError; - } - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR PVRSRVFinaliseSystem_SetPowerState_AnyCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_ERROR eError; - eError = PVRSRVSetDevicePowerStateKM(psDeviceNode->sDevId.ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE_DEFAULT, - KERNEL_ID, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVFinaliseSystem: Failed PVRSRVSetDevicePowerStateKM call (device index: %d)", psDeviceNode->sDevId.ui32DeviceIndex)); - } - return eError; -} - -static PVRSRV_ERROR PVRSRVFinaliseSystem_CompatCheck_AnyCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_ERROR eError; - eError = PVRSRVDevInitCompatCheck(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVFinaliseSystem: Failed PVRSRVDevInitCompatCheck call (device index: %d)", psDeviceNode->sDevId.ui32DeviceIndex)); - } - return eError; -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccessful) -{ - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVFinaliseSystem")); - - SysAcquireData(&psSysData); - - if (bInitSuccessful) - { - eError = SysFinalise(); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVFinaliseSystem: SysFinalise failed (%d)", eError)); - return eError; - } - - - eError = List_PVRSRV_DEVICE_NODE_PVRSRV_ERROR_Any(psSysData->psDeviceNodeList, - &PVRSRVFinaliseSystem_SetPowerState_AnyCb); - if (eError != PVRSRV_OK) - { - return eError; - } - - - eError = List_PVRSRV_DEVICE_NODE_PVRSRV_ERROR_Any(psSysData->psDeviceNodeList, - &PVRSRVFinaliseSystem_CompatCheck_AnyCb); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - - - - -#if !defined(__QNXNTO__) - PDUMPENDINITPHASE(); -#endif - - return PVRSRV_OK; -} - - -PVRSRV_ERROR PVRSRVDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - - if (psDeviceNode->pfnInitDeviceCompatCheck) - return psDeviceNode->pfnInitDeviceCompatCheck(psDeviceNode); - else - return PVRSRV_OK; -} - -static IMG_VOID * PVRSRVAcquireDeviceDataKM_Match_AnyVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - PVRSRV_DEVICE_TYPE eDeviceType; - IMG_UINT32 ui32DevIndex; - - eDeviceType = va_arg(va, PVRSRV_DEVICE_TYPE); - ui32DevIndex = va_arg(va, IMG_UINT32); - - if ((eDeviceType != PVRSRV_DEVICE_TYPE_UNKNOWN && - psDeviceNode->sDevId.eDeviceType == eDeviceType) || - (eDeviceType == PVRSRV_DEVICE_TYPE_UNKNOWN && - psDeviceNode->sDevId.ui32DeviceIndex == ui32DevIndex)) - { - return psDeviceNode; - } - else - { - return IMG_NULL; - } -} - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceDataKM (IMG_UINT32 ui32DevIndex, - PVRSRV_DEVICE_TYPE eDeviceType, - IMG_HANDLE *phDevCookie) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVAcquireDeviceDataKM")); - - SysAcquireData(&psSysData); - - - psDeviceNode = List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &PVRSRVAcquireDeviceDataKM_Match_AnyVaCb, - eDeviceType, - ui32DevIndex); - - - if (!psDeviceNode) - { - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVAcquireDeviceDataKM: requested device is not present")); - return PVRSRV_ERROR_INIT_FAILURE; - } - - PVR_ASSERT (psDeviceNode->ui32RefCount > 0); - - - if (phDevCookie) - { - *phDevCookie = (IMG_HANDLE)psDeviceNode; - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - - SysAcquireData(&psSysData); - - psDeviceNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - &MatchDeviceKM_AnyVaCb, - ui32DevIndex, - IMG_TRUE); - - if (!psDeviceNode) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeinitialiseDevice: requested device %d is not present", ui32DevIndex)); - return PVRSRV_ERROR_DEVICEID_NOT_FOUND; - } - - - - eError = PVRSRVSetDevicePowerStateKM(ui32DevIndex, - PVRSRV_DEV_POWER_STATE_OFF, - KERNEL_ID, - IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeinitialiseDevice: Failed PVRSRVSetDevicePowerStateKM call")); - return eError; - } - - - - eError = ResManFreeResByCriteria(psDeviceNode->hResManContext, - RESMAN_CRITERIA_RESTYPE, - RESMAN_TYPE_DEVICEMEM_ALLOCATION, - IMG_NULL, 0); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeinitialiseDevice: Failed ResManFreeResByCriteria call")); - return eError; - } - - - - if(psDeviceNode->pfnDeInitDevice != IMG_NULL) - { - eError = psDeviceNode->pfnDeInitDevice(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeinitialiseDevice: Failed DeInitDevice call")); - return eError; - } - } - - - - PVRSRVResManDisconnect(psDeviceNode->hResManContext, IMG_TRUE); - psDeviceNode->hResManContext = IMG_NULL; - - - List_PVRSRV_DEVICE_NODE_Remove(psDeviceNode); - - - (IMG_VOID)FreeDeviceID(psSysData, ui32DevIndex); - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_DEVICE_NODE), psDeviceNode, IMG_NULL); - - - return (PVRSRV_OK); -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Timeoutus, - IMG_UINT32 ui32PollPeriodus, - IMG_BOOL bAllowPreemption) -{ -#if defined (EMULATOR) - { - PVR_UNREFERENCED_PARAMETER(bAllowPreemption); - #if !defined(__linux__) - PVR_UNREFERENCED_PARAMETER(ui32PollPeriodus); - #endif - - - - do - { - if((*pui32LinMemAddr & ui32Mask) == ui32Value) - { - return PVRSRV_OK; - } - - #if defined(__linux__) - OSWaitus(ui32PollPeriodus); - #else - OSReleaseThreadQuanta(); - #endif - - } while (ui32Timeoutus); - } -#else - { - IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; - - if (bAllowPreemption) - { - PVR_ASSERT(ui32PollPeriodus >= 1000); - } - - - LOOP_UNTIL_TIMEOUT(ui32Timeoutus) - { - ui32ActualValue = (*pui32LinMemAddr & ui32Mask); - if(ui32ActualValue == ui32Value) - { - return PVRSRV_OK; - } - - if (bAllowPreemption) - { - OSSleepms(ui32PollPeriodus / 1000); - } - else - { - OSWaitus(ui32PollPeriodus); - } - } END_LOOP_UNTIL_TIMEOUT(); - - PVR_DPF((PVR_DBG_ERROR,"PollForValueKM: Timeout. Expected 0x%x but found 0x%x (mask 0x%x).", - ui32Value, ui32ActualValue, ui32Mask)); - } -#endif - - return PVRSRV_ERROR_TIMEOUT; -} - - -static IMG_VOID PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb(BM_HEAP *psBMHeap, va_list va) -{ - IMG_CHAR **ppszStr; - IMG_UINT32 *pui32StrLen; - IMG_UINT32 ui32Mode; - PVRSRV_ERROR (*pfnGetStats)(RA_ARENA *, IMG_CHAR **, IMG_UINT32 *); - - ppszStr = va_arg(va, IMG_CHAR**); - pui32StrLen = va_arg(va, IMG_UINT32*); - ui32Mode = va_arg(va, IMG_UINT32); - - - switch(ui32Mode) - { - case PVRSRV_MISC_INFO_MEMSTATS_PRESENT: - pfnGetStats = &RA_GetStats; - break; - case PVRSRV_MISC_INFO_FREEMEM_PRESENT: - pfnGetStats = &RA_GetStatsFreeMem; - break; - default: - return; - } - - if(psBMHeap->pImportArena) - { - pfnGetStats(psBMHeap->pImportArena, - ppszStr, - pui32StrLen); - } - - if(psBMHeap->pVMArena) - { - pfnGetStats(psBMHeap->pVMArena, - ppszStr, - pui32StrLen); - } -} - -static PVRSRV_ERROR PVRSRVGetMiscInfoKM_BMContext_AnyVaCb(BM_CONTEXT *psBMContext, va_list va) -{ - - IMG_UINT32 *pui32StrLen; - IMG_INT32 *pi32Count; - IMG_CHAR **ppszStr; - IMG_UINT32 ui32Mode; - - pui32StrLen = va_arg(va, IMG_UINT32*); - pi32Count = va_arg(va, IMG_INT32*); - ppszStr = va_arg(va, IMG_CHAR**); - ui32Mode = va_arg(va, IMG_UINT32); - - CHECK_SPACE(*pui32StrLen); - *pi32Count = OSSNPrintf(*ppszStr, 100, "\nApplication Context (hDevMemContext) %p:\n", - (IMG_HANDLE)psBMContext); - UPDATE_SPACE(*ppszStr, *pi32Count, *pui32StrLen); - - List_BM_HEAP_ForEach_va(psBMContext->psBMHeap, - &PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb, - ppszStr, - pui32StrLen, - ui32Mode); - return PVRSRV_OK; -} - - -static PVRSRV_ERROR PVRSRVGetMiscInfoKM_Device_AnyVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - IMG_UINT32 *pui32StrLen; - IMG_INT32 *pi32Count; - IMG_CHAR **ppszStr; - IMG_UINT32 ui32Mode; - - pui32StrLen = va_arg(va, IMG_UINT32*); - pi32Count = va_arg(va, IMG_INT32*); - ppszStr = va_arg(va, IMG_CHAR**); - ui32Mode = va_arg(va, IMG_UINT32); - - CHECK_SPACE(*pui32StrLen); - *pi32Count = OSSNPrintf(*ppszStr, 100, "\n\nDevice Type %d:\n", psDeviceNode->sDevId.eDeviceType); - UPDATE_SPACE(*ppszStr, *pi32Count, *pui32StrLen); - - - if(psDeviceNode->sDevMemoryInfo.pBMKernelContext) - { - CHECK_SPACE(*pui32StrLen); - *pi32Count = OSSNPrintf(*ppszStr, 100, "\nKernel Context:\n"); - UPDATE_SPACE(*ppszStr, *pi32Count, *pui32StrLen); - - List_BM_HEAP_ForEach_va(psDeviceNode->sDevMemoryInfo.pBMKernelContext->psBMHeap, - &PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb, - ppszStr, - pui32StrLen, - ui32Mode); - } - - - return List_BM_CONTEXT_PVRSRV_ERROR_Any_va(psDeviceNode->sDevMemoryInfo.pBMContext, - &PVRSRVGetMiscInfoKM_BMContext_AnyVaCb, - pui32StrLen, - pi32Count, - ppszStr, - ui32Mode); -} - - -IMG_EXPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo) -#else -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) -#endif -{ - SYS_DATA *psSysData; - - if(!psMiscInfo) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetMiscInfoKM: invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psMiscInfo->ui32StatePresent = 0; - - - if(psMiscInfo->ui32StateRequest & ~(PVRSRV_MISC_INFO_TIMER_PRESENT - |PVRSRV_MISC_INFO_CLOCKGATE_PRESENT - |PVRSRV_MISC_INFO_MEMSTATS_PRESENT - |PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT - |PVRSRV_MISC_INFO_DDKVERSION_PRESENT - |PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT - |PVRSRV_MISC_INFO_RESET_PRESENT - |PVRSRV_MISC_INFO_FREEMEM_PRESENT)) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVGetMiscInfoKM: invalid state request flags")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - SysAcquireData(&psSysData); - - - if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_TIMER_PRESENT) != 0UL) && - (psSysData->pvSOCTimerRegisterKM != IMG_NULL)) - { - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_TIMER_PRESENT; - psMiscInfo->pvSOCTimerRegisterKM = psSysData->pvSOCTimerRegisterKM; - psMiscInfo->hSOCTimerRegisterOSMemHandle = psSysData->hSOCTimerRegisterOSMemHandle; - } - else - { - psMiscInfo->pvSOCTimerRegisterKM = IMG_NULL; - psMiscInfo->hSOCTimerRegisterOSMemHandle = IMG_NULL; - } - - - if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_CLOCKGATE_PRESENT) != 0UL) && - (psSysData->pvSOCClockGateRegsBase != IMG_NULL)) - { - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_CLOCKGATE_PRESENT; - psMiscInfo->pvSOCClockGateRegs = psSysData->pvSOCClockGateRegsBase; - psMiscInfo->ui32SOCClockGateRegsSize = psSysData->ui32SOCClockGateRegsSize; - } - - - if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_MEMSTATS_PRESENT) != 0UL) && - (psMiscInfo->pszMemoryStr != IMG_NULL)) - { - RA_ARENA **ppArena; - IMG_CHAR *pszStr; - IMG_UINT32 ui32StrLen; - IMG_INT32 i32Count; - - pszStr = psMiscInfo->pszMemoryStr; - ui32StrLen = psMiscInfo->ui32MemoryStrLen; - - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_MEMSTATS_PRESENT; - - - ppArena = &psSysData->apsLocalDevMemArena[0]; - while(*ppArena) - { - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "\nLocal Backing Store:\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - RA_GetStats(*ppArena, - &pszStr, - &ui32StrLen); - - ppArena++; - } - - - - List_PVRSRV_DEVICE_NODE_PVRSRV_ERROR_Any_va(psSysData->psDeviceNodeList, - &PVRSRVGetMiscInfoKM_Device_AnyVaCb, - &ui32StrLen, - &i32Count, - &pszStr, - PVRSRV_MISC_INFO_MEMSTATS_PRESENT); - - - i32Count = OSSNPrintf(pszStr, 100, "\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - - - if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0) - && psMiscInfo->pszMemoryStr) - { - IMG_CHAR *pszStr; - IMG_UINT32 ui32StrLen; - IMG_INT32 i32Count; - - pszStr = psMiscInfo->pszMemoryStr; - ui32StrLen = psMiscInfo->ui32MemoryStrLen; - - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_FREEMEM_PRESENT; - - - List_PVRSRV_DEVICE_NODE_PVRSRV_ERROR_Any_va(psSysData->psDeviceNodeList, - &PVRSRVGetMiscInfoKM_Device_AnyVaCb, - &ui32StrLen, - &i32Count, - &pszStr, - PVRSRV_MISC_INFO_FREEMEM_PRESENT); - - i32Count = OSSNPrintf(pszStr, 100, "\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - - if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT) != 0UL) && - (psSysData->psGlobalEventObject != IMG_NULL)) - { - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT; - psMiscInfo->sGlobalEventObject = *psSysData->psGlobalEventObject; - } - - - - if (((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_DDKVERSION_PRESENT) != 0UL) - && ((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_MEMSTATS_PRESENT) == 0UL) - && (psMiscInfo->pszMemoryStr != IMG_NULL)) - { - IMG_CHAR *pszStr; - IMG_UINT32 ui32StrLen; - IMG_UINT32 ui32LenStrPerNum = 12; - IMG_INT32 i32Count; - IMG_INT i; - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_DDKVERSION_PRESENT; - - - psMiscInfo->aui32DDKVersion[0] = PVRVERSION_MAJ; - psMiscInfo->aui32DDKVersion[1] = PVRVERSION_MIN; - psMiscInfo->aui32DDKVersion[2] = PVRVERSION_BRANCH; - psMiscInfo->aui32DDKVersion[3] = PVRVERSION_BUILD; - - pszStr = psMiscInfo->pszMemoryStr; - ui32StrLen = psMiscInfo->ui32MemoryStrLen; - - for (i=0; i<4; i++) - { - if (ui32StrLen < ui32LenStrPerNum) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - i32Count = OSSNPrintf(pszStr, ui32LenStrPerNum, "%u", psMiscInfo->aui32DDKVersion[i]); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - if (i != 3) - { - i32Count = OSSNPrintf(pszStr, 2, "."); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - } - } - - if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT) != 0UL) - { - psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT; - - if(psMiscInfo->sCacheOpCtl.bDeferOp) - { - - psSysData->ePendingCacheOpType = psMiscInfo->sCacheOpCtl.eCacheOpType; - } - else - { -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = psMiscInfo->sCacheOpCtl.psKernelMemInfo; - - if(!psMiscInfo->sCacheOpCtl.psKernelMemInfo) -#else - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; - PVRSRV_PER_PROCESS_DATA *psPerProc; - - if(!psMiscInfo->sCacheOpCtl.u.psKernelMemInfo) -#endif - { - PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " - "Ignoring non-deferred cache op with no meminfo")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - if(psSysData->ePendingCacheOpType != PVRSRV_MISC_INFO_CPUCACHEOP_NONE) - { - PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " - "Deferred cache op is pending. It is unlikely you want " - "to combine deferred cache ops with immediate ones")); - } - -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#else - - psPerProc = PVRSRVFindPerProcessData(); - - if(PVRSRVLookupHandle(psPerProc->psHandleBase, - (IMG_PVOID *)&psKernelMemInfo, - psMiscInfo->sCacheOpCtl.u.psKernelMemInfo, - PVRSRV_HANDLE_TYPE_MEM_INFO) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVGetMiscInfoKM: " - "Can't find kernel meminfo")); - return PVRSRV_ERROR_INVALID_PARAMS; - } -#endif - - if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) - { - if(!OSFlushCPUCacheRangeKM(psKernelMemInfo->sMemBlk.hOSMemHandle, - psMiscInfo->sCacheOpCtl.pvBaseVAddr, - psMiscInfo->sCacheOpCtl.ui32Length)) - { - return PVRSRV_ERROR_CACHEOP_FAILED; - } - } - else if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN) - { - if(!OSCleanCPUCacheRangeKM(psKernelMemInfo->sMemBlk.hOSMemHandle, - psMiscInfo->sCacheOpCtl.pvBaseVAddr, - psMiscInfo->sCacheOpCtl.ui32Length)) - { - return PVRSRV_ERROR_CACHEOP_FAILED; - } - } - } - } - -#if defined(PVRSRV_RESET_ON_HWTIMEOUT) - if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_RESET_PRESENT) != 0UL) - { - PVR_LOG(("User requested OS reset")); - OSPanic(); - } -#endif - - return PVRSRV_OK; -} - - -IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - SYS_DATA *psSysData; - IMG_BOOL bStatus = IMG_FALSE; - IMG_UINT32 ui32InterruptSource; - - if(!psDeviceNode) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVDeviceLISR: Invalid params\n")); - goto out; - } - psSysData = psDeviceNode->psSysData; - - - ui32InterruptSource = SysGetInterruptSource(psSysData, psDeviceNode); - if(ui32InterruptSource & psDeviceNode->ui32SOCInterruptBit) - { - if(psDeviceNode->pfnDeviceISR != IMG_NULL) - { - bStatus = (*psDeviceNode->pfnDeviceISR)(psDeviceNode->pvISRData); - } - - SysClearInterrupts(psSysData, psDeviceNode->ui32SOCInterruptBit); - } - -out: - return bStatus; -} - -static IMG_VOID PVRSRVSystemLISR_ForEachVaCb(PVRSRV_DEVICE_NODE *psDeviceNode, va_list va) -{ - - IMG_BOOL *pbStatus; - IMG_UINT32 *pui32InterruptSource; - IMG_UINT32 *pui32ClearInterrupts; - - pbStatus = va_arg(va, IMG_BOOL*); - pui32InterruptSource = va_arg(va, IMG_UINT32*); - pui32ClearInterrupts = va_arg(va, IMG_UINT32*); - - - if(psDeviceNode->pfnDeviceISR != IMG_NULL) - { - if(*pui32InterruptSource & psDeviceNode->ui32SOCInterruptBit) - { - if((*psDeviceNode->pfnDeviceISR)(psDeviceNode->pvISRData)) - { - - *pbStatus = IMG_TRUE; - } - - *pui32ClearInterrupts |= psDeviceNode->ui32SOCInterruptBit; - } - } -} - -IMG_BOOL IMG_CALLCONV PVRSRVSystemLISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = pvSysData; - IMG_BOOL bStatus = IMG_FALSE; - IMG_UINT32 ui32InterruptSource; - IMG_UINT32 ui32ClearInterrupts = 0; - if(!psSysData) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSystemLISR: Invalid params\n")); - } - else - { - - ui32InterruptSource = SysGetInterruptSource(psSysData, IMG_NULL); - - - if(ui32InterruptSource) - { - - List_PVRSRV_DEVICE_NODE_ForEach_va(psSysData->psDeviceNodeList, - &PVRSRVSystemLISR_ForEachVaCb, - &bStatus, - &ui32InterruptSource, - &ui32ClearInterrupts); - - SysClearInterrupts(psSysData, ui32ClearInterrupts); - } - } - return bStatus; -} - - -static IMG_VOID PVRSRVMISR_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - if(psDeviceNode->pfnDeviceMISR != IMG_NULL) - { - (*psDeviceNode->pfnDeviceMISR)(psDeviceNode->pvISRData); - } -} - -IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = pvSysData; - if(!psSysData) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVMISR: Invalid params\n")); - return; - } - - - List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, - &PVRSRVMISR_ForEachCb); - - - if (PVRSRVProcessQueues(IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) - { - PVRSRVProcessQueues(IMG_FALSE); - } - - - if (psSysData->psGlobalEventObject) - { - IMG_HANDLE hOSEventKM = psSysData->psGlobalEventObject->hOSEventKM; - if(hOSEventKM) - { - OSEventObjectSignalKM(hOSEventKM); - } - } -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVProcessConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flags) -{ - return PVRSRVPerProcessDataConnect(ui32PID, ui32Flags); -} - - -IMG_EXPORT -IMG_VOID IMG_CALLCONV PVRSRVProcessDisconnect(IMG_UINT32 ui32PID) -{ - PVRSRVPerProcessDataDisconnect(ui32PID); -} - - -PVRSRV_ERROR IMG_CALLCONV PVRSRVSaveRestoreLiveSegments(IMG_HANDLE hArena, IMG_PBYTE pbyBuffer, - IMG_SIZE_T *puiBufSize, IMG_BOOL bSave) -{ - IMG_SIZE_T uiBytesSaved = 0; - IMG_PVOID pvLocalMemCPUVAddr; - RA_SEGMENT_DETAILS sSegDetails; - - if (hArena == IMG_NULL) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - sSegDetails.uiSize = 0; - sSegDetails.sCpuPhyAddr.uiAddr = 0; - sSegDetails.hSegment = 0; - - - while (RA_GetNextLiveSegment(hArena, &sSegDetails)) - { - if (pbyBuffer == IMG_NULL) - { - - uiBytesSaved += sizeof(sSegDetails.uiSize) + sSegDetails.uiSize; - } - else - { - if ((uiBytesSaved + sizeof(sSegDetails.uiSize) + sSegDetails.uiSize) > *puiBufSize) - { - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVSaveRestoreLiveSegments: Base %08x size %08x", sSegDetails.sCpuPhyAddr.uiAddr, sSegDetails.uiSize)); - - - pvLocalMemCPUVAddr = OSMapPhysToLin(sSegDetails.sCpuPhyAddr, - sSegDetails.uiSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - if (pvLocalMemCPUVAddr == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSaveRestoreLiveSegments: Failed to map local memory to host")); - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - - if (bSave) - { - - OSMemCopy(pbyBuffer, &sSegDetails.uiSize, sizeof(sSegDetails.uiSize)); - pbyBuffer += sizeof(sSegDetails.uiSize); - - OSMemCopy(pbyBuffer, pvLocalMemCPUVAddr, sSegDetails.uiSize); - pbyBuffer += sSegDetails.uiSize; - } - else - { - IMG_UINT32 uiSize; - - OSMemCopy(&uiSize, pbyBuffer, sizeof(sSegDetails.uiSize)); - - if (uiSize != sSegDetails.uiSize) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVSaveRestoreLiveSegments: Segment size error")); - } - else - { - pbyBuffer += sizeof(sSegDetails.uiSize); - - OSMemCopy(pvLocalMemCPUVAddr, pbyBuffer, sSegDetails.uiSize); - pbyBuffer += sSegDetails.uiSize; - } - } - - - uiBytesSaved += sizeof(sSegDetails.uiSize) + sSegDetails.uiSize; - - OSUnMapPhysToLin(pvLocalMemCPUVAddr, - sSegDetails.uiSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - } - } - - if (pbyBuffer == IMG_NULL) - { - *puiBufSize = uiBytesSaved; - } - - return (PVRSRV_OK); -} - - -IMG_EXPORT -const IMG_CHAR *PVRSRVGetErrorStringKM(PVRSRV_ERROR eError) -{ - -#include "pvrsrv_errors.h" -} - -static IMG_VOID PVRSRVCommandCompleteCallbacks_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - if(psDeviceNode->pfnDeviceCommandComplete != IMG_NULL) - { - - (*psDeviceNode->pfnDeviceCommandComplete)(psDeviceNode); - } -} - -IMG_VOID PVRSRVScheduleDeviceCallbacks(IMG_VOID) -{ - SYS_DATA *psSysData; - SysAcquireData(&psSysData); - - - List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, - &PVRSRVCommandCompleteCallbacks_ForEachCb); -} - -IMG_EXPORT -IMG_VOID PVRSRVScheduleDevicesKM(IMG_VOID) -{ - PVRSRVScheduleDeviceCallbacks(); -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/queue.c b/drivers/staging/cdv/pvr/services4/srvkm/common/queue.c deleted file mode 100644 index 8925d3c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/queue.c +++ /dev/null @@ -1,1079 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" - -#include "lists.h" -#include "ttrace.h" - -#define DC_NUM_COMMANDS_PER_TYPE 1 - -typedef struct _DEVICE_COMMAND_DATA_ -{ - PFN_CMD_PROC pfnCmdProc; - PCOMMAND_COMPLETE_DATA apsCmdCompleteData[DC_NUM_COMMANDS_PER_TYPE]; - IMG_UINT32 ui32CCBOffset; -} DEVICE_COMMAND_DATA; - - -#if defined(__linux__) && defined(__KERNEL__) - -#include "proc.h" - -void ProcSeqShowQueue(struct seq_file *sfile,void* el) -{ - PVRSRV_QUEUE_INFO *psQueue = (PVRSRV_QUEUE_INFO*)el; - IMG_INT cmds = 0; - IMG_SIZE_T ui32ReadOffset; - IMG_SIZE_T ui32WriteOffset; - PVRSRV_COMMAND *psCmd; - - if(el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf( sfile, - "Command Queues\n" - "Queue CmdPtr Pid Command Size DevInd DSC SSC #Data ...\n"); - return; - } - - ui32ReadOffset = psQueue->ui32ReadOffset; - ui32WriteOffset = psQueue->ui32WriteOffset; - - while (ui32ReadOffset != ui32WriteOffset) - { - psCmd= (PVRSRV_COMMAND *)((IMG_UINTPTR_T)psQueue->pvLinQueueKM + ui32ReadOffset); - - seq_printf(sfile, "%x %x %5u %6u %3u %5u %2u %2u %3u \n", - (IMG_UINTPTR_T)psQueue, - (IMG_UINTPTR_T)psCmd, - psCmd->ui32ProcessID, - psCmd->CommandType, - psCmd->uCmdSize, - psCmd->ui32DevIndex, - psCmd->ui32DstSyncCount, - psCmd->ui32SrcSyncCount, - psCmd->uDataSize); - { - IMG_UINT32 i; - for (i = 0; i < psCmd->ui32SrcSyncCount; i++) - { - PVRSRV_SYNC_DATA *psSyncData = psCmd->psSrcSync[i].psKernelSyncInfoKM->psSyncData; - seq_printf(sfile, " Sync %u: ROP/ROC: 0x%x/0x%x WOP/WOC: 0x%x/0x%x ROC-VA: 0x%x WOC-VA: 0x%x\n", - i, - psCmd->psSrcSync[i].ui32ReadOpsPending, - psSyncData->ui32ReadOpsComplete, - psCmd->psSrcSync[i].ui32WriteOpsPending, - psSyncData->ui32WriteOpsComplete, - psCmd->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCmd->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr); - } - } - - - ui32ReadOffset += psCmd->uCmdSize; - ui32ReadOffset &= psQueue->ui32QueueSize - 1; - cmds++; - } - - if (cmds == 0) - { - seq_printf(sfile, "%x \n", (IMG_UINTPTR_T)psQueue); - } -} - -void* ProcSeqOff2ElementQueue(struct seq_file * sfile, loff_t off) -{ - PVRSRV_QUEUE_INFO *psQueue = IMG_NULL; - SYS_DATA *psSysData; - - PVR_UNREFERENCED_PARAMETER(sfile); - - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - - psSysData = SysAcquireDataNoCheck(); - if (psSysData != IMG_NULL) - { - for (psQueue = psSysData->psQueueList; (((--off) > 0) && (psQueue != IMG_NULL)); psQueue = psQueue->psNextKM); - } - - return psQueue; -} -#endif - -#define GET_SPACE_IN_CMDQ(psQueue) \ - ((((psQueue)->ui32ReadOffset - (psQueue)->ui32WriteOffset) \ - + ((psQueue)->ui32QueueSize - 1)) & ((psQueue)->ui32QueueSize - 1)) - -#define UPDATE_QUEUE_WOFF(psQueue, ui32Size) \ - (psQueue)->ui32WriteOffset = ((psQueue)->ui32WriteOffset + (ui32Size)) \ - & ((psQueue)->ui32QueueSize - 1); - -#define SYNCOPS_STALE(ui32OpsComplete, ui32OpsPending) \ - ((ui32OpsComplete) >= (ui32OpsPending)) - - -static IMG_VOID QueueDumpCmdComplete(COMMAND_COMPLETE_DATA *psCmdCompleteData, - IMG_UINT32 i, - IMG_BOOL bIsSrc) -{ - PVRSRV_SYNC_OBJECT *psSyncObject; - - psSyncObject = bIsSrc ? psCmdCompleteData->psSrcSync : psCmdCompleteData->psDstSync; - - if (psCmdCompleteData->bInUse) - { - PVR_LOG(("\t%s %u: ROC DevVAddr:0x%X ROP:0x%x ROC:0x%x, WOC DevVAddr:0x%X WOP:0x%x WOC:0x%x", - bIsSrc ? "SRC" : "DEST", i, - psSyncObject[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsPending, - psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete, - psSyncObject[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsPending, - psSyncObject[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete)) - } - else - { - PVR_LOG(("\t%s %u: (Not in use)", bIsSrc ? "SRC" : "DEST", i)) - } -} - - -static IMG_VOID QueueDumpDebugInfo_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - if (psDeviceNode->sDevId.eDeviceClass == PVRSRV_DEVICE_CLASS_DISPLAY) - { - IMG_UINT32 ui32CmdCounter, ui32SyncCounter; - SYS_DATA *psSysData; - DEVICE_COMMAND_DATA *psDeviceCommandData; - PCOMMAND_COMPLETE_DATA psCmdCompleteData; - - SysAcquireData(&psSysData); - - psDeviceCommandData = psSysData->apsDeviceCommandData[psDeviceNode->sDevId.ui32DeviceIndex]; - - if (psDeviceCommandData != IMG_NULL) - { - for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) - { - psCmdCompleteData = psDeviceCommandData[DC_FLIP_COMMAND].apsCmdCompleteData[ui32CmdCounter]; - - PVR_LOG(("Flip Command Complete Data %u for display device %u:", - ui32CmdCounter, psDeviceNode->sDevId.ui32DeviceIndex)) - - for (ui32SyncCounter = 0; - ui32SyncCounter < psCmdCompleteData->ui32SrcSyncCount; - ui32SyncCounter++) - { - QueueDumpCmdComplete(psCmdCompleteData, ui32SyncCounter, IMG_TRUE); - } - - for (ui32SyncCounter = 0; - ui32SyncCounter < psCmdCompleteData->ui32DstSyncCount; - ui32SyncCounter++) - { - QueueDumpCmdComplete(psCmdCompleteData, ui32SyncCounter, IMG_FALSE); - } - } - } - else - { - PVR_LOG(("There is no Command Complete Data for display device %u", psDeviceNode->sDevId.ui32DeviceIndex)) - } - } -} - - -IMG_VOID QueueDumpDebugInfo(IMG_VOID) -{ - SYS_DATA *psSysData; - SysAcquireData(&psSysData); - List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, &QueueDumpDebugInfo_ForEachCb); -} - - -static IMG_SIZE_T NearestPower2(IMG_SIZE_T ui32Value) -{ - IMG_SIZE_T ui32Temp, ui32Result = 1; - - if(!ui32Value) - return 0; - - ui32Temp = ui32Value - 1; - while(ui32Temp) - { - ui32Result <<= 1; - ui32Temp >>= 1; - } - - return ui32Result; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateCommandQueueKM(IMG_SIZE_T ui32QueueSize, - PVRSRV_QUEUE_INFO **ppsQueueInfo) -{ - PVRSRV_QUEUE_INFO *psQueueInfo; - IMG_SIZE_T ui32Power2QueueSize = NearestPower2(ui32QueueSize); - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - IMG_HANDLE hMemBlock; - - SysAcquireData(&psSysData); - - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_QUEUE_INFO), - (IMG_VOID **)&psQueueInfo, &hMemBlock, - "Queue Info"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateCommandQueueKM: Failed to alloc queue struct")); - goto ErrorExit; - } - OSMemSet(psQueueInfo, 0, sizeof(PVRSRV_QUEUE_INFO)); - - psQueueInfo->hMemBlock[0] = hMemBlock; - psQueueInfo->ui32ProcessID = OSGetCurrentProcessIDKM(); - - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - ui32Power2QueueSize + PVRSRV_MAX_CMD_SIZE, - &psQueueInfo->pvLinQueueKM, &hMemBlock, - "Command Queue"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVCreateCommandQueueKM: Failed to alloc queue buffer")); - goto ErrorExit; - } - - psQueueInfo->hMemBlock[1] = hMemBlock; - psQueueInfo->pvLinQueueUM = psQueueInfo->pvLinQueueKM; - - - PVR_ASSERT(psQueueInfo->ui32ReadOffset == 0); - PVR_ASSERT(psQueueInfo->ui32WriteOffset == 0); - - psQueueInfo->ui32QueueSize = ui32Power2QueueSize; - - - if (psSysData->psQueueList == IMG_NULL) - { - eError = OSCreateResource(&psSysData->sQProcessResource); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - } - - - eError = OSLockResource(&psSysData->sQProcessResource, - KERNEL_ID); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - - psQueueInfo->psNextKM = psSysData->psQueueList; - psSysData->psQueueList = psQueueInfo; - - eError = OSUnlockResource(&psSysData->sQProcessResource, KERNEL_ID); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - - *ppsQueueInfo = psQueueInfo; - - return PVRSRV_OK; - -ErrorExit: - - if(psQueueInfo) - { - if(psQueueInfo->pvLinQueueKM) - { - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - psQueueInfo->ui32QueueSize, - psQueueInfo->pvLinQueueKM, - psQueueInfo->hMemBlock[1]); - psQueueInfo->pvLinQueueKM = IMG_NULL; - } - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_QUEUE_INFO), - psQueueInfo, - psQueueInfo->hMemBlock[0]); - - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueueInfo) -{ - PVRSRV_QUEUE_INFO *psQueue; - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - IMG_BOOL bTimeout = IMG_TRUE; - - SysAcquireData(&psSysData); - - psQueue = psSysData->psQueueList; - - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if(psQueueInfo->ui32ReadOffset == psQueueInfo->ui32WriteOffset) - { - bTimeout = IMG_FALSE; - break; - } - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - if (bTimeout) - { - - PVR_DPF((PVR_DBG_ERROR,"PVRSRVDestroyCommandQueueKM : Failed to empty queue")); - eError = PVRSRV_ERROR_CANNOT_FLUSH_QUEUE; - goto ErrorExit; - } - - - eError = OSLockResource(&psSysData->sQProcessResource, - KERNEL_ID); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - - if(psQueue == psQueueInfo) - { - psSysData->psQueueList = psQueueInfo->psNextKM; - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - NearestPower2(psQueueInfo->ui32QueueSize) + PVRSRV_MAX_CMD_SIZE, - psQueueInfo->pvLinQueueKM, - psQueueInfo->hMemBlock[1]); - psQueueInfo->pvLinQueueKM = IMG_NULL; - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_QUEUE_INFO), - psQueueInfo, - psQueueInfo->hMemBlock[0]); - - psQueueInfo = IMG_NULL; - } - else - { - while(psQueue) - { - if(psQueue->psNextKM == psQueueInfo) - { - psQueue->psNextKM = psQueueInfo->psNextKM; - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - psQueueInfo->ui32QueueSize, - psQueueInfo->pvLinQueueKM, - psQueueInfo->hMemBlock[1]); - psQueueInfo->pvLinQueueKM = IMG_NULL; - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_QUEUE_INFO), - psQueueInfo, - psQueueInfo->hMemBlock[0]); - - psQueueInfo = IMG_NULL; - break; - } - psQueue = psQueue->psNextKM; - } - - if(!psQueue) - { - eError = OSUnlockResource(&psSysData->sQProcessResource, KERNEL_ID); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - eError = PVRSRV_ERROR_INVALID_PARAMS; - goto ErrorExit; - } - } - - - eError = OSUnlockResource(&psSysData->sQProcessResource, KERNEL_ID); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - - - if (psSysData->psQueueList == IMG_NULL) - { - eError = OSDestroyResource(&psSysData->sQProcessResource); - if (eError != PVRSRV_OK) - { - goto ErrorExit; - } - } - -ErrorExit: - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetQueueSpaceKM(PVRSRV_QUEUE_INFO *psQueue, - IMG_SIZE_T ui32ParamSize, - IMG_VOID **ppvSpace) -{ - IMG_BOOL bTimeout = IMG_TRUE; - - - ui32ParamSize = (ui32ParamSize+3) & 0xFFFFFFFC; - - if (ui32ParamSize > PVRSRV_MAX_CMD_SIZE) - { - PVR_DPF((PVR_DBG_WARNING,"PVRSRVGetQueueSpace: max command size is %d bytes", PVRSRV_MAX_CMD_SIZE)); - return PVRSRV_ERROR_CMD_TOO_BIG; - } - - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if (GET_SPACE_IN_CMDQ(psQueue) > ui32ParamSize) - { - bTimeout = IMG_FALSE; - break; - } - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - if (bTimeout == IMG_TRUE) - { - *ppvSpace = IMG_NULL; - - return PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE; - } - else - { - *ppvSpace = (IMG_VOID *)((IMG_UINTPTR_T)psQueue->pvLinQueueUM + psQueue->ui32WriteOffset); - } - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, - PVRSRV_COMMAND **ppsCommand, - IMG_UINT32 ui32DevIndex, - IMG_UINT16 CommandType, - IMG_UINT32 ui32DstSyncCount, - PVRSRV_KERNEL_SYNC_INFO *apsDstSync[], - IMG_UINT32 ui32SrcSyncCount, - PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[], - IMG_SIZE_T ui32DataByteSize ) -{ - PVRSRV_ERROR eError; - PVRSRV_COMMAND *psCommand; - IMG_SIZE_T ui32CommandSize; - IMG_UINT32 i; - - - ui32DataByteSize = (ui32DataByteSize + 3UL) & ~3UL; - - - ui32CommandSize = sizeof(PVRSRV_COMMAND) - + ((ui32DstSyncCount + ui32SrcSyncCount) * sizeof(PVRSRV_SYNC_OBJECT)) - + ui32DataByteSize; - - - eError = PVRSRVGetQueueSpaceKM (psQueue, ui32CommandSize, (IMG_VOID**)&psCommand); - if(eError != PVRSRV_OK) - { - return eError; - } - - psCommand->ui32ProcessID = OSGetCurrentProcessIDKM(); - - - psCommand->uCmdSize = ui32CommandSize; - psCommand->ui32DevIndex = ui32DevIndex; - psCommand->CommandType = CommandType; - psCommand->ui32DstSyncCount = ui32DstSyncCount; - psCommand->ui32SrcSyncCount = ui32SrcSyncCount; - - - psCommand->psDstSync = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand) + sizeof(PVRSRV_COMMAND)); - - - psCommand->psSrcSync = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand->psDstSync) - + (ui32DstSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - - psCommand->pvData = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand->psSrcSync) - + (ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - psCommand->uDataSize = ui32DataByteSize; - - PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_START, QUEUE_TOKEN_INSERTKM); - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_NONE, - QUEUE_TOKEN_COMMAND_TYPE, CommandType); - - - for (i=0; ipsDstSync[i].psKernelSyncInfoKM = apsDstSync[i]; - psCommand->psDstSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsDstSync[i], IMG_FALSE); - psCommand->psDstSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE); - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVInsertCommandKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", - i, psCommand->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCommand->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCommand->psDstSync[i].ui32ReadOpsPending, - psCommand->psDstSync[i].ui32WriteOpsPending)); - } - - - for (i=0; ipsSrcSync[i].psKernelSyncInfoKM = apsSrcSync[i]; - psCommand->psSrcSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsSrcSync[i], IMG_TRUE); - psCommand->psSrcSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE); - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVInsertCommandKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", - i, psCommand->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCommand->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCommand->psSrcSync[i].ui32ReadOpsPending, - psCommand->psSrcSync[i].ui32WriteOpsPending)); - } - PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_END, QUEUE_TOKEN_INSERTKM); - - - *ppsCommand = psCommand; - - return PVRSRV_OK; -} - - -IMG_EXPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSubmitCommandKM(PVRSRV_QUEUE_INFO *psQueue, - PVRSRV_COMMAND *psCommand) -{ - - - - if (psCommand->ui32DstSyncCount > 0) - { - psCommand->psDstSync = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psQueue->pvLinQueueKM) - + psQueue->ui32WriteOffset + sizeof(PVRSRV_COMMAND)); - } - - if (psCommand->ui32SrcSyncCount > 0) - { - psCommand->psSrcSync = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psQueue->pvLinQueueKM) - + psQueue->ui32WriteOffset + sizeof(PVRSRV_COMMAND) - + (psCommand->ui32DstSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - } - - psCommand->pvData = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psQueue->pvLinQueueKM) - + psQueue->ui32WriteOffset + sizeof(PVRSRV_COMMAND) - + (psCommand->ui32DstSyncCount * sizeof(PVRSRV_SYNC_OBJECT)) - + (psCommand->ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); - - - UPDATE_QUEUE_WOFF(psQueue, psCommand->uCmdSize); - - return PVRSRV_OK; -} - - - -static -PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA *psSysData, - PVRSRV_COMMAND *psCommand, - IMG_BOOL bFlush) -{ - PVRSRV_SYNC_OBJECT *psWalkerObj; - PVRSRV_SYNC_OBJECT *psEndObj; - IMG_UINT32 i; - COMMAND_COMPLETE_DATA *psCmdCompleteData; - PVRSRV_ERROR eError = PVRSRV_OK; - IMG_UINT32 ui32WriteOpsComplete; - IMG_UINT32 ui32ReadOpsComplete; - DEVICE_COMMAND_DATA *psDeviceCommandData; - IMG_UINT32 ui32CCBOffset; - - - psWalkerObj = psCommand->psDstSync; - psEndObj = psWalkerObj + psCommand->ui32DstSyncCount; - while (psWalkerObj < psEndObj) - { - PVRSRV_SYNC_DATA *psSyncData = psWalkerObj->psKernelSyncInfoKM->psSyncData; - - ui32WriteOpsComplete = psSyncData->ui32WriteOpsComplete; - ui32ReadOpsComplete = psSyncData->ui32ReadOpsComplete; - - if ((ui32WriteOpsComplete != psWalkerObj->ui32WriteOpsPending) - || (ui32ReadOpsComplete != psWalkerObj->ui32ReadOpsPending)) - { - if (!bFlush || - !SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) || - !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending)) - { - return PVRSRV_ERROR_FAILED_DEPENDENCIES; - } - } - - psWalkerObj++; - } - - - psWalkerObj = psCommand->psSrcSync; - psEndObj = psWalkerObj + psCommand->ui32SrcSyncCount; - while (psWalkerObj < psEndObj) - { - PVRSRV_SYNC_DATA *psSyncData = psWalkerObj->psKernelSyncInfoKM->psSyncData; - - ui32ReadOpsComplete = psSyncData->ui32ReadOpsComplete; - ui32WriteOpsComplete = psSyncData->ui32WriteOpsComplete; - - if ((ui32WriteOpsComplete != psWalkerObj->ui32WriteOpsPending) - || (ui32ReadOpsComplete != psWalkerObj->ui32ReadOpsPending)) - { - if (!bFlush && - SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) && - SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending)) - { - PVR_DPF((PVR_DBG_WARNING, - "PVRSRVProcessCommand: Stale syncops psSyncData:0x%x ui32WriteOpsComplete:0x%x ui32WriteOpsPending:0x%x", - (IMG_UINTPTR_T)psSyncData, ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending)); - } - - if (!bFlush || - !SYNCOPS_STALE(ui32WriteOpsComplete, psWalkerObj->ui32WriteOpsPending) || - !SYNCOPS_STALE(ui32ReadOpsComplete, psWalkerObj->ui32ReadOpsPending)) - { - return PVRSRV_ERROR_FAILED_DEPENDENCIES; - } - } - psWalkerObj++; - } - - - if (psCommand->ui32DevIndex >= SYS_DEVICE_COUNT) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVProcessCommand: invalid DeviceType 0x%x", - psCommand->ui32DevIndex)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - psDeviceCommandData = psSysData->apsDeviceCommandData[psCommand->ui32DevIndex]; - ui32CCBOffset = psDeviceCommandData[psCommand->CommandType].ui32CCBOffset; - psCmdCompleteData = psDeviceCommandData[psCommand->CommandType].apsCmdCompleteData[ui32CCBOffset]; - if (psCmdCompleteData->bInUse) - { - - return PVRSRV_ERROR_FAILED_DEPENDENCIES; - } - - - psCmdCompleteData->bInUse = IMG_TRUE; - - - psCmdCompleteData->ui32DstSyncCount = psCommand->ui32DstSyncCount; - for (i=0; iui32DstSyncCount; i++) - { - psCmdCompleteData->psDstSync[i] = psCommand->psDstSync[i]; - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVProcessCommand: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x (CCB:%u)", - i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psDstSync[i].ui32ReadOpsPending, - psCmdCompleteData->psDstSync[i].ui32WriteOpsPending, - ui32CCBOffset)); - } - - - - psCmdCompleteData->ui32SrcSyncCount = psCommand->ui32SrcSyncCount; - for (i=0; iui32SrcSyncCount; i++) - { - psCmdCompleteData->psSrcSync[i] = psCommand->psSrcSync[i]; - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVProcessCommand: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x (CCB:%u)", - i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psSrcSync[i].ui32ReadOpsPending, - psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending, - ui32CCBOffset)); - } - - - - - - - - - - - - if (psDeviceCommandData[psCommand->CommandType].pfnCmdProc((IMG_HANDLE)psCmdCompleteData, - (IMG_UINT32)psCommand->uDataSize, - psCommand->pvData) == IMG_FALSE) - { - - - - psCmdCompleteData->bInUse = IMG_FALSE; - eError = PVRSRV_ERROR_CMD_NOT_PROCESSED; - } - - - psDeviceCommandData[psCommand->CommandType].ui32CCBOffset = (ui32CCBOffset + 1) % DC_NUM_COMMANDS_PER_TYPE; - - return eError; -} - - -static IMG_VOID PVRSRVProcessQueues_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - if (psDeviceNode->bReProcessDeviceCommandComplete && - psDeviceNode->pfnDeviceCommandComplete != IMG_NULL) - { - (*psDeviceNode->pfnDeviceCommandComplete)(psDeviceNode); - } -} - -IMG_EXPORT -PVRSRV_ERROR PVRSRVProcessQueues(IMG_BOOL bFlush) -{ - PVRSRV_QUEUE_INFO *psQueue; - SYS_DATA *psSysData; - PVRSRV_COMMAND *psCommand; - SysAcquireData(&psSysData); - - - - while (OSLockResource(&psSysData->sQProcessResource, ISR_ID) != PVRSRV_OK) - { - OSWaitus(1); - }; - - psQueue = psSysData->psQueueList; - - if(!psQueue) - { - PVR_DPF((PVR_DBG_MESSAGE,"No Queues installed - cannot process commands")); - } - - if (bFlush) - { - PVRSRVSetDCState(DC_STATE_FLUSH_COMMANDS); - } - - while (psQueue) - { - while (psQueue->ui32ReadOffset != psQueue->ui32WriteOffset) - { - psCommand = (PVRSRV_COMMAND*)((IMG_UINTPTR_T)psQueue->pvLinQueueKM + psQueue->ui32ReadOffset); - - if (PVRSRVProcessCommand(psSysData, psCommand, bFlush) == PVRSRV_OK) - { - - UPDATE_QUEUE_ROFF(psQueue, psCommand->uCmdSize) - continue; - } - - break; - } - psQueue = psQueue->psNextKM; - } - - if (bFlush) - { - PVRSRVSetDCState(DC_STATE_NO_FLUSH_COMMANDS); - } - - - List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, - &PVRSRVProcessQueues_ForEachCb); - - OSUnlockResource(&psSysData->sQProcessResource, ISR_ID); - - return PVRSRV_OK; -} - -#if defined(SUPPORT_CUSTOM_SWAP_OPERATIONS) -IMG_INTERNAL -IMG_VOID PVRSRVFreeCommandCompletePacketKM(IMG_HANDLE hCmdCookie, - IMG_BOOL bScheduleMISR) -{ - COMMAND_COMPLETE_DATA *psCmdCompleteData = (COMMAND_COMPLETE_DATA *)hCmdCookie; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - - psCmdCompleteData->bInUse = IMG_FALSE; - - - PVRSRVScheduleDeviceCallbacks(); - - if(bScheduleMISR) - { - OSScheduleMISR(psSysData); - } -} - -#endif - - -IMG_EXPORT -IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, - IMG_BOOL bScheduleMISR) -{ - IMG_UINT32 i; - COMMAND_COMPLETE_DATA *psCmdCompleteData = (COMMAND_COMPLETE_DATA *)hCmdCookie; - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - - PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_START, - QUEUE_TOKEN_COMMAND_COMPLETE); - - - for (i=0; iui32DstSyncCount; i++) - { - psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete++; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_DST, - psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM, - PVRSRV_SYNCOP_COMPLETE); - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", - i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psDstSync[i].ui32ReadOpsPending, - psCmdCompleteData->psDstSync[i].ui32WriteOpsPending)); - } - - - for (i=0; iui32SrcSyncCount; i++) - { - psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete++; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_SRC, - psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM, - PVRSRV_SYNCOP_COMPLETE); - - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", - i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, - psCmdCompleteData->psSrcSync[i].ui32ReadOpsPending, - psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending)); - } - - PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_END, - QUEUE_TOKEN_COMMAND_COMPLETE); - - - psCmdCompleteData->bInUse = IMG_FALSE; - - - PVRSRVScheduleDeviceCallbacks(); - - if(bScheduleMISR) - { - OSScheduleMISR(psSysData); - } -} - - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, - PFN_CMD_PROC *ppfnCmdProcList, - IMG_UINT32 ui32MaxSyncsPerCmd[][2], - IMG_UINT32 ui32CmdCount) -{ - SYS_DATA *psSysData; - PVRSRV_ERROR eError; - IMG_UINT32 ui32CmdCounter, ui32CmdTypeCounter; - IMG_SIZE_T ui32AllocSize; - DEVICE_COMMAND_DATA *psDeviceCommandData; - COMMAND_COMPLETE_DATA *psCmdCompleteData; - - - if(ui32DevIndex >= SYS_DEVICE_COUNT) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVRegisterCmdProcListKM: invalid DeviceType 0x%x", - ui32DevIndex)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - SysAcquireData(&psSysData); - - - ui32AllocSize = ui32CmdCount * sizeof(*psDeviceCommandData); - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - ui32AllocSize, - (IMG_VOID **)&psDeviceCommandData, IMG_NULL, - "Array of Pointers for Command Store"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterCmdProcListKM: Failed to alloc CC data")); - goto ErrorExit; - } - - psSysData->apsDeviceCommandData[ui32DevIndex] = psDeviceCommandData; - - for (ui32CmdTypeCounter = 0; ui32CmdTypeCounter < ui32CmdCount; ui32CmdTypeCounter++) - { - psDeviceCommandData[ui32CmdTypeCounter].pfnCmdProc = ppfnCmdProcList[ui32CmdTypeCounter]; - psDeviceCommandData[ui32CmdTypeCounter].ui32CCBOffset = 0; - - for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) - { - - - ui32AllocSize = sizeof(COMMAND_COMPLETE_DATA) - + ((ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0] - + ui32MaxSyncsPerCmd[ui32CmdTypeCounter][1]) - * sizeof(PVRSRV_SYNC_OBJECT)); - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - ui32AllocSize, - (IMG_VOID **)&psCmdCompleteData, - IMG_NULL, - "Command Complete Data"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterCmdProcListKM: Failed to alloc cmd %d", ui32CmdTypeCounter)); - goto ErrorExit; - } - - psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter] = psCmdCompleteData; - - - OSMemSet(psCmdCompleteData, 0x00, ui32AllocSize); - - - psCmdCompleteData->psDstSync = (PVRSRV_SYNC_OBJECT*) - (((IMG_UINTPTR_T)psCmdCompleteData) - + sizeof(COMMAND_COMPLETE_DATA)); - psCmdCompleteData->psSrcSync = (PVRSRV_SYNC_OBJECT*) - (((IMG_UINTPTR_T)psCmdCompleteData->psDstSync) - + (sizeof(PVRSRV_SYNC_OBJECT) * ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0])); - - psCmdCompleteData->ui32AllocSize = (IMG_UINT32)ui32AllocSize; - } - } - - return PVRSRV_OK; - -ErrorExit: - - - if (PVRSRVRemoveCmdProcListKM(ui32DevIndex, ui32CmdCount) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVRegisterCmdProcListKM: Failed to clean up after error, device 0x%x", - ui32DevIndex)); - } - - return eError; -} - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, - IMG_UINT32 ui32CmdCount) -{ - SYS_DATA *psSysData; - IMG_UINT32 ui32CmdTypeCounter, ui32CmdCounter; - DEVICE_COMMAND_DATA *psDeviceCommandData; - COMMAND_COMPLETE_DATA *psCmdCompleteData; - IMG_SIZE_T ui32AllocSize; - - - if(ui32DevIndex >= SYS_DEVICE_COUNT) - { - PVR_DPF((PVR_DBG_ERROR, - "PVRSRVRemoveCmdProcListKM: invalid DeviceType 0x%x", - ui32DevIndex)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - SysAcquireData(&psSysData); - - psDeviceCommandData = psSysData->apsDeviceCommandData[ui32DevIndex]; - if(psDeviceCommandData != IMG_NULL) - { - for (ui32CmdTypeCounter = 0; ui32CmdTypeCounter < ui32CmdCount; ui32CmdTypeCounter++) - { - for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) - { - psCmdCompleteData = psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter]; - - - if (psCmdCompleteData != IMG_NULL) - { - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, psCmdCompleteData->ui32AllocSize, - psCmdCompleteData, IMG_NULL); - psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter] = IMG_NULL; - } - } - } - - - ui32AllocSize = ui32CmdCount * sizeof(*psDeviceCommandData); - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, ui32AllocSize, psDeviceCommandData, IMG_NULL); - psSysData->apsDeviceCommandData[ui32DevIndex] = IMG_NULL; - } - - return PVRSRV_OK; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/ra.c b/drivers/staging/cdv/pvr/services4/srvkm/common/ra.c deleted file mode 100644 index e93f05f..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/ra.c +++ /dev/null @@ -1,1725 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "hash.h" -#include "ra.h" -#include "buffer_manager.h" -#include "osfunc.h" - -#ifdef __linux__ -#include -#include "proc.h" -#endif - -#ifdef USE_BM_FREESPACE_CHECK -#include -#endif - -#define MINIMUM_HASH_SIZE (64) - -#if defined(VALIDATE_ARENA_TEST) - -typedef enum RESOURCE_DESCRIPTOR_TAG { - - RESOURCE_SPAN_LIVE = 10, - RESOURCE_SPAN_FREE, - IMPORTED_RESOURCE_SPAN_START, - IMPORTED_RESOURCE_SPAN_LIVE, - IMPORTED_RESOURCE_SPAN_FREE, - IMPORTED_RESOURCE_SPAN_END, - -} RESOURCE_DESCRIPTOR; - -typedef enum RESOURCE_TYPE_TAG { - - IMPORTED_RESOURCE_TYPE = 20, - NON_IMPORTED_RESOURCE_TYPE - -} RESOURCE_TYPE; - - -static IMG_UINT32 ui32BoundaryTagID = 0; - -IMG_UINT32 ValidateArena(RA_ARENA *pArena); -#endif - -struct _BT_ -{ - enum bt_type - { - btt_span, - btt_free, - btt_live - } type; - - - IMG_UINTPTR_T base; - IMG_SIZE_T uSize; - - - struct _BT_ *pNextSegment; - struct _BT_ *pPrevSegment; - - struct _BT_ *pNextFree; - struct _BT_ *pPrevFree; - - BM_MAPPING *psMapping; - -#if defined(VALIDATE_ARENA_TEST) - RESOURCE_DESCRIPTOR eResourceSpan; - RESOURCE_TYPE eResourceType; - - - IMG_UINT32 ui32BoundaryTagID; -#endif - -}; -typedef struct _BT_ BT; - - -struct _RA_ARENA_ -{ - - IMG_CHAR *name; - - - IMG_SIZE_T uQuantum; - - - IMG_BOOL (*pImportAlloc)(IMG_VOID *, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINTPTR_T *pBase); - IMG_VOID (*pImportFree) (IMG_VOID *, - IMG_UINTPTR_T, - BM_MAPPING *psMapping); - IMG_VOID (*pBackingStoreFree) (IMG_VOID *, IMG_SIZE_T, IMG_SIZE_T, IMG_HANDLE); - - - IMG_VOID *pImportHandle; - - -#define FREE_TABLE_LIMIT 32 - - - BT *aHeadFree [FREE_TABLE_LIMIT]; - - - BT *pHeadSegment; - BT *pTailSegment; - - - HASH_TABLE *pSegmentHash; - -#ifdef RA_STATS - RA_STATISTICS sStatistics; -#endif - -#if defined(CONFIG_PROC_FS) && defined(DEBUG) -#define PROC_NAME_SIZE 64 - - struct proc_dir_entry* pProcInfo; - struct proc_dir_entry* pProcSegs; - - IMG_BOOL bInitProcEntry; -#endif -}; -#if defined(ENABLE_RA_DUMP) -IMG_VOID RA_Dump (RA_ARENA *pArena); -#endif - -#if defined(CONFIG_PROC_FS) && defined(DEBUG) - -static void RA_ProcSeqShowInfo(struct seq_file *sfile, void* el); -static void* RA_ProcSeqOff2ElementInfo(struct seq_file * sfile, loff_t off); - -static void RA_ProcSeqShowRegs(struct seq_file *sfile, void* el); -static void* RA_ProcSeqOff2ElementRegs(struct seq_file * sfile, loff_t off); - -#endif - -#ifdef USE_BM_FREESPACE_CHECK -IMG_VOID CheckBMFreespace(IMG_VOID); -#endif - -#if defined(CONFIG_PROC_FS) && defined(DEBUG) -static IMG_CHAR *ReplaceSpaces(IMG_CHAR * const pS) -{ - IMG_CHAR *pT; - - for(pT = pS; *pT != 0; pT++) - { - if (*pT == ' ' || *pT == '\t') - { - *pT = '_'; - } - } - - return pS; -} -#endif - -static IMG_BOOL -_RequestAllocFail (IMG_VOID *_h, - IMG_SIZE_T _uSize, - IMG_SIZE_T *_pActualSize, - BM_MAPPING **_ppsMapping, - IMG_UINT32 _uFlags, - IMG_UINTPTR_T *_pBase) -{ - PVR_UNREFERENCED_PARAMETER (_h); - PVR_UNREFERENCED_PARAMETER (_uSize); - PVR_UNREFERENCED_PARAMETER (_pActualSize); - PVR_UNREFERENCED_PARAMETER (_ppsMapping); - PVR_UNREFERENCED_PARAMETER (_uFlags); - PVR_UNREFERENCED_PARAMETER (_pBase); - - return IMG_FALSE; -} - -static IMG_UINT32 -pvr_log2 (IMG_SIZE_T n) -{ - IMG_UINT32 l = 0; - n>>=1; - while (n>0) - { - n>>=1; - l++; - } - return l; -} - -static PVRSRV_ERROR -_SegmentListInsertAfter (RA_ARENA *pArena, - BT *pInsertionPoint, - BT *pBT) -{ - PVR_ASSERT (pArena != IMG_NULL); - PVR_ASSERT (pInsertionPoint != IMG_NULL); - - if ((pInsertionPoint == IMG_NULL) || (pArena == IMG_NULL)) - { - PVR_DPF ((PVR_DBG_ERROR,"_SegmentListInsertAfter: invalid parameters")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - pBT->pNextSegment = pInsertionPoint->pNextSegment; - pBT->pPrevSegment = pInsertionPoint; - if (pInsertionPoint->pNextSegment == IMG_NULL) - pArena->pTailSegment = pBT; - else - pInsertionPoint->pNextSegment->pPrevSegment = pBT; - pInsertionPoint->pNextSegment = pBT; - - return PVRSRV_OK; -} - -static PVRSRV_ERROR -_SegmentListInsert (RA_ARENA *pArena, BT *pBT) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - - if (pArena->pHeadSegment == IMG_NULL) - { - pArena->pHeadSegment = pArena->pTailSegment = pBT; - pBT->pNextSegment = pBT->pPrevSegment = IMG_NULL; - } - else - { - BT *pBTScan; - - if (pBT->base < pArena->pHeadSegment->base) - { - - pBT->pNextSegment = pArena->pHeadSegment; - pArena->pHeadSegment->pPrevSegment = pBT; - pArena->pHeadSegment = pBT; - pBT->pPrevSegment = IMG_NULL; - } - else - { - - - - - pBTScan = pArena->pHeadSegment; - - while ((pBTScan->pNextSegment != IMG_NULL) && (pBT->base >= pBTScan->pNextSegment->base)) - { - pBTScan = pBTScan->pNextSegment; - } - - eError = _SegmentListInsertAfter (pArena, pBTScan, pBT); - if (eError != PVRSRV_OK) - { - return eError; - } - } - } - return eError; -} - -static IMG_VOID -_SegmentListRemove (RA_ARENA *pArena, BT *pBT) -{ - if (pBT->pPrevSegment == IMG_NULL) - pArena->pHeadSegment = pBT->pNextSegment; - else - pBT->pPrevSegment->pNextSegment = pBT->pNextSegment; - - if (pBT->pNextSegment == IMG_NULL) - pArena->pTailSegment = pBT->pPrevSegment; - else - pBT->pNextSegment->pPrevSegment = pBT->pPrevSegment; -} - -static BT * -_SegmentSplit (RA_ARENA *pArena, BT *pBT, IMG_SIZE_T uSize) -{ - BT *pNeighbour; - - PVR_ASSERT (pArena != IMG_NULL); - - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_SegmentSplit: invalid parameter - pArena")); - return IMG_NULL; - } - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(BT), - (IMG_VOID **)&pNeighbour, IMG_NULL, - "Boundary Tag") != PVRSRV_OK) - { - return IMG_NULL; - } - - OSMemSet(pNeighbour, 0, sizeof(BT)); - -#if defined(VALIDATE_ARENA_TEST) - pNeighbour->ui32BoundaryTagID = ++ui32BoundaryTagID; -#endif - - pNeighbour->pPrevSegment = pBT; - pNeighbour->pNextSegment = pBT->pNextSegment; - if (pBT->pNextSegment == IMG_NULL) - pArena->pTailSegment = pNeighbour; - else - pBT->pNextSegment->pPrevSegment = pNeighbour; - pBT->pNextSegment = pNeighbour; - - pNeighbour->type = btt_free; - pNeighbour->uSize = pBT->uSize - uSize; - pNeighbour->base = pBT->base + uSize; - pNeighbour->psMapping = pBT->psMapping; - pBT->uSize = uSize; - -#if defined(VALIDATE_ARENA_TEST) - if (pNeighbour->pPrevSegment->eResourceType == IMPORTED_RESOURCE_TYPE) - { - pNeighbour->eResourceType = IMPORTED_RESOURCE_TYPE; - pNeighbour->eResourceSpan = IMPORTED_RESOURCE_SPAN_FREE; - } - else if (pNeighbour->pPrevSegment->eResourceType == NON_IMPORTED_RESOURCE_TYPE) - { - pNeighbour->eResourceType = NON_IMPORTED_RESOURCE_TYPE; - pNeighbour->eResourceSpan = RESOURCE_SPAN_FREE; - } - else - { - PVR_DPF ((PVR_DBG_ERROR,"_SegmentSplit: pNeighbour->pPrevSegment->eResourceType unrecognized")); - PVR_DBG_BREAK; - } -#endif - - return pNeighbour; -} - -static IMG_VOID -_FreeListInsert (RA_ARENA *pArena, BT *pBT) -{ - IMG_UINT32 uIndex; - uIndex = pvr_log2 (pBT->uSize); - pBT->type = btt_free; - pBT->pNextFree = pArena->aHeadFree [uIndex]; - pBT->pPrevFree = IMG_NULL; - if (pArena->aHeadFree[uIndex] != IMG_NULL) - pArena->aHeadFree[uIndex]->pPrevFree = pBT; - pArena->aHeadFree [uIndex] = pBT; -} - -static IMG_VOID -_FreeListRemove (RA_ARENA *pArena, BT *pBT) -{ - IMG_UINT32 uIndex; - uIndex = pvr_log2 (pBT->uSize); - if (pBT->pNextFree != IMG_NULL) - pBT->pNextFree->pPrevFree = pBT->pPrevFree; - if (pBT->pPrevFree == IMG_NULL) - pArena->aHeadFree[uIndex] = pBT->pNextFree; - else - pBT->pPrevFree->pNextFree = pBT->pNextFree; -} - -static BT * -_BuildSpanMarker (IMG_UINTPTR_T base, IMG_SIZE_T uSize) -{ - BT *pBT; - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(BT), - (IMG_VOID **)&pBT, IMG_NULL, - "Boundary Tag") != PVRSRV_OK) - { - return IMG_NULL; - } - - OSMemSet(pBT, 0, sizeof(BT)); - -#if defined(VALIDATE_ARENA_TEST) - pBT->ui32BoundaryTagID = ++ui32BoundaryTagID; -#endif - - pBT->type = btt_span; - pBT->base = base; - pBT->uSize = uSize; - pBT->psMapping = IMG_NULL; - - return pBT; -} - -static BT * -_BuildBT (IMG_UINTPTR_T base, IMG_SIZE_T uSize) -{ - BT *pBT; - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(BT), - (IMG_VOID **)&pBT, IMG_NULL, - "Boundary Tag") != PVRSRV_OK) - { - return IMG_NULL; - } - - OSMemSet(pBT, 0, sizeof(BT)); - -#if defined(VALIDATE_ARENA_TEST) - pBT->ui32BoundaryTagID = ++ui32BoundaryTagID; -#endif - - pBT->type = btt_free; - pBT->base = base; - pBT->uSize = uSize; - - return pBT; -} - -static BT * -_InsertResource (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize) -{ - BT *pBT; - PVR_ASSERT (pArena!=IMG_NULL); - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_InsertResource: invalid parameter - pArena")); - return IMG_NULL; - } - - pBT = _BuildBT (base, uSize); - if (pBT != IMG_NULL) - { - -#if defined(VALIDATE_ARENA_TEST) - pBT->eResourceSpan = RESOURCE_SPAN_FREE; - pBT->eResourceType = NON_IMPORTED_RESOURCE_TYPE; -#endif - - if (_SegmentListInsert (pArena, pBT) != PVRSRV_OK) - { - PVR_DPF ((PVR_DBG_ERROR,"_InsertResource: call to _SegmentListInsert failed")); - return IMG_NULL; - } - _FreeListInsert (pArena, pBT); -#ifdef RA_STATS - pArena->sStatistics.uTotalResourceCount+=uSize; - pArena->sStatistics.uFreeResourceCount+=uSize; - pArena->sStatistics.uSpanCount++; -#endif - } - return pBT; -} - -static BT * -_InsertResourceSpan (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize) -{ - PVRSRV_ERROR eError; - BT *pSpanStart; - BT *pSpanEnd; - BT *pBT; - - PVR_ASSERT (pArena != IMG_NULL); - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_InsertResourceSpan: invalid parameter - pArena")); - return IMG_NULL; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_InsertResourceSpan: arena='%s', base=0x%x, size=0x%x", - pArena->name, base, uSize)); - - pSpanStart = _BuildSpanMarker (base, uSize); - if (pSpanStart == IMG_NULL) - { - goto fail_start; - } - -#if defined(VALIDATE_ARENA_TEST) - pSpanStart->eResourceSpan = IMPORTED_RESOURCE_SPAN_START; - pSpanStart->eResourceType = IMPORTED_RESOURCE_TYPE; -#endif - - pSpanEnd = _BuildSpanMarker (base + uSize, 0); - if (pSpanEnd == IMG_NULL) - { - goto fail_end; - } - -#if defined(VALIDATE_ARENA_TEST) - pSpanEnd->eResourceSpan = IMPORTED_RESOURCE_SPAN_END; - pSpanEnd->eResourceType = IMPORTED_RESOURCE_TYPE; -#endif - - pBT = _BuildBT (base, uSize); - if (pBT == IMG_NULL) - { - goto fail_bt; - } - -#if defined(VALIDATE_ARENA_TEST) - pBT->eResourceSpan = IMPORTED_RESOURCE_SPAN_FREE; - pBT->eResourceType = IMPORTED_RESOURCE_TYPE; -#endif - - eError = _SegmentListInsert (pArena, pSpanStart); - if (eError != PVRSRV_OK) - { - goto fail_SegListInsert; - } - - eError = _SegmentListInsertAfter (pArena, pSpanStart, pBT); - if (eError != PVRSRV_OK) - { - goto fail_SegListInsert; - } - - _FreeListInsert (pArena, pBT); - - eError = _SegmentListInsertAfter (pArena, pBT, pSpanEnd); - if (eError != PVRSRV_OK) - { - goto fail_SegListInsert; - } - -#ifdef RA_STATS - pArena->sStatistics.uTotalResourceCount+=uSize; -#endif - return pBT; - - fail_SegListInsert: - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pBT, IMG_NULL); - - fail_bt: - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pSpanEnd, IMG_NULL); - - fail_end: - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pSpanStart, IMG_NULL); - - fail_start: - return IMG_NULL; -} - -static IMG_VOID -_FreeBT (RA_ARENA *pArena, BT *pBT, IMG_BOOL bFreeBackingStore) -{ - BT *pNeighbour; - IMG_UINTPTR_T uOrigBase; - IMG_SIZE_T uOrigSize; - - PVR_ASSERT (pArena!=IMG_NULL); - PVR_ASSERT (pBT!=IMG_NULL); - - if ((pArena == IMG_NULL) || (pBT == IMG_NULL)) - { - PVR_DPF ((PVR_DBG_ERROR,"_FreeBT: invalid parameter")); - return; - } - -#ifdef RA_STATS - pArena->sStatistics.uLiveSegmentCount--; - pArena->sStatistics.uFreeSegmentCount++; - pArena->sStatistics.uFreeResourceCount+=pBT->uSize; -#endif - - uOrigBase = pBT->base; - uOrigSize = pBT->uSize; - - - pNeighbour = pBT->pPrevSegment; - if (pNeighbour!=IMG_NULL - && pNeighbour->type == btt_free - && pNeighbour->base + pNeighbour->uSize == pBT->base) - { - _FreeListRemove (pArena, pNeighbour); - _SegmentListRemove (pArena, pNeighbour); - pBT->base = pNeighbour->base; - pBT->uSize += pNeighbour->uSize; - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pNeighbour, IMG_NULL); - -#ifdef RA_STATS - pArena->sStatistics.uFreeSegmentCount--; -#endif - } - - - pNeighbour = pBT->pNextSegment; - if (pNeighbour!=IMG_NULL - && pNeighbour->type == btt_free - && pBT->base + pBT->uSize == pNeighbour->base) - { - _FreeListRemove (pArena, pNeighbour); - _SegmentListRemove (pArena, pNeighbour); - pBT->uSize += pNeighbour->uSize; - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pNeighbour, IMG_NULL); - -#ifdef RA_STATS - pArena->sStatistics.uFreeSegmentCount--; -#endif - } - - - if (pArena->pBackingStoreFree != IMG_NULL && bFreeBackingStore) - { - IMG_UINTPTR_T uRoundedStart, uRoundedEnd; - - - uRoundedStart = (uOrigBase / pArena->uQuantum) * pArena->uQuantum; - - if (uRoundedStart < pBT->base) - { - uRoundedStart += pArena->uQuantum; - } - - - uRoundedEnd = ((uOrigBase + uOrigSize + pArena->uQuantum - 1) / pArena->uQuantum) * pArena->uQuantum; - - if (uRoundedEnd > (pBT->base + pBT->uSize)) - { - uRoundedEnd -= pArena->uQuantum; - } - - if (uRoundedStart < uRoundedEnd) - { - pArena->pBackingStoreFree(pArena->pImportHandle, (IMG_SIZE_T)uRoundedStart, (IMG_SIZE_T)uRoundedEnd, (IMG_HANDLE)0); - } - } - - if (pBT->pNextSegment!=IMG_NULL && pBT->pNextSegment->type == btt_span - && pBT->pPrevSegment!=IMG_NULL && pBT->pPrevSegment->type == btt_span) - { - BT *next = pBT->pNextSegment; - BT *prev = pBT->pPrevSegment; - _SegmentListRemove (pArena, next); - _SegmentListRemove (pArena, prev); - _SegmentListRemove (pArena, pBT); - pArena->pImportFree (pArena->pImportHandle, pBT->base, pBT->psMapping); -#ifdef RA_STATS - pArena->sStatistics.uSpanCount--; - pArena->sStatistics.uExportCount++; - pArena->sStatistics.uFreeSegmentCount--; - pArena->sStatistics.uFreeResourceCount-=pBT->uSize; - pArena->sStatistics.uTotalResourceCount-=pBT->uSize; -#endif - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), next, IMG_NULL); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), prev, IMG_NULL); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pBT, IMG_NULL); - - } - else - _FreeListInsert (pArena, pBT); -} - - -static IMG_BOOL -_AttemptAllocAligned (RA_ARENA *pArena, - IMG_SIZE_T uSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINT32 uAlignment, - IMG_UINT32 uAlignmentOffset, - IMG_UINTPTR_T *base) -{ - IMG_UINT32 uIndex; - PVR_ASSERT (pArena!=IMG_NULL); - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_AttemptAllocAligned: invalid parameter - pArena")); - return IMG_FALSE; - } - - if (uAlignment>1) - uAlignmentOffset %= uAlignment; - - - - uIndex = pvr_log2 (uSize); - -#if 0 - - if (1u<aHeadFree[uIndex]==IMG_NULL) - uIndex++; - - while (uIndex < FREE_TABLE_LIMIT) - { - if (pArena->aHeadFree[uIndex]!=IMG_NULL) - { - - BT *pBT; - - pBT = pArena->aHeadFree [uIndex]; - while (pBT!=IMG_NULL) - { - IMG_UINTPTR_T aligned_base; - - if (uAlignment>1) - aligned_base = (pBT->base + uAlignmentOffset + uAlignment - 1) / uAlignment * uAlignment - uAlignmentOffset; - else - aligned_base = pBT->base; - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_AttemptAllocAligned: pBT-base=0x%x " - "pBT-size=0x%x alignedbase=0x%x size=0x%x", - pBT->base, pBT->uSize, aligned_base, uSize)); - - if (pBT->base + pBT->uSize >= aligned_base + uSize) - { - if(!pBT->psMapping || pBT->psMapping->ui32Flags == uFlags) - { - _FreeListRemove (pArena, pBT); - - PVR_ASSERT (pBT->type == btt_free); - -#ifdef RA_STATS - pArena->sStatistics.uLiveSegmentCount++; - pArena->sStatistics.uFreeSegmentCount--; - pArena->sStatistics.uFreeResourceCount-=pBT->uSize; -#endif - - - if (aligned_base > pBT->base) - { - BT *pNeighbour; - pNeighbour = _SegmentSplit (pArena, pBT, (IMG_SIZE_T)(aligned_base - pBT->base)); - - if (pNeighbour==IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_AttemptAllocAligned: Front split failed")); - - _FreeListInsert (pArena, pBT); - return IMG_FALSE; - } - - _FreeListInsert (pArena, pBT); - #ifdef RA_STATS - pArena->sStatistics.uFreeSegmentCount++; - pArena->sStatistics.uFreeResourceCount+=pBT->uSize; - #endif - pBT = pNeighbour; - } - - - if (pBT->uSize > uSize) - { - BT *pNeighbour; - pNeighbour = _SegmentSplit (pArena, pBT, uSize); - - if (pNeighbour==IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"_AttemptAllocAligned: Back split failed")); - - _FreeListInsert (pArena, pBT); - return IMG_FALSE; - } - - _FreeListInsert (pArena, pNeighbour); - #ifdef RA_STATS - pArena->sStatistics.uFreeSegmentCount++; - pArena->sStatistics.uFreeResourceCount+=pNeighbour->uSize; - #endif - } - - pBT->type = btt_live; - -#if defined(VALIDATE_ARENA_TEST) - if (pBT->eResourceType == IMPORTED_RESOURCE_TYPE) - { - pBT->eResourceSpan = IMPORTED_RESOURCE_SPAN_LIVE; - } - else if (pBT->eResourceType == NON_IMPORTED_RESOURCE_TYPE) - { - pBT->eResourceSpan = RESOURCE_SPAN_LIVE; - } - else - { - PVR_DPF ((PVR_DBG_ERROR,"_AttemptAllocAligned ERROR: pBT->eResourceType unrecognized")); - PVR_DBG_BREAK; - } -#endif - if (!HASH_Insert (pArena->pSegmentHash, pBT->base, (IMG_UINTPTR_T) pBT)) - { - _FreeBT (pArena, pBT, IMG_FALSE); - return IMG_FALSE; - } - - if (ppsMapping!=IMG_NULL) - *ppsMapping = pBT->psMapping; - - *base = pBT->base; - - return IMG_TRUE; - } - else - { - PVR_DPF ((PVR_DBG_MESSAGE, - "AttemptAllocAligned: mismatch in flags. Import has %x, request was %x", pBT->psMapping->ui32Flags, uFlags)); - - } - } - pBT = pBT->pNextFree; - } - - } - uIndex++; - } - - return IMG_FALSE; -} - - - -RA_ARENA * -RA_Create (IMG_CHAR *name, - IMG_UINTPTR_T base, - IMG_SIZE_T uSize, - BM_MAPPING *psMapping, - IMG_SIZE_T uQuantum, - IMG_BOOL (*imp_alloc)(IMG_VOID *, IMG_SIZE_T uSize, IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, IMG_UINT32 _flags, IMG_UINTPTR_T *pBase), - IMG_VOID (*imp_free) (IMG_VOID *, IMG_UINTPTR_T, BM_MAPPING *), - IMG_VOID (*backingstore_free) (IMG_VOID*, IMG_SIZE_T, IMG_SIZE_T, IMG_HANDLE), - IMG_VOID *pImportHandle) -{ - RA_ARENA *pArena; - BT *pBT; - IMG_INT i; - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Create: name='%s', base=0x%x, uSize=0x%x, alloc=0x%x, free=0x%x", - name, base, uSize, (IMG_UINTPTR_T)imp_alloc, (IMG_UINTPTR_T)imp_free)); - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (*pArena), - (IMG_VOID **)&pArena, IMG_NULL, - "Resource Arena") != PVRSRV_OK) - { - goto arena_fail; - } - - pArena->name = name; - pArena->pImportAlloc = (imp_alloc!=IMG_NULL) ? imp_alloc : &_RequestAllocFail; - pArena->pImportFree = imp_free; - pArena->pBackingStoreFree = backingstore_free; - pArena->pImportHandle = pImportHandle; - for (i=0; iaHeadFree[i] = IMG_NULL; - pArena->pHeadSegment = IMG_NULL; - pArena->pTailSegment = IMG_NULL; - pArena->uQuantum = uQuantum; - -#ifdef RA_STATS - pArena->sStatistics.uSpanCount = 0; - pArena->sStatistics.uLiveSegmentCount = 0; - pArena->sStatistics.uFreeSegmentCount = 0; - pArena->sStatistics.uFreeResourceCount = 0; - pArena->sStatistics.uTotalResourceCount = 0; - pArena->sStatistics.uCumulativeAllocs = 0; - pArena->sStatistics.uCumulativeFrees = 0; - pArena->sStatistics.uImportCount = 0; - pArena->sStatistics.uExportCount = 0; -#endif - -#if defined(CONFIG_PROC_FS) && defined(DEBUG) - if(strcmp(pArena->name,"") != 0) - { - IMG_INT ret; - IMG_CHAR szProcInfoName[PROC_NAME_SIZE]; - IMG_CHAR szProcSegsName[PROC_NAME_SIZE]; - struct proc_dir_entry* (*pfnCreateProcEntrySeq)(const IMG_CHAR *, - IMG_VOID*, - pvr_next_proc_seq_t, - pvr_show_proc_seq_t, - pvr_off2element_proc_seq_t, - pvr_startstop_proc_seq_t, - write_proc_t); - - pArena->bInitProcEntry = !PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL); - - - pfnCreateProcEntrySeq = pArena->bInitProcEntry ? CreateProcEntrySeq : CreatePerProcessProcEntrySeq; - - ret = snprintf(szProcInfoName, sizeof(szProcInfoName), "ra_info_%s", pArena->name); - if (ret > 0 && ret < sizeof(szProcInfoName)) - { - pArena->pProcInfo = pfnCreateProcEntrySeq(ReplaceSpaces(szProcInfoName), pArena, NULL, - RA_ProcSeqShowInfo, RA_ProcSeqOff2ElementInfo, NULL, NULL); - } - else - { - pArena->pProcInfo = 0; - PVR_DPF((PVR_DBG_ERROR, "RA_Create: couldn't create ra_info proc entry for arena %s", pArena->name)); - } - - ret = snprintf(szProcSegsName, sizeof(szProcSegsName), "ra_segs_%s", pArena->name); - if (ret > 0 && ret < sizeof(szProcInfoName)) - { - pArena->pProcSegs = pfnCreateProcEntrySeq(ReplaceSpaces(szProcSegsName), pArena, NULL, - RA_ProcSeqShowRegs, RA_ProcSeqOff2ElementRegs, NULL, NULL); - } - else - { - pArena->pProcSegs = 0; - PVR_DPF((PVR_DBG_ERROR, "RA_Create: couldn't create ra_segs proc entry for arena %s", pArena->name)); - } - } -#endif - - pArena->pSegmentHash = HASH_Create (MINIMUM_HASH_SIZE); - if (pArena->pSegmentHash==IMG_NULL) - { - goto hash_fail; - } - if (uSize>0) - { - uSize = (uSize + uQuantum - 1) / uQuantum * uQuantum; - pBT = _InsertResource (pArena, base, uSize); - if (pBT == IMG_NULL) - { - goto insert_fail; - } - pBT->psMapping = psMapping; - - } - return pArena; - -insert_fail: - HASH_Delete (pArena->pSegmentHash); -hash_fail: - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RA_ARENA), pArena, IMG_NULL); - -arena_fail: - return IMG_NULL; -} - -IMG_VOID -RA_Delete (RA_ARENA *pArena) -{ - IMG_UINT32 uIndex; - - PVR_ASSERT(pArena != IMG_NULL); - - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_Delete: invalid parameter - pArena")); - return; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Delete: name='%s'", pArena->name)); - - for (uIndex=0; uIndexaHeadFree[uIndex] = IMG_NULL; - - while (pArena->pHeadSegment != IMG_NULL) - { - BT *pBT = pArena->pHeadSegment; - - if (pBT->type != btt_free) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_Delete: allocations still exist in the arena that is being destroyed")); - PVR_DPF ((PVR_DBG_ERROR,"Likely Cause: client drivers not freeing alocations before destroying devmemcontext")); - PVR_DPF ((PVR_DBG_ERROR,"RA_Delete: base = 0x%x size=0x%x", pBT->base, pBT->uSize)); - } - - _SegmentListRemove (pArena, pBT); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pBT, IMG_NULL); - -#ifdef RA_STATS - pArena->sStatistics.uSpanCount--; -#endif - } -#if defined(CONFIG_PROC_FS) && defined(DEBUG) - { - IMG_VOID (*pfnRemoveProcEntrySeq)(struct proc_dir_entry*); - - pfnRemoveProcEntrySeq = pArena->bInitProcEntry ? RemoveProcEntrySeq : RemovePerProcessProcEntrySeq; - - if (pArena->pProcInfo != 0) - { - pfnRemoveProcEntrySeq( pArena->pProcInfo ); - } - - if (pArena->pProcSegs != 0) - { - pfnRemoveProcEntrySeq( pArena->pProcSegs ); - } - } -#endif - HASH_Delete (pArena->pSegmentHash); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RA_ARENA), pArena, IMG_NULL); - -} - -IMG_BOOL -RA_TestDelete (RA_ARENA *pArena) -{ - PVR_ASSERT(pArena != IMG_NULL); - - if (pArena != IMG_NULL) - { - while (pArena->pHeadSegment != IMG_NULL) - { - BT *pBT = pArena->pHeadSegment; - if (pBT->type != btt_free) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_TestDelete: detected resource leak!")); - PVR_DPF ((PVR_DBG_ERROR,"RA_TestDelete: base = 0x%x size=0x%x", pBT->base, pBT->uSize)); - return IMG_FALSE; - } - } - } - - return IMG_TRUE; -} - -IMG_BOOL -RA_Add (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize) -{ - PVR_ASSERT (pArena != IMG_NULL); - - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_Add: invalid parameter - pArena")); - return IMG_FALSE; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Add: name='%s', base=0x%x, size=0x%x", pArena->name, base, uSize)); - - uSize = (uSize + pArena->uQuantum - 1) / pArena->uQuantum * pArena->uQuantum; - return ((IMG_BOOL)(_InsertResource (pArena, base, uSize) != IMG_NULL)); -} - -IMG_BOOL -RA_Alloc (RA_ARENA *pArena, - IMG_SIZE_T uRequestSize, - IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINT32 uAlignment, - IMG_UINT32 uAlignmentOffset, - IMG_UINTPTR_T *base) -{ - IMG_BOOL bResult; - IMG_SIZE_T uSize = uRequestSize; - - PVR_ASSERT (pArena!=IMG_NULL); - - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_Alloc: invalid parameter - pArena")); - return IMG_FALSE; - } - -#if defined(VALIDATE_ARENA_TEST) - ValidateArena(pArena); -#endif - -#ifdef USE_BM_FREESPACE_CHECK - CheckBMFreespace(); -#endif - - if (pActualSize != IMG_NULL) - { - *pActualSize = uSize; - } - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Alloc: arena='%s', size=0x%x(0x%x), alignment=0x%x, offset=0x%x", - pArena->name, uSize, uRequestSize, uAlignment, uAlignmentOffset)); - - - - bResult = _AttemptAllocAligned (pArena, uSize, ppsMapping, uFlags, - uAlignment, uAlignmentOffset, base); - if (!bResult) - { - BM_MAPPING *psImportMapping; - IMG_UINTPTR_T import_base; - IMG_SIZE_T uImportSize = uSize; - - - - - if (uAlignment > pArena->uQuantum) - { - uImportSize += (uAlignment - 1); - } - - - uImportSize = ((uImportSize + pArena->uQuantum - 1)/pArena->uQuantum)*pArena->uQuantum; - - bResult = - pArena->pImportAlloc (pArena->pImportHandle, uImportSize, &uImportSize, - &psImportMapping, uFlags, &import_base); - if (bResult) - { - BT *pBT; - pBT = _InsertResourceSpan (pArena, import_base, uImportSize); - - if (pBT == IMG_NULL) - { - - pArena->pImportFree(pArena->pImportHandle, import_base, - psImportMapping); - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Alloc: name='%s', size=0x%x failed!", - pArena->name, uSize)); - - return IMG_FALSE; - } - pBT->psMapping = psImportMapping; -#ifdef RA_STATS - pArena->sStatistics.uFreeSegmentCount++; - pArena->sStatistics.uFreeResourceCount += uImportSize; - pArena->sStatistics.uImportCount++; - pArena->sStatistics.uSpanCount++; -#endif - bResult = _AttemptAllocAligned(pArena, uSize, ppsMapping, uFlags, - uAlignment, uAlignmentOffset, - base); - if (!bResult) - { - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Alloc: name='%s' uAlignment failed!", - pArena->name)); - } - } - } -#ifdef RA_STATS - if (bResult) - pArena->sStatistics.uCumulativeAllocs++; -#endif - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Alloc: name='%s', size=0x%x, *base=0x%x = %d", - pArena->name, uSize, *base, bResult)); - - - -#if defined(VALIDATE_ARENA_TEST) - ValidateArena(pArena); -#endif - - return bResult; -} - - -#if defined(VALIDATE_ARENA_TEST) - -IMG_UINT32 ValidateArena(RA_ARENA *pArena) -{ - BT* pSegment; - RESOURCE_DESCRIPTOR eNextSpan; - - pSegment = pArena->pHeadSegment; - - if (pSegment == IMG_NULL) - { - return 0; - } - - if (pSegment->eResourceType == IMPORTED_RESOURCE_TYPE) - { - PVR_ASSERT(pSegment->eResourceSpan == IMPORTED_RESOURCE_SPAN_START); - - while (pSegment->pNextSegment) - { - eNextSpan = pSegment->pNextSegment->eResourceSpan; - - switch (pSegment->eResourceSpan) - { - case IMPORTED_RESOURCE_SPAN_LIVE: - - if (!((eNextSpan == IMPORTED_RESOURCE_SPAN_LIVE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_FREE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_END))) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - case IMPORTED_RESOURCE_SPAN_FREE: - - if (!((eNextSpan == IMPORTED_RESOURCE_SPAN_LIVE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_END))) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - case IMPORTED_RESOURCE_SPAN_END: - - if ((eNextSpan == IMPORTED_RESOURCE_SPAN_LIVE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_FREE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_END)) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - - case IMPORTED_RESOURCE_SPAN_START: - - if (!((eNextSpan == IMPORTED_RESOURCE_SPAN_LIVE) || - (eNextSpan == IMPORTED_RESOURCE_SPAN_FREE))) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - default: - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - break; - } - pSegment = pSegment->pNextSegment; - } - } - else if (pSegment->eResourceType == NON_IMPORTED_RESOURCE_TYPE) - { - PVR_ASSERT((pSegment->eResourceSpan == RESOURCE_SPAN_FREE) || (pSegment->eResourceSpan == RESOURCE_SPAN_LIVE)); - - while (pSegment->pNextSegment) - { - eNextSpan = pSegment->pNextSegment->eResourceSpan; - - switch (pSegment->eResourceSpan) - { - case RESOURCE_SPAN_LIVE: - - if (!((eNextSpan == RESOURCE_SPAN_FREE) || - (eNextSpan == RESOURCE_SPAN_LIVE))) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - case RESOURCE_SPAN_FREE: - - if (!((eNextSpan == RESOURCE_SPAN_FREE) || - (eNextSpan == RESOURCE_SPAN_LIVE))) - { - - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - } - break; - - default: - PVR_DPF((PVR_DBG_ERROR, "ValidateArena ERROR: adjacent boundary tags %d (base=0x%x) and %d (base=0x%x) are incompatible (arena: %s)", - pSegment->ui32BoundaryTagID, pSegment->base, pSegment->pNextSegment->ui32BoundaryTagID, pSegment->pNextSegment->base, pArena->name)); - - PVR_DBG_BREAK; - break; - } - pSegment = pSegment->pNextSegment; - } - - } - else - { - PVR_DPF ((PVR_DBG_ERROR,"ValidateArena ERROR: pSegment->eResourceType unrecognized")); - - PVR_DBG_BREAK; - } - - return 0; -} - -#endif - - -IMG_VOID -RA_Free (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_BOOL bFreeBackingStore) -{ - BT *pBT; - - PVR_ASSERT (pArena != IMG_NULL); - - if (pArena == IMG_NULL) - { - PVR_DPF ((PVR_DBG_ERROR,"RA_Free: invalid parameter - pArena")); - return; - } - -#ifdef USE_BM_FREESPACE_CHECK - CheckBMFreespace(); -#endif - - PVR_DPF ((PVR_DBG_MESSAGE, - "RA_Free: name='%s', base=0x%x", pArena->name, base)); - - pBT = (BT *) HASH_Remove (pArena->pSegmentHash, base); - PVR_ASSERT (pBT != IMG_NULL); - - if (pBT) - { - PVR_ASSERT (pBT->base == base); - -#ifdef RA_STATS - pArena->sStatistics.uCumulativeFrees++; -#endif - -#ifdef USE_BM_FREESPACE_CHECK -{ - IMG_BYTE* p; - IMG_BYTE* endp; - - p = (IMG_BYTE*)pBT->base + SysGetDevicePhysOffset(); - endp = (IMG_BYTE*)((IMG_UINT32)(p + pBT->uSize)); - while ((IMG_UINT32)p & 3) - { - *p++ = 0xAA; - } - while (p < (IMG_BYTE*)((IMG_UINT32)endp & 0xfffffffc)) - { - *(IMG_UINT32*)p = 0xAAAAAAAA; - p += sizeof(IMG_UINT32); - } - while (p < endp) - { - *p++ = 0xAA; - } - PVR_DPF((PVR_DBG_MESSAGE,"BM_FREESPACE_CHECK: RA_Free Cleared %08X to %08X (size=0x%x)",(IMG_BYTE*)pBT->base + SysGetDevicePhysOffset(),endp-1,pBT->uSize)); -} -#endif - _FreeBT (pArena, pBT, bFreeBackingStore); - } -} - - -IMG_BOOL RA_GetNextLiveSegment(IMG_HANDLE hArena, RA_SEGMENT_DETAILS *psSegDetails) -{ - BT *pBT; - - if (psSegDetails->hSegment) - { - pBT = (BT *)psSegDetails->hSegment; - } - else - { - RA_ARENA *pArena = (RA_ARENA *)hArena; - - pBT = pArena->pHeadSegment; - } - - while (pBT != IMG_NULL) - { - if (pBT->type == btt_live) - { - psSegDetails->uiSize = pBT->uSize; - psSegDetails->sCpuPhyAddr.uiAddr = pBT->base; - psSegDetails->hSegment = (IMG_HANDLE)pBT->pNextSegment; - - return IMG_TRUE; - } - - pBT = pBT->pNextSegment; - } - - psSegDetails->uiSize = 0; - psSegDetails->sCpuPhyAddr.uiAddr = 0; - psSegDetails->hSegment = (IMG_HANDLE)IMG_UNDEF; - - return IMG_FALSE; -} - - -#ifdef USE_BM_FREESPACE_CHECK -RA_ARENA* pJFSavedArena = IMG_NULL; - -IMG_VOID CheckBMFreespace(IMG_VOID) -{ - BT *pBT; - IMG_BYTE* p; - IMG_BYTE* endp; - - if (pJFSavedArena != IMG_NULL) - { - for (pBT=pJFSavedArena->pHeadSegment; pBT!=IMG_NULL; pBT=pBT->pNextSegment) - { - if (pBT->type == btt_free) - { - p = (IMG_BYTE*)pBT->base + SysGetDevicePhysOffset(); - endp = (IMG_BYTE*)((IMG_UINT32)(p + pBT->uSize) & 0xfffffffc); - - while ((IMG_UINT32)p & 3) - { - if (*p++ != 0xAA) - { - fprintf(stderr,"BM_FREESPACE_CHECK: Blank space at %08X has changed to 0x%x\n",p,*(IMG_UINT32*)p); - for (;;); - break; - } - } - while (p < endp) - { - if (*(IMG_UINT32*)p != 0xAAAAAAAA) - { - fprintf(stderr,"BM_FREESPACE_CHECK: Blank space at %08X has changed to 0x%x\n",p,*(IMG_UINT32*)p); - for (;;); - break; - } - p += 4; - } - } - } - } -} -#endif - - -#if (defined(CONFIG_PROC_FS) && defined(DEBUG)) || defined (RA_STATS) -static IMG_CHAR * -_BTType (IMG_INT eType) -{ - switch (eType) - { - case btt_span: return "span"; - case btt_free: return "free"; - case btt_live: return "live"; - } - return "junk"; -} -#endif - -#if defined(ENABLE_RA_DUMP) -IMG_VOID -RA_Dump (RA_ARENA *pArena) -{ - BT *pBT; - PVR_ASSERT (pArena != IMG_NULL); - PVR_DPF ((PVR_DBG_MESSAGE,"Arena '%s':", pArena->name)); - PVR_DPF ((PVR_DBG_MESSAGE," alloc=%08X free=%08X handle=%08X quantum=%d", - pArena->pImportAlloc, pArena->pImportFree, pArena->pImportHandle, - pArena->uQuantum)); - PVR_DPF ((PVR_DBG_MESSAGE," segment Chain:")); - if (pArena->pHeadSegment != IMG_NULL && - pArena->pHeadSegment->pPrevSegment != IMG_NULL) - PVR_DPF ((PVR_DBG_MESSAGE," error: head boundary tag has invalid pPrevSegment")); - if (pArena->pTailSegment != IMG_NULL && - pArena->pTailSegment->pNextSegment != IMG_NULL) - PVR_DPF ((PVR_DBG_MESSAGE," error: tail boundary tag has invalid pNextSegment")); - - for (pBT=pArena->pHeadSegment; pBT!=IMG_NULL; pBT=pBT->pNextSegment) - { - PVR_DPF ((PVR_DBG_MESSAGE,"\tbase=0x%x size=0x%x type=%s ref=%08X", - (IMG_UINT32) pBT->base, pBT->uSize, _BTType (pBT->type), - pBT->pRef)); - } - -#ifdef HASH_TRACE - HASH_Dump (pArena->pSegmentHash); -#endif -} -#endif - - -#if defined(CONFIG_PROC_FS) && defined(DEBUG) - - -static void RA_ProcSeqShowInfo(struct seq_file *sfile, void* el) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)sfile->private; - RA_ARENA *pArena = (RA_ARENA *)handlers->data; - IMG_INT off = (IMG_INT)el; - - switch (off) - { - case 1: - seq_printf(sfile, "quantum\t\t\t%u\n", pArena->uQuantum); - break; - case 2: - seq_printf(sfile, "import_handle\t\t%08X\n", (IMG_UINT)pArena->pImportHandle); - break; -#ifdef RA_STATS - case 3: - seq_printf(sfile,"span count\t\t%u\n", pArena->sStatistics.uSpanCount); - break; - case 4: - seq_printf(sfile, "live segment count\t%u\n", pArena->sStatistics.uLiveSegmentCount); - break; - case 5: - seq_printf(sfile, "free segment count\t%u\n", pArena->sStatistics.uFreeSegmentCount); - break; - case 6: - seq_printf(sfile, "free resource count\t%u (0x%x)\n", - pArena->sStatistics.uFreeResourceCount, - (IMG_UINT)pArena->sStatistics.uFreeResourceCount); - break; - case 7: - seq_printf(sfile, "total allocs\t\t%u\n", pArena->sStatistics.uCumulativeAllocs); - break; - case 8: - seq_printf(sfile, "total frees\t\t%u\n", pArena->sStatistics.uCumulativeFrees); - break; - case 9: - seq_printf(sfile, "import count\t\t%u\n", pArena->sStatistics.uImportCount); - break; - case 10: - seq_printf(sfile, "export count\t\t%u\n", pArena->sStatistics.uExportCount); - break; -#endif - } - -} - -static void* RA_ProcSeqOff2ElementInfo(struct seq_file * sfile, loff_t off) -{ -#ifdef RA_STATS - if(off <= 9) -#else - if(off <= 1) -#endif - return (void*)(IMG_INT)(off+1); - return 0; -} - -static void RA_ProcSeqShowRegs(struct seq_file *sfile, void* el) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)sfile->private; - RA_ARENA *pArena = (RA_ARENA *)handlers->data; - BT *pBT = (BT*)el; - - if (el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf(sfile, "Arena \"%s\"\nBase Size Type Ref\n", pArena->name); - return; - } - - if (pBT) - { - seq_printf(sfile, "%08x %8x %4s %08x\n", - (IMG_UINT)pBT->base, (IMG_UINT)pBT->uSize, _BTType (pBT->type), - (IMG_UINT)pBT->psMapping); - } -} - -static void* RA_ProcSeqOff2ElementRegs(struct seq_file * sfile, loff_t off) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)sfile->private; - RA_ARENA *pArena = (RA_ARENA *)handlers->data; - BT *pBT = 0; - - if(off == 0) - return PVR_PROC_SEQ_START_TOKEN; - - for (pBT=pArena->pHeadSegment; --off && pBT; pBT=pBT->pNextSegment); - - return (void*)pBT; -} - -#endif - - -#ifdef RA_STATS -PVRSRV_ERROR RA_GetStats(RA_ARENA *pArena, - IMG_CHAR **ppszStr, - IMG_UINT32 *pui32StrLen) -{ - IMG_CHAR *pszStr = *ppszStr; - IMG_UINT32 ui32StrLen = *pui32StrLen; - IMG_INT32 i32Count; - BT *pBT; - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "\nArena '%s':\n", pArena->name); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, " allocCB=%p freeCB=%p handle=%p quantum=%d\n", - pArena->pImportAlloc, - pArena->pImportFree, - pArena->pImportHandle, - pArena->uQuantum); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "span count\t\t%u\n", pArena->sStatistics.uSpanCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "live segment count\t%u\n", pArena->sStatistics.uLiveSegmentCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "free segment count\t%u\n", pArena->sStatistics.uFreeSegmentCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "free resource count\t%u (0x%x)\n", - pArena->sStatistics.uFreeResourceCount, - (IMG_UINT)pArena->sStatistics.uFreeResourceCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "total allocs\t\t%u\n", pArena->sStatistics.uCumulativeAllocs); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "total frees\t\t%u\n", pArena->sStatistics.uCumulativeFrees); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "import count\t\t%u\n", pArena->sStatistics.uImportCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "export count\t\t%u\n", pArena->sStatistics.uExportCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, " segment Chain:\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - - if (pArena->pHeadSegment != IMG_NULL && - pArena->pHeadSegment->pPrevSegment != IMG_NULL) - { - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, " error: head boundary tag has invalid pPrevSegment\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - - if (pArena->pTailSegment != IMG_NULL && - pArena->pTailSegment->pNextSegment != IMG_NULL) - { - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, " error: tail boundary tag has invalid pNextSegment\n"); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - - for (pBT=pArena->pHeadSegment; pBT!=IMG_NULL; pBT=pBT->pNextSegment) - { - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "\tbase=0x%x size=0x%x type=%s ref=%p\n", - (IMG_UINT32) pBT->base, - pBT->uSize, - _BTType(pBT->type), - pBT->psMapping); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - } - - *ppszStr = pszStr; - *pui32StrLen = ui32StrLen; - - return PVRSRV_OK; -} - -PVRSRV_ERROR RA_GetStatsFreeMem(RA_ARENA *pArena, - IMG_CHAR **ppszStr, - IMG_UINT32 *pui32StrLen) -{ - IMG_CHAR *pszStr = *ppszStr; - IMG_UINT32 ui32StrLen = *pui32StrLen; - IMG_INT32 i32Count; - CHECK_SPACE(ui32StrLen); - i32Count = OSSNPrintf(pszStr, 100, "Bytes free: Arena %-30s: %u (0x%x)\n", pArena->name, - pArena->sStatistics.uFreeResourceCount, - pArena->sStatistics.uFreeResourceCount); - UPDATE_SPACE(pszStr, i32Count, ui32StrLen); - *ppszStr = pszStr; - *pui32StrLen = ui32StrLen; - - return PVRSRV_OK; -} -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/common/resman.c b/drivers/staging/cdv/pvr/services4/srvkm/common/resman.c deleted file mode 100644 index 5088c7f..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/common/resman.c +++ /dev/null @@ -1,751 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "resman.h" - -#ifdef __linux__ -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9) -#include -#else -#include -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) -#include -#else -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) -#include -#else -#include -#endif -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) -static DEFINE_MUTEX(lock); -#define DOWN(m) mutex_lock(m) -#define UP(m) mutex_unlock(m) -#else -static DECLARE_MUTEX(lock); -#define DOWN(m) down(m) -#define UP(m) up(m) -#endif - -#define ACQUIRE_SYNC_OBJ do { \ - if (in_interrupt()) { \ - printk("ISR cannot take RESMAN mutex\n"); \ - BUG(); \ - } \ - else DOWN(&lock); \ -} while (0) -#define RELEASE_SYNC_OBJ UP(&lock) - -#else - -#define ACQUIRE_SYNC_OBJ -#define RELEASE_SYNC_OBJ - -#endif - -#define RESMAN_SIGNATURE 0x12345678 - -typedef struct _RESMAN_ITEM_ -{ -#ifdef DEBUG - IMG_UINT32 ui32Signature; -#endif - struct _RESMAN_ITEM_ **ppsThis; - struct _RESMAN_ITEM_ *psNext; - - IMG_UINT32 ui32Flags; - IMG_UINT32 ui32ResType; - - IMG_PVOID pvParam; - IMG_UINT32 ui32Param; - - RESMAN_FREE_FN pfnFreeResource; -} RESMAN_ITEM; - - -typedef struct _RESMAN_CONTEXT_ -{ -#ifdef DEBUG - IMG_UINT32 ui32Signature; -#endif - struct _RESMAN_CONTEXT_ **ppsThis; - struct _RESMAN_CONTEXT_ *psNext; - - PVRSRV_PER_PROCESS_DATA *psPerProc; - - RESMAN_ITEM *psResItemList; - -} RESMAN_CONTEXT; - - -typedef struct -{ - RESMAN_CONTEXT *psContextList; - -} RESMAN_LIST, *PRESMAN_LIST; - - -PRESMAN_LIST gpsResList = IMG_NULL; - -#include "lists.h" - -static IMPLEMENT_LIST_ANY_VA(RESMAN_ITEM) -static IMPLEMENT_LIST_ANY_VA_2(RESMAN_ITEM, IMG_BOOL, IMG_FALSE) -static IMPLEMENT_LIST_INSERT(RESMAN_ITEM) -static IMPLEMENT_LIST_REMOVE(RESMAN_ITEM) -static IMPLEMENT_LIST_REVERSE(RESMAN_ITEM) - -static IMPLEMENT_LIST_REMOVE(RESMAN_CONTEXT) -static IMPLEMENT_LIST_INSERT(RESMAN_CONTEXT) - - -#define PRINT_RESLIST(x, y, z) - -static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback, IMG_BOOL bForceCleanup); - -static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, - IMG_UINT32 ui32SearchCriteria, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bExecuteCallback); - - -#ifdef DEBUG - static IMG_VOID ValidateResList(PRESMAN_LIST psResList); - #define VALIDATERESLIST() ValidateResList(gpsResList) -#else - #define VALIDATERESLIST() -#endif - - - - - - -PVRSRV_ERROR ResManInit(IMG_VOID) -{ - if (gpsResList == IMG_NULL) - { - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(*gpsResList), - (IMG_VOID **)&gpsResList, IMG_NULL, - "Resource Manager List") != PVRSRV_OK) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - gpsResList->psContextList = IMG_NULL; - - - VALIDATERESLIST(); - } - - return PVRSRV_OK; -} - - -IMG_VOID ResManDeInit(IMG_VOID) -{ - if (gpsResList != IMG_NULL) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(*gpsResList), gpsResList, IMG_NULL); - gpsResList = IMG_NULL; - } -} - - -PVRSRV_ERROR PVRSRVResManConnect(IMG_HANDLE hPerProc, - PRESMAN_CONTEXT *phResManContext) -{ - PVRSRV_ERROR eError; - PRESMAN_CONTEXT psResManContext; - - - ACQUIRE_SYNC_OBJ; - - - VALIDATERESLIST(); - - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(*psResManContext), - (IMG_VOID **)&psResManContext, IMG_NULL, - "Resource Manager Context"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRVResManConnect: ERROR allocating new RESMAN context struct")); - - - VALIDATERESLIST(); - - - RELEASE_SYNC_OBJ; - - return eError; - } - -#ifdef DEBUG - psResManContext->ui32Signature = RESMAN_SIGNATURE; -#endif - psResManContext->psResItemList = IMG_NULL; - psResManContext->psPerProc = hPerProc; - - - List_RESMAN_CONTEXT_Insert(&gpsResList->psContextList, psResManContext); - - - VALIDATERESLIST(); - - - RELEASE_SYNC_OBJ; - - *phResManContext = psResManContext; - - return PVRSRV_OK; -} - - -IMG_VOID PVRSRVResManDisconnect(PRESMAN_CONTEXT psResManContext, - IMG_BOOL bKernelContext) -{ - - ACQUIRE_SYNC_OBJ; - - - VALIDATERESLIST(); - - - PRINT_RESLIST(gpsResList, psResManContext, IMG_TRUE); - - - - if (!bKernelContext) - { - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_OS_USERMODE_MAPPING, 0, 0, IMG_TRUE); - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DMA_CLIENT_FIFO_DATA, 0, 0, IMG_TRUE); - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_EVENT_OBJECT, 0, 0, IMG_TRUE); - - - - List_RESMAN_ITEM_Reverse(&psResManContext->psResItemList); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_MODIFY_SYNC_OPS, 0, 0, IMG_TRUE); - List_RESMAN_ITEM_Reverse(&psResManContext->psResItemList); - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_HW_RENDER_CONTEXT, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_HW_TRANSFER_CONTEXT, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_HW_2D_CONTEXT, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_TRANSFER_CONTEXT, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_PB_DESC_CREATE_LOCK, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_PB_DESC, 0, 0, IMG_TRUE); - - - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SYNC_INFO, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICECLASSMEM_MAPPING, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_WRAP, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_MAPPING, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_KERNEL_DEVICEMEM_ALLOCATION, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_ALLOCATION, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DEVICEMEM_CONTEXT, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_SHARED_MEM_INFO, 0, 0, IMG_TRUE); - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_SWAPCHAIN_REF, 0, 0, IMG_TRUE); - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_DISPLAYCLASS_DEVICE, 0, 0, IMG_TRUE); - - - FreeResourceByCriteria(psResManContext, RESMAN_CRITERIA_RESTYPE, RESMAN_TYPE_BUFFERCLASS_DEVICE, 0, 0, IMG_TRUE); - } - - - PVR_ASSERT(psResManContext->psResItemList == IMG_NULL); - - - List_RESMAN_CONTEXT_Remove(psResManContext); - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_CONTEXT), psResManContext, IMG_NULL); - - - - - VALIDATERESLIST(); - - - PRINT_RESLIST(gpsResList, psResManContext, IMG_FALSE); - - - RELEASE_SYNC_OBJ; -} - - -PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT psResManContext, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - RESMAN_FREE_FN pfnFreeResource) -{ - PRESMAN_ITEM psNewResItem; - - PVR_ASSERT(psResManContext != IMG_NULL); - PVR_ASSERT(ui32ResType != 0); - - if (psResManContext == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "ResManRegisterRes: invalid parameter - psResManContext")); - return (PRESMAN_ITEM) IMG_NULL; - } - - - ACQUIRE_SYNC_OBJ; - - - VALIDATERESLIST(); - - PVR_DPF((PVR_DBG_MESSAGE, "ResManRegisterRes: register resource " - "Context 0x%x, ResType 0x%x, pvParam 0x%x, ui32Param 0x%x, " - "FreeFunc %08X", - (IMG_UINTPTR_T)psResManContext, - ui32ResType, - (IMG_UINTPTR_T)pvParam, - ui32Param, - (IMG_UINTPTR_T)pfnFreeResource)); - - - if (OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(RESMAN_ITEM), (IMG_VOID **)&psNewResItem, - IMG_NULL, - "Resource Manager Item") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ResManRegisterRes: " - "ERROR allocating new resource item")); - - - RELEASE_SYNC_OBJ; - - return((PRESMAN_ITEM)IMG_NULL); - } - - -#ifdef DEBUG - psNewResItem->ui32Signature = RESMAN_SIGNATURE; -#endif - psNewResItem->ui32ResType = ui32ResType; - psNewResItem->pvParam = pvParam; - psNewResItem->ui32Param = ui32Param; - psNewResItem->pfnFreeResource = pfnFreeResource; - psNewResItem->ui32Flags = 0; - - - List_RESMAN_ITEM_Insert(&psResManContext->psResItemList, psNewResItem); - - - VALIDATERESLIST(); - - - RELEASE_SYNC_OBJ; - - return(psNewResItem); -} - -PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem, IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - - PVR_ASSERT(psResItem != IMG_NULL); - - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_MESSAGE, "ResManFreeResByPtr: NULL ptr - nothing to do")); - return PVRSRV_OK; - } - - PVR_DPF((PVR_DBG_MESSAGE, "ResManFreeResByPtr: freeing resource at %08X", - (IMG_UINTPTR_T)psResItem)); - - - ACQUIRE_SYNC_OBJ; - - - VALIDATERESLIST(); - - - eError = FreeResourceByPtr(psResItem, IMG_TRUE, bForceCleanup); - - - VALIDATERESLIST(); - - - RELEASE_SYNC_OBJ; - - return(eError); -} - - -PVRSRV_ERROR ResManFreeResByCriteria(PRESMAN_CONTEXT psResManContext, - IMG_UINT32 ui32SearchCriteria, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param) -{ - PVRSRV_ERROR eError; - - PVR_ASSERT(psResManContext != IMG_NULL); - - - ACQUIRE_SYNC_OBJ; - - - VALIDATERESLIST(); - - PVR_DPF((PVR_DBG_MESSAGE, "ResManFreeResByCriteria: " - "Context 0x%x, Criteria 0x%x, Type 0x%x, Addr 0x%x, Param 0x%x", - (IMG_UINTPTR_T)psResManContext, ui32SearchCriteria, ui32ResType, - (IMG_UINTPTR_T)pvParam, ui32Param)); - - - eError = FreeResourceByCriteria(psResManContext, ui32SearchCriteria, - ui32ResType, pvParam, ui32Param, - IMG_TRUE); - - - VALIDATERESLIST(); - - - RELEASE_SYNC_OBJ; - - return eError; -} - - -PVRSRV_ERROR ResManDissociateRes(RESMAN_ITEM *psResItem, - PRESMAN_CONTEXT psNewResManContext) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - PVR_ASSERT(psResItem != IMG_NULL); - - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: invalid parameter - psResItem")); - PVR_DBG_BREAK; - return PVRSRV_ERROR_INVALID_PARAMS; - } - -#ifdef DEBUG - PVR_ASSERT(psResItem->ui32Signature == RESMAN_SIGNATURE); -#endif - - if (psNewResManContext != IMG_NULL) - { - - List_RESMAN_ITEM_Remove(psResItem); - - - List_RESMAN_ITEM_Insert(&psNewResManContext->psResItemList, psResItem); - - } - else - { - eError = FreeResourceByPtr(psResItem, IMG_FALSE, CLEANUP_WITH_POLL); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer")); - return eError; - } - } - - return eError; -} - -static IMG_BOOL ResManFindResourceByPtr_AnyVaCb(RESMAN_ITEM *psCurItem, va_list va) -{ - RESMAN_ITEM *psItem; - - psItem = va_arg(va, RESMAN_ITEM*); - - return (IMG_BOOL)(psCurItem == psItem); -} - - -IMG_INTERNAL PVRSRV_ERROR ResManFindResourceByPtr(PRESMAN_CONTEXT psResManContext, - RESMAN_ITEM *psItem) -{ - PVRSRV_ERROR eResult; - - PVR_ASSERT(psResManContext != IMG_NULL); - PVR_ASSERT(psItem != IMG_NULL); - - if ((psItem == IMG_NULL) || (psResManContext == IMG_NULL)) - { - PVR_DPF((PVR_DBG_ERROR, "ResManFindResourceByPtr: invalid parameter")); - PVR_DBG_BREAK; - return PVRSRV_ERROR_INVALID_PARAMS; - } - -#ifdef DEBUG - PVR_ASSERT(psItem->ui32Signature == RESMAN_SIGNATURE); -#endif - - - ACQUIRE_SYNC_OBJ; - - PVR_DPF((PVR_DBG_MESSAGE, - "FindResourceByPtr: psItem=%08X, psItem->psNext=%08X", - (IMG_UINTPTR_T)psItem, (IMG_UINTPTR_T)psItem->psNext)); - - PVR_DPF((PVR_DBG_MESSAGE, - "FindResourceByPtr: Resource Ctx 0x%x, Type 0x%x, Addr 0x%x, " - "Param 0x%x, FnCall %08X, Flags 0x%x", - (IMG_UINTPTR_T)psResManContext, - psItem->ui32ResType, - (IMG_UINTPTR_T)psItem->pvParam, - psItem->ui32Param, - (IMG_UINTPTR_T)psItem->pfnFreeResource, - psItem->ui32Flags)); - - - if(List_RESMAN_ITEM_IMG_BOOL_Any_va(psResManContext->psResItemList, - &ResManFindResourceByPtr_AnyVaCb, - psItem)) - { - eResult = PVRSRV_OK; - } - else - { - eResult = PVRSRV_ERROR_NOT_OWNER; - } - - - RELEASE_SYNC_OBJ; - - return eResult; -} - -static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, - IMG_BOOL bExecuteCallback, - IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - PVR_ASSERT(psItem != IMG_NULL); - - if (psItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - -#ifdef DEBUG - PVR_ASSERT(psItem->ui32Signature == RESMAN_SIGNATURE); -#endif - - PVR_DPF((PVR_DBG_MESSAGE, - "FreeResourceByPtr: psItem=%08X, psItem->psNext=%08X", - (IMG_UINTPTR_T)psItem, (IMG_UINTPTR_T)psItem->psNext)); - - PVR_DPF((PVR_DBG_MESSAGE, - "FreeResourceByPtr: Type 0x%x, Addr 0x%x, " - "Param 0x%x, FnCall %08X, Flags 0x%x", - psItem->ui32ResType, - (IMG_UINTPTR_T)psItem->pvParam, psItem->ui32Param, - (IMG_UINTPTR_T)psItem->pfnFreeResource, psItem->ui32Flags)); - - - List_RESMAN_ITEM_Remove(psItem); - - - - RELEASE_SYNC_OBJ; - - - if (bExecuteCallback) - { - eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param, bForceCleanup); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function")); - } - } - - - ACQUIRE_SYNC_OBJ; - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); - - return(eError); -} - -static IMG_VOID* FreeResourceByCriteria_AnyVaCb(RESMAN_ITEM *psCurItem, va_list va) -{ - IMG_UINT32 ui32SearchCriteria; - IMG_UINT32 ui32ResType; - IMG_PVOID pvParam; - IMG_UINT32 ui32Param; - - ui32SearchCriteria = va_arg(va, IMG_UINT32); - ui32ResType = va_arg(va, IMG_UINT32); - pvParam = va_arg(va, IMG_PVOID); - ui32Param = va_arg(va, IMG_UINT32); - - - if( - - (((ui32SearchCriteria & RESMAN_CRITERIA_RESTYPE) == 0UL) || - (psCurItem->ui32ResType == ui32ResType)) - && - - (((ui32SearchCriteria & RESMAN_CRITERIA_PVOID_PARAM) == 0UL) || - (psCurItem->pvParam == pvParam)) - && - - (((ui32SearchCriteria & RESMAN_CRITERIA_UI32_PARAM) == 0UL) || - (psCurItem->ui32Param == ui32Param)) - ) - { - return psCurItem; - } - else - { - return IMG_NULL; - } -} - -static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psResManContext, - IMG_UINT32 ui32SearchCriteria, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bExecuteCallback) -{ - PRESMAN_ITEM psCurItem; - PVRSRV_ERROR eError = PVRSRV_OK; - - - - while((psCurItem = (PRESMAN_ITEM) - List_RESMAN_ITEM_Any_va(psResManContext->psResItemList, - &FreeResourceByCriteria_AnyVaCb, - ui32SearchCriteria, - ui32ResType, - pvParam, - ui32Param)) != IMG_NULL - && eError == PVRSRV_OK) - { - eError = FreeResourceByPtr(psCurItem, bExecuteCallback, CLEANUP_WITH_POLL); - } - - return eError; -} - - -#ifdef DEBUG -static IMG_VOID ValidateResList(PRESMAN_LIST psResList) -{ - PRESMAN_ITEM psCurItem, *ppsThisItem; - PRESMAN_CONTEXT psCurContext, *ppsThisContext; - - - if (psResList == IMG_NULL) - { - PVR_DPF((PVR_DBG_MESSAGE, "ValidateResList: resman not initialised yet")); - return; - } - - psCurContext = psResList->psContextList; - ppsThisContext = &psResList->psContextList; - - - while(psCurContext != IMG_NULL) - { - - PVR_ASSERT(psCurContext->ui32Signature == RESMAN_SIGNATURE); - if (psCurContext->ppsThis != ppsThisContext) - { - PVR_DPF((PVR_DBG_WARNING, - "psCC=%08X psCC->ppsThis=%08X psCC->psNext=%08X ppsTC=%08X", - (IMG_UINTPTR_T)psCurContext, - (IMG_UINTPTR_T)psCurContext->ppsThis, - (IMG_UINTPTR_T)psCurContext->psNext, - (IMG_UINTPTR_T)ppsThisContext)); - PVR_ASSERT(psCurContext->ppsThis == ppsThisContext); - } - - - psCurItem = psCurContext->psResItemList; - ppsThisItem = &psCurContext->psResItemList; - while(psCurItem != IMG_NULL) - { - - PVR_ASSERT(psCurItem->ui32Signature == RESMAN_SIGNATURE); - if (psCurItem->ppsThis != ppsThisItem) - { - PVR_DPF((PVR_DBG_WARNING, - "psCurItem=%08X psCurItem->ppsThis=%08X psCurItem->psNext=%08X ppsThisItem=%08X", - (IMG_UINTPTR_T)psCurItem, - (IMG_UINTPTR_T)psCurItem->ppsThis, - (IMG_UINTPTR_T)psCurItem->psNext, - (IMG_UINTPTR_T)ppsThisItem)); - PVR_ASSERT(psCurItem->ppsThis == ppsThisItem); - } - - - ppsThisItem = &psCurItem->psNext; - psCurItem = psCurItem->psNext; - } - - - ppsThisContext = &psCurContext->psNext; - psCurContext = psCurContext->psNext; - } -} -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/.gitignore b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/.gitignore deleted file mode 100644 index 2f89523..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.c deleted file mode 100644 index 22b9ffb..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.c +++ /dev/null @@ -1,3696 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "sgxdefs.h" -#include "sgxmmu.h" -#include "services_headers.h" -#include "buffer_manager.h" -#include "hash.h" -#include "ra.h" -#include "pdump_km.h" -#include "sgxapi_km.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#include "mmu.h" -#include "sgxconfig.h" -#include "sgx_bridge_km.h" -#include "pdump_osfunc.h" - -#define UINT32_MAX_VALUE 0xFFFFFFFFUL - -#define SGX_MAX_PD_ENTRIES (1<<(SGX_FEATURE_ADDRESS_SPACE_SIZE - SGX_MMU_PT_SHIFT - SGX_MMU_PAGE_SHIFT)) - -#if defined(FIX_HW_BRN_31620) -#define SGX_MMU_PDE_DUMMY_PAGE (0) -#define SGX_MMU_PTE_DUMMY_PAGE (0) - -#define BRN31620_PT_ADDRESS_RANGE_SHIFT 22 -#define BRN31620_PT_ADDRESS_RANGE_SIZE (1 << BRN31620_PT_ADDRESS_RANGE_SHIFT) - -#define BRN31620_PDE_CACHE_FILL_SHIFT 26 -#define BRN31620_PDE_CACHE_FILL_SIZE (1 << BRN31620_PDE_CACHE_FILL_SHIFT) -#define BRN31620_PDE_CACHE_FILL_MASK (BRN31620_PDE_CACHE_FILL_SIZE - 1) - -#define BRN31620_PDES_PER_CACHE_LINE_SHIFT (BRN31620_PDE_CACHE_FILL_SHIFT - BRN31620_PT_ADDRESS_RANGE_SHIFT) -#define BRN31620_PDES_PER_CACHE_LINE_SIZE (1 << BRN31620_PDES_PER_CACHE_LINE_SHIFT) -#define BRN31620_PDES_PER_CACHE_LINE_MASK (BRN31620_PDES_PER_CACHE_LINE_SIZE - 1) - -#define BRN31620_DUMMY_PAGE_OFFSET (1 * SGX_MMU_PAGE_SIZE) -#define BRN31620_DUMMY_PDE_INDEX (BRN31620_DUMMY_PAGE_OFFSET / BRN31620_PT_ADDRESS_RANGE_SIZE) -#define BRN31620_DUMMY_PTE_INDEX ((BRN31620_DUMMY_PAGE_OFFSET - (BRN31620_DUMMY_PDE_INDEX * BRN31620_PT_ADDRESS_RANGE_SIZE))/SGX_MMU_PAGE_SIZE) - -#define BRN31620_CACHE_FLUSH_SHIFT (32 - BRN31620_PDE_CACHE_FILL_SHIFT) -#define BRN31620_CACHE_FLUSH_SIZE (1 << BRN31620_CACHE_FLUSH_SHIFT) - -#define BRN31620_CACHE_FLUSH_BITS_SHIFT 5 -#define BRN31620_CACHE_FLUSH_BITS_SIZE (1 << BRN31620_CACHE_FLUSH_BITS_SHIFT) -#define BRN31620_CACHE_FLUSH_BITS_MASK (BRN31620_CACHE_FLUSH_BITS_SIZE - 1) - -#define BRN31620_CACHE_FLUSH_INDEX_BITS (BRN31620_CACHE_FLUSH_SHIFT - BRN31620_CACHE_FLUSH_BITS_SHIFT) -#define BRN31620_CACHE_FLUSH_INDEX_SIZE (1 << BRN31620_CACHE_FLUSH_INDEX_BITS) - -#define BRN31620_DUMMY_PAGE_SIGNATURE 0xFEEBEE01 -#endif - -typedef struct _MMU_PT_INFO_ -{ - - IMG_VOID *hPTPageOSMemHandle; - IMG_CPU_VIRTADDR PTPageCpuVAddr; - - - IMG_UINT32 ui32ValidPTECount; -} MMU_PT_INFO; - -struct _MMU_CONTEXT_ -{ - - PVRSRV_DEVICE_NODE *psDeviceNode; - - - IMG_CPU_VIRTADDR pvPDCpuVAddr; - IMG_DEV_PHYADDR sPDDevPAddr; - - IMG_VOID *hPDOSMemHandle; - - - MMU_PT_INFO *apsPTInfoList[SGX_MAX_PD_ENTRIES]; - - PVRSRV_SGXDEV_INFO *psDevInfo; - -#if defined(PDUMP) - IMG_UINT32 ui32PDumpMMUContextID; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - IMG_BOOL bPDumpActive; -#endif -#endif - -#if defined (FIX_HW_BRN_31620) - IMG_UINT32 ui32PDChangeMask[BRN31620_CACHE_FLUSH_INDEX_SIZE]; - IMG_UINT32 ui32PDCacheRangeRefCount[BRN31620_CACHE_FLUSH_SIZE]; - MMU_PT_INFO *apsPTInfoListSave[SGX_MAX_PD_ENTRIES]; -#endif - struct _MMU_CONTEXT_ *psNext; -}; - -struct _MMU_HEAP_ -{ - - MMU_CONTEXT *psMMUContext; - - - - - IMG_UINT32 ui32PDBaseIndex; - - IMG_UINT32 ui32PageTableCount; - - IMG_UINT32 ui32PTETotalUsable; - - IMG_UINT32 ui32PDEPageSizeCtrl; - - - - - IMG_UINT32 ui32DataPageSize; - - IMG_UINT32 ui32DataPageBitWidth; - - IMG_UINT32 ui32DataPageMask; - - - - - IMG_UINT32 ui32PTShift; - - IMG_UINT32 ui32PTBitWidth; - - IMG_UINT32 ui32PTMask; - - IMG_UINT32 ui32PTSize; - - IMG_UINT32 ui32PTNumEntriesAllocated; - - IMG_UINT32 ui32PTNumEntriesUsable; - - - - - IMG_UINT32 ui32PDShift; - - IMG_UINT32 ui32PDBitWidth; - - IMG_UINT32 ui32PDMask; - - - - RA_ARENA *psVMArena; - DEV_ARENA_DESCRIPTOR *psDevArena; -#if defined(PDUMP) - PDUMP_MMU_ATTRIB sMMUAttrib; -#endif -}; - - - -#if defined (SUPPORT_SGX_MMU_DUMMY_PAGE) -#define DUMMY_DATA_PAGE_SIGNATURE 0xDEADBEEF -#endif - -static IMG_VOID -_DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOSFreePT); - -#if defined(PDUMP) -static IMG_VOID -MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SIZE_T uSize, - IMG_BOOL bForUnmap, - IMG_HANDLE hUniqueTag); -#endif - -#define PAGE_TEST 0 -#if PAGE_TEST -static IMG_VOID PageTest(IMG_VOID* pMem, IMG_DEV_PHYADDR sDevPAddr); -#endif - -#define PT_DEBUG 0 -#if PT_DEBUG -static IMG_VOID DumpPT(MMU_PT_INFO *psPTInfoList) -{ - IMG_UINT32 *p = (IMG_UINT32*)psPTInfoList->PTPageCpuVAddr; - IMG_UINT32 i; - - - for(i = 0; i < 1024; i += 8) - { - PVR_DPF((PVR_DBG_WARNING, - "%08X %08X %08X %08X %08X %08X %08X %08X\n", - p[i + 0], p[i + 1], p[i + 2], p[i + 3], - p[i + 4], p[i + 5], p[i + 6], p[i + 7])); - } -} - -static IMG_VOID CheckPT(MMU_PT_INFO *psPTInfoList) -{ - IMG_UINT32 *p = (IMG_UINT32*) psPTInfoList->PTPageCpuVAddr; - IMG_UINT32 i, ui32Count = 0; - - - for(i = 0; i < 1024; i++) - if(p[i] & SGX_MMU_PTE_VALID) - ui32Count++; - - if(psPTInfoList->ui32ValidPTECount != ui32Count) - { - PVR_DPF((PVR_DBG_WARNING, "ui32ValidPTECount: %u ui32Count: %u\n", - psPTInfoList->ui32ValidPTECount, ui32Count)); - DumpPT(psPTInfoList); - BUG(); - } -} -#else -static INLINE IMG_VOID DumpPT(MMU_PT_INFO *psPTInfoList) -{ - PVR_UNREFERENCED_PARAMETER(psPTInfoList); -} - -static INLINE IMG_VOID CheckPT(MMU_PT_INFO *psPTInfoList) -{ - PVR_UNREFERENCED_PARAMETER(psPTInfoList); -} -#endif - - -IMG_BOOL MMU_IsHeapShared(MMU_HEAP* pMMUHeap) -{ - switch(pMMUHeap->psDevArena->DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_SHARED : - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED : - return IMG_TRUE; - case DEVICE_MEMORY_HEAP_PERCONTEXT : - case DEVICE_MEMORY_HEAP_KERNEL : - return IMG_FALSE; - default: - { - PVR_DPF((PVR_DBG_ERROR, "MMU_IsHeapShared: ERROR invalid heap type")); - return IMG_FALSE; - } - } -} - -#ifdef SUPPORT_SGX_MMU_BYPASS -IMG_VOID -EnableHostAccess (MMU_CONTEXT *psMMUContext) -{ - IMG_UINT32 ui32RegVal; - IMG_VOID *pvRegsBaseKM = psMMUContext->psDevInfo->pvRegsBaseKM; - - - - - ui32RegVal = OSReadHWReg(pvRegsBaseKM, EUR_CR_BIF_CTRL); - - OSWriteHWReg(pvRegsBaseKM, - EUR_CR_BIF_CTRL, - ui32RegVal | EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK); - - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK); -} - -IMG_VOID -DisableHostAccess (MMU_CONTEXT *psMMUContext) -{ - IMG_UINT32 ui32RegVal; - IMG_VOID *pvRegsBaseKM = psMMUContext->psDevInfo->pvRegsBaseKM; - - - - - - OSWriteHWReg(pvRegsBaseKM, - EUR_CR_BIF_CTRL, - ui32RegVal & ~EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK); - - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, 0); -} -#endif - - -#if defined(SGX_FEATURE_SYSTEM_CACHE) -static IMG_VOID MMU_InvalidateSystemLevelCache(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - #if defined(SGX_FEATURE_MP) - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_SL; - #else - - PVR_UNREFERENCED_PARAMETER(psDevInfo); - #endif -} -#endif - -IMG_VOID MMU_InvalidateDirectoryCache(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_PD; - #if defined(SGX_FEATURE_SYSTEM_CACHE) - MMU_InvalidateSystemLevelCache(psDevInfo); - #endif -} - - -static IMG_VOID MMU_InvalidatePageTableCache(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_PT; - #if defined(SGX_FEATURE_SYSTEM_CACHE) - MMU_InvalidateSystemLevelCache(psDevInfo); - #endif -} - -#if defined(FIX_HW_BRN_31620) -static IMG_VOID BRN31620InvalidatePageTableEntry(MMU_CONTEXT *psMMUContext, IMG_UINT32 ui32PDIndex, IMG_UINT32 ui32PTIndex, IMG_UINT32 *pui32PTE) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = psMMUContext->psDevInfo; - - - if (((ui32PDIndex % (BRN31620_PDE_CACHE_FILL_SIZE/BRN31620_PT_ADDRESS_RANGE_SIZE)) == BRN31620_DUMMY_PDE_INDEX) - && (ui32PTIndex == BRN31620_DUMMY_PTE_INDEX)) - { - *pui32PTE = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_DUMMY_PAGE - | SGX_MMU_PTE_READONLY - | SGX_MMU_PTE_VALID; - } - else - { - *pui32PTE = 0; - } -} - -static IMG_BOOL BRN31620FreePageTable(MMU_HEAP *psMMUHeap, IMG_UINT32 ui32PDIndex) -{ - MMU_CONTEXT *psMMUContext = psMMUHeap->psMMUContext; - PVRSRV_SGXDEV_INFO *psDevInfo = psMMUContext->psDevInfo; - IMG_UINT32 ui32PDCacheLine = ui32PDIndex >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; - IMG_UINT32 bFreePTs = IMG_FALSE; - IMG_UINT32 *pui32Tmp; - - PVR_ASSERT(psMMUHeap != IMG_NULL); - - - PVR_ASSERT(psMMUContext->apsPTInfoListSave[ui32PDIndex] == IMG_NULL); - - psMMUContext->apsPTInfoListSave[ui32PDIndex] = psMMUContext->apsPTInfoList[ui32PDIndex]; - psMMUContext->apsPTInfoList[ui32PDIndex] = IMG_NULL; - - - if (--psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine] == 0) - { - IMG_UINT32 i; - IMG_UINT32 ui32PDIndexStart = ui32PDCacheLine * BRN31620_PDES_PER_CACHE_LINE_SIZE; - IMG_UINT32 ui32PDIndexEnd = ui32PDIndexStart + BRN31620_PDES_PER_CACHE_LINE_SIZE; - IMG_UINT32 ui32PDBitMaskIndex, ui32PDBitMaskShift; - - - for (i=ui32PDIndexStart;iapsPTInfoList[i] = psMMUContext->apsPTInfoListSave[i]; - psMMUContext->apsPTInfoListSave[i] = IMG_NULL; - _DeferredFreePageTable(psMMUHeap, i - psMMUHeap->ui32PDBaseIndex, IMG_TRUE); - } - - ui32PDBitMaskIndex = ui32PDCacheLine >> BRN31620_CACHE_FLUSH_BITS_SHIFT; - ui32PDBitMaskShift = ui32PDCacheLine & BRN31620_CACHE_FLUSH_BITS_MASK; - - - if (MMU_IsHeapShared(psMMUHeap)) - { - - MMU_CONTEXT *psMMUContextWalker = (MMU_CONTEXT*) psMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; - - while(psMMUContextWalker) - { - psMMUContextWalker->ui32PDChangeMask[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; - - - pui32Tmp = (IMG_UINT32 *) psMMUContextWalker->pvPDCpuVAddr; - pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX] = (psDevInfo->sBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_DUMMY_PAGE - | SGX_MMU_PDE_VALID; - - PDUMPCOMMENT("BRN31620 Re-wire dummy PT due to releasing PT allocation block"); - PDUMPPDENTRIES(&psMMUHeap->sMMUAttrib, psMMUContextWalker->hPDOSMemHandle, (IMG_VOID*)&pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - psMMUContextWalker = psMMUContextWalker->psNext; - } - } - else - { - psMMUContext->ui32PDChangeMask[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; - - - pui32Tmp = (IMG_UINT32 *) psMMUContext->pvPDCpuVAddr; - pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX] = (psDevInfo->sBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_DUMMY_PAGE - | SGX_MMU_PDE_VALID; - - PDUMPCOMMENT("BRN31620 Re-wire dummy PT due to releasing PT allocation block"); - PDUMPPDENTRIES(&psMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32Tmp[ui32PDIndexStart + BRN31620_DUMMY_PDE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } - - bFreePTs = IMG_TRUE; - } - - return bFreePTs; -} -#endif - -static IMG_BOOL -_AllocPageTableMemory (MMU_HEAP *pMMUHeap, - MMU_PT_INFO *psPTInfoList, - IMG_DEV_PHYADDR *psDevPAddr) -{ - IMG_DEV_PHYADDR sDevPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - - - - - if(pMMUHeap->psDevArena->psDeviceMemoryHeapInfo->psLocalDevMemArena == IMG_NULL) - { - - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - pMMUHeap->ui32PTSize, - SGX_MMU_PAGE_SIZE, - (IMG_VOID **)&psPTInfoList->PTPageCpuVAddr, - &psPTInfoList->hPTPageOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "_AllocPageTableMemory: ERROR call to OSAllocPages failed")); - return IMG_FALSE; - } - - - if(psPTInfoList->PTPageCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(psPTInfoList->hPTPageOSMemHandle, - psPTInfoList->PTPageCpuVAddr); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(psPTInfoList->hPTPageOSMemHandle, 0); - } - - sDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - } - else - { - IMG_SYS_PHYADDR sSysPAddr; - - - - - - if(RA_Alloc(pMMUHeap->psDevArena->psDeviceMemoryHeapInfo->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "_AllocPageTableMemory: ERROR call to RA_Alloc failed")); - return IMG_FALSE; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - - psPTInfoList->PTPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psPTInfoList->hPTPageOSMemHandle); - if(!psPTInfoList->PTPageCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "_AllocPageTableMemory: ERROR failed to map page tables")); - return IMG_FALSE; - } - - - sDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - #if PAGE_TEST - PageTest(psPTInfoList->PTPageCpuVAddr, sDevPAddr); - #endif - } - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - { - IMG_UINT32 *pui32Tmp; - IMG_UINT32 i; - - pui32Tmp = (IMG_UINT32*)psPTInfoList->PTPageCpuVAddr; - - for(i=0; iui32PTNumEntriesUsable; i++) - { - pui32Tmp[i] = (pMMUHeap->psMMUContext->psDevInfo->sDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; - } - - for(; iui32PTNumEntriesAllocated; i++) - { - pui32Tmp[i] = 0; - } - } -#else - - OSMemSet(psPTInfoList->PTPageCpuVAddr, 0, pMMUHeap->ui32PTSize); -#endif - -#if defined(PDUMP) - { - IMG_UINT32 ui32Flags = 0; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - ui32Flags |= ( MMU_IsHeapShared(pMMUHeap) ) ? PDUMP_FLAGS_PERSISTENT : 0; -#endif - - PDUMPMALLOCPAGETABLE(&pMMUHeap->psMMUContext->psDeviceNode->sDevId, psPTInfoList->hPTPageOSMemHandle, 0, psPTInfoList->PTPageCpuVAddr, pMMUHeap->ui32PTSize, ui32Flags, PDUMP_PT_UNIQUETAG); - - PDUMPMEMPTENTRIES(&pMMUHeap->sMMUAttrib, psPTInfoList->hPTPageOSMemHandle, psPTInfoList->PTPageCpuVAddr, pMMUHeap->ui32PTSize, ui32Flags, IMG_TRUE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } -#endif - - - *psDevPAddr = sDevPAddr; - - return IMG_TRUE; -} - - -static IMG_VOID -_FreePageTableMemory (MMU_HEAP *pMMUHeap, MMU_PT_INFO *psPTInfoList) -{ - - - - - if(pMMUHeap->psDevArena->psDeviceMemoryHeapInfo->psLocalDevMemArena == IMG_NULL) - { - - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - pMMUHeap->ui32PTSize, - psPTInfoList->PTPageCpuVAddr, - psPTInfoList->hPTPageOSMemHandle); - } - else - { - IMG_SYS_PHYADDR sSysPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - - - sCpuPAddr = OSMapLinToCPUPhys(psPTInfoList->hPTPageOSMemHandle, - psPTInfoList->PTPageCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr (sCpuPAddr); - - - - OSUnMapPhysToLin(psPTInfoList->PTPageCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psPTInfoList->hPTPageOSMemHandle); - - - - - RA_Free (pMMUHeap->psDevArena->psDeviceMemoryHeapInfo->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - } -} - - - -static IMG_VOID -_DeferredFreePageTable (MMU_HEAP *pMMUHeap, IMG_UINT32 ui32PTIndex, IMG_BOOL bOSFreePT) -{ - IMG_UINT32 *pui32PDEntry; - IMG_UINT32 i; - IMG_UINT32 ui32PDIndex; - SYS_DATA *psSysData; - MMU_PT_INFO **ppsPTInfoList; - - SysAcquireData(&psSysData); - - - ui32PDIndex = pMMUHeap->psDevArena->BaseDevVAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; - - { -#if PT_DEBUG - if(ppsPTInfoList[ui32PTIndex] && ppsPTInfoList[ui32PTIndex]->ui32ValidPTECount > 0) - { - DumpPT(ppsPTInfoList[ui32PTIndex]); - - } -#endif - - - PVR_ASSERT(ppsPTInfoList[ui32PTIndex] == IMG_NULL || ppsPTInfoList[ui32PTIndex]->ui32ValidPTECount == 0); - } - -#if defined(PDUMP) - { - IMG_UINT32 ui32Flags = 0; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - ui32Flags |= ( MMU_IsHeapShared(pMMUHeap) ) ? PDUMP_FLAGS_PERSISTENT : 0; -#endif - - PDUMPCOMMENT("Free page table (page count == %08X)", pMMUHeap->ui32PageTableCount); - if(ppsPTInfoList[ui32PTIndex] && ppsPTInfoList[ui32PTIndex]->PTPageCpuVAddr) - { - PDUMPFREEPAGETABLE(&pMMUHeap->psMMUContext->psDeviceNode->sDevId, ppsPTInfoList[ui32PTIndex]->hPTPageOSMemHandle, ppsPTInfoList[ui32PTIndex]->PTPageCpuVAddr, pMMUHeap->ui32PTSize, ui32Flags, PDUMP_PT_UNIQUETAG); - } - } -#endif - - switch(pMMUHeap->psDevArena->DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_SHARED : - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED : - { - - MMU_CONTEXT *psMMUContext = (MMU_CONTEXT*)pMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; - - while(psMMUContext) - { - - pui32PDEntry = (IMG_UINT32*)psMMUContext->pvPDCpuVAddr; - pui32PDEntry += ui32PDIndex; - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - pui32PDEntry[ui32PTIndex] = (psMMUContext->psDevInfo->sDummyPTDevPAddr.uiAddr - >>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_VALID; -#else - - if(bOSFreePT) - { - pui32PDEntry[ui32PTIndex] = 0; - } -#endif - #if defined(PDUMP) - - #if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if(psMMUContext->bPDumpActive) - #endif - { - PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[ui32PTIndex], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } - #endif - - psMMUContext = psMMUContext->psNext; - } - break; - } - case DEVICE_MEMORY_HEAP_PERCONTEXT : - case DEVICE_MEMORY_HEAP_KERNEL : - { - - pui32PDEntry = (IMG_UINT32*)pMMUHeap->psMMUContext->pvPDCpuVAddr; - pui32PDEntry += ui32PDIndex; - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - pui32PDEntry[ui32PTIndex] = (pMMUHeap->psMMUContext->psDevInfo->sDummyPTDevPAddr.uiAddr - >>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_VALID; -#else - - if(bOSFreePT) - { - pui32PDEntry[ui32PTIndex] = 0; - } -#endif - - - PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, pMMUHeap->psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[ui32PTIndex], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, "_DeferredFreePagetable: ERROR invalid heap type")); - return; - } - } - - - if(ppsPTInfoList[ui32PTIndex] != IMG_NULL) - { - if(ppsPTInfoList[ui32PTIndex]->PTPageCpuVAddr != IMG_NULL) - { - IMG_PUINT32 pui32Tmp; - - pui32Tmp = (IMG_UINT32*)ppsPTInfoList[ui32PTIndex]->PTPageCpuVAddr; - - - for(i=0; - (iui32PTETotalUsable) && (iui32PTNumEntriesUsable); - i++) - { - - pui32Tmp[i] = 0; - } - - - - if(bOSFreePT) - { - _FreePageTableMemory(pMMUHeap, ppsPTInfoList[ui32PTIndex]); - } - - - - - pMMUHeap->ui32PTETotalUsable -= i; - } - else - { - - pMMUHeap->ui32PTETotalUsable -= pMMUHeap->ui32PTNumEntriesUsable; - } - - if(bOSFreePT) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(MMU_PT_INFO), - ppsPTInfoList[ui32PTIndex], - IMG_NULL); - ppsPTInfoList[ui32PTIndex] = IMG_NULL; - } - } - else - { - - pMMUHeap->ui32PTETotalUsable -= pMMUHeap->ui32PTNumEntriesUsable; - } - - PDUMPCOMMENT("Finished free page table (page count == %08X)", pMMUHeap->ui32PageTableCount); -} - -static IMG_VOID -_DeferredFreePageTables (MMU_HEAP *pMMUHeap) -{ - IMG_UINT32 i; -#if defined(FIX_HW_BRN_31620) - MMU_CONTEXT *psMMUContext = pMMUHeap->psMMUContext; - IMG_BOOL bInvalidateDirectoryCache = IMG_FALSE; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 *pui32Tmp; - IMG_UINT32 j; -#endif -#if defined(PDUMP) - PDUMPCOMMENT("Free PTs (MMU Context ID == %u, PDBaseIndex == %u, PT count == 0x%x)", - pMMUHeap->psMMUContext->ui32PDumpMMUContextID, - pMMUHeap->ui32PDBaseIndex, - pMMUHeap->ui32PageTableCount); -#endif -#if defined(FIX_HW_BRN_31620) - for(i=0; iui32PageTableCount; i++) - { - ui32PDIndex = (pMMUHeap->ui32PDBaseIndex + i); - - if (psMMUContext->apsPTInfoList[ui32PDIndex]) - { - if (psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr) - { - - for (j=0;japsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; - BRN31620InvalidatePageTableEntry(psMMUContext, ui32PDIndex, j, &pui32Tmp[j]); - } - } - - if (BRN31620FreePageTable(pMMUHeap, ui32PDIndex) == IMG_TRUE) - { - bInvalidateDirectoryCache = IMG_TRUE; - } - } - } - - - if (bInvalidateDirectoryCache) - { - MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); - } - else - { - MMU_InvalidatePageTableCache(pMMUHeap->psMMUContext->psDevInfo); - } -#else - for(i=0; iui32PageTableCount; i++) - { - _DeferredFreePageTable(pMMUHeap, i, IMG_TRUE); - } - MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); -#endif -} - - -static IMG_BOOL -_DeferredAllocPagetables(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT32 ui32Size) -{ - IMG_UINT32 ui32PageTableCount; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 i; - IMG_UINT32 *pui32PDEntry; - MMU_PT_INFO **ppsPTInfoList; - SYS_DATA *psSysData; - IMG_DEV_VIRTADDR sHighDevVAddr; -#if defined(FIX_HW_BRN_31620) - IMG_BOOL bFlushSystemCache = IMG_FALSE; - IMG_BOOL bSharedPT = IMG_FALSE; - IMG_DEV_VIRTADDR sDevVAddrRequestStart; - IMG_DEV_VIRTADDR sDevVAddrRequestEnd; - IMG_UINT32 ui32PDRequestStart; - IMG_UINT32 ui32PDRequestEnd; - IMG_UINT32 ui32ModifiedCachelines[BRN31620_CACHE_FLUSH_INDEX_SIZE]; -#endif - - -#if SGX_FEATURE_ADDRESS_SPACE_SIZE < 32 - PVR_ASSERT(DevVAddr.uiAddr < (1<> pMMUHeap->ui32PDShift; - - - - if((UINT32_MAX_VALUE - DevVAddr.uiAddr) - < (ui32Size + pMMUHeap->ui32DataPageMask + pMMUHeap->ui32PTMask)) - { - - sHighDevVAddr.uiAddr = UINT32_MAX_VALUE; - } - else - { - sHighDevVAddr.uiAddr = DevVAddr.uiAddr - + ui32Size - + pMMUHeap->ui32DataPageMask - + pMMUHeap->ui32PTMask; - } - - ui32PageTableCount = sHighDevVAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - if (ui32PageTableCount == 0) - ui32PageTableCount = 1024; - -#if defined(FIX_HW_BRN_31620) - for (i=0;i> pMMUHeap->ui32PDShift; - ui32PageTableCount = sHighDevVAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - if (ui32PageTableCount == 0) - ui32PageTableCount = 1024; -#endif - - ui32PageTableCount -= ui32PDIndex; - - - pui32PDEntry = (IMG_UINT32*)pMMUHeap->psMMUContext->pvPDCpuVAddr; - pui32PDEntry += ui32PDIndex; - - - ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; - -#if defined(PDUMP) - { - IMG_UINT32 ui32Flags = 0; - - - if( MMU_IsHeapShared(pMMUHeap) ) - { - ui32Flags |= PDUMP_FLAGS_CONTINUOUS; - } - PDUMPCOMMENTWITHFLAGS(ui32Flags, "Alloc PTs (MMU Context ID == %u, PDBaseIndex == %u, Size == 0x%x)", - pMMUHeap->psMMUContext->ui32PDumpMMUContextID, - pMMUHeap->ui32PDBaseIndex, - ui32Size); - PDUMPCOMMENTWITHFLAGS(ui32Flags, "Alloc page table (page count == %08X)", ui32PageTableCount); - PDUMPCOMMENTWITHFLAGS(ui32Flags, "Page directory mods (page count == %08X)", ui32PageTableCount); - } -#endif - - for(i=0; ipsMMUContext->apsPTInfoListSave[ui32PDIndex + i]) - { - - if (((ui32PDIndex + i) >= ui32PDRequestStart) && ((ui32PDIndex + i) <= ui32PDRequestEnd)) - { - IMG_UINT32 ui32PDCacheLine = (ui32PDIndex + i) >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; - - ppsPTInfoList[i] = pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i]; - pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i] = IMG_NULL; - - pMMUHeap->psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine]++; - } - } - else - { -#endif - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (MMU_PT_INFO), - (IMG_VOID **)&ppsPTInfoList[i], IMG_NULL, - "MMU Page Table Info"); - if (ppsPTInfoList[i] == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "_DeferredAllocPagetables: ERROR call to OSAllocMem failed")); - return IMG_FALSE; - } - OSMemSet (ppsPTInfoList[i], 0, sizeof(MMU_PT_INFO)); -#if defined(FIX_HW_BRN_31620) - } -#endif - } -#if defined(FIX_HW_BRN_31620) - - if (ppsPTInfoList[i]) - { -#endif - if(ppsPTInfoList[i]->hPTPageOSMemHandle == IMG_NULL - && ppsPTInfoList[i]->PTPageCpuVAddr == IMG_NULL) - { - IMG_DEV_PHYADDR sDevPAddr; -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - IMG_UINT32 *pui32Tmp; - IMG_UINT32 j; -#else -#if !defined(FIX_HW_BRN_31620) - - PVR_ASSERT(pui32PDEntry[i] == 0); -#endif -#endif - if(_AllocPageTableMemory (pMMUHeap, ppsPTInfoList[i], &sDevPAddr) != IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "_DeferredAllocPagetables: ERROR call to _AllocPageTableMemory failed")); - return IMG_FALSE; - } -#if defined(FIX_HW_BRN_31620) - bFlushSystemCache = IMG_TRUE; - - { - IMG_UINT32 ui32PD; - IMG_UINT32 ui32PDCacheLine; - IMG_UINT32 ui32PDBitMaskIndex; - IMG_UINT32 ui32PDBitMaskShift; - - ui32PD = ui32PDIndex + i; - ui32PDCacheLine = ui32PD >> BRN31620_PDES_PER_CACHE_LINE_SHIFT; - ui32PDBitMaskIndex = ui32PDCacheLine >> BRN31620_CACHE_FLUSH_BITS_SHIFT; - ui32PDBitMaskShift = ui32PDCacheLine & BRN31620_CACHE_FLUSH_BITS_MASK; - ui32ModifiedCachelines[ui32PDBitMaskIndex] |= 1 << ui32PDBitMaskShift; - - - if ((pMMUHeap->ui32PDBaseIndex + pMMUHeap->ui32PageTableCount) < (ui32PD + 1)) - { - pMMUHeap->ui32PageTableCount = (ui32PD + 1) - pMMUHeap->ui32PDBaseIndex; - } - - if (((ui32PDIndex + i) >= ui32PDRequestStart) && ((ui32PDIndex + i) <= ui32PDRequestEnd)) - { - pMMUHeap->psMMUContext->ui32PDCacheRangeRefCount[ui32PDCacheLine]++; - } - } -#endif - switch(pMMUHeap->psDevArena->DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_SHARED : - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED : - { - - MMU_CONTEXT *psMMUContext = (MMU_CONTEXT*)pMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; - - while(psMMUContext) - { - - pui32PDEntry = (IMG_UINT32*)psMMUContext->pvPDCpuVAddr; - pui32PDEntry += ui32PDIndex; - - - pui32PDEntry[i] = (sDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | pMMUHeap->ui32PDEPageSizeCtrl - | SGX_MMU_PDE_VALID; - #if defined(PDUMP) - - #if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if(psMMUContext->bPDumpActive) - #endif - { - - PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } - #endif - - psMMUContext = psMMUContext->psNext; - } -#if defined(FIX_HW_BRN_31620) - bSharedPT = IMG_TRUE; -#endif - break; - } - case DEVICE_MEMORY_HEAP_PERCONTEXT : - case DEVICE_MEMORY_HEAP_KERNEL : - { - - pui32PDEntry[i] = (sDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | pMMUHeap->ui32PDEPageSizeCtrl - | SGX_MMU_PDE_VALID; - - - - PDUMPPDENTRIES(&pMMUHeap->sMMUAttrib, pMMUHeap->psMMUContext->hPDOSMemHandle, (IMG_VOID*)&pui32PDEntry[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, "_DeferredAllocPagetables: ERROR invalid heap type")); - return IMG_FALSE; - } - } - -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - - - - - MMU_InvalidateDirectoryCache(pMMUHeap->psMMUContext->psDevInfo); -#endif -#if defined(FIX_HW_BRN_31620) - - if (((ui32PDIndex + i) < ui32PDRequestStart) || ((ui32PDIndex + i) > ui32PDRequestEnd)) - { - pMMUHeap->psMMUContext->apsPTInfoListSave[ui32PDIndex + i] = ppsPTInfoList[i]; - ppsPTInfoList[i] = IMG_NULL; - } -#endif - } - else - { -#if !defined(FIX_HW_BRN_31620) - - PVR_ASSERT(pui32PDEntry[i] != 0); -#endif - } -#if defined(FIX_HW_BRN_31620) - } -#endif - } - - #if defined(SGX_FEATURE_SYSTEM_CACHE) - #if defined(FIX_HW_BRN_31620) - - if (bFlushSystemCache) - { - #endif - - MMU_InvalidateSystemLevelCache(pMMUHeap->psMMUContext->psDevInfo); - #endif - #if defined(FIX_HW_BRN_31620) - } - - - sHighDevVAddr.uiAddr = sHighDevVAddr.uiAddr - 1; - - - if (bFlushSystemCache) - { - MMU_CONTEXT *psMMUContext; - - if (bSharedPT) - { - MMU_CONTEXT *psMMUContext = (MMU_CONTEXT*)pMMUHeap->psMMUContext->psDevInfo->pvMMUContextList; - - while(psMMUContext) - { - for (i=0;iui32PDChangeMask[i] |= ui32ModifiedCachelines[i]; - } - - - psMMUContext = psMMUContext->psNext; - } - } - else - { - for (i=0;ipsMMUContext->ui32PDChangeMask[i] |= ui32ModifiedCachelines[i]; - } - } - - - psMMUContext = pMMUHeap->psMMUContext; - for (i=0;ipsDevInfo; - MMU_PT_INFO *psTempPTInfo = IMG_NULL; - IMG_UINT32 *pui32Tmp; - - ui32PDIndex = (((i * BRN31620_CACHE_FLUSH_BITS_SIZE) + j) * BRN31620_PDES_PER_CACHE_LINE_SIZE) + BRN31620_DUMMY_PDE_INDEX; - - - if (psMMUContext->apsPTInfoList[ui32PDIndex]) - { - psTempPTInfo = psMMUContext->apsPTInfoList[ui32PDIndex]; - } - else - { - psTempPTInfo = psMMUContext->apsPTInfoListSave[ui32PDIndex]; - } - - PVR_ASSERT(psTempPTInfo != IMG_NULL); - - pui32Tmp = (IMG_UINT32 *) psTempPTInfo->PTPageCpuVAddr; - PVR_ASSERT(pui32Tmp != IMG_NULL); - pui32Tmp[BRN31620_DUMMY_PTE_INDEX] = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_DUMMY_PAGE - | SGX_MMU_PTE_READONLY - | SGX_MMU_PTE_VALID; - - PDUMPCOMMENT("BRN31620 Dump PTE for dummy page after wireing up new PT"); - PDUMPMEMPTENTRIES(&pMMUHeap->sMMUAttrib, psTempPTInfo->hPTPageOSMemHandle, (IMG_VOID *) &pui32Tmp[BRN31620_DUMMY_PTE_INDEX], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } - } - } - } - #endif - - return IMG_TRUE; -} - - -#if defined(PDUMP) -IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext) -{ - BM_CONTEXT *pBMContext = hDevMemContext; - PVR_ASSERT(pBMContext); - - return pBMContext->psMMUContext->ui32PDumpMMUContextID; -} - -static IMG_VOID MMU_SetPDumpAttribs(PDUMP_MMU_ATTRIB *psMMUAttrib, - PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_UINT32 ui32DataPageMask, - IMG_UINT32 ui32PTSize) -{ - - psMMUAttrib->sDevId = psDeviceNode->sDevId; - - psMMUAttrib->pszPDRegRegion = IMG_NULL; - psMMUAttrib->ui32DataPageMask = ui32DataPageMask; - - psMMUAttrib->ui32PTEValid = SGX_MMU_PTE_VALID; - psMMUAttrib->ui32PTSize = ui32PTSize; - psMMUAttrib->ui32PTEAlignShift = SGX_MMU_PTE_ADDR_ALIGNSHIFT; - - psMMUAttrib->ui32PDEMask = SGX_MMU_PDE_ADDR_MASK; - psMMUAttrib->ui32PDEAlignShift = SGX_MMU_PDE_ADDR_ALIGNSHIFT; -} -#endif - -PVRSRV_ERROR -MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, IMG_DEV_PHYADDR *psPDDevPAddr) -{ - IMG_UINT32 *pui32Tmp; - IMG_UINT32 i; - IMG_CPU_VIRTADDR pvPDCpuVAddr; - IMG_DEV_PHYADDR sPDDevPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - MMU_CONTEXT *psMMUContext; - IMG_HANDLE hPDOSMemHandle = IMG_NULL; - SYS_DATA *psSysData; - PVRSRV_SGXDEV_INFO *psDevInfo; -#if defined(PDUMP) - PDUMP_MMU_ATTRIB sMMUAttrib; -#endif - PVR_DPF ((PVR_DBG_MESSAGE, "MMU_Initialise")); - - SysAcquireData(&psSysData); -#if defined(PDUMP) - - - MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode, - SGX_MMU_PAGE_MASK, - SGX_MMU_PT_SIZE * sizeof(IMG_UINT32)); -#endif - - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (MMU_CONTEXT), - (IMG_VOID **)&psMMUContext, IMG_NULL, - "MMU Context"); - if (psMMUContext == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocMem failed")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - OSMemSet (psMMUContext, 0, sizeof(MMU_CONTEXT)); - - - psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - psMMUContext->psDevInfo = psDevInfo; - - - psMMUContext->psDeviceNode = psDeviceNode; - - - if(psDeviceNode->psLocalDevMemArena == IMG_NULL) - { - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - &pvPDCpuVAddr, - &hPDOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; - } - - if(pvPDCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(hPDOSMemHandle, - pvPDCpuVAddr); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(hPDOSMemHandle, 0); - } - sPDDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - #if PAGE_TEST - PageTest(pvPDCpuVAddr, sPDDevPAddr); - #endif - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - if(!psDevInfo->pvMMUContextList) - { - - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - &psDevInfo->pvDummyPTPageCpuVAddr, - &psDevInfo->hDummyPTPageOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; - } - - if(psDevInfo->pvDummyPTPageCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hDummyPTPageOSMemHandle, - psDevInfo->pvDummyPTPageCpuVAddr); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hDummyPTPageOSMemHandle, 0); - } - psDevInfo->sDummyPTDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - &psDevInfo->pvDummyDataPageCpuVAddr, - &psDevInfo->hDummyDataPageOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; - } - - if(psDevInfo->pvDummyDataPageCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hDummyPTPageOSMemHandle, - psDevInfo->pvDummyDataPageCpuVAddr); - } - else - { - sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hDummyDataPageOSMemHandle, 0); - } - psDevInfo->sDummyDataDevPAddr = SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - } -#endif -#if defined(FIX_HW_BRN_31620) - - if(!psDevInfo->pvMMUContextList) - { - IMG_UINT32 j; - - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - &psDevInfo->pvBRN31620DummyPageCpuVAddr, - &psDevInfo->hBRN31620DummyPageOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; - } - - - if(psDevInfo->pvBRN31620DummyPageCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPageOSMemHandle, - psDevInfo->pvBRN31620DummyPageCpuVAddr); - } - else - { - sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hBRN31620DummyPageOSMemHandle, 0); - } - - pui32Tmp = (IMG_UINT32 *)psDevInfo->pvBRN31620DummyPageCpuVAddr; - for(j=0; j<(SGX_MMU_PAGE_SIZE/4); j++) - { - pui32Tmp[j] = BRN31620_DUMMY_PAGE_SIGNATURE; - } - - psDevInfo->sBRN31620DummyPageDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, 0, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - - - if (OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - &psDevInfo->pvBRN31620DummyPTCpuVAddr, - &psDevInfo->hBRN31620DummyPTOSMemHandle) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to OSAllocPages failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES; - } - - - if(psDevInfo->pvBRN31620DummyPTCpuVAddr) - { - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPTOSMemHandle, - psDevInfo->pvBRN31620DummyPTCpuVAddr); - } - else - { - sCpuPAddr = OSMemHandleToCpuPAddr(psDevInfo->hBRN31620DummyPTOSMemHandle, 0); - } - - OSMemSet(psDevInfo->pvBRN31620DummyPTCpuVAddr,0,SGX_MMU_PAGE_SIZE); - psDevInfo->sBRN31620DummyPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, 0, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - } -#endif - } - else - { - IMG_SYS_PHYADDR sSysPAddr; - - - if(RA_Alloc(psDeviceNode->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - sPDDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - pvPDCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &hPDOSMemHandle); - if(!pvPDCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); - return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; - } - - #if PAGE_TEST - PageTest(pvPDCpuVAddr, sPDDevPAddr); - #endif - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - if(!psDevInfo->pvMMUContextList) - { - - if(RA_Alloc(psDeviceNode->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sDummyPTDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvDummyPTPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hDummyPTPageOSMemHandle); - if(!psDevInfo->pvDummyPTPageCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); - return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; - } - - - if(RA_Alloc(psDeviceNode->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sDummyDataDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvDummyDataPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hDummyDataPageOSMemHandle); - if(!psDevInfo->pvDummyDataPageCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); - return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; - } - } -#endif -#if defined(FIX_HW_BRN_31620) - - if(!psDevInfo->pvMMUContextList) - { - IMG_UINT32 j; - - if(RA_Alloc(psDeviceNode->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sBRN31620DummyPageDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvBRN31620DummyPageCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hBRN31620DummyPageOSMemHandle); - if(!psDevInfo->pvBRN31620DummyPageCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); - return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; - } - - pui32Tmp = (IMG_UINT32 *)psDevInfo->pvBRN31620DummyPageCpuVAddr; - for(j=0; j<(SGX_MMU_PAGE_SIZE/4); j++) - { - pui32Tmp[j] = BRN31620_DUMMY_PAGE_SIGNATURE; - } - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, 0, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - - - if(RA_Alloc(psDeviceNode->psLocalDevMemArena, - SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sSysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(sSysPAddr); - psDevInfo->sBRN31620DummyPTDevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysPAddr); - psDevInfo->pvBRN31620DummyPTCpuVAddr = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &psDevInfo->hBRN31620DummyPTOSMemHandle); - - if(!psDevInfo->pvBRN31620DummyPTCpuVAddr) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR failed to map page tables")); - return PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE; - } - - OSMemSet(psDevInfo->pvBRN31620DummyPTCpuVAddr,0,SGX_MMU_PAGE_SIZE); - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, 0, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - } -#endif - } - -#if defined(FIX_HW_BRN_31620) - if (!psDevInfo->pvMMUContextList) - { - - psDevInfo->hKernelMMUContext = psMMUContext; - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: saving kernel mmu context: %p", psMMUContext)); - } -#endif - -#if defined(PDUMP) -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - { - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc == IMG_NULL) - { - - psMMUContext->bPDumpActive = IMG_TRUE; - } - else - { - psMMUContext->bPDumpActive = psPerProc->bPDumpActive; - } - } -#endif - -#if IMG_ADDRSPACE_PHYSADDR_BITS == 32 - PDUMPCOMMENT("Alloc page directory for new MMU context (PDDevPAddr == 0x%08x)", - sPDDevPAddr.uiAddr); -#else - PDUMPCOMMENT("Alloc page directory for new MMU context, 64-bit arch detected (PDDevPAddr == 0x%08x%08x)", - sPDDevPAddr.uiHighAddr, sPDDevPAddr.uiAddr); -#endif - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, hPDOSMemHandle, 0, pvPDCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PD_UNIQUETAG); -#endif - -#ifdef SUPPORT_SGX_MMU_BYPASS - EnableHostAccess(psMMUContext); -#endif - - if (pvPDCpuVAddr) - { - pui32Tmp = (IMG_UINT32 *)pvPDCpuVAddr; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: pvPDCpuVAddr invalid")); - return PVRSRV_ERROR_INVALID_CPU_ADDR; - } - - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - for(i=0; isDummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_VALID; - } - - if(!psDevInfo->pvMMUContextList) - { - - - - pui32Tmp = (IMG_UINT32 *)psDevInfo->pvDummyPTPageCpuVAddr; - for(i=0; isDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; - } - - PDUMPCOMMENT("Dummy Page table contents"); - PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hDummyPTOSMemHandle, psDevInfo->pvDummyPTPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - - - - pui32Tmp = (IMG_UINT32 *)psDevInfo->pvDummyDataPageCpuVAddr; - for(i=0; i<(SGX_MMU_PAGE_SIZE/4); i++) - { - pui32Tmp[i] = DUMMY_DATA_PAGE_SIGNATURE; - } - - PDUMPCOMMENT("Dummy Data Page contents"); - PDUMPMEMPTENTRIES(PVRSRV_DEVICE_TYPE_SGX, psDevInfo->hDummyDataPageOSMemHandle, psDevInfo->pvDummyDataPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } -#else - - for(i=0; ibPDumpActive) -#endif - { - - PDUMPCOMMENT("Page directory contents"); - PDUMPPDENTRIES(&sMMUAttrib, hPDOSMemHandle, pvPDCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } -#endif -#if defined(FIX_HW_BRN_31620) - { - IMG_UINT32 i; - IMG_UINT32 ui32PDCount = 0; - IMG_UINT32 *pui32PT; - pui32Tmp = (IMG_UINT32 *)pvPDCpuVAddr; - - PDUMPCOMMENT("BRN31620 Set up dummy PT"); - - pui32PT = (IMG_UINT32 *) psDevInfo->pvBRN31620DummyPTCpuVAddr; - pui32PT[BRN31620_DUMMY_PTE_INDEX] = (psDevInfo->sBRN31620DummyPageDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_DUMMY_PAGE - | SGX_MMU_PTE_READONLY - | SGX_MMU_PTE_VALID; - - -#if defined(PDUMP) - - PDUMPCOMMENT("BRN31620 Dump dummy PT contents"); - PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPCOMMENT("BRN31620 Dump dummy page contents"); - PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - - - for(i=0;ihBRN31620DummyPTOSMemHandle, &pui32PT[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } -#endif - PDUMPCOMMENT("BRN31620 Dump PDE wire up"); - - for(i=0;isBRN31620DummyPTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_DUMMY_PAGE - | SGX_MMU_PDE_VALID; - } - PDUMPMEMPTENTRIES(&sMMUAttrib, hPDOSMemHandle, (IMG_VOID *) &pui32Tmp[i], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PT_UNIQUETAG, PDUMP_PT_UNIQUETAG); - ui32PDCount++; - if (ui32PDCount == BRN31620_PDES_PER_CACHE_LINE_SIZE) - { - - ui32PDCount = 0; - } - } - - - - PDUMPCOMMENT("BRN31620 dummy Page table contents"); - PDUMPMEMPTENTRIES(&sMMUAttrib, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } -#endif -#if defined(PDUMP) - - { - PVRSRV_ERROR eError; - - IMG_UINT32 ui32MMUType = 1; - - #if defined(SGX_FEATURE_36BIT_MMU) - ui32MMUType = 3; - #else - #if defined(SGX_FEATURE_VARIABLE_MMU_PAGE_SIZE) - ui32MMUType = 2; - #endif - #endif - - eError = PDumpSetMMUContext(PVRSRV_DEVICE_TYPE_SGX, - psDeviceNode->sDevId.pszPDumpDevName, - &psMMUContext->ui32PDumpMMUContextID, - ui32MMUType, - PDUMP_PT_UNIQUETAG, - hPDOSMemHandle, - pvPDCpuVAddr); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Initialise: ERROR call to PDumpSetMMUContext failed")); - return eError; - } - } - - - PDUMPCOMMENT("Set MMU context complete (MMU Context ID == %u)", psMMUContext->ui32PDumpMMUContextID); -#endif - -#if defined(FIX_HW_BRN_31620) - for(i=0;iui32PDChangeMask[i] = 0; - } - - for(i=0;iui32PDCacheRangeRefCount[i] = 0; - } - - for(i=0;iapsPTInfoListSave[i] = IMG_NULL; - } -#endif - - psMMUContext->pvPDCpuVAddr = pvPDCpuVAddr; - psMMUContext->sPDDevPAddr = sPDDevPAddr; - psMMUContext->hPDOSMemHandle = hPDOSMemHandle; - - - *ppsMMUContext = psMMUContext; - - - *psPDDevPAddr = sPDDevPAddr; - - - psMMUContext->psNext = (MMU_CONTEXT*)psDevInfo->pvMMUContextList; - psDevInfo->pvMMUContextList = (IMG_VOID*)psMMUContext; - -#ifdef SUPPORT_SGX_MMU_BYPASS - DisableHostAccess(psMMUContext); -#endif - - return PVRSRV_OK; -} - -IMG_VOID -MMU_Finalise (MMU_CONTEXT *psMMUContext) -{ - IMG_UINT32 *pui32Tmp, i; - SYS_DATA *psSysData; - MMU_CONTEXT **ppsMMUContext; -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) || defined(FIX_HW_BRN_31620) - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psMMUContext->psDevInfo; - MMU_CONTEXT *psMMUContextList = (MMU_CONTEXT*)psDevInfo->pvMMUContextList; -#endif - - SysAcquireData(&psSysData); - -#if defined(PDUMP) - - PDUMPCOMMENT("Clear MMU context (MMU Context ID == %u)", psMMUContext->ui32PDumpMMUContextID); - PDUMPCLEARMMUCONTEXT(PVRSRV_DEVICE_TYPE_SGX, psMMUContext->psDeviceNode->sDevId.pszPDumpDevName, psMMUContext->ui32PDumpMMUContextID, 2); - - -#if IMG_ADDRSPACE_PHYSADDR_BITS == 32 - PDUMPCOMMENT("Free page directory (PDDevPAddr == 0x%08x)", - psMMUContext->sPDDevPAddr.uiAddr); -#else - PDUMPCOMMENT("Free page directory, 64-bit arch detected (PDDevPAddr == 0x%08x%08x)", - psMMUContext->sPDDevPAddr.uiHighAddr, psMMUContext->sPDDevPAddr.uiAddr); -#endif -#endif - - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psMMUContext->hPDOSMemHandle, psMMUContext->pvPDCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hDummyPTPageOSMemHandle, psDevInfo->pvDummyPTPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hDummyDataPageOSMemHandle, psDevInfo->pvDummyDataPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); -#endif - - pui32Tmp = (IMG_UINT32 *)psMMUContext->pvPDCpuVAddr; - - - for(i=0; ipsDeviceNode->psLocalDevMemArena == IMG_NULL) - { -#if defined(FIX_HW_BRN_31620) - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psMMUContext->psDevInfo; -#endif - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psMMUContext->pvPDCpuVAddr, - psMMUContext->hPDOSMemHandle); - -#if defined(FIX_HW_BRN_31620) - - if (!psMMUContextList->psNext) - { - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pvBRN31620DummyPageCpuVAddr, - psDevInfo->hBRN31620DummyPageOSMemHandle); - - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pvBRN31620DummyPTCpuVAddr, - psDevInfo->hBRN31620DummyPTOSMemHandle); - - } -#endif -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - if(!psMMUContextList->psNext) - { - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pvDummyPTPageCpuVAddr, - psDevInfo->hDummyPTPageOSMemHandle); - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pvDummyDataPageCpuVAddr, - psDevInfo->hDummyDataPageOSMemHandle); - } -#endif - } - else - { - IMG_SYS_PHYADDR sSysPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - - - sCpuPAddr = OSMapLinToCPUPhys(psMMUContext->hPDOSMemHandle, - psMMUContext->pvPDCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); - - - OSUnMapPhysToLin(psMMUContext->pvPDCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psMMUContext->hPDOSMemHandle); - - RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - if(!psMMUContextList->psNext) - { - - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hDummyPTPageOSMemHandle, - psDevInfo->pvDummyPTPageCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); - - - OSUnMapPhysToLin(psDevInfo->pvDummyPTPageCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hDummyPTPageOSMemHandle); - - RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - - - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hDummyDataPageOSMemHandle, - psDevInfo->pvDummyDataPageCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); - - - OSUnMapPhysToLin(psDevInfo->pvDummyDataPageCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hDummyDataPageOSMemHandle); - - RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - } -#endif -#if defined(FIX_HW_BRN_31620) - - if(!psMMUContextList->psNext) - { - - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPageOSMemHandle, psDevInfo->pvBRN31620DummyPageCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPageOSMemHandle, - psDevInfo->pvBRN31620DummyPageCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); - - - OSUnMapPhysToLin(psDevInfo->pvBRN31620DummyPageCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hBRN31620DummyPageOSMemHandle); - - RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - - - PDUMPFREEPAGETABLE(&psMMUContext->psDeviceNode->sDevId, psDevInfo->hBRN31620DummyPTOSMemHandle, psDevInfo->pvBRN31620DummyPTCpuVAddr, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - - sCpuPAddr = OSMapLinToCPUPhys(psDevInfo->hBRN31620DummyPTOSMemHandle, - psDevInfo->pvBRN31620DummyPTCpuVAddr); - sSysPAddr = SysCpuPAddrToSysPAddr(sCpuPAddr); - - - OSUnMapPhysToLin(psDevInfo->pvBRN31620DummyPTCpuVAddr, - SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hBRN31620DummyPTOSMemHandle); - - RA_Free (psMMUContext->psDeviceNode->psLocalDevMemArena, sSysPAddr.uiAddr, IMG_FALSE); - } -#endif - } - - PVR_DPF ((PVR_DBG_MESSAGE, "MMU_Finalise")); - - - ppsMMUContext = (MMU_CONTEXT**)&psMMUContext->psDevInfo->pvMMUContextList; - while(*ppsMMUContext) - { - if(*ppsMMUContext == psMMUContext) - { - - *ppsMMUContext = psMMUContext->psNext; - break; - } - - - ppsMMUContext = &((*ppsMMUContext)->psNext); - } - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(MMU_CONTEXT), psMMUContext, IMG_NULL); - -} - - -IMG_VOID -MMU_InsertHeap(MMU_CONTEXT *psMMUContext, MMU_HEAP *psMMUHeap) -{ - IMG_UINT32 *pui32PDCpuVAddr = (IMG_UINT32 *) psMMUContext->pvPDCpuVAddr; - IMG_UINT32 *pui32KernelPDCpuVAddr = (IMG_UINT32 *) psMMUHeap->psMMUContext->pvPDCpuVAddr; - IMG_UINT32 ui32PDEntry; -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - IMG_BOOL bInvalidateDirectoryCache = IMG_FALSE; -#endif - - - pui32PDCpuVAddr += psMMUHeap->psDevArena->BaseDevVAddr.uiAddr >> psMMUHeap->ui32PDShift; - pui32KernelPDCpuVAddr += psMMUHeap->psDevArena->BaseDevVAddr.uiAddr >> psMMUHeap->ui32PDShift; - - - - -#if defined(PDUMP) - PDUMPCOMMENT("Page directory shared heap range copy"); - PDUMPCOMMENT(" (Source heap MMU Context ID == %u, PT count == 0x%x)", - psMMUHeap->psMMUContext->ui32PDumpMMUContextID, - psMMUHeap->ui32PageTableCount); - PDUMPCOMMENT(" (Destination MMU Context ID == %u)", psMMUContext->ui32PDumpMMUContextID); -#endif -#ifdef SUPPORT_SGX_MMU_BYPASS - EnableHostAccess(psMMUContext); -#endif - - for (ui32PDEntry = 0; ui32PDEntry < psMMUHeap->ui32PageTableCount; ui32PDEntry++) - { -#if (!defined(SUPPORT_SGX_MMU_DUMMY_PAGE)) && (!defined(FIX_HW_BRN_31620)) - - PVR_ASSERT(pui32PDCpuVAddr[ui32PDEntry] == 0); -#endif - - - pui32PDCpuVAddr[ui32PDEntry] = pui32KernelPDCpuVAddr[ui32PDEntry]; - if (pui32PDCpuVAddr[ui32PDEntry]) - { - - #if defined(PDUMP) - - #if defined(SUPPORT_PDUMP_MULTI_PROCESS) - if(psMMUContext->bPDumpActive) - #endif - { - PDUMPPDENTRIES(&psMMUHeap->sMMUAttrib, psMMUContext->hPDOSMemHandle, (IMG_VOID *) &pui32PDCpuVAddr[ui32PDEntry], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - } - #endif -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - bInvalidateDirectoryCache = IMG_TRUE; -#endif - } - } - -#ifdef SUPPORT_SGX_MMU_BYPASS - DisableHostAccess(psMMUContext); -#endif - -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - if (bInvalidateDirectoryCache) - { - - - - - MMU_InvalidateDirectoryCache(psMMUContext->psDevInfo); - } -#endif -} - - -static IMG_VOID -MMU_UnmapPagesAndFreePTs (MMU_HEAP *psMMUHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32PageCount, - IMG_HANDLE hUniqueTag) -{ - IMG_DEV_VIRTADDR sTmpDevVAddr; - IMG_UINT32 i; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTIndex; - IMG_UINT32 *pui32Tmp; - IMG_BOOL bInvalidateDirectoryCache = IMG_FALSE; - -#if !defined (PDUMP) - PVR_UNREFERENCED_PARAMETER(hUniqueTag); -#endif - - sTmpDevVAddr = sDevVAddr; - - for(i=0; i> psMMUHeap->ui32PDShift; - - - ppsPTInfoList = &psMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; - - { - - ui32PTIndex = (sTmpDevVAddr.uiAddr & psMMUHeap->ui32PTMask) >> psMMUHeap->ui32PTShift; - - - if (!ppsPTInfoList[0]) - { - PVR_DPF((PVR_DBG_MESSAGE, "MMU_UnmapPagesAndFreePTs: Invalid PT for alloc at VAddr:0x%08X (VaddrIni:0x%08X AllocPage:%u) PDIdx:%u PTIdx:%u",sTmpDevVAddr.uiAddr, sDevVAddr.uiAddr,i, ui32PDIndex, ui32PTIndex )); - - - sTmpDevVAddr.uiAddr += psMMUHeap->ui32DataPageSize; - - - continue; - } - - - pui32Tmp = (IMG_UINT32*)ppsPTInfoList[0]->PTPageCpuVAddr; - - - if (!pui32Tmp) - { - continue; - } - - CheckPT(ppsPTInfoList[0]); - - - if (pui32Tmp[ui32PTIndex] & SGX_MMU_PTE_VALID) - { - ppsPTInfoList[0]->ui32ValidPTECount--; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "MMU_UnmapPagesAndFreePTs: Page is already invalid for alloc at VAddr:0x%08X (VAddrIni:0x%08X AllocPage:%u) PDIdx:%u PTIdx:%u",sTmpDevVAddr.uiAddr, sDevVAddr.uiAddr,i, ui32PDIndex, ui32PTIndex )); - } - - - PVR_ASSERT((IMG_INT32)ppsPTInfoList[0]->ui32ValidPTECount >= 0); - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - pui32Tmp[ui32PTIndex] = (psMMUHeap->psMMUContext->psDevInfo->sDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; -#else - -#if defined(FIX_HW_BRN_31620) - BRN31620InvalidatePageTableEntry(psMMUHeap->psMMUContext, ui32PDIndex, ui32PTIndex, &pui32Tmp[ui32PTIndex]); -#else - pui32Tmp[ui32PTIndex] = 0; -#endif -#endif - - CheckPT(ppsPTInfoList[0]); - } - - - - if (ppsPTInfoList[0] && (ppsPTInfoList[0]->ui32ValidPTECount == 0) - ) - { -#if defined(FIX_HW_BRN_31620) - if (BRN31620FreePageTable(psMMUHeap, ui32PDIndex) == IMG_TRUE) - { - bInvalidateDirectoryCache = IMG_TRUE; - } -#else - _DeferredFreePageTable(psMMUHeap, ui32PDIndex - psMMUHeap->ui32PDBaseIndex, IMG_TRUE); - bInvalidateDirectoryCache = IMG_TRUE; -#endif - } - - - sTmpDevVAddr.uiAddr += psMMUHeap->ui32DataPageSize; - } - - if(bInvalidateDirectoryCache) - { - MMU_InvalidateDirectoryCache(psMMUHeap->psMMUContext->psDevInfo); - } - else - { - MMU_InvalidatePageTableCache(psMMUHeap->psMMUContext->psDevInfo); - } - -#if defined(PDUMP) - MMU_PDumpPageTables(psMMUHeap, - sDevVAddr, - psMMUHeap->ui32DataPageSize * ui32PageCount, - IMG_TRUE, - hUniqueTag); -#endif -} - - -static IMG_VOID MMU_FreePageTables(IMG_PVOID pvMMUHeap, - IMG_SIZE_T ui32Start, - IMG_SIZE_T ui32End, - IMG_HANDLE hUniqueTag) -{ - MMU_HEAP *pMMUHeap = (MMU_HEAP*)pvMMUHeap; - IMG_DEV_VIRTADDR Start; - - Start.uiAddr = (IMG_UINT32)ui32Start; - - MMU_UnmapPagesAndFreePTs(pMMUHeap, Start, (IMG_UINT32)((ui32End - ui32Start) >> pMMUHeap->ui32PTShift), hUniqueTag); -} - -MMU_HEAP * -MMU_Create (MMU_CONTEXT *psMMUContext, - DEV_ARENA_DESCRIPTOR *psDevArena, - RA_ARENA **ppsVMArena, - PDUMP_MMU_ATTRIB **ppsMMUAttrib) -{ - MMU_HEAP *pMMUHeap; - IMG_UINT32 ui32ScaleSize; - - PVR_UNREFERENCED_PARAMETER(ppsMMUAttrib); - - PVR_ASSERT (psDevArena != IMG_NULL); - - if (psDevArena == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Create: invalid parameter")); - return IMG_NULL; - } - - OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof (MMU_HEAP), - (IMG_VOID **)&pMMUHeap, IMG_NULL, - "MMU Heap"); - if (pMMUHeap == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Create: ERROR call to OSAllocMem failed")); - return IMG_NULL; - } - - pMMUHeap->psMMUContext = psMMUContext; - pMMUHeap->psDevArena = psDevArena; - - - - - switch(pMMUHeap->psDevArena->ui32DataPageSize) - { - case 0x1000: - ui32ScaleSize = 0; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_4K; - break; -#if defined(SGX_FEATURE_VARIABLE_MMU_PAGE_SIZE) - case 0x4000: - ui32ScaleSize = 2; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_16K; - break; - case 0x10000: - ui32ScaleSize = 4; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_64K; - break; - case 0x40000: - ui32ScaleSize = 6; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_256K; - break; - case 0x100000: - ui32ScaleSize = 8; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_1M; - break; - case 0x400000: - ui32ScaleSize = 10; - pMMUHeap->ui32PDEPageSizeCtrl = SGX_MMU_PDE_PAGE_SIZE_4M; - break; -#endif - default: - PVR_DPF((PVR_DBG_ERROR, "MMU_Create: invalid data page size")); - goto ErrorFreeHeap; - } - - - pMMUHeap->ui32DataPageSize = psDevArena->ui32DataPageSize; - pMMUHeap->ui32DataPageBitWidth = SGX_MMU_PAGE_SHIFT + ui32ScaleSize; - pMMUHeap->ui32DataPageMask = pMMUHeap->ui32DataPageSize - 1; - - pMMUHeap->ui32PTShift = pMMUHeap->ui32DataPageBitWidth; - pMMUHeap->ui32PTBitWidth = SGX_MMU_PT_SHIFT - ui32ScaleSize; - pMMUHeap->ui32PTMask = SGX_MMU_PT_MASK & (SGX_MMU_PT_MASK<ui32PTSize = (IMG_UINT32)(1UL<ui32PTBitWidth) * sizeof(IMG_UINT32); - - - if(pMMUHeap->ui32PTSize < 4 * sizeof(IMG_UINT32)) - { - pMMUHeap->ui32PTSize = 4 * sizeof(IMG_UINT32); - } - pMMUHeap->ui32PTNumEntriesAllocated = pMMUHeap->ui32PTSize >> 2; - - - pMMUHeap->ui32PTNumEntriesUsable = (IMG_UINT32)(1UL << pMMUHeap->ui32PTBitWidth); - - - pMMUHeap->ui32PDShift = pMMUHeap->ui32PTBitWidth + pMMUHeap->ui32PTShift; - pMMUHeap->ui32PDBitWidth = SGX_FEATURE_ADDRESS_SPACE_SIZE - pMMUHeap->ui32PTBitWidth - pMMUHeap->ui32DataPageBitWidth; - pMMUHeap->ui32PDMask = SGX_MMU_PD_MASK & (SGX_MMU_PD_MASK>>(32-SGX_FEATURE_ADDRESS_SPACE_SIZE)); - - -#if !defined (SUPPORT_EXTERNAL_SYSTEM_CACHE) - - - - - if(psDevArena->BaseDevVAddr.uiAddr > (pMMUHeap->ui32DataPageMask | pMMUHeap->ui32PTMask)) - { - - - - PVR_ASSERT ((psDevArena->BaseDevVAddr.uiAddr - & (pMMUHeap->ui32DataPageMask - | pMMUHeap->ui32PTMask)) == 0); - } -#endif - - pMMUHeap->ui32PTETotalUsable = pMMUHeap->psDevArena->ui32Size >> pMMUHeap->ui32PTShift; - - - pMMUHeap->ui32PDBaseIndex = (pMMUHeap->psDevArena->BaseDevVAddr.uiAddr & pMMUHeap->ui32PDMask) >> pMMUHeap->ui32PDShift; - - - - - pMMUHeap->ui32PageTableCount = (pMMUHeap->ui32PTETotalUsable + pMMUHeap->ui32PTNumEntriesUsable - 1) - >> pMMUHeap->ui32PTBitWidth; - PVR_ASSERT(pMMUHeap->ui32PageTableCount > 0); - - - pMMUHeap->psVMArena = RA_Create(psDevArena->pszName, - psDevArena->BaseDevVAddr.uiAddr, - psDevArena->ui32Size, - IMG_NULL, - MAX(HOST_PAGESIZE(), pMMUHeap->ui32DataPageSize), - IMG_NULL, - IMG_NULL, - &MMU_FreePageTables, - pMMUHeap); - - if (pMMUHeap->psVMArena == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Create: ERROR call to RA_Create failed")); - goto ErrorFreePagetables; - } - -#if defined(PDUMP) - - MMU_SetPDumpAttribs(&pMMUHeap->sMMUAttrib, - psMMUContext->psDeviceNode, - pMMUHeap->ui32DataPageMask, - pMMUHeap->ui32PTSize); - *ppsMMUAttrib = &pMMUHeap->sMMUAttrib; - - PDUMPCOMMENT("Create MMU device from arena %s (Size == 0x%x, DataPageSize == 0x%x, BaseDevVAddr == 0x%x)", - psDevArena->pszName, - psDevArena->ui32Size, - pMMUHeap->ui32DataPageSize, - psDevArena->BaseDevVAddr.uiAddr); -#endif - -#if 0 - - if(psDevArena->ui32HeapID == SGX_TILED_HEAP_ID) - { - IMG_UINT32 ui32RegVal; - IMG_UINT32 ui32XTileStride; - - - - - - - ui32XTileStride = 2; - - ui32RegVal = (EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK - & ((psDevArena->BaseDevVAddr.uiAddr>>20) - << EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT)) - |(EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK - & (((psDevArena->BaseDevVAddr.uiAddr+psDevArena->ui32Size)>>20) - << EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT)) - |(EUR_CR_BIF_TILE0_CFG_MASK - & (((ui32XTileStride<<1)|8) << EUR_CR_BIF_TILE0_CFG_SHIFT)); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_TILE0, ui32RegVal); - } -#endif - - - - *ppsVMArena = pMMUHeap->psVMArena; - - return pMMUHeap; - - -ErrorFreePagetables: - _DeferredFreePageTables (pMMUHeap); - -ErrorFreeHeap: - OSFreeMem (PVRSRV_OS_PAGEABLE_HEAP, sizeof(MMU_HEAP), pMMUHeap, IMG_NULL); - - - return IMG_NULL; -} - -IMG_VOID -MMU_Delete (MMU_HEAP *pMMUHeap) -{ - if (pMMUHeap != IMG_NULL) - { - PVR_DPF ((PVR_DBG_MESSAGE, "MMU_Delete")); - - if(pMMUHeap->psVMArena) - { - RA_Delete (pMMUHeap->psVMArena); - } - -#if defined(PDUMP) - PDUMPCOMMENT("Delete MMU device from arena %s (BaseDevVAddr == 0x%x, PT count for deferred free == 0x%x)", - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->BaseDevVAddr.uiAddr, - pMMUHeap->ui32PageTableCount); -#endif - -#ifdef SUPPORT_SGX_MMU_BYPASS - EnableHostAccess(pMMUHeap->psMMUContext); -#endif - _DeferredFreePageTables (pMMUHeap); -#ifdef SUPPORT_SGX_MMU_BYPASS - DisableHostAccess(pMMUHeap->psMMUContext); -#endif - - OSFreeMem (PVRSRV_OS_PAGEABLE_HEAP, sizeof(MMU_HEAP), pMMUHeap, IMG_NULL); - - } -} - -IMG_BOOL -MMU_Alloc (MMU_HEAP *pMMUHeap, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - IMG_UINT32 uFlags, - IMG_UINT32 uDevVAddrAlignment, - IMG_DEV_VIRTADDR *psDevVAddr) -{ - IMG_BOOL bStatus; - - PVR_DPF ((PVR_DBG_MESSAGE, - "MMU_Alloc: uSize=0x%x, flags=0x%x, align=0x%x", - uSize, uFlags, uDevVAddrAlignment)); - - - - if((uFlags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) == 0) - { - IMG_UINTPTR_T uiAddr; - - bStatus = RA_Alloc (pMMUHeap->psVMArena, - uSize, - pActualSize, - IMG_NULL, - 0, - uDevVAddrAlignment, - 0, - &uiAddr); - if(!bStatus) - { - PVR_DPF((PVR_DBG_ERROR,"MMU_Alloc: RA_Alloc of VMArena failed")); - PVR_DPF((PVR_DBG_ERROR,"MMU_Alloc: Alloc of DevVAddr failed from heap %s ID%d", - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->ui32HeapID)); - return bStatus; - } - - psDevVAddr->uiAddr = IMG_CAST_TO_DEVVADDR_UINT(uiAddr); - } - - #ifdef SUPPORT_SGX_MMU_BYPASS - EnableHostAccess(pMMUHeap->psMMUContext); - #endif - - - bStatus = _DeferredAllocPagetables(pMMUHeap, *psDevVAddr, (IMG_UINT32)uSize); - - #ifdef SUPPORT_SGX_MMU_BYPASS - DisableHostAccess(pMMUHeap->psMMUContext); - #endif - - if (!bStatus) - { - PVR_DPF((PVR_DBG_ERROR,"MMU_Alloc: _DeferredAllocPagetables failed")); - PVR_DPF((PVR_DBG_ERROR,"MMU_Alloc: Failed to alloc pagetable(s) for DevVAddr 0x%8.8x from heap %s ID%d", - psDevVAddr->uiAddr, - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->ui32HeapID)); - if((uFlags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) == 0) - { - - RA_Free (pMMUHeap->psVMArena, psDevVAddr->uiAddr, IMG_FALSE); - } - } - - return bStatus; -} - -IMG_VOID -MMU_Free (MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR DevVAddr, IMG_UINT32 ui32Size) -{ - PVR_ASSERT (pMMUHeap != IMG_NULL); - - if (pMMUHeap == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_Free: invalid parameter")); - return; - } - - PVR_DPF((PVR_DBG_MESSAGE, "MMU_Free: Freeing DevVAddr 0x%08X from heap %s ID%d", - DevVAddr.uiAddr, - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->ui32HeapID)); - - if((DevVAddr.uiAddr >= pMMUHeap->psDevArena->BaseDevVAddr.uiAddr) && - (DevVAddr.uiAddr + ui32Size <= pMMUHeap->psDevArena->BaseDevVAddr.uiAddr + pMMUHeap->psDevArena->ui32Size)) - { - RA_Free (pMMUHeap->psVMArena, DevVAddr.uiAddr, IMG_TRUE); - return; - } - - PVR_DPF((PVR_DBG_ERROR,"MMU_Free: Couldn't free DevVAddr %08X from heap %s ID%d (not in range of heap))", - DevVAddr.uiAddr, - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->ui32HeapID)); -} - -IMG_VOID -MMU_Enable (MMU_HEAP *pMMUHeap) -{ - PVR_UNREFERENCED_PARAMETER(pMMUHeap); - -} - -IMG_VOID -MMU_Disable (MMU_HEAP *pMMUHeap) -{ - PVR_UNREFERENCED_PARAMETER(pMMUHeap); - -} - -#if defined(FIX_HW_BRN_31620) -IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask) -{ - IMG_UINT32 i; - - for (i=0;iui32PDChangeMask[i]; - - - pMMUContext->ui32PDChangeMask[i] = 0; - } -} - -IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr) -{ - *psDevPAddr = pMMUContext->sPDDevPAddr; -} - -#endif -#if defined(PDUMP) -static IMG_VOID -MMU_PDumpPageTables (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SIZE_T uSize, - IMG_BOOL bForUnmap, - IMG_HANDLE hUniqueTag) -{ - IMG_UINT32 ui32NumPTEntries; - IMG_UINT32 ui32PTIndex; - IMG_UINT32 *pui32PTEntry; - - MMU_PT_INFO **ppsPTInfoList; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTDumpCount; - - - ui32NumPTEntries = (IMG_UINT32)((uSize + pMMUHeap->ui32DataPageMask) >> pMMUHeap->ui32PTShift); - - - ui32PDIndex = DevVAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; - - - ui32PTIndex = (DevVAddr.uiAddr & pMMUHeap->ui32PTMask) >> pMMUHeap->ui32PTShift; - - - PDUMPCOMMENT("Page table mods (num entries == %08X) %s", ui32NumPTEntries, bForUnmap ? "(for unmap)" : ""); - - - while(ui32NumPTEntries > 0) - { - MMU_PT_INFO* psPTInfo = *ppsPTInfoList++; - - if(ui32NumPTEntries <= pMMUHeap->ui32PTNumEntriesUsable - ui32PTIndex) - { - ui32PTDumpCount = ui32NumPTEntries; - } - else - { - ui32PTDumpCount = pMMUHeap->ui32PTNumEntriesUsable - ui32PTIndex; - } - - if (psPTInfo) - { - IMG_UINT32 ui32Flags = 0; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - ui32Flags |= ( MMU_IsHeapShared(pMMUHeap) ) ? PDUMP_FLAGS_PERSISTENT : 0; -#endif - pui32PTEntry = (IMG_UINT32*)psPTInfo->PTPageCpuVAddr; - PDUMPMEMPTENTRIES(&pMMUHeap->sMMUAttrib, psPTInfo->hPTPageOSMemHandle, (IMG_VOID *) &pui32PTEntry[ui32PTIndex], ui32PTDumpCount * sizeof(IMG_UINT32), ui32Flags, IMG_FALSE, PDUMP_PT_UNIQUETAG, hUniqueTag); - } - - - ui32NumPTEntries -= ui32PTDumpCount; - - - ui32PTIndex = 0; - } - - PDUMPCOMMENT("Finished page table mods %s", bForUnmap ? "(for unmap)" : ""); -} -#endif - - -static IMG_VOID -MMU_MapPage (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_DEV_PHYADDR DevPAddr, - IMG_UINT32 ui32MemFlags) -{ - IMG_UINT32 ui32Index; - IMG_UINT32 *pui32Tmp; - IMG_UINT32 ui32MMUFlags = 0; - MMU_PT_INFO **ppsPTInfoList; - - - PVR_ASSERT((DevPAddr.uiAddr & pMMUHeap->ui32DataPageMask) == 0); - - - - if(((PVRSRV_MEM_READ|PVRSRV_MEM_WRITE) & ui32MemFlags) == (PVRSRV_MEM_READ|PVRSRV_MEM_WRITE)) - { - - ui32MMUFlags = 0; - } - else if(PVRSRV_MEM_READ & ui32MemFlags) - { - - ui32MMUFlags |= SGX_MMU_PTE_READONLY; - } - else if(PVRSRV_MEM_WRITE & ui32MemFlags) - { - - ui32MMUFlags |= SGX_MMU_PTE_WRITEONLY; - } - - - if(PVRSRV_MEM_CACHE_CONSISTENT & ui32MemFlags) - { - ui32MMUFlags |= SGX_MMU_PTE_CACHECONSISTENT; - } - -#if !defined(FIX_HW_BRN_25503) - - if(PVRSRV_MEM_EDM_PROTECT & ui32MemFlags) - { - ui32MMUFlags |= SGX_MMU_PTE_EDMPROTECT; - } -#endif - - - - - - ui32Index = DevVAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32Index]; - - CheckPT(ppsPTInfoList[0]); - - - ui32Index = (DevVAddr.uiAddr & pMMUHeap->ui32PTMask) >> pMMUHeap->ui32PTShift; - - - pui32Tmp = (IMG_UINT32*)ppsPTInfoList[0]->PTPageCpuVAddr; - -#if !defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - { - IMG_UINT32 uTmp = pui32Tmp[ui32Index]; - - -#if defined(FIX_HW_BRN_31620) - if ((uTmp & SGX_MMU_PTE_VALID) && ((DevVAddr.uiAddr & BRN31620_PDE_CACHE_FILL_MASK) != BRN31620_DUMMY_PAGE_OFFSET)) -#else - if ((uTmp & SGX_MMU_PTE_VALID) != 0) -#endif - - { - PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Page is already valid for alloc at VAddr:0x%08X PDIdx:%u PTIdx:%u", - DevVAddr.uiAddr, - DevVAddr.uiAddr >> pMMUHeap->ui32PDShift, - ui32Index )); - PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Page table entry value: 0x%08X", uTmp)); - PVR_DPF((PVR_DBG_ERROR, "MMU_MapPage: Physical page to map: 0x%08X", DevPAddr.uiAddr)); - } -#if !defined(FIX_HW_BRN_31620) - PVR_ASSERT((uTmp & SGX_MMU_PTE_VALID) == 0); -#endif - } -#endif - - - ppsPTInfoList[0]->ui32ValidPTECount++; - - - pui32Tmp[ui32Index] = ((DevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - & ((~pMMUHeap->ui32DataPageMask)>>SGX_MMU_PTE_ADDR_ALIGNSHIFT)) - | SGX_MMU_PTE_VALID - | ui32MMUFlags; - - CheckPT(ppsPTInfoList[0]); -} - - -IMG_VOID -MMU_MapScatter (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SYS_PHYADDR *psSysAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag) -{ -#if defined(PDUMP) - IMG_DEV_VIRTADDR MapBaseDevVAddr; -#endif - IMG_UINT32 uCount, i; - IMG_DEV_PHYADDR DevPAddr; - - PVR_ASSERT (pMMUHeap != IMG_NULL); - -#if defined(PDUMP) - MapBaseDevVAddr = DevVAddr; -#else - PVR_UNREFERENCED_PARAMETER(hUniqueTag); -#endif - - for (i=0, uCount=0; uCountui32DataPageSize) - { - IMG_SYS_PHYADDR sSysAddr; - - sSysAddr = psSysAddr[i]; - - - - PVR_ASSERT((sSysAddr.uiAddr & pMMUHeap->ui32DataPageMask) == 0); - - DevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sSysAddr); - - MMU_MapPage (pMMUHeap, DevVAddr, DevPAddr, ui32MemFlags); - DevVAddr.uiAddr += pMMUHeap->ui32DataPageSize; - - PVR_DPF ((PVR_DBG_MESSAGE, - "MMU_MapScatter: devVAddr=%08X, SysAddr=%08X, size=0x%x/0x%x", - DevVAddr.uiAddr, sSysAddr.uiAddr, uCount, uSize)); - } - -#if defined(PDUMP) - MMU_PDumpPageTables (pMMUHeap, MapBaseDevVAddr, uSize, IMG_FALSE, hUniqueTag); -#endif -} - -IMG_VOID -MMU_MapPages (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SYS_PHYADDR SysPAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag) -{ - IMG_DEV_PHYADDR DevPAddr; -#if defined(PDUMP) - IMG_DEV_VIRTADDR MapBaseDevVAddr; -#endif - IMG_UINT32 uCount; - IMG_UINT32 ui32VAdvance; - IMG_UINT32 ui32PAdvance; - - PVR_ASSERT (pMMUHeap != IMG_NULL); - - PVR_DPF ((PVR_DBG_MESSAGE, "MMU_MapPages: heap:%s, heap_id:%d devVAddr=%08X, SysPAddr=%08X, size=0x%x", - pMMUHeap->psDevArena->pszName, - pMMUHeap->psDevArena->ui32HeapID, - DevVAddr.uiAddr, - SysPAddr.uiAddr, - uSize)); - - - ui32VAdvance = pMMUHeap->ui32DataPageSize; - ui32PAdvance = pMMUHeap->ui32DataPageSize; - -#if defined(PDUMP) - MapBaseDevVAddr = DevVAddr; -#else - PVR_UNREFERENCED_PARAMETER(hUniqueTag); -#endif - - DevPAddr = SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, SysPAddr); - - - PVR_ASSERT((DevPAddr.uiAddr & pMMUHeap->ui32DataPageMask) == 0); - -#if defined(FIX_HW_BRN_23281) - if(ui32MemFlags & PVRSRV_MEM_INTERLEAVED) - { - ui32VAdvance *= 2; - } -#endif - - - - - if(ui32MemFlags & PVRSRV_MEM_DUMMY) - { - ui32PAdvance = 0; - } - - for (uCount=0; uCountui32DataPageSize; - ui32PAdvance = pMMUHeap->ui32DataPageSize; - - - PVR_ASSERT(((IMG_UINTPTR_T)CpuVAddr & (SGX_MMU_PAGE_SIZE - 1)) == 0); - PVR_ASSERT(((IMG_UINT32)uByteSize & pMMUHeap->ui32DataPageMask) == 0); - pDevVAddr->uiAddr = MapBaseDevVAddr.uiAddr; - -#if defined(FIX_HW_BRN_23281) - if(ui32MemFlags & PVRSRV_MEM_INTERLEAVED) - { - ui32VAdvance *= 2; - } -#endif - - - - - if(ui32MemFlags & PVRSRV_MEM_DUMMY) - { - ui32PAdvance = 0; - } - - - MapDevVAddr = MapBaseDevVAddr; - for (i=0; iui32DataPageMask) == 0); - - PVR_DPF ((PVR_DBG_MESSAGE, - "Offset=0x%x: CpuVAddr=%08X, CpuPAddr=%08X, DevVAddr=%08X, DevPAddr=%08X", - uOffset, - (IMG_UINTPTR_T)CpuVAddr + uOffset, - CpuPAddr.uiAddr, - MapDevVAddr.uiAddr, - DevPAddr.uiAddr)); - - MMU_MapPage (pMMUHeap, MapDevVAddr, DevPAddr, ui32MemFlags); - - - MapDevVAddr.uiAddr += ui32VAdvance; - uOffset += ui32PAdvance; - } - -#if defined(PDUMP) - MMU_PDumpPageTables (pMMUHeap, MapBaseDevVAddr, uByteSize, IMG_FALSE, hUniqueTag); -#endif -} - - -IMG_VOID -MMU_UnmapPages (MMU_HEAP *psMMUHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32PageCount, - IMG_HANDLE hUniqueTag) -{ - IMG_UINT32 uPageSize = psMMUHeap->ui32DataPageSize; - IMG_DEV_VIRTADDR sTmpDevVAddr; - IMG_UINT32 i; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTIndex; - IMG_UINT32 *pui32Tmp; - -#if !defined (PDUMP) - PVR_UNREFERENCED_PARAMETER(hUniqueTag); -#endif - - - sTmpDevVAddr = sDevVAddr; - - for(i=0; i> psMMUHeap->ui32PDShift; - - - ppsPTInfoList = &psMMUHeap->psMMUContext->apsPTInfoList[ui32PDIndex]; - - - ui32PTIndex = (sTmpDevVAddr.uiAddr & psMMUHeap->ui32PTMask) >> psMMUHeap->ui32PTShift; - - - if (!ppsPTInfoList[0]) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_UnmapPages: ERROR Invalid PT for alloc at VAddr:0x%08X (VaddrIni:0x%08X AllocPage:%u) PDIdx:%u PTIdx:%u", - sTmpDevVAddr.uiAddr, - sDevVAddr.uiAddr, - i, - ui32PDIndex, - ui32PTIndex)); - - - sTmpDevVAddr.uiAddr += uPageSize; - - - continue; - } - - CheckPT(ppsPTInfoList[0]); - - - pui32Tmp = (IMG_UINT32*)ppsPTInfoList[0]->PTPageCpuVAddr; - - - if (pui32Tmp[ui32PTIndex] & SGX_MMU_PTE_VALID) - { - ppsPTInfoList[0]->ui32ValidPTECount--; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "MMU_UnmapPages: Page is already invalid for alloc at VAddr:0x%08X (VAddrIni:0x%08X AllocPage:%u) PDIdx:%u PTIdx:%u", - sTmpDevVAddr.uiAddr, - sDevVAddr.uiAddr, - i, - ui32PDIndex, - ui32PTIndex)); - PVR_DPF((PVR_DBG_ERROR, "MMU_UnmapPages: Page table entry value: 0x%08X", pui32Tmp[ui32PTIndex])); - } - - - PVR_ASSERT((IMG_INT32)ppsPTInfoList[0]->ui32ValidPTECount >= 0); - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - pui32Tmp[ui32PTIndex] = (psMMUHeap->psMMUContext->psDevInfo->sDummyDataDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; -#else - -#if defined(FIX_HW_BRN_31620) - BRN31620InvalidatePageTableEntry(psMMUHeap->psMMUContext, ui32PDIndex, ui32PTIndex, &pui32Tmp[ui32PTIndex]); -#else - pui32Tmp[ui32PTIndex] = 0; -#endif -#endif - - CheckPT(ppsPTInfoList[0]); - - - sTmpDevVAddr.uiAddr += uPageSize; - } - - MMU_InvalidatePageTableCache(psMMUHeap->psMMUContext->psDevInfo); - -#if defined(PDUMP) - MMU_PDumpPageTables (psMMUHeap, sDevVAddr, uPageSize*ui32PageCount, IMG_TRUE, hUniqueTag); -#endif -} - - -IMG_DEV_PHYADDR -MMU_GetPhysPageAddr(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr) -{ - IMG_UINT32 *pui32PageTable; - IMG_UINT32 ui32Index; - IMG_DEV_PHYADDR sDevPAddr; - MMU_PT_INFO **ppsPTInfoList; - - - ui32Index = sDevVPageAddr.uiAddr >> pMMUHeap->ui32PDShift; - - - ppsPTInfoList = &pMMUHeap->psMMUContext->apsPTInfoList[ui32Index]; - if (!ppsPTInfoList[0]) - { - PVR_DPF((PVR_DBG_ERROR,"MMU_GetPhysPageAddr: Not mapped in at 0x%08x", sDevVPageAddr.uiAddr)); - sDevPAddr.uiAddr = 0; - return sDevPAddr; - } - - - ui32Index = (sDevVPageAddr.uiAddr & pMMUHeap->ui32PTMask) >> pMMUHeap->ui32PTShift; - - - pui32PageTable = (IMG_UINT32*)ppsPTInfoList[0]->PTPageCpuVAddr; - - - sDevPAddr.uiAddr = pui32PageTable[ui32Index]; - - - sDevPAddr.uiAddr &= ~(pMMUHeap->ui32DataPageMask>>SGX_MMU_PTE_ADDR_ALIGNSHIFT); - - - sDevPAddr.uiAddr <<= SGX_MMU_PTE_ADDR_ALIGNSHIFT; - - return sDevPAddr; -} - - -IMG_DEV_PHYADDR MMU_GetPDDevPAddr(MMU_CONTEXT *pMMUContext) -{ - return (pMMUContext->sPDDevPAddr); -} - - -IMG_EXPORT -PVRSRV_ERROR SGXGetPhysPageAddrKM (IMG_HANDLE hDevMemHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_DEV_PHYADDR *pDevPAddr, - IMG_CPU_PHYADDR *pCpuPAddr) -{ - MMU_HEAP *pMMUHeap; - IMG_DEV_PHYADDR DevPAddr; - - - - pMMUHeap = (MMU_HEAP*)BM_GetMMUHeap(hDevMemHeap); - - DevPAddr = MMU_GetPhysPageAddr(pMMUHeap, sDevVAddr); - pCpuPAddr->uiAddr = DevPAddr.uiAddr; - pDevPAddr->uiAddr = DevPAddr.uiAddr; - - return (pDevPAddr->uiAddr != 0) ? PVRSRV_OK : PVRSRV_ERROR_INVALID_PARAMS; -} - - -PVRSRV_ERROR SGXGetMMUPDAddrKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_DEV_PHYADDR *psPDDevPAddr) -{ - if (!hDevCookie || !hDevMemContext || !psPDDevPAddr) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - *psPDDevPAddr = ((BM_CONTEXT*)hDevMemContext)->psMMUContext->sPDDevPAddr; - - return PVRSRV_OK; -} - -PVRSRV_ERROR MMU_BIFResetPDAlloc(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - IMG_HANDLE hOSMemHandle = IMG_NULL; - IMG_BYTE *pui8MemBlock = IMG_NULL; - IMG_SYS_PHYADDR sMemBlockSysPAddr; - IMG_CPU_PHYADDR sMemBlockCpuPAddr; - - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - - if(psLocalDevMemArena == IMG_NULL) - { - - eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - 3 * SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - (IMG_VOID **)&pui8MemBlock, - &hOSMemHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_BIFResetPDAlloc: ERROR call to OSAllocPages failed")); - return eError; - } - - - if(pui8MemBlock) - { - sMemBlockCpuPAddr = OSMapLinToCPUPhys(hOSMemHandle, - pui8MemBlock); - } - else - { - - sMemBlockCpuPAddr = OSMemHandleToCpuPAddr(hOSMemHandle, 0); - } - } - else - { - - - if(RA_Alloc(psLocalDevMemArena, - 3 * SGX_MMU_PAGE_SIZE, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(sMemBlockSysPAddr.uiAddr)) != IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_BIFResetPDAlloc: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - sMemBlockCpuPAddr = SysSysPAddrToCpuPAddr(sMemBlockSysPAddr); - pui8MemBlock = OSMapPhysToLin(sMemBlockCpuPAddr, - SGX_MMU_PAGE_SIZE * 3, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &hOSMemHandle); - if(!pui8MemBlock) - { - PVR_DPF((PVR_DBG_ERROR, "MMU_BIFResetPDAlloc: ERROR failed to map page tables")); - return PVRSRV_ERROR_BAD_MAPPING; - } - } - - psDevInfo->hBIFResetPDOSMemHandle = hOSMemHandle; - psDevInfo->sBIFResetPDDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sMemBlockCpuPAddr); - psDevInfo->sBIFResetPTDevPAddr.uiAddr = psDevInfo->sBIFResetPDDevPAddr.uiAddr + SGX_MMU_PAGE_SIZE; - psDevInfo->sBIFResetPageDevPAddr.uiAddr = psDevInfo->sBIFResetPTDevPAddr.uiAddr + SGX_MMU_PAGE_SIZE; - - - psDevInfo->pui32BIFResetPD = (IMG_UINT32 *)pui8MemBlock; - psDevInfo->pui32BIFResetPT = (IMG_UINT32 *)(pui8MemBlock + SGX_MMU_PAGE_SIZE); - - - OSMemSet(psDevInfo->pui32BIFResetPD, 0, SGX_MMU_PAGE_SIZE); - OSMemSet(psDevInfo->pui32BIFResetPT, 0, SGX_MMU_PAGE_SIZE); - - OSMemSet(pui8MemBlock + (2 * SGX_MMU_PAGE_SIZE), 0xDB, SGX_MMU_PAGE_SIZE); - - return PVRSRV_OK; -} - -IMG_VOID MMU_BIFResetPDFree(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - IMG_SYS_PHYADDR sPDSysPAddr; - - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - - if(psLocalDevMemArena == IMG_NULL) - { - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - 3 * SGX_MMU_PAGE_SIZE, - psDevInfo->pui32BIFResetPD, - psDevInfo->hBIFResetPDOSMemHandle); - } - else - { - OSUnMapPhysToLin(psDevInfo->pui32BIFResetPD, - 3 * SGX_MMU_PAGE_SIZE, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hBIFResetPDOSMemHandle); - - sPDSysPAddr = SysDevPAddrToSysPAddr(PVRSRV_DEVICE_TYPE_SGX, psDevInfo->sBIFResetPDDevPAddr); - RA_Free(psLocalDevMemArena, sPDSysPAddr.uiAddr, IMG_FALSE); - } -} - - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) -PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_ERROR eError; - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - IMG_HANDLE hPTPageOSMemHandle = IMG_NULL; - IMG_HANDLE hPDPageOSMemHandle = IMG_NULL; - IMG_UINT32 *pui32PD = IMG_NULL; - IMG_UINT32 *pui32PT = IMG_NULL; - IMG_CPU_PHYADDR sCpuPAddr; - IMG_DEV_PHYADDR sPTDevPAddr; - IMG_DEV_PHYADDR sPDDevPAddr; - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_UINT32 ui32PDOffset; - IMG_UINT32 ui32PTOffset; - - psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - - if(psLocalDevMemArena == IMG_NULL) - { - - eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - (IMG_VOID **)&pui32PT, - &hPTPageOSMemHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to OSAllocPages failed")); - return eError; - } - ui32PTOffset = 0; - - eError = OSAllocPages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - SGX_MMU_PAGE_SIZE, - (IMG_VOID **)&pui32PD, - &hPDPageOSMemHandle); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to OSAllocPages failed")); - return eError; - } - ui32PDOffset = 0; - - - if(pui32PT) - { - sCpuPAddr = OSMapLinToCPUPhys(hPTPageOSMemHandle, - pui32PT); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(hPTPageOSMemHandle, 0); - } - sPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - if(pui32PD) - { - sCpuPAddr = OSMapLinToCPUPhys(hPDPageOSMemHandle, - pui32PD); - } - else - { - - sCpuPAddr = OSMemHandleToCpuPAddr(hPDPageOSMemHandle, 0); - } - sPDDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - } - else - { - - - if(RA_Alloc(psLocalDevMemArena, - SGX_MMU_PAGE_SIZE * 2, - IMG_NULL, - IMG_NULL, - 0, - SGX_MMU_PAGE_SIZE, - 0, - &(psDevInfo->sBRN22997SysPAddr.uiAddr))!= IMG_TRUE) - { - PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR call to RA_Alloc failed")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - sCpuPAddr = SysSysPAddrToCpuPAddr(psDevInfo->sBRN22997SysPAddr); - pui32PT = OSMapPhysToLin(sCpuPAddr, - SGX_MMU_PAGE_SIZE * 2, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - &hPTPageOSMemHandle); - if(!pui32PT) - { - PVR_DPF((PVR_DBG_ERROR, "WorkaroundBRN22997: ERROR failed to map page tables")); - return PVRSRV_ERROR_BAD_MAPPING; - } - ui32PTOffset = 0; - - - sPTDevPAddr = SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE_SGX, sCpuPAddr); - - pui32PD = pui32PT + SGX_MMU_PAGE_SIZE/sizeof(IMG_UINT32); - ui32PDOffset = SGX_MMU_PAGE_SIZE; - hPDPageOSMemHandle = hPTPageOSMemHandle; - sPDDevPAddr.uiAddr = sPTDevPAddr.uiAddr + SGX_MMU_PAGE_SIZE; - } - - OSMemSet(pui32PD, 0, SGX_MMU_PAGE_SIZE); - OSMemSet(pui32PT, 0, SGX_MMU_PAGE_SIZE); - - - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, hPDPageOSMemHandle, ui32PDOffset, pui32PD, SGX_MMU_PAGE_SIZE, 0, PDUMP_PD_UNIQUETAG); - PDUMPMALLOCPAGETABLE(&psDeviceNode->sDevId, hPTPageOSMemHandle, ui32PTOffset, pui32PT, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, hPDPageOSMemHandle, pui32PD, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, hPTPageOSMemHandle, pui32PT, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PT_UNIQUETAG, PDUMP_PD_UNIQUETAG); - - psDevInfo->hBRN22997PTPageOSMemHandle = hPTPageOSMemHandle; - psDevInfo->hBRN22997PDPageOSMemHandle = hPDPageOSMemHandle; - psDevInfo->sBRN22997PTDevPAddr = sPTDevPAddr; - psDevInfo->sBRN22997PDDevPAddr = sPDDevPAddr; - psDevInfo->pui32BRN22997PD = pui32PD; - psDevInfo->pui32BRN22997PT = pui32PT; - - return PVRSRV_OK; -} - - -IMG_VOID WorkaroundBRN22997ReadHostPort(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - IMG_UINT32 *pui32PD = psDevInfo->pui32BRN22997PD; - IMG_UINT32 *pui32PT = psDevInfo->pui32BRN22997PT; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTIndex; - IMG_DEV_VIRTADDR sDevVAddr; - volatile IMG_UINT32 *pui32HostPort; - IMG_UINT32 ui32BIFCtrl; - - - - - pui32HostPort = (volatile IMG_UINT32*)(((IMG_UINT8*)psDevInfo->pvHostPortBaseKM) + SYS_SGX_HOSTPORT_BRN23030_OFFSET); - - - sDevVAddr.uiAddr = SYS_SGX_HOSTPORT_BASE_DEVVADDR + SYS_SGX_HOSTPORT_BRN23030_OFFSET; - - ui32PDIndex = (sDevVAddr.uiAddr & SGX_MMU_PD_MASK) >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); - ui32PTIndex = (sDevVAddr.uiAddr & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - - - pui32PD[ui32PDIndex] = (psDevInfo->sBRN22997PTDevPAddr.uiAddr>>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_VALID; - - pui32PT[ui32PTIndex] = (psDevInfo->sBRN22997PTDevPAddr.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; - - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, psDevInfo->hBRN22997PDPageOSMemHandle, pui32PD, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, psDevInfo->hBRN22997PTPageOSMemHandle, pui32PT, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PT_UNIQUETAG, PDUMP_PD_UNIQUETAG); - - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, - psDevInfo->sBRN22997PDDevPAddr.uiAddr); - PDUMPPDREG(&psDevInfo->sMMUAttrib, EUR_CR_BIF_DIR_LIST_BASE0, psDevInfo->sBRN22997PDDevPAddr.uiAddr, PDUMP_PD_UNIQUETAG); - - - ui32BIFCtrl = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_INVALDC_MASK); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_INVALDC_MASK); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32BIFCtrl); - - - if (pui32HostPort) - { - - IMG_UINT32 ui32Tmp; - ui32Tmp = *pui32HostPort; - } - else - { - PVR_DPF((PVR_DBG_ERROR,"Host Port not present for BRN22997 workaround")); - } - - - - - - - - PDUMPCOMMENT("RDW :SGXMEM:v4:%08X\r\n", sDevVAddr.uiAddr); - - PDUMPCOMMENT("SAB :SGXMEM:v4:%08X 4 0 hostport.bin", sDevVAddr.uiAddr); - - - pui32PD[ui32PDIndex] = 0; - pui32PT[ui32PTIndex] = 0; - - - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, psDevInfo->hBRN22997PDPageOSMemHandle, pui32PD, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - PDUMPMEMPTENTRIES(&psDevInfo->sMMUAttrib, psDevInfo->hBRN22997PTPageOSMemHandle, pui32PT, SGX_MMU_PAGE_SIZE, 0, IMG_TRUE, PDUMP_PT_UNIQUETAG, PDUMP_PD_UNIQUETAG); - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_INVALDC_MASK); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_INVALDC_MASK); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32BIFCtrl); -} - - -IMG_VOID WorkaroundBRN22997Free(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - - - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - PDUMPFREEPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN22997PDPageOSMemHandle, psDevInfo->pui32BRN22997PD, SGX_MMU_PAGE_SIZE, 0, PDUMP_PD_UNIQUETAG); - PDUMPFREEPAGETABLE(&psDeviceNode->sDevId, psDevInfo->hBRN22997PTPageOSMemHandle, psDevInfo->pui32BRN22997PT, SGX_MMU_PAGE_SIZE, 0, PDUMP_PT_UNIQUETAG); - - - if(psLocalDevMemArena == IMG_NULL) - { - if (psDevInfo->pui32BRN22997PD != IMG_NULL) - { - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pui32BRN22997PD, - psDevInfo->hBRN22997PDPageOSMemHandle); - } - - if (psDevInfo->pui32BRN22997PT != IMG_NULL) - { - OSFreePages(PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_KERNEL_ONLY, - SGX_MMU_PAGE_SIZE, - psDevInfo->pui32BRN22997PT, - psDevInfo->hBRN22997PTPageOSMemHandle); - } - } - else - { - if (psDevInfo->pui32BRN22997PT != IMG_NULL) - { - OSUnMapPhysToLin(psDevInfo->pui32BRN22997PT, - SGX_MMU_PAGE_SIZE * 2, - PVRSRV_HAP_WRITECOMBINE|PVRSRV_HAP_KERNEL_ONLY, - psDevInfo->hBRN22997PTPageOSMemHandle); - - - RA_Free(psLocalDevMemArena, psDevInfo->sBRN22997SysPAddr.uiAddr, IMG_FALSE); - } - } -} -#endif - - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) -PVRSRV_ERROR MMU_MapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - IMG_UINT32 *pui32PT; - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTIndex; - PDUMP_MMU_ATTRIB sMMUAttrib; - - psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - - sMMUAttrib = psDevInfo->sMMUAttrib; -#if defined(PDUMP) - MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode, - SGX_MMU_PAGE_MASK, - SGX_MMU_PT_SIZE * sizeof(IMG_UINT32)); -#endif - -#if defined(PDUMP) - { - IMG_CHAR szScript[128]; - - sprintf(szScript, "MALLOC :EXTSYSCACHE:PA_%08X%08X %u %u 0x%08X\r\n", 0, psDevInfo->sExtSysCacheRegsDevPBase.uiAddr, SGX_MMU_PAGE_SIZE, SGX_MMU_PAGE_SIZE, psDevInfo->sExtSysCacheRegsDevPBase.uiAddr); - PDumpOSWriteString2(szScript, PDUMP_FLAGS_CONTINUOUS); - } -#endif - - ui32PDIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PD_MASK) >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); - ui32PTIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - - pui32PT = (IMG_UINT32 *) psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; - - - pui32PT[ui32PTIndex] = (psDevInfo->sExtSysCacheRegsDevPBase.uiAddr>>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; - -#if defined(PDUMP) - - { - IMG_DEV_PHYADDR sDevPAddr; - IMG_CPU_PHYADDR sCpuPAddr; - IMG_UINT32 ui32PageMask; - IMG_UINT32 ui32PTE; - PVRSRV_ERROR eErr; - - PDUMP_GET_SCRIPT_AND_FILE_STRING(); - - ui32PageMask = sMMUAttrib.ui32PTSize - 1; - sCpuPAddr = OSMapLinToCPUPhys(psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->hPTPageOSMemHandle, &pui32PT[ui32PTIndex]); - sDevPAddr = SysCpuPAddrToDevPAddr(sMMUAttrib.sDevId.eDeviceType, sCpuPAddr); - ui32PTE = *((IMG_UINT32 *) (&pui32PT[ui32PTIndex])); - - eErr = PDumpOSBufprintf(hScript, - ui32MaxLenScript, - "WRW :%s:PA_%08X%08X:0x%08X :%s:PA_%08X%08X:0x%08X\r\n", - sMMUAttrib.sDevId.pszPDumpDevName, - (IMG_UINT32)(IMG_UINTPTR_T)PDUMP_PT_UNIQUETAG, - (sDevPAddr.uiAddr) & ~ui32PageMask, - (sDevPAddr.uiAddr) & ui32PageMask, - "EXTSYSCACHE", - (IMG_UINT32)(IMG_UINTPTR_T)PDUMP_PD_UNIQUETAG, - (ui32PTE & sMMUAttrib.ui32PDEMask) << sMMUAttrib.ui32PTEAlignShift, - ui32PTE & ~sMMUAttrib.ui32PDEMask); - if(eErr != PVRSRV_OK) - { - return eErr; - } - PDumpOSWriteString2(hScript, PDUMP_FLAGS_CONTINUOUS); - } -#endif - - return PVRSRV_OK; -} - - -PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - SYS_DATA *psSysData; - RA_ARENA *psLocalDevMemArena; - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_UINT32 ui32PDIndex; - IMG_UINT32 ui32PTIndex; - IMG_UINT32 *pui32PT; - PDUMP_MMU_ATTRIB sMMUAttrib; - - psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - - sMMUAttrib = psDevInfo->sMMUAttrib; - -#if defined(PDUMP) - MMU_SetPDumpAttribs(&sMMUAttrib, psDeviceNode, - SGX_MMU_PAGE_MASK, - SGX_MMU_PT_SIZE * sizeof(IMG_UINT32)); -#endif - SysAcquireData(&psSysData); - - psLocalDevMemArena = psSysData->apsLocalDevMemArena[0]; - - - ui32PDIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PD_MASK) >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); - ui32PTIndex = (SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - - - if (psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]) - { - if (psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr) - { - pui32PT = (IMG_UINT32 *) psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->apsPTInfoList[ui32PDIndex]->PTPageCpuVAddr; - } - } - - pui32PT[ui32PTIndex] = 0; - - PDUMPMEMPTENTRIES(&sMMUAttrib, psDeviceNode->sDevMemoryInfo.pBMKernelContext->psMMUContext->hPDOSMemHandle, &pui32PT[ui32PTIndex], sizeof(IMG_UINT32), 0, IMG_FALSE, PDUMP_PD_UNIQUETAG, PDUMP_PT_UNIQUETAG); - - return PVRSRV_OK; -} -#endif - - -#if PAGE_TEST -static IMG_VOID PageTest(IMG_VOID* pMem, IMG_DEV_PHYADDR sDevPAddr) -{ - volatile IMG_UINT32 ui32WriteData; - volatile IMG_UINT32 ui32ReadData; - volatile IMG_UINT32 *pMem32 = (volatile IMG_UINT32 *)pMem; - IMG_INT n; - IMG_BOOL bOK=IMG_TRUE; - - ui32WriteData = 0xffffffff; - - for (n=0; n<1024; n++) - { - pMem32[n] = ui32WriteData; - ui32ReadData = pMem32[n]; - - if (ui32WriteData != ui32ReadData) - { - - PVR_DPF ((PVR_DBG_ERROR, "Error - memory page test failed at device phys address 0x%08X", sDevPAddr.uiAddr + (n<<2) )); - PVR_DBG_BREAK; - bOK = IMG_FALSE; - } - } - - ui32WriteData = 0; - - for (n=0; n<1024; n++) - { - pMem32[n] = ui32WriteData; - ui32ReadData = pMem32[n]; - - if (ui32WriteData != ui32ReadData) - { - - PVR_DPF ((PVR_DBG_ERROR, "Error - memory page test failed at device phys address 0x%08X", sDevPAddr.uiAddr + (n<<2) )); - PVR_DBG_BREAK; - bOK = IMG_FALSE; - } - } - - if (bOK) - { - PVR_DPF ((PVR_DBG_VERBOSE, "MMU Page 0x%08X is OK", sDevPAddr.uiAddr)); - } - else - { - PVR_DPF ((PVR_DBG_VERBOSE, "MMU Page 0x%08X *** FAILED ***", sDevPAddr.uiAddr)); - } -} -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.h deleted file mode 100644 index 59b24c4..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/mmu.h +++ /dev/null @@ -1,154 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _MMU_H_ -#define _MMU_H_ - -#include "sgxinfokm.h" - -PVRSRV_ERROR -MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, IMG_DEV_PHYADDR *psPDDevPAddr); - -IMG_VOID -MMU_Finalise (MMU_CONTEXT *psMMUContext); - - -IMG_VOID -MMU_InsertHeap(MMU_CONTEXT *psMMUContext, MMU_HEAP *psMMUHeap); - -MMU_HEAP * -MMU_Create (MMU_CONTEXT *psMMUContext, - DEV_ARENA_DESCRIPTOR *psDevArena, - RA_ARENA **ppsVMArena, - PDUMP_MMU_ATTRIB **ppsMMUAttrib); - -IMG_VOID -MMU_Delete (MMU_HEAP *pMMUHeap); - -IMG_BOOL -MMU_Alloc (MMU_HEAP *pMMUHeap, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - IMG_UINT32 uFlags, - IMG_UINT32 uDevVAddrAlignment, - IMG_DEV_VIRTADDR *pDevVAddr); - -IMG_VOID -MMU_Free (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_UINT32 ui32Size); - -IMG_VOID -MMU_Enable (MMU_HEAP *pMMUHeap); - -IMG_VOID -MMU_Disable (MMU_HEAP *pMMUHeap); - -IMG_VOID -MMU_MapPages (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SYS_PHYADDR SysPAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); - -IMG_VOID -MMU_MapShadow (MMU_HEAP * pMMUHeap, - IMG_DEV_VIRTADDR MapBaseDevVAddr, - IMG_SIZE_T uByteSize, - IMG_CPU_VIRTADDR CpuVAddr, - IMG_HANDLE hOSMemHandle, - IMG_DEV_VIRTADDR * pDevVAddr, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); - -IMG_VOID -MMU_UnmapPages (MMU_HEAP *psMMUHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32PageCount, - IMG_HANDLE hUniqueTag); - -IMG_VOID -MMU_MapScatter (MMU_HEAP *pMMUHeap, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SYS_PHYADDR *psSysAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); - - -IMG_DEV_PHYADDR -MMU_GetPhysPageAddr(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr); - - -IMG_DEV_PHYADDR -MMU_GetPDDevPAddr(MMU_CONTEXT *pMMUContext); - - -#ifdef SUPPORT_SGX_MMU_BYPASS -IMG_VOID -EnableHostAccess (MMU_CONTEXT *psMMUContext); - - -IMG_VOID -DisableHostAccess (MMU_CONTEXT *psMMUContext); -#endif - -IMG_VOID MMU_InvalidateDirectoryCache(PVRSRV_SGXDEV_INFO *psDevInfo); - -PVRSRV_ERROR MMU_BIFResetPDAlloc(PVRSRV_SGXDEV_INFO *psDevInfo); - -IMG_VOID MMU_BIFResetPDFree(PVRSRV_SGXDEV_INFO *psDevInfo); - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) -PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_VOID WorkaroundBRN22997ReadHostPort(PVRSRV_SGXDEV_INFO *psDevInfo); - -IMG_VOID WorkaroundBRN22997Free(PVRSRV_DEVICE_NODE *psDeviceNode); -#endif - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) -PVRSRV_ERROR MMU_MapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode); - -PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode); -#endif - -IMG_BOOL MMU_IsHeapShared(MMU_HEAP* pMMU_Heap); - -#if defined(FIX_HW_BRN_31620) -IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask); - -IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); - -#endif - - -#if defined(PDUMP) -IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext); -#endif - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/pb.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/pb.c deleted file mode 100644 index ab6523a..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/pb.c +++ /dev/null @@ -1,466 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include "services_headers.h" -#include "sgx_bridge_km.h" -#include "sgxapi_km.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#include "pvr_bridge_km.h" -#include "pdump_km.h" -#include "sgxutils.h" - -#ifndef __linux__ -#pragma message("TODO: Review use of OS_PAGEABLE vs OS_NON_PAGEABLE") -#endif - -#include "lists.h" - -static IMPLEMENT_LIST_INSERT(PVRSRV_STUB_PBDESC) -static IMPLEMENT_LIST_REMOVE(PVRSRV_STUB_PBDESC) - -static PRESMAN_ITEM psResItemCreateSharedPB = IMG_NULL; -static PVRSRV_PER_PROCESS_DATA *psPerProcCreateSharedPB = IMG_NULL; - -static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); -static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); - -IMG_EXPORT PVRSRV_ERROR -SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevCookie, - IMG_BOOL bLockOnFailure, - IMG_UINT32 ui32TotalPBSize, - IMG_HANDLE *phSharedPBDesc, - PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsHWPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsHWBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO ***pppsSharedPBDescSubKernelMemInfos, - IMG_UINT32 *ui32SharedPBDescSubKernelMemInfosCount) -{ - PVRSRV_STUB_PBDESC *psStubPBDesc; - PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescSubKernelMemInfos=IMG_NULL; - PVRSRV_SGXDEV_INFO *psSGXDevInfo; - PVRSRV_ERROR eError; - - psSGXDevInfo = ((PVRSRV_DEVICE_NODE *)hDevCookie)->pvDevice; - - psStubPBDesc = psSGXDevInfo->psStubPBDescListKM; - if (psStubPBDesc != IMG_NULL) - { - IMG_UINT32 i; - PRESMAN_ITEM psResItem; - - if(psStubPBDesc->ui32TotalPBSize != ui32TotalPBSize) - { - PVR_DPF((PVR_DBG_WARNING, - "SGXFindSharedPBDescKM: Shared PB requested with different size (0x%x) from existing shared PB (0x%x) - requested size ignored", - ui32TotalPBSize, psStubPBDesc->ui32TotalPBSize)); - } - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) - * psStubPBDesc->ui32SubKernelMemInfosCount, - (IMG_VOID **)&ppsSharedPBDescSubKernelMemInfos, - IMG_NULL, - "Array of Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXFindSharedPBDescKM: OSAllocMem failed")); - - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto ExitNotFound; - } - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SHARED_PB_DESC, - psStubPBDesc, - 0, - &SGXCleanupSharedPBDescCallback); - - if (psResItem == IMG_NULL) - { - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) * psStubPBDesc->ui32SubKernelMemInfosCount, - ppsSharedPBDescSubKernelMemInfos, - 0); - - - PVR_DPF((PVR_DBG_ERROR, "SGXFindSharedPBDescKM: ResManRegisterRes failed")); - - eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE; - goto ExitNotFound; - } - - *ppsSharedPBDescKernelMemInfo = psStubPBDesc->psSharedPBDescKernelMemInfo; - *ppsHWPBDescKernelMemInfo = psStubPBDesc->psHWPBDescKernelMemInfo; - *ppsBlockKernelMemInfo = psStubPBDesc->psBlockKernelMemInfo; - *ppsHWBlockKernelMemInfo = psStubPBDesc->psHWBlockKernelMemInfo; - - *ui32SharedPBDescSubKernelMemInfosCount = - psStubPBDesc->ui32SubKernelMemInfosCount; - - *pppsSharedPBDescSubKernelMemInfos = ppsSharedPBDescSubKernelMemInfos; - - for(i=0; iui32SubKernelMemInfosCount; i++) - { - ppsSharedPBDescSubKernelMemInfos[i] = - psStubPBDesc->ppsSubKernelMemInfos[i]; - } - - psStubPBDesc->ui32RefCount++; - *phSharedPBDesc = (IMG_HANDLE)psResItem; - return PVRSRV_OK; - } - - eError = PVRSRV_OK; - if (bLockOnFailure) - { - if (psResItemCreateSharedPB == IMG_NULL) - { - psResItemCreateSharedPB = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SHARED_PB_DESC_CREATE_LOCK, - psPerProc, - 0, - &SGXCleanupSharedPBDescCreateLockCallback); - - if (psResItemCreateSharedPB == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXFindSharedPBDescKM: ResManRegisterRes failed")); - - eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE; - goto ExitNotFound; - } - PVR_ASSERT(psPerProcCreateSharedPB == IMG_NULL); - psPerProcCreateSharedPB = psPerProc; - } - else - { - eError = PVRSRV_ERROR_PROCESSING_BLOCKED; - } - } -ExitNotFound: - *phSharedPBDesc = IMG_NULL; - - return eError; -} - - -static PVRSRV_ERROR -SGXCleanupSharedPBDescKM(PVRSRV_STUB_PBDESC *psStubPBDescIn) -{ - - IMG_UINT32 i; - PVRSRV_DEVICE_NODE *psDeviceNode; - - psDeviceNode = (PVRSRV_DEVICE_NODE*)psStubPBDescIn->hDevCookie; - - - - - psStubPBDescIn->ui32RefCount--; - if (psStubPBDescIn->ui32RefCount == 0) - { - IMG_DEV_VIRTADDR sHWPBDescDevVAddr = psStubPBDescIn->sHWPBDescDevVAddr; - List_PVRSRV_STUB_PBDESC_Remove(psStubPBDescIn); - for(i=0 ; iui32SubKernelMemInfosCount; i++) - { - - PVRSRVFreeDeviceMemKM(psStubPBDescIn->hDevCookie, - psStubPBDescIn->ppsSubKernelMemInfos[i]); - } - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) * psStubPBDescIn->ui32SubKernelMemInfosCount, - psStubPBDescIn->ppsSubKernelMemInfos, - 0); - psStubPBDescIn->ppsSubKernelMemInfos = IMG_NULL; - - PVRSRVFreeSharedSysMemoryKM(psStubPBDescIn->psBlockKernelMemInfo); - - PVRSRVFreeDeviceMemKM(psStubPBDescIn->hDevCookie, psStubPBDescIn->psHWBlockKernelMemInfo); - - PVRSRVFreeDeviceMemKM(psStubPBDescIn->hDevCookie, psStubPBDescIn->psHWPBDescKernelMemInfo); - - PVRSRVFreeSharedSysMemoryKM(psStubPBDescIn->psSharedPBDescKernelMemInfo); - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_STUB_PBDESC), - psStubPBDescIn, - 0); - - - - SGXCleanupRequest(psDeviceNode, - &sHWPBDescDevVAddr, - PVRSRV_CLEANUPCMD_PB, - CLEANUP_WITH_POLL); - } - return PVRSRV_OK; - -} - -static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) -{ - PVRSRV_STUB_PBDESC *psStubPBDesc = (PVRSRV_STUB_PBDESC *)pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - return SGXCleanupSharedPBDescKM(psStubPBDesc); -} - -static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) -{ -#ifdef DEBUG - PVRSRV_PER_PROCESS_DATA *psPerProc = (PVRSRV_PER_PROCESS_DATA *)pvParam; - PVR_ASSERT(psPerProc == psPerProcCreateSharedPB); -#else - PVR_UNREFERENCED_PARAMETER(pvParam); -#endif - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bDummy); - - psPerProcCreateSharedPB = IMG_NULL; - psResItemCreateSharedPB = IMG_NULL; - - return PVRSRV_OK; -} - - -IMG_EXPORT PVRSRV_ERROR -SGXUnrefSharedPBDescKM(IMG_HANDLE hSharedPBDesc) -{ - PVR_ASSERT(hSharedPBDesc != IMG_NULL); - - return ResManFreeResByPtr(hSharedPBDesc, CLEANUP_WITH_POLL); -} - - -IMG_EXPORT PVRSRV_ERROR -SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psSharedPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psHWPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo, - IMG_UINT32 ui32TotalPBSize, - IMG_HANDLE *phSharedPBDesc, - PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescSubKernelMemInfos, - IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount, - IMG_DEV_VIRTADDR sHWPBDescDevVAddr) -{ - PVRSRV_STUB_PBDESC *psStubPBDesc=IMG_NULL; - PVRSRV_ERROR eRet = PVRSRV_ERROR_INVALID_PERPROC; - IMG_UINT32 i; - PVRSRV_SGXDEV_INFO *psSGXDevInfo; - PRESMAN_ITEM psResItem; - - - if (psPerProcCreateSharedPB != psPerProc) - { - goto NoAdd; - } - else - { - PVR_ASSERT(psResItemCreateSharedPB != IMG_NULL); - - ResManFreeResByPtr(psResItemCreateSharedPB, CLEANUP_WITH_POLL); - - PVR_ASSERT(psResItemCreateSharedPB == IMG_NULL); - PVR_ASSERT(psPerProcCreateSharedPB == IMG_NULL); - } - - psSGXDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookie)->pvDevice; - - psStubPBDesc = psSGXDevInfo->psStubPBDescListKM; - if (psStubPBDesc != IMG_NULL) - { - if(psStubPBDesc->ui32TotalPBSize != ui32TotalPBSize) - { - PVR_DPF((PVR_DBG_WARNING, - "SGXAddSharedPBDescKM: Shared PB requested with different size (0x%x) from existing shared PB (0x%x) - requested size ignored", - ui32TotalPBSize, psStubPBDesc->ui32TotalPBSize)); - - } - - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SHARED_PB_DESC, - psStubPBDesc, - 0, - &SGXCleanupSharedPBDescCallback); - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, - "SGXAddSharedPBDescKM: " - "Failed to register existing shared " - "PBDesc with the resource manager")); - goto NoAddKeepPB; - } - - - psStubPBDesc->ui32RefCount++; - - *phSharedPBDesc = (IMG_HANDLE)psResItem; - eRet = PVRSRV_OK; - goto NoAddKeepPB; - } - - if(OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_STUB_PBDESC), - (IMG_VOID **)&psStubPBDesc, - 0, - "Stub Parameter Buffer Description") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXAddSharedPBDescKM: Failed to alloc " - "StubPBDesc")); - eRet = PVRSRV_ERROR_OUT_OF_MEMORY; - goto NoAdd; - } - - - psStubPBDesc->ppsSubKernelMemInfos = IMG_NULL; - - if(OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) - * ui32SharedPBDescSubKernelMemInfosCount, - (IMG_VOID **)&psStubPBDesc->ppsSubKernelMemInfos, - 0, - "Array of Kernel Memory Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXAddSharedPBDescKM: " - "Failed to alloc " - "StubPBDesc->ppsSubKernelMemInfos")); - eRet = PVRSRV_ERROR_OUT_OF_MEMORY; - goto NoAdd; - } - - if(PVRSRVDissociateMemFromResmanKM(psSharedPBDescKernelMemInfo) - != PVRSRV_OK) - { - goto NoAdd; - } - - if(PVRSRVDissociateMemFromResmanKM(psHWPBDescKernelMemInfo) - != PVRSRV_OK) - { - goto NoAdd; - } - - if(PVRSRVDissociateMemFromResmanKM(psBlockKernelMemInfo) - != PVRSRV_OK) - { - goto NoAdd; - } - - if(PVRSRVDissociateMemFromResmanKM(psHWBlockKernelMemInfo) - != PVRSRV_OK) - { - goto NoAdd; - } - - psStubPBDesc->ui32RefCount = 1; - psStubPBDesc->ui32TotalPBSize = ui32TotalPBSize; - psStubPBDesc->psSharedPBDescKernelMemInfo = psSharedPBDescKernelMemInfo; - psStubPBDesc->psHWPBDescKernelMemInfo = psHWPBDescKernelMemInfo; - psStubPBDesc->psBlockKernelMemInfo = psBlockKernelMemInfo; - psStubPBDesc->psHWBlockKernelMemInfo = psHWBlockKernelMemInfo; - - psStubPBDesc->ui32SubKernelMemInfosCount = - ui32SharedPBDescSubKernelMemInfosCount; - for(i=0; ippsSubKernelMemInfos[i] = ppsSharedPBDescSubKernelMemInfos[i]; - if(PVRSRVDissociateMemFromResmanKM(ppsSharedPBDescSubKernelMemInfos[i]) - != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXAddSharedPBDescKM: " - "Failed to dissociate shared PBDesc " - "from process")); - goto NoAdd; - } - } - - psStubPBDesc->sHWPBDescDevVAddr = sHWPBDescDevVAddr; - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_SHARED_PB_DESC, - psStubPBDesc, - 0, - &SGXCleanupSharedPBDescCallback); - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXAddSharedPBDescKM: " - "Failed to register shared PBDesc " - " with the resource manager")); - goto NoAdd; - } - psStubPBDesc->hDevCookie = hDevCookie; - - - List_PVRSRV_STUB_PBDESC_Insert(&(psSGXDevInfo->psStubPBDescListKM), - psStubPBDesc); - - *phSharedPBDesc = (IMG_HANDLE)psResItem; - - return PVRSRV_OK; - -NoAdd: - if(psStubPBDesc) - { - if(psStubPBDesc->ppsSubKernelMemInfos) - { - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_KERNEL_MEM_INFO *) * ui32SharedPBDescSubKernelMemInfosCount, - psStubPBDesc->ppsSubKernelMemInfos, - 0); - psStubPBDesc->ppsSubKernelMemInfos = IMG_NULL; - } - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_STUB_PBDESC), - psStubPBDesc, - 0); - - } - -NoAddKeepPB: - for (i = 0; i < ui32SharedPBDescSubKernelMemInfosCount; i++) - { - PVRSRVFreeDeviceMemKM(hDevCookie, ppsSharedPBDescSubKernelMemInfos[i]); - } - - PVRSRVFreeSharedSysMemoryKM(psSharedPBDescKernelMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookie, psHWPBDescKernelMemInfo); - - PVRSRVFreeSharedSysMemoryKM(psBlockKernelMemInfo); - PVRSRVFreeDeviceMemKM(hDevCookie, psHWBlockKernelMemInfo); - - return eRet; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_bridge_km.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_bridge_km.h deleted file mode 100644 index 8fb3002..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_bridge_km.h +++ /dev/null @@ -1,160 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SGX_BRIDGE_KM_H__) -#define __SGX_BRIDGE_KM_H__ - -#include "sgxapi_km.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#include "sgx_bridge.h" -#include "pvr_bridge.h" -#include "perproc.h" - -#if defined (__cplusplus) -extern "C" { -#endif - -IMG_IMPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK_KM *psKick); -#else -PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK *psKick); -#endif - -#if defined(SGX_FEATURE_2D_HARDWARE) -IMG_IMPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK_KM *psKick); -#else -PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK *psKick); -#endif -#endif - -IMG_IMPORT -PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, -#if defined (SUPPORT_SID_INTERFACE) - SGX_CCB_KICK_KM *psCCBKick); -#else - SGX_CCB_KICK *psCCBKick); -#endif - -IMG_IMPORT -PVRSRV_ERROR SGXGetPhysPageAddrKM(IMG_HANDLE hDevMemHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_DEV_PHYADDR *pDevPAddr, - IMG_CPU_PHYADDR *pCpuPAddr); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV SGXGetMMUPDAddrKM(IMG_HANDLE hDevCookie, - IMG_HANDLE hDevMemContext, - IMG_DEV_PHYADDR *psPDDevPAddr); - -IMG_IMPORT -PVRSRV_ERROR SGXGetClientInfoKM(IMG_HANDLE hDevCookie, - SGX_CLIENT_INFO* psClientInfo); - -IMG_IMPORT -PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, - SGX_MISC_INFO *psMiscInfo, - PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_HANDLE hDevMemContext); - -IMG_IMPORT -PVRSRV_ERROR SGXReadHWPerfCBKM(IMG_HANDLE hDevHandle, - IMG_UINT32 ui32ArraySize, - PVRSRV_SGX_HWPERF_CB_ENTRY *psHWPerfCBData, - IMG_UINT32 *pui32DataCount, - IMG_UINT32 *pui32ClockSpeed, - IMG_UINT32 *pui32HostTimeStamp); - -IMG_IMPORT -PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, - IMG_BOOL bWaitForComplete); - -IMG_IMPORT -PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_HEAP_INFO_KM *pasHeapInfo, - IMG_DEV_PHYADDR *psPDDevPAddr); -#else - SGX_BRIDGE_INFO_FOR_SRVINIT *psInitInfo); -#endif - -IMG_IMPORT -PVRSRV_ERROR DevInitSGXPart2KM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevHandle, -#if defined (SUPPORT_SID_INTERFACE) - SGX_BRIDGE_INIT_INFO_KM *psInitInfo); -#else - SGX_BRIDGE_INIT_INFO *psInitInfo); -#endif - -IMG_IMPORT PVRSRV_ERROR -SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevCookie, - IMG_BOOL bLockOnFailure, - IMG_UINT32 ui32TotalPBSize, - IMG_HANDLE *phSharedPBDesc, - PVRSRV_KERNEL_MEM_INFO **ppsSharedPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsHWPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO **ppsHWBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO ***pppsSharedPBDescSubKernelMemInfos, - IMG_UINT32 *ui32SharedPBDescSubKernelMemInfosCount); - -IMG_IMPORT PVRSRV_ERROR -SGXUnrefSharedPBDescKM(IMG_HANDLE hSharedPBDesc); - -IMG_IMPORT PVRSRV_ERROR -SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevCookie, - PVRSRV_KERNEL_MEM_INFO *psSharedPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psHWPBDescKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo, - PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo, - IMG_UINT32 ui32TotalPBSize, - IMG_HANDLE *phSharedPBDesc, - PVRSRV_KERNEL_MEM_INFO **psSharedPBDescSubKernelMemInfos, - IMG_UINT32 ui32SharedPBDescSubKernelMemInfosCount, - IMG_DEV_VIRTADDR sHWPBDescDevVAddr); - - -IMG_IMPORT PVRSRV_ERROR -SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, -#if defined (SUPPORT_SID_INTERFACE) - SGX_INTERNAL_DEVINFO_KM *psSGXInternalDevInfo); -#else - SGX_INTERNAL_DEVINFO *psSGXInternalDevInfo); -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_ukernel_status_codes.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_ukernel_status_codes.h deleted file mode 100644 index 12bae74..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgx_ukernel_status_codes.h +++ /dev/null @@ -1,1024 +0,0 @@ -/*!**************************************************************************** -@File sgx_ukernel_status_codes.h - -@Title SGX microkernel debug status codes - -@Author Imagination Technologies - -@Date 7th Feb 2008 - -@Copyright Copyright 2003-2008 by Imagination Technologies Limited. - All rights reserved. No part of this software, either material - or conceptual may be copied or distributed, transmitted, - transcribed, stored in a retrieval system or translated into - any human or computer language in any form by any means, - electronic, mechanical, manual or otherwise, or disclosed to - third parties without the express written permission of - Imagination Technologies Limited, Home Park Estate, - Kings Langley, Hertfordshire, WD4 8LZ, U.K. - -@Platform Generic - -@Description SGX microkernel debug status codes - -@DoxygenVer - -******************************************************************************/ - -/****************************************************************************** -Modifications :- -$Log: sgx_ukernel_status_codes.h $ - - --- Revision Logs Removed --- -*****************************************************************************/ - -#if !defined (__SGX_UKERNEL_STATUS_CODES_H__) -#define __SGX_UKERNEL_STATUS_CODES_H__ - -/* - It would be nice to put these definitions into an enumeration, but USEASM - only has access to the C preprocessor so macros are required. -*/ - -/* - Bits 24-31 of these codes (0xAD) are a magic number used to help - distinguish between them and other debug information which can be - optionally dumped into the status buffer, e.g. sync object values. -*/ - -/* - Microkernel trace codes -*/ -#define MKTC_EHEVENT_3DMEMFREE 0xAD000001 -#define MKTC_EHEVENT_PIXELENDRENDER 0xAD000002 -#define MKTC_EHEVENT_ISPBREAKPOINT 0xAD000004 -#define MKTC_EHEVENT_TAFINISHED 0xAD000005 -#define MKTC_EHEVENT_MEMTHRESHOLD 0xAD000006 -#define MKTC_EHEVENT_OUTOFMEM 0xAD000007 -#define MKTC_EHEVENT_TATERMINATE 0xAD000008 -#define MKTC_EHEVENT_TIMER 0xAD000009 -#define MKTC_EHEVENT_SWEVENT 0xAD00000A -#define MKTC_EHEVENT_2DCOMPLETE 0xAD00000B -#define MKTC_EHEVENT_MTE_DRAIN_COMPLETE 0xAD00000C - -#define MKTC_3DEVENT_3DMEMFREE 0xAD000100 -#define MKTC_3DEVENT_PIXELENDRENDER 0xAD000101 -#define MKTC_3DEVENT_ISPBREAKPOINT 0xAD000102 -#define MKTC_3DEVENT_END 0xAD000104 -#define MKTC_3DLB_3DMEMFREE 0xAD000180 -#define MKTC_3DLB_PIXELENDRENDER 0xAD000181 -#define MKTC_3DLB_ISPBREAKPOINT 0xAD000182 -#define MKTC_3DLB_FIND3D 0xAD000183 -#define MKTC_3DLB_END 0xAD000184 - -#define MKTC_TAEVENT_TAFINISHED 0xAD000200 -#define MKTC_TAEVENT_END 0xAD000202 -#define MKTC_TALB_TAFINISHED 0xAD000280 -#define MKTC_TALB_FINDTA 0xAD000281 -#define MKTC_TALB_END 0xAD000282 - -#define MKTC_CRRL_WRITEOPSBLOCKED 0xAD000300 -#define MKTC_CRRL_READOPSBLOCKED 0xAD000301 -#define MKTC_CRRL_FOUNDRENDER 0xAD000302 -#define MKTC_CRRL_NORENDER 0xAD000303 -#define MKTC_CRRL_TARC_DIFFERENT 0xAD000304 -#define MKTC_FINDRENDER_BRN_23378 0xAD000308 -#define MKTC_CRRL_BLOCKEDRC 0xAD000309 -#define MKTC_CRRL_BLOCKEDRTDATA 0xAD00030A -#define MKTC_CRRL_CONTEXT_SUSPENDED 0xAD00030B -#define MKTC_CRRL_TAWAITINGFORMEM 0xAD00030C -#define MKTC_CRRL_TAOOMBUTPRIOINV 0xAD00030D - -#define MKTC_KICKRENDER_START 0xAD000400 -#define MKTC_KICKRENDER_OVERLAP 0xAD000401 -#define MKTC_KICKRENDER_ISP_START 0xAD000402 -#define MKTC_KICKRENDER_RESUME 0xAD000403 -#define MKTC_KICKRENDER_CONFIG_REGION_HDRS 0xAD000404 -#define MKTC_KICKRENDER_END 0xAD000408 -#define MKTC_KICKRENDER_RENDERCONTEXT 0xAD000409 -#define MKTC_KICKRENDER_RTDATA 0xAD00040A -#define MKTC_KICKRENDER_PID 0xAD00040B - -#define MKTC_RENDERFINISHED_START 0xAD000500 -#define MKTC_RF_START_NEXT_MT 0xAD000501 -#define MKTC_RF_ALL_MTS_DONE 0xAD000502 -#define MKTC_RENDERFINISHED_END 0xAD000503 -#define MKTC_VISQUERY_START 0xAD000504 -#define MKTC_VISQUERY_END 0xAD000505 -#define MKTC_TRANSFERRENDERFINISHED_START 0xAD000508 -#define MKTC_TRANSFERRENDERFINISHED_END 0xAD000509 -#define MKTC_TRF_UPDATESTATUSVALS 0xAD00050A -#define MKTC_TRF_UPDATESTATUSVALS_DONE 0xAD00050B - -#define MKTC_PIXELENDRENDER_START 0xAD000600 -#define MKTC_PIXELENDRENDER_AFTERLOCK 0xAD000601 -#define MKTC_PIXELENDRENDER_END 0xAD000602 -#define MKTC_PIXELENDRENDER_TLQEND 0xAD000603 - -#define MKTC_3DMEMFREE_START 0xAD000700 -#define MKTC_3DMEMFREE_AFTERLOCK 0xAD000701 -#define MKTC_3DMEMFREE_TESTEOR 0xAD000702 -#define MKTC_3DMEMFREE_END 0xAD000703 - -#define MKTC_KICKTA_START 0xAD000800 -#define MKTC_KICKTA_OVERLAP 0xAD000801 -#define MKTC_KICKTA_RESETCONTEXT 0xAD000802 -#define MKTC_KICKTA_VDM_START 0xAD000803 -#define MKTC_KICKTA_END 0xAD000804 -#define MKTC_KICKTA_RENDERCONTEXT 0xAD000805 -#define MKTC_KICKTA_RTDATA 0xAD000806 -#define MKTC_KICKTA_RESET_VDMCSSTATUS 0xAD000807 -#define MKTC_KICKTA_RESET_BUFFERS 0xAD000808 -#define MKTC_KICKTA_PID 0xAD000809 -#define MKTC_KICKTA_TACMD_DEBUG 0xAD00080A -#define MKTC_KICKTA_FREECONTEXT 0xAD00080B -#define MKTC_KICKTA_PIM_PATCHING 0xAD00080C - -#define MKTC_KICKTA_CHKPT_START_DUMMY_CS 0xAD0008A1 -#define MKTC_KICKTA_CHKPT_START_DUMMY_TAK 0xAD0008A2 -#define MKTC_KICKTA_CHKPT_WAIT_FOR_DUMMY_KICK 0xAD0008A3 -#define MKTC_KICKTA_CHKPT_WAIT_NEXT_CORE 0xAD0008A4 -#define MKTC_KICKTA_CHKPT_RESET_COMPLETE 0xAD0008A5 -#define MKTC_KICKTA_CHKPT_CHECK_SWITCH 0xAD0008A6 - -#define MKTC_HOSTKICK_START 0xAD000900 -#define MKTC_HOSTKICK_END 0xAD000901 -#define MKTC_HOSTKICK_PROCESS_QUEUES_END 0xAD000902 -#define MKTC_HOSTKICK_2D 0xAD000903 -#define MKTC_HOSTKICK_TRANSFER 0xAD000904 -#define MKTC_HOSTKICK_TA 0xAD000905 -#define MKTC_HOSTKICK_PROCESS_QUEUES 0xAD000906 -#define MKTC_HOSTKICK_RESUME 0xAD000908 -#define MKTC_HOSTKICK_POWEROFF 0xAD000909 -#define MKTC_HOSTKICK_IDLE 0xAD00090A -#define MKTC_HOSTKICK_CTXSUSPEND 0xAD00090B -#define MKTC_HOSTKICK_CTXRESUME 0xAD00090C - -#define MKTC_TIMER_POTENTIAL_TA_LOCKUP 0xAD000A00 -#define MKTC_TIMER_POTENTIAL_3D_LOCKUP 0xAD000A01 -#define MKTC_TIMER_CTAL_START 0xAD000A02 -#define MKTC_TIMER_CTAL_END 0xAD000A03 -#define MKTC_TIMER_C3DL_START 0xAD000A04 -#define MKTC_TIMER_C3DL_END 0xAD000A05 -#define MKTC_TIMER_LOCKUP 0xAD000A0A -#define MKTC_TIMER_NOT_TA_LOCKUP 0xAD000A0B -#define MKTC_TIMER_NOT_3D_LOCKUP 0xAD000A0C -#define MKTC_TIMER_2D_LOCKUP 0xAD000A0D -#define MKTC_TIMER_POTENTIAL_2D_LOCKUP 0xAD000A10 -#define MKTC_TIMER_C2DL_START 0xAD000A11 -#define MKTC_TIMER_C2DL_END 0xAD000A12 -#define MKTC_TIMER_NOT_2D_LOCKUP 0xAD000A13 -#define MKTC_TIMER_ABORTALL 0xAD000A0E -#define MKTC_TIMER_END 0xAD000A0F - -#define MKTC_HWR_START 0xAD000B00 -#define MKTC_HWR_END 0xAD000B01 -#define MKTC_HWR_HKS 0xAD000B02 -#define MKTC_HWR_PRL 0xAD000B03 -#define MKTC_HWR_PRL_DP 0xAD000B04 -#define MKTC_HWR_CRL 0xAD000B05 -#define MKTC_HWR_CRL_DP 0xAD000B06 -#define MKTC_HWR_TRL 0xAD000B07 -#define MKTC_HWR_TRL_DP 0xAD000B08 -#define MKTC_HWR_ISC 0xAD000B09 -#define MKTC_HWR_2DL 0xAD000B0A - -#define MKTC_URSV_START 0xAD000C00 -#define MKTC_URSV_UPDATEWRITEOPS 0xAD000C01 -#define MKTC_URSV_UPDATESTATUSVALS 0xAD000C03 -#define MKTC_URSV_UPDATESTATUSVALS_DONE 0xAD000C04 -#define MKTC_URSV_END 0xAD000C05 - -#define MKTC_STORETACONTEXT_START 0xAD000D00 -#define MKTC_STORETACONTEXT_END 0xAD000D01 -#define MKTC_LOADTACONTEXT_START 0xAD000D02 -#define MKTC_LOADTACONTEXT_END 0xAD000D03 -#define MKTC_STORE3DCONTEXT_START 0xAD000D04 -#define MKTC_STORE3DCONTEXT_END 0xAD000D05 -#define MKTC_LOAD3DCONTEXT_START 0xAD000D06 -#define MKTC_LOAD3DCONTEXT_END 0xAD000D07 - -#define MKTC_FINDTA_POWERREQUEST 0xAD000E00 -#define MKTC_FINDTA_TA3D_OVERLAP_BLOCKED 0xAD000E01 -#define MKTC_FINDTA_RTDATA_RENDERING 0xAD000E02 -#define MKTC_FINDTA_3DRC_DIFFERENT 0xAD000E03 -#define MKTC_FINDTA_WRITEOPSBLOCKED 0xAD000E04 -#define MKTC_FINDTA_READOPSBLOCKED 0xAD000E05 -#define MKTC_FINDTA_RESIZE_PB 0xAD000E06 -#define MKTC_FINDTA_RESIZE_PB_BLOCKED 0xAD000E07 -#define MKTC_FINDTA_SHRINK_PB 0xAD000E08 -#define MKTC_FINDTA_TAPB_DIFFERENT 0xAD000E09 -#define MKTC_FINDTA_TACONTEXT_DIFFERENT 0xAD000E0A -#define MKTC_FINDTA_TA2D_OVERLAP_BLOCKED 0xAD000E0B -#define MKTC_FINDTA_CONTEXT_SUSPENDED 0xAD000E0C -#define MKTC_FINDTA_SRC_READOPSBLOCKED 0xAD000E0D -#define MKTC_FINDTA_SRC_WRITEOPSBLOCKED 0xAD000E0E - -#define MKTC_CTRL_SRCREADOPSBLOCKED 0xAD000F00 -#define MKTC_CTRL_SRCWRITEOPSBLOCKED 0xAD000F01 -#define MKTC_CTRL_DSTREADOPSBLOCKED 0xAD000F02 -#define MKTC_CTRL_DSTWRITEOPSBLOCKED 0xAD000F03 -#define MKTC_CTRL_TARC_DIFFERENT 0xAD000F04 -#define MKTC_CTRL_CONTEXT_SUSPENDED 0xAD000F05 - -#define MKTC_DPTA_START 0xAD001000 -#define MKTC_DPTA_UPDATESTATUSVALS 0xAD001001 -#define MKTC_DPTA_UPDATESTATUSVALS_DONE 0xAD001002 -#define MKTC_DPTA_NORENDER 0xAD001003 -#define MKTC_DPTA_MEMFREE 0xAD001004 -#define MKTC_DPTA_INC_COMPLETECOUNT 0xAD001005 - -#define MKTC_INVALDC 0xAD001100 -#define MKTC_INVALPT 0xAD001101 -#define MKTC_INVALSLC 0xAD001102 -#define MKTC_INVALDATA 0xAD001103 - -#define MKTC_RESTARTTA 0xAD001200 -#define MKTC_CSABORTNONGBL 0xAD001201 -#define MKTC_CSABORTALL 0xAD001202 -#define MKTC_CSRENDERINPROGRESS 0xAD001203 -#define MKTC_TATERMRENDERINPROGRESS 0xAD001204 -#define MKTC_RESTARTTANORENDER 0xAD001205 -#define MKTC_SPM_KICKRENDER 0xAD001206 -#define MKTC_SPM_RESUME_ABORTCOMPLETE 0xAD001208 -#define MKTC_RESUMEVDM 0xAD001209 -#define MKTC_REMOVE_RESERVE_MEM 0xAD00120A -#define MKTC_INCREASEZLSTHRESHOLD 0xAD00120B -#define MKTC_CSFORCEABORTALL 0xAD00120C - -#define MKTC_DUMMY_DEPTH 0xAD00120D -#define MKTC_DUMMY_DEPTH_CS 0xAD00120E - -#define MKTC_MTETE_OOM 0xAD00120F -#define MKTC_MTETE_OOM_FIRST_STORE_REF 0xAD001210 -#define MKTC_MERGE_STATE_TABLES 0xAD001211 -#define MKTC_NO_PAGES_LEFT_FOR_23055 0xAD001212 -#define MKTC_NO_STATE_MODS 0xAD001213 -#define MKTC_FIND_MTE_PAGE_IN_STATE 0xAD001214 -#define MKTC_MTE_PAGE_FOUND 0xAD001215 -#define MKTC_MOVE_MTE_PAGE_TO_TA_STATE 0xAD001216 -#define MKTC_MOVE_MTE_PAGE_TO_TA_STATE_END 0xAD001217 -#define MKTC_ZERO_ZLS_THRESHOLD 0xAD001218 -#define MKTC_RESTORE_ZLS_THRESHOLD 0xAD001219 -#define MKTC_FIND_MTE_PAGE_IN_CSM 0xAD00121A -#define MKTC_REISSUE_MTE_PAGE 0xAD00121B -#define MKTC_REISSUE_MTE_PAGE_REQUIRED 0xAD00121C -#define MKTC_REISSUE_MTE_PAGE_END 0xAD00121D -#define MKTC_RESET_TE_PSG 0xAD00121E - -#define MKTC_OOM_WRITEOPSBLOCKED 0xAD00121F -#define MKTC_OOM_READOPSBLOCKED 0xAD001220 -#define MKTC_OOM_SRC_WRITEOPSBLOCKED 0xAD001221 -#define MKTC_OOM_SRC_READOPSBLOCKED 0xAD001222 -#define MKTC_OOM_SPM_DEADLOCK 0xAD001223 -#define MKTC_OOM_SPM_DEADLOCK_MEM_ADDED 0xAD001224 -#define MKTC_BRN27311_RESET 0xAD001225 -#define MKTC_SPM_INVALID_ZLSCONFIG 0xAD001226 - -#define MKTC_SPM_ALREADY_DRAINED 0xAD001227 -#define MKTC_DRAIN_COMPLETE 0xAD001228 -#define MKTC_DRAIN_SET_FLAG 0xAD001229 - -#define MKTC_OOM_TYPE_MT 0xAD00122A -#define MKTC_OOM_TYPE_GLOBAL 0xAD001230 -#define MKTC_OOM_CAUSE_GBL_OOM 0xAD001231 - -#define MKTC_CHECK_MTE_PAGE_REISSUE 0xAD001240 -#define MKTC_CPRI_VALID_ENTRIES 0xAD001241 -#define MKTC_CPRI_STORE_DPLIST 0xAD001242 -#define MKTC_CPRI_STORE_OTPM_CSM 0xAD001243 -#define MKTC_CPRI_ABORT_MT_IDX 0xAD001244 -#define MKTC_CPRI_ABORT_CORE_IDX 0xAD001245 -#define MKTC_CPRI_CSM_TABLE_DATA 0xAD001246 -#define MKTC_CPRI_PIM_DATA 0xAD001247 -#define MKTC_CPRI_DO_CIRCULAR_TEST 0xAD001248 - -#define MKTC_CPRI_WRITE_ENTRIES 0xAD001249 - -#define MKTC_MTE_ENTRY_NOT_IN_ANY_LIST 0xAD001250 - -#define MKTC_SPMAC_IGNORE_TERMINATE 0xAD001251 - -#define MKTC_SPMAC_REQUEST_3D_TIMEOUT 0xAD001252 -#define MKTC_SPMAC_3D_TIMEOUT_COMPLETE 0xAD001253 - -/* PB Load/store status */ -#define MKTC_LOADTAPB_START 0xAD001300 -#define MKTC_LOADTAPB_END 0xAD001301 -#define MKTC_STORETAPB_START 0xAD001302 -#define MKTC_STORETAPB_END 0xAD001303 -#define MKTC_LOAD3DPB_START 0xAD001304 -#define MKTC_LOAD3DPB_END 0xAD001305 -#define MKTC_STORE3DPB_START 0xAD001306 -#define MKTC_STORE3DPB_END 0xAD001307 -#define MKTC_LOADTAPB_PAGETABLE_DONE 0xAD001308 -#define MKTC_LOAD3DPB_PAGETABLE_DONE 0xAD001309 - -#define MKTC_TIMER_RC_CLEANUP 0xAD001400 -#define MKTC_TIMER_RC_CLEANUP_COMPLETE 0xAD001401 -#define MKTC_TIMER_RT_CLEANUP 0xAD001410 -#define MKTC_TIMER_RT_CLEANUP_COMPLETE 0xAD001411 -#define MKTC_TIMER_RT_CLEANUP_PENDING 0xAD001412 -#define MKTC_TIMER_RT_CLEANUP_TIDYPARTIALLIST 0xAD001413 -#define MKTC_TIMER_TC_CLEANUP 0xAD001420 -#define MKTC_TIMER_TC_CLEANUP_COMPLETE 0xAD001421 -#define MKTC_TIMER_2DC_CLEANUP 0xAD001430 -#define MKTC_TIMER_2DC_CLEANUP_COMPLETE 0xAD001431 -#define MKTC_TIMER_SHAREDPBDESC_CLEANUP 0xAD001440 - -#define MKTC_TIMER_ISP_SWITCH_POTENTIAL_LOCKUP 0xAD001450 -#define MKTC_TIMER_ISP_SWITCH_FORCE_SWITCH 0xAD001451 - -#define MKTC_UTSO_UPDATEREADOPS 0xAD001600 -#define MKTC_UTSO_UPDATEWRITEOPS 0xAD001601 - -#define MKTC_TAFINISHED_UPDATESTATUSVALS 0xAD001700 -#define MKTC_TAFINISHED_UPDATESTATUSVALS_DONE 0xAD001701 -#define MKTC_TAFINISHED_NORENDER 0xAD001702 -#define MKTC_TAFINISHED_LASTKICK 0xAD001703 -#define MKTC_TAFINISHED_FINDRENDER 0xAD001704 -#define MKTC_TAFINISHED_FINDTA 0xAD001705 -#define MKTC_TAFINISHED_END 0xAD001706 -#define MKTC_TAF_SPM_DEADLOCK_MEM_REMOVED 0xAD001707 -#define MKTC_TAF_RESERVE_MEM 0xAD001708 -#define MKTC_TAF_RESERVE_MEM_REQUEST_RENDER 0xAD001709 -#define MKTC_TAF_RESERVE_FREE_RENDER_FINISHED 0xAD00170A -#define MKTC_TAF_RESERVE_FREE_DUMMY_RENDER 0xAD00170B -#define MKTC_TAF_DEBUG_SAS 0xAD00170C -#define MKTC_TAFINISHED_NOCONTEXTSWITCH 0xAD00170D - -#define MKTC_TAFINISHED_TERM_COMPLETE_START 0xAD001710 -#define MKTC_TAFINISHED_TERM_COMPLETE_END 0xAD001711 - -#define MKTC_TAFINISHED_ZERO_TAILPTRS 0xAD001720 - -#define MKTC_2DEVENT_2DCOMPLETE 0xAD001800 -#define MKTC_2DEVENT_END 0xAD001801 -#define MKTC_2DLB_2DCOMPLETE 0xAD001802 -#define MKTC_2DLB_FIND2D 0xAD001803 -#define MKTC_2DLB_END 0xAD001804 -#define MKTC_2DCOMPLETE_START 0xAD001805 -#define MKTC_2DCOMPLETE_END 0xAD001806 -#define MKTC_KICK2D_START 0xAD001807 -#define MKTC_KICK2D_END 0xAD001808 -#define MKTC_DUMMYPROC2D 0xAD001809 -#define MKTC_FTD_SRCREADOPSBLOCKED 0xAD00180A -#define MKTC_FTD_SRCWRITEOPSBLOCKED 0xAD00180B -#define MKTC_FTD_DSTREADOPSBLOCKED 0xAD00180C -#define MKTC_FTD_DSTWRITEOPSBLOCKED 0xAD00180D -#define MKTC_FTD_TA2D_OVERLAP_BLOCKED 0xAD00180E -#define MKTC_U2DSO_UPDATEREADOPS 0xAD00180F -#define MKTC_U2DSO_UPDATEWRITEOPS 0xAD001810 -#define MKTC_FTD_TAOPSBLOCKED 0xAD001811 -#define MKTC_KICK2D_2DSLAVEPORT 0xAD001812 -#define MKTC_KICK2D_2DSLAVEPORT_DONE 0xAD001813 -#define MKTC_FTD_CONTEXT_SUSPENDED 0xAD001814 -#define MKTC_KICK2D_PID 0xAD001815 -#define MKTC_FIND2D_ADDR_SPACE_DIFFERENT 0xAD001816 -#define MKTC_FTD_3DOPSBLOCKED 0xAD001817 - -#define MKTC_FCM_START 0xAD001900 -#define MKTC_FCM_END 0xAD001901 - -#define MKTC_TIMER_ACTIVE_POWER 0xAD001A00 -#define MKTC_TIMER_POWER_3D_ACTIVE 0xAD001A01 -#define MKTC_TIMER_POWER_TA_ACTIVE 0xAD001A02 -#define MKTC_TIMER_POWER_2D_ACTIVE 0xAD001A03 -#define MKTC_TIMER_POWER_PENDING_EVENTS 0xAD001A04 -#define MKTC_TIMER_POWER_IDLE 0xAD001A05 -#define MKTC_TIMER_POWER_OFF 0xAD001A06 -#define MKTC_TIMER_POWER_CCB_ERROR 0xAD001A07 -#define MKTC_TIMER_POWER_RESTART_IMMEDIATE 0xAD001A08 - -#define MKTC_3DCONTEXT_SWITCH 0xAD001B00 -#define MKTC_3DCONTEXT_SWITCH_END 0xAD001B01 - -#define MKTC_TACONTEXT_SWITCH 0xAD001C00 -#define MKTC_TACONTEXT_SWITCH_FAST 0xAD001C01 -#define MKTC_TACONTEXT_SWITCH_END 0xAD001C02 - -#define MKTC_GETMISCINFO_MEMREAD_START 0xAD001D00 -#define MKTC_GETMISCINFO_MEMREAD_END 0xAD001D01 -#define MKTC_GETMISCINFO_MEMWRITE_START 0xAD001D02 -#define MKTC_GETMISCINFO_MEMWRITE_END 0xAD001D03 - -#define MKTC_HALTTA 0xAD001E00 -#define MKTC_HTA_SET_FLAG 0xAD001E01 -#define MKTC_HTA_SAVE_COMPLEX_PTR 0xAD001E02 -#define MKTC_HALTTA_END 0xAD001E03 - -#define MKTC_RESUMETA 0xAD001F00 -#define MKTC_RTA_CONTEXT_LOADED 0xAD001F01 -#define MKTC_RTA_MTE_STATE_KICKED 0xAD001F02 -#define MKTC_RTA_CMPLX_GEOM_PRESENT 0xAD001F03 -#define MKTC_RTA_CMPLX_STATE_KICKED 0xAD001F04 -#define MKTC_RTA_CHECK_NEXT_SA_PROG 0xAD001F05 -#define MKTC_RTA_CORE_COMPLETED 0xAD001F06 -#define MKTC_RTA_DEBUG_SAS 0xAD001F07 -#define MKTC_RESUMETA_END 0xAD001F0F - -#define MKTC_RESUME_SPMCS_START 0xAD001F80 -#define MKTC_RSPMCS_OVERLAP 0xAD001F81 -#define MKTC_RSPMCS_START_PULSE 0xAD001F82 -#define MKTC_RESUME_SPMCS_END 0xAD001F83 - -#define MKTC_RENDERHALT 0xAD002000 -#define MKTC_RH_CLEARFLAGS 0xAD002001 -#define MKTC_RH_CTRL_ADDR 0xAD002002 -#define MKTC_RH_RGN_ADDR 0xAD002003 -#define MKTC_RH_EMPTY_TILE 0xAD002004 -#define MKTC_RH_EMPTY_LAST_TILE 0xAD002005 -#define MKTC_RH_3D_TIMEOUT 0xAD002006 -#define MKTC_RH_NOT_EMPTY 0xAD002007 -#define MKTC_RH_OBJECT_COMPLETE 0xAD002008 -#define MKTC_RH_STREAM_LINK 0xAD002009 -#define MKTC_RH_OBJECT_INCOMPLETE 0xAD00200A -#define MKTC_RH_PRIM_MASK_PRESENT 0xAD00200B -#define MKTC_RH_BYTE_MASK_PRESENT 0xAD00200C -#define MKTC_RH_BYTE_MASK_ZERO 0xAD00200D -#define MKTC_RH_PRIM_MASK_ZERO 0xAD00200E -#define MKTC_RH_INVALIDATE_OBJECTS 0xAD00200F -#define MKTC_RH_OBJECTS_INVALIDATED 0xAD002010 -#define MKTC_RH_DPM_RGN_PARSER_IDLE 0xAD002011 -#define MKTC_RH_NEXT_RGN_BASE 0xAD002012 -#define MKTC_RH_OCC_EXIT 0xAD002013 -#define MKTC_RH_STILL_RUNNING 0xAD002020 -#define MKTC_RH_CLEARMCI 0xAD002021 -#define MKTC_RH_EOR 0xAD002022 -#define MKTC_RENDERHALT_END 0xAD002030 - -#define MKTC_FIND3D_POWERREQUEST 0xAD002100 - -#define MKTC_FIND2D_POWERREQUEST 0xAD002200 - -#define MKTC_SPM_OOM_POWERREQUEST 0xAD002280 -#define MKTC_SPM_AC_POWERREQUEST 0xAD002281 -#define MKTC_SPM_RF_POWERREQUEST 0xAD002282 - -#define MKTC_UKERNEL_INIT 0xAD002300 -#define MKTC_UKERNEL_INIT_DCS_COMPLETE 0xAD002301 -#define MKTC_UKERNEL_INIT_VDMKICK_COMPLETE 0xAD002303 - -#define MKTC_KICKTRANSFERRENDER_START 0xAD002400 -#define MKTC_KICKTRANSFERRENDER_ISP_START 0xAD002401 -#define MKTC_KICKTRANSFERRENDER_END 0xAD002402 -#define MKTC_DUMMYPROCTRANSFER 0xAD002403 -#define MKTC_KTR_TQFENCE 0xAD002404 -#define MKTC_KICKTRANSFERRENDER_PID 0xAD002405 - -#define MKTC_HOSTKICK_CLEANUP_RT 0xAD002500 -#define MKTC_HOSTKICK_CLEANUP_RC 0xAD002501 -#define MKTC_HOSTKICK_CLEANUP_TC 0xAD002502 -#define MKTC_HOSTKICK_CLEANUP_2DC 0xAD002503 -#define MKTC_HOSTKICK_CLEANUP_PB 0xAD002504 -#define MKTC_HOSTKICK_GETMISCINFO 0xAD002505 -#define MKTC_HOSTKICK_DATABREAKPOINT 0xAD002506 -#define MKTC_HOSTKICK_SETHWPERFSTATUS 0xAD002507 - -#define MKTC_ZEROPC 0xAD002600 - -#define MKTC_ASSERT_FAIL 0xAD002700 - -#define MKTC_SDLB_ILLEGAL 0xAD002800 - -#define MKTC_SPMEVENT_MEMTHRESHOLD 0xAD002900 -#define MKTC_SPMEVENT_OUTOFMEM 0xAD002901 -#define MKTC_SPMEVENT_TATERMINATE 0xAD002902 -#define MKTC_SPMEVENT_MTE_DRAIN_COMPLETE 0xAD002903 -#define MKTC_SPMEVENT_END 0xAD002904 -#define MKTC_SPMLB_MEMTHRESHOLD 0xAD002980 -#define MKTC_SPMLB_OUTOFMEM 0xAD002981 -#define MKTC_SPMLB_TATERMINATE 0xAD002982 -#define MKTC_SPMLB_SPMRENDERFINSHED 0xAD002983 -#define MKTC_SPMLB_MTE_DRAIN_COMPLETE 0xAD002984 -#define MKTC_SPMLB_END 0xAD002985 - -#define MKTC_SPM_CHECK_MT_DEADLOCK 0xAD002991 -#define MKTC_SPM_CHECK_GLOBAL_DEADLOCK 0xAD002992 -#define MKTC_SPM_RESERVE_ADDED 0xAD002993 - -#define MKTC_IBC_ILLEGAL 0xAD002A00 - -#define MKTC_HWP_CLEARCOUNTERS 0xAD002B00 - -#define MKTC_TA_FRAMENUM 0xAD002C00 -#define MKTC_3D_FRAMENUM 0xAD002C01 -#define MKTC_SPM3D_FRAMENUM 0xAD002C02 - -#define MKTC_HKTA_RENDERCONTEXT 0xAD002D00 -#define MKTC_IDLECORE_REFCOUNT_FAIL 0xAD002E00 - -#define MKTC_MCISTATE_NOT_CLEARED 0xAD002F00 - - -#define MKTC_LOWERED_TO_PDS_THRESHOLD 0xAD003000 -#define MKTC_REDUCE_MAX_VTX_PARTITIONS 0xAD003001 -#define MKTC_KTAOVERRIDE_MAX_VTX_PARTITIONS 0xAD003002 -#define MKTC_KTANOOVERRIDE_MAX_VTX_PARTITIONS 0xAD003003 - - -#define MKTC_IPRB_NORENDERDETAILS 0xAD003010 -#define MKTC_IPRB_HAVERENDERDETAILS 0xAD003011 - -#define MKTC_RENDER_OUT_OF_ORDER 0xAD003020 -#define MKTC_RENDER_NOT_OUT_OF_ORDER 0xAD003021 - -#define MKTC_ZLS_IDLE_BEGIN 0xAD003030 -#define MKTC_ZLS_ISP_CLK_GATING_EN 0xAD003031 -#define MKTC_ZLS_IDLE_END 0xAD003032 - -#define MKTSTR(x) #x - -struct MKTC { - IMG_UINT32 m; - char *s; -} MKTDecoder[] = { - - { MKTC_EHEVENT_3DMEMFREE, MKTSTR(MKTC_EHEVENT_3DMEMFREE) }, - { MKTC_EHEVENT_PIXELENDRENDER, MKTSTR(MKTC_EHEVENT_PIXELENDRENDER) }, - { MKTC_EHEVENT_ISPBREAKPOINT, MKTSTR(MKTC_EHEVENT_ISPBREAKPOINT) }, - { MKTC_EHEVENT_TAFINISHED, MKTSTR(MKTC_EHEVENT_TAFINISHED) }, - { MKTC_EHEVENT_MEMTHRESHOLD, MKTSTR(MKTC_EHEVENT_MEMTHRESHOLD) }, - { MKTC_EHEVENT_OUTOFMEM, MKTSTR(MKTC_EHEVENT_OUTOFMEM) }, - { MKTC_EHEVENT_TATERMINATE, MKTSTR(MKTC_EHEVENT_TATERMINATE) }, - { MKTC_EHEVENT_TIMER, MKTSTR(MKTC_EHEVENT_TIMER) }, - { MKTC_EHEVENT_SWEVENT, MKTSTR(MKTC_EHEVENT_SWEVENT) }, - { MKTC_EHEVENT_2DCOMPLETE, MKTSTR(MKTC_EHEVENT_2DCOMPLETE) }, - { MKTC_EHEVENT_MTE_DRAIN_COMPLETE, MKTSTR(MKTC_EHEVENT_MTE_DRAIN_COMPLETE) }, - - { MKTC_3DEVENT_3DMEMFREE, MKTSTR(MKTC_3DEVENT_3DMEMFREE) }, - { MKTC_3DEVENT_PIXELENDRENDER, MKTSTR(MKTC_3DEVENT_PIXELENDRENDER) }, - { MKTC_3DEVENT_ISPBREAKPOINT, MKTSTR(MKTC_3DEVENT_ISPBREAKPOINT) }, - { MKTC_3DEVENT_END, MKTSTR(MKTC_3DEVENT_END) }, - { MKTC_3DLB_3DMEMFREE, MKTSTR(MKTC_3DLB_3DMEMFREE) }, - { MKTC_3DLB_PIXELENDRENDER, MKTSTR(MKTC_3DLB_PIXELENDRENDER) }, - { MKTC_3DLB_ISPBREAKPOINT, MKTSTR(MKTC_3DLB_ISPBREAKPOINT) }, - { MKTC_3DLB_FIND3D, MKTSTR(MKTC_3DLB_FIND3D) }, - { MKTC_3DLB_END, MKTSTR(MKTC_3DLB_END) }, - - { MKTC_TAEVENT_TAFINISHED, MKTSTR(MKTC_TAEVENT_TAFINISHED) }, - { MKTC_TAEVENT_END, MKTSTR(MKTC_TAEVENT_END) }, - { MKTC_TALB_TAFINISHED, MKTSTR(MKTC_TALB_TAFINISHED) }, - { MKTC_TALB_FINDTA, MKTSTR(MKTC_TALB_FINDTA) }, - { MKTC_TALB_END, MKTSTR(MKTC_TALB_END) }, - - { MKTC_CRRL_WRITEOPSBLOCKED, MKTSTR(MKTC_CRRL_WRITEOPSBLOCKED) }, - { MKTC_CRRL_READOPSBLOCKED, MKTSTR(MKTC_CRRL_READOPSBLOCKED) }, - { MKTC_CRRL_FOUNDRENDER, MKTSTR(MKTC_CRRL_FOUNDRENDER) }, - { MKTC_CRRL_NORENDER, MKTSTR(MKTC_CRRL_NORENDER) }, - { MKTC_CRRL_TARC_DIFFERENT, MKTSTR(MKTC_CRRL_TARC_DIFFERENT) }, - { MKTC_FINDRENDER_BRN_23378, MKTSTR(MKTC_FINDRENDER_BRN_23378) }, - { MKTC_CRRL_BLOCKEDRC, MKTSTR(MKTC_CRRL_BLOCKEDRC) }, - { MKTC_CRRL_BLOCKEDRTDATA, MKTSTR(MKTC_CRRL_BLOCKEDRTDATA) }, - { MKTC_CRRL_CONTEXT_SUSPENDED, MKTSTR(MKTC_CRRL_CONTEXT_SUSPENDED) }, - { MKTC_CRRL_TAWAITINGFORMEM, MKTSTR(MKTC_CRRL_TAWAITINGFORMEM) }, - { MKTC_CRRL_TAOOMBUTPRIOINV, MKTSTR(MKTC_CRRL_TAOOMBUTPRIOINV) }, - - { MKTC_KICKRENDER_START, MKTSTR(MKTC_KICKRENDER_START) }, - { MKTC_KICKRENDER_OVERLAP, MKTSTR(MKTC_KICKRENDER_OVERLAP) }, - { MKTC_KICKRENDER_ISP_START, MKTSTR(MKTC_KICKRENDER_ISP_START) }, - { MKTC_KICKRENDER_RESUME, MKTSTR(MKTC_KICKRENDER_RESUME) }, - { MKTC_KICKRENDER_CONFIG_REGION_HDRS, MKTSTR(MKTC_KICKRENDER_CONFIG_REGION_HDRS) }, - { MKTC_KICKRENDER_END, MKTSTR(MKTC_KICKRENDER_END) }, - { MKTC_KICKRENDER_RENDERCONTEXT, MKTSTR(MKTC_KICKRENDER_RENDERCONTEXT) }, - { MKTC_KICKRENDER_RTDATA, MKTSTR(MKTC_KICKRENDER_RTDATA) }, - { MKTC_KICKRENDER_PID, MKTSTR(MKTC_KICKRENDER_PID) }, - - { MKTC_RENDERFINISHED_START, MKTSTR(MKTC_RENDERFINISHED_START) }, - { MKTC_RF_START_NEXT_MT, MKTSTR(MKTC_RF_START_NEXT_MT) }, - { MKTC_RF_ALL_MTS_DONE, MKTSTR(MKTC_RF_ALL_MTS_DONE) }, - { MKTC_RENDERFINISHED_END, MKTSTR(MKTC_RENDERFINISHED_END) }, - { MKTC_VISQUERY_START, MKTSTR(MKTC_VISQUERY_START) }, - { MKTC_VISQUERY_END, MKTSTR(MKTC_VISQUERY_END) }, - { MKTC_TRANSFERRENDERFINISHED_START, MKTSTR(MKTC_TRANSFERRENDERFINISHED_START) }, - { MKTC_TRANSFERRENDERFINISHED_END, MKTSTR(MKTC_TRANSFERRENDERFINISHED_END) }, - { MKTC_TRF_UPDATESTATUSVALS, MKTSTR(MKTC_TRF_UPDATESTATUSVALS) }, - { MKTC_TRF_UPDATESTATUSVALS_DONE, MKTSTR(MKTC_TRF_UPDATESTATUSVALS_DONE) }, - - { MKTC_PIXELENDRENDER_START, MKTSTR(MKTC_PIXELENDRENDER_START) }, - { MKTC_PIXELENDRENDER_AFTERLOCK, MKTSTR(MKTC_PIXELENDRENDER_AFTERLOCK) }, - { MKTC_PIXELENDRENDER_END, MKTSTR(MKTC_PIXELENDRENDER_END) }, - { MKTC_PIXELENDRENDER_TLQEND, MKTSTR(MKTC_PIXELENDRENDER_TLQEND) }, - - { MKTC_3DMEMFREE_START, MKTSTR(MKTC_3DMEMFREE_START) }, - { MKTC_3DMEMFREE_AFTERLOCK, MKTSTR(MKTC_3DMEMFREE_AFTERLOCK) }, - { MKTC_3DMEMFREE_TESTEOR, MKTSTR(MKTC_3DMEMFREE_TESTEOR) }, - { MKTC_3DMEMFREE_END, MKTSTR(MKTC_3DMEMFREE_END) }, - - { MKTC_KICKTA_START, MKTSTR(MKTC_KICKTA_START) }, - { MKTC_KICKTA_OVERLAP, MKTSTR(MKTC_KICKTA_OVERLAP) }, - { MKTC_KICKTA_RESETCONTEXT, MKTSTR(MKTC_KICKTA_RESETCONTEXT) }, - { MKTC_KICKTA_VDM_START, MKTSTR(MKTC_KICKTA_VDM_START) }, - { MKTC_KICKTA_END, MKTSTR(MKTC_KICKTA_END) }, - { MKTC_KICKTA_RENDERCONTEXT, MKTSTR(MKTC_KICKTA_RENDERCONTEXT) }, - { MKTC_KICKTA_RTDATA, MKTSTR(MKTC_KICKTA_RTDATA) }, - { MKTC_KICKTA_RESET_VDMCSSTATUS, MKTSTR(MKTC_KICKTA_RESET_VDMCSSTATUS) }, - { MKTC_KICKTA_RESET_BUFFERS, MKTSTR(MKTC_KICKTA_RESET_BUFFERS) }, - { MKTC_KICKTA_PID, MKTSTR(MKTC_KICKTA_PID) }, - { MKTC_KICKTA_TACMD_DEBUG, MKTSTR(MKTC_KICKTA_TACMD_DEBUG) }, - { MKTC_KICKTA_FREECONTEXT, MKTSTR(MKTC_KICKTA_FREECONTEXT) }, - { MKTC_KICKTA_PIM_PATCHING, MKTSTR(MKTC_KICKTA_PIM_PATCHING) }, - - { MKTC_KICKTA_CHKPT_START_DUMMY_CS, MKTSTR(MKTC_KICKTA_CHKPT_START_DUMMY_CS) }, - { MKTC_KICKTA_CHKPT_START_DUMMY_TAK, MKTSTR(MKTC_KICKTA_CHKPT_START_DUMMY_TAK) }, - { MKTC_KICKTA_CHKPT_WAIT_FOR_DUMMY_KICK, MKTSTR(MKTC_KICKTA_CHKPT_WAIT_FOR_DUMMY_KICK) }, - { MKTC_KICKTA_CHKPT_WAIT_NEXT_CORE, MKTSTR(MKTC_KICKTA_CHKPT_WAIT_NEXT_CORE) }, - { MKTC_KICKTA_CHKPT_RESET_COMPLETE, MKTSTR(MKTC_KICKTA_CHKPT_RESET_COMPLETE) }, - { MKTC_KICKTA_CHKPT_CHECK_SWITCH, MKTSTR(MKTC_KICKTA_CHKPT_CHECK_SWITCH) }, - - { MKTC_HOSTKICK_START, MKTSTR(MKTC_HOSTKICK_START) }, - { MKTC_HOSTKICK_END, MKTSTR(MKTC_HOSTKICK_END) }, - { MKTC_HOSTKICK_PROCESS_QUEUES_END, MKTSTR(MKTC_HOSTKICK_PROCESS_QUEUES_END) }, - { MKTC_HOSTKICK_2D, MKTSTR(MKTC_HOSTKICK_2D) }, - { MKTC_HOSTKICK_TRANSFER, MKTSTR(MKTC_HOSTKICK_TRANSFER) }, - { MKTC_HOSTKICK_TA, MKTSTR(MKTC_HOSTKICK_TA) }, - { MKTC_HOSTKICK_PROCESS_QUEUES, MKTSTR(MKTC_HOSTKICK_PROCESS_QUEUES) }, - { MKTC_HOSTKICK_RESUME, MKTSTR(MKTC_HOSTKICK_RESUME) }, - { MKTC_HOSTKICK_POWEROFF, MKTSTR(MKTC_HOSTKICK_POWEROFF) }, - { MKTC_HOSTKICK_IDLE, MKTSTR(MKTC_HOSTKICK_IDLE) }, - { MKTC_HOSTKICK_CTXSUSPEND, MKTSTR(MKTC_HOSTKICK_CTXSUSPEND) }, - { MKTC_HOSTKICK_CTXRESUME, MKTSTR(MKTC_HOSTKICK_CTXRESUME) }, - - { MKTC_TIMER_POTENTIAL_TA_LOCKUP, MKTSTR(MKTC_TIMER_POTENTIAL_TA_LOCKUP) }, - { MKTC_TIMER_POTENTIAL_3D_LOCKUP, MKTSTR(MKTC_TIMER_POTENTIAL_3D_LOCKUP) }, - { MKTC_TIMER_CTAL_START, MKTSTR(MKTC_TIMER_CTAL_START) }, - { MKTC_TIMER_CTAL_END, MKTSTR(MKTC_TIMER_CTAL_END) }, - { MKTC_TIMER_C3DL_START, MKTSTR(MKTC_TIMER_C3DL_START) }, - { MKTC_TIMER_C3DL_END, MKTSTR(MKTC_TIMER_C3DL_END) }, - { MKTC_TIMER_LOCKUP, MKTSTR(MKTC_TIMER_LOCKUP) }, - { MKTC_TIMER_NOT_TA_LOCKUP, MKTSTR(MKTC_TIMER_NOT_TA_LOCKUP) }, - { MKTC_TIMER_NOT_3D_LOCKUP, MKTSTR(MKTC_TIMER_NOT_3D_LOCKUP) }, - { MKTC_TIMER_2D_LOCKUP, MKTSTR(MKTC_TIMER_2D_LOCKUP) }, - { MKTC_TIMER_POTENTIAL_2D_LOCKUP, MKTSTR(MKTC_TIMER_POTENTIAL_2D_LOCKUP) }, - { MKTC_TIMER_C2DL_START, MKTSTR(MKTC_TIMER_C2DL_START) }, - { MKTC_TIMER_C2DL_END, MKTSTR(MKTC_TIMER_C2DL_END) }, - { MKTC_TIMER_NOT_2D_LOCKUP, MKTSTR(MKTC_TIMER_NOT_2D_LOCKUP) }, - { MKTC_TIMER_ABORTALL, MKTSTR(MKTC_TIMER_ABORTALL) }, - { MKTC_TIMER_END, MKTSTR(MKTC_TIMER_END) }, - - { MKTC_HWR_START, MKTSTR(MKTC_HWR_START) }, - { MKTC_HWR_END, MKTSTR(MKTC_HWR_END) }, - { MKTC_HWR_HKS, MKTSTR(MKTC_HWR_HKS) }, - { MKTC_HWR_PRL, MKTSTR(MKTC_HWR_PRL) }, - { MKTC_HWR_PRL_DP, MKTSTR(MKTC_HWR_PRL_DP) }, - { MKTC_HWR_CRL, MKTSTR(MKTC_HWR_CRL) }, - { MKTC_HWR_CRL_DP, MKTSTR(MKTC_HWR_CRL_DP) }, - { MKTC_HWR_TRL, MKTSTR(MKTC_HWR_TRL) }, - { MKTC_HWR_TRL_DP, MKTSTR(MKTC_HWR_TRL_DP) }, - { MKTC_HWR_ISC, MKTSTR(MKTC_HWR_ISC) }, - { MKTC_HWR_2DL, MKTSTR(MKTC_HWR_2DL) }, - - { MKTC_URSV_START, MKTSTR(MKTC_URSV_START) }, - { MKTC_URSV_UPDATEWRITEOPS, MKTSTR(MKTC_URSV_UPDATEWRITEOPS) }, - { MKTC_URSV_UPDATESTATUSVALS, MKTSTR(MKTC_URSV_UPDATESTATUSVALS) }, - { MKTC_URSV_UPDATESTATUSVALS_DONE, MKTSTR(MKTC_URSV_UPDATESTATUSVALS_DONE) }, - { MKTC_URSV_END, MKTSTR(MKTC_URSV_END) }, - - { MKTC_STORETACONTEXT_START, MKTSTR(MKTC_STORETACONTEXT_START) }, - { MKTC_STORETACONTEXT_END, MKTSTR(MKTC_STORETACONTEXT_END) }, - { MKTC_LOADTACONTEXT_START, MKTSTR(MKTC_LOADTACONTEXT_START) }, - { MKTC_LOADTACONTEXT_END, MKTSTR(MKTC_LOADTACONTEXT_END) }, - { MKTC_STORE3DCONTEXT_START, MKTSTR(MKTC_STORE3DCONTEXT_START) }, - { MKTC_STORE3DCONTEXT_END, MKTSTR(MKTC_STORE3DCONTEXT_END) }, - { MKTC_LOAD3DCONTEXT_START, MKTSTR(MKTC_LOAD3DCONTEXT_START) }, - { MKTC_LOAD3DCONTEXT_END, MKTSTR(MKTC_LOAD3DCONTEXT_END) }, - - { MKTC_FINDTA_POWERREQUEST, MKTSTR(MKTC_FINDTA_POWERREQUEST) }, - { MKTC_FINDTA_TA3D_OVERLAP_BLOCKED, MKTSTR(MKTC_FINDTA_TA3D_OVERLAP_BLOCKED) }, - { MKTC_FINDTA_RTDATA_RENDERING, MKTSTR(MKTC_FINDTA_RTDATA_RENDERING) }, - { MKTC_FINDTA_3DRC_DIFFERENT, MKTSTR(MKTC_FINDTA_3DRC_DIFFERENT) }, - { MKTC_FINDTA_WRITEOPSBLOCKED, MKTSTR(MKTC_FINDTA_WRITEOPSBLOCKED) }, - { MKTC_FINDTA_READOPSBLOCKED, MKTSTR(MKTC_FINDTA_READOPSBLOCKED) }, - { MKTC_FINDTA_RESIZE_PB, MKTSTR(MKTC_FINDTA_RESIZE_PB) }, - { MKTC_FINDTA_RESIZE_PB_BLOCKED, MKTSTR(MKTC_FINDTA_RESIZE_PB_BLOCKED) }, - { MKTC_FINDTA_SHRINK_PB, MKTSTR(MKTC_FINDTA_SHRINK_PB) }, - { MKTC_FINDTA_TAPB_DIFFERENT, MKTSTR(MKTC_FINDTA_TAPB_DIFFERENT) }, - { MKTC_FINDTA_TACONTEXT_DIFFERENT, MKTSTR(MKTC_FINDTA_TACONTEXT_DIFFERENT) }, - { MKTC_FINDTA_TA2D_OVERLAP_BLOCKED, MKTSTR(MKTC_FINDTA_TA2D_OVERLAP_BLOCKED) }, - { MKTC_FINDTA_CONTEXT_SUSPENDED, MKTSTR(MKTC_FINDTA_CONTEXT_SUSPENDED) }, - { MKTC_FINDTA_SRC_READOPSBLOCKED, MKTSTR(MKTC_FINDTA_SRC_READOPSBLOCKED) }, - { MKTC_FINDTA_SRC_WRITEOPSBLOCKED, MKTSTR(MKTC_FINDTA_SRC_WRITEOPSBLOCKED) }, - - { MKTC_CTRL_SRCREADOPSBLOCKED, MKTSTR(MKTC_CTRL_SRCREADOPSBLOCKED) }, - { MKTC_CTRL_SRCWRITEOPSBLOCKED, MKTSTR(MKTC_CTRL_SRCWRITEOPSBLOCKED) }, - { MKTC_CTRL_DSTREADOPSBLOCKED, MKTSTR(MKTC_CTRL_DSTREADOPSBLOCKED) }, - { MKTC_CTRL_DSTWRITEOPSBLOCKED, MKTSTR(MKTC_CTRL_DSTWRITEOPSBLOCKED) }, - { MKTC_CTRL_TARC_DIFFERENT, MKTSTR(MKTC_CTRL_TARC_DIFFERENT) }, - { MKTC_CTRL_CONTEXT_SUSPENDED, MKTSTR(MKTC_CTRL_CONTEXT_SUSPENDED) }, - - { MKTC_DPTA_START, MKTSTR(MKTC_DPTA_START) }, - { MKTC_DPTA_UPDATESTATUSVALS, MKTSTR(MKTC_DPTA_UPDATESTATUSVALS) }, - { MKTC_DPTA_UPDATESTATUSVALS_DONE, MKTSTR(MKTC_DPTA_UPDATESTATUSVALS_DONE) }, - { MKTC_DPTA_NORENDER, MKTSTR(MKTC_DPTA_NORENDER) }, - { MKTC_DPTA_MEMFREE, MKTSTR(MKTC_DPTA_MEMFREE) }, - { MKTC_DPTA_INC_COMPLETECOUNT, MKTSTR(MKTC_DPTA_INC_COMPLETECOUNT) }, - - { MKTC_INVALDC, MKTSTR(MKTC_INVALDC) }, - { MKTC_INVALPT, MKTSTR(MKTC_INVALPT) }, - { MKTC_INVALSLC, MKTSTR(MKTC_INVALSLC) }, - { MKTC_INVALDATA, MKTSTR(MKTC_INVALDATA) }, - - { MKTC_RESTARTTA, MKTSTR(MKTC_RESTARTTA) }, - { MKTC_CSABORTNONGBL, MKTSTR(MKTC_CSABORTNONGBL) }, - { MKTC_CSABORTALL, MKTSTR(MKTC_CSABORTALL) }, - { MKTC_CSRENDERINPROGRESS, MKTSTR(MKTC_CSRENDERINPROGRESS) }, - { MKTC_TATERMRENDERINPROGRESS, MKTSTR(MKTC_TATERMRENDERINPROGRESS) }, - { MKTC_RESTARTTANORENDER, MKTSTR(MKTC_RESTARTTANORENDER) }, - { MKTC_SPM_KICKRENDER, MKTSTR(MKTC_SPM_KICKRENDER) }, - { MKTC_SPM_RESUME_ABORTCOMPLETE, MKTSTR(MKTC_SPM_RESUME_ABORTCOMPLETE) }, - { MKTC_RESUMEVDM, MKTSTR(MKTC_RESUMEVDM) }, - { MKTC_REMOVE_RESERVE_MEM, MKTSTR(MKTC_REMOVE_RESERVE_MEM) }, - { MKTC_INCREASEZLSTHRESHOLD, MKTSTR(MKTC_INCREASEZLSTHRESHOLD) }, - { MKTC_CSFORCEABORTALL, MKTSTR(MKTC_CSFORCEABORTALL) }, - - { MKTC_DUMMY_DEPTH, MKTSTR(MKTC_DUMMY_DEPTH) }, - { MKTC_DUMMY_DEPTH_CS, MKTSTR(MKTC_DUMMY_DEPTH_CS) }, - - { MKTC_MTETE_OOM, MKTSTR(MKTC_MTETE_OOM) }, - { MKTC_MTETE_OOM_FIRST_STORE_REF, MKTSTR(MKTC_MTETE_OOM_FIRST_STORE_REF) }, - { MKTC_MERGE_STATE_TABLES, MKTSTR(MKTC_MERGE_STATE_TABLES) }, - { MKTC_NO_PAGES_LEFT_FOR_23055, MKTSTR(MKTC_NO_PAGES_LEFT_FOR_23055) }, - { MKTC_NO_STATE_MODS, MKTSTR(MKTC_NO_STATE_MODS) }, - { MKTC_FIND_MTE_PAGE_IN_STATE, MKTSTR(MKTC_FIND_MTE_PAGE_IN_STATE) }, - { MKTC_MTE_PAGE_FOUND, MKTSTR(MKTC_MTE_PAGE_FOUND) }, - { MKTC_MOVE_MTE_PAGE_TO_TA_STATE, MKTSTR(MKTC_MOVE_MTE_PAGE_TO_TA_STATE) }, - { MKTC_MOVE_MTE_PAGE_TO_TA_STATE_END, MKTSTR(MKTC_MOVE_MTE_PAGE_TO_TA_STATE_END) }, - { MKTC_ZERO_ZLS_THRESHOLD, MKTSTR(MKTC_ZERO_ZLS_THRESHOLD) }, - { MKTC_RESTORE_ZLS_THRESHOLD, MKTSTR(MKTC_RESTORE_ZLS_THRESHOLD) }, - { MKTC_FIND_MTE_PAGE_IN_CSM, MKTSTR(MKTC_FIND_MTE_PAGE_IN_CSM) }, - { MKTC_REISSUE_MTE_PAGE, MKTSTR(MKTC_REISSUE_MTE_PAGE) }, - { MKTC_REISSUE_MTE_PAGE_REQUIRED, MKTSTR(MKTC_REISSUE_MTE_PAGE_REQUIRED) }, - { MKTC_REISSUE_MTE_PAGE_END, MKTSTR(MKTC_REISSUE_MTE_PAGE_END) }, - { MKTC_RESET_TE_PSG, MKTSTR(MKTC_RESET_TE_PSG) }, - - { MKTC_OOM_WRITEOPSBLOCKED, MKTSTR(MKTC_OOM_WRITEOPSBLOCKED) }, - { MKTC_OOM_READOPSBLOCKED, MKTSTR(MKTC_OOM_READOPSBLOCKED) }, - { MKTC_OOM_SRC_WRITEOPSBLOCKED, MKTSTR(MKTC_OOM_SRC_WRITEOPSBLOCKED) }, - { MKTC_OOM_SRC_READOPSBLOCKED, MKTSTR(MKTC_OOM_SRC_READOPSBLOCKED) }, - { MKTC_OOM_SPM_DEADLOCK, MKTSTR(MKTC_OOM_SPM_DEADLOCK) }, - { MKTC_OOM_SPM_DEADLOCK_MEM_ADDED, MKTSTR(MKTC_OOM_SPM_DEADLOCK_MEM_ADDED) }, - { MKTC_BRN27311_RESET, MKTSTR(MKTC_BRN27311_RESET) }, - { MKTC_SPM_INVALID_ZLSCONFIG, MKTSTR(MKTC_SPM_INVALID_ZLSCONFIG) }, - - { MKTC_SPM_ALREADY_DRAINED, MKTSTR(MKTC_SPM_ALREADY_DRAINED) }, - { MKTC_DRAIN_COMPLETE, MKTSTR(MKTC_DRAIN_COMPLETE) }, - { MKTC_DRAIN_SET_FLAG, MKTSTR(MKTC_DRAIN_SET_FLAG) }, - - { MKTC_OOM_TYPE_MT, MKTSTR(MKTC_OOM_TYPE_MT) }, - { MKTC_OOM_TYPE_GLOBAL, MKTSTR(MKTC_OOM_TYPE_GLOBAL) }, - { MKTC_OOM_CAUSE_GBL_OOM, MKTSTR(MKTC_OOM_CAUSE_GBL_OOM) }, - - { MKTC_CHECK_MTE_PAGE_REISSUE, MKTSTR(MKTC_CHECK_MTE_PAGE_REISSUE) }, - { MKTC_CPRI_VALID_ENTRIES, MKTSTR(MKTC_CPRI_VALID_ENTRIES) }, - { MKTC_CPRI_STORE_DPLIST, MKTSTR(MKTC_CPRI_STORE_DPLIST) }, - { MKTC_CPRI_STORE_OTPM_CSM, MKTSTR(MKTC_CPRI_STORE_OTPM_CSM) }, - { MKTC_CPRI_ABORT_MT_IDX, MKTSTR(MKTC_CPRI_ABORT_MT_IDX) }, - { MKTC_CPRI_ABORT_CORE_IDX, MKTSTR(MKTC_CPRI_ABORT_CORE_IDX) }, - { MKTC_CPRI_CSM_TABLE_DATA, MKTSTR(MKTC_CPRI_CSM_TABLE_DATA) }, - { MKTC_CPRI_PIM_DATA, MKTSTR(MKTC_CPRI_PIM_DATA) }, - { MKTC_CPRI_DO_CIRCULAR_TEST, MKTSTR(MKTC_CPRI_DO_CIRCULAR_TEST) }, - - { MKTC_CPRI_WRITE_ENTRIES, MKTSTR(MKTC_CPRI_WRITE_ENTRIES) }, - - { MKTC_MTE_ENTRY_NOT_IN_ANY_LIST, MKTSTR(MKTC_MTE_ENTRY_NOT_IN_ANY_LIST) }, - - { MKTC_SPMAC_IGNORE_TERMINATE, MKTSTR(MKTC_SPMAC_IGNORE_TERMINATE) }, - - { MKTC_SPMAC_REQUEST_3D_TIMEOUT, MKTSTR(MKTC_SPMAC_REQUEST_3D_TIMEOUT) }, - { MKTC_SPMAC_3D_TIMEOUT_COMPLETE, MKTSTR(MKTC_SPMAC_3D_TIMEOUT_COMPLETE) }, - -/* PB Load/store status */ - { MKTC_LOADTAPB_START, MKTSTR(MKTC_LOADTAPB_START) }, - { MKTC_LOADTAPB_END, MKTSTR(MKTC_LOADTAPB_END) }, - { MKTC_STORETAPB_START, MKTSTR(MKTC_STORETAPB_START) }, - { MKTC_STORETAPB_END, MKTSTR(MKTC_STORETAPB_END) }, - { MKTC_LOAD3DPB_START, MKTSTR(MKTC_LOAD3DPB_START) }, - { MKTC_LOAD3DPB_END, MKTSTR(MKTC_LOAD3DPB_END) }, - { MKTC_STORE3DPB_START, MKTSTR(MKTC_STORE3DPB_START) }, - { MKTC_STORE3DPB_END, MKTSTR(MKTC_STORE3DPB_END) }, - { MKTC_LOADTAPB_PAGETABLE_DONE, MKTSTR(MKTC_LOADTAPB_PAGETABLE_DONE) }, - { MKTC_LOAD3DPB_PAGETABLE_DONE, MKTSTR(MKTC_LOAD3DPB_PAGETABLE_DONE) }, - - { MKTC_TIMER_RC_CLEANUP, MKTSTR(MKTC_TIMER_RC_CLEANUP) }, - { MKTC_TIMER_RC_CLEANUP_COMPLETE, MKTSTR(MKTC_TIMER_RC_CLEANUP_COMPLETE) }, - { MKTC_TIMER_RT_CLEANUP, MKTSTR(MKTC_TIMER_RT_CLEANUP) }, - { MKTC_TIMER_RT_CLEANUP_COMPLETE, MKTSTR(MKTC_TIMER_RT_CLEANUP_COMPLETE) }, - { MKTC_TIMER_RT_CLEANUP_PENDING, MKTSTR(MKTC_TIMER_RT_CLEANUP_PENDING) }, - { MKTC_TIMER_RT_CLEANUP_TIDYPARTIALLIST, MKTSTR(MKTC_TIMER_RT_CLEANUP_TIDYPARTIALLIST) }, - { MKTC_TIMER_TC_CLEANUP, MKTSTR(MKTC_TIMER_TC_CLEANUP) }, - { MKTC_TIMER_TC_CLEANUP_COMPLETE, MKTSTR(MKTC_TIMER_TC_CLEANUP_COMPLETE) }, - { MKTC_TIMER_2DC_CLEANUP, MKTSTR(MKTC_TIMER_2DC_CLEANUP) }, - { MKTC_TIMER_2DC_CLEANUP_COMPLETE, MKTSTR(MKTC_TIMER_2DC_CLEANUP_COMPLETE) }, - { MKTC_TIMER_SHAREDPBDESC_CLEANUP, MKTSTR(MKTC_TIMER_SHAREDPBDESC_CLEANUP) }, - - { MKTC_TIMER_ISP_SWITCH_POTENTIAL_LOCKUP, MKTSTR(MKTC_TIMER_ISP_SWITCH_POTENTIAL_LOCKUP) }, - { MKTC_TIMER_ISP_SWITCH_FORCE_SWITCH, MKTSTR(MKTC_TIMER_ISP_SWITCH_FORCE_SWITCH) }, - - { MKTC_UTSO_UPDATEREADOPS, MKTSTR(MKTC_UTSO_UPDATEREADOPS) }, - { MKTC_UTSO_UPDATEWRITEOPS, MKTSTR(MKTC_UTSO_UPDATEWRITEOPS) }, - - { MKTC_TAFINISHED_UPDATESTATUSVALS, MKTSTR(MKTC_TAFINISHED_UPDATESTATUSVALS) }, - { MKTC_TAFINISHED_UPDATESTATUSVALS_DONE, MKTSTR(MKTC_TAFINISHED_UPDATESTATUSVALS_DONE) }, - { MKTC_TAFINISHED_NORENDER, MKTSTR(MKTC_TAFINISHED_NORENDER) }, - { MKTC_TAFINISHED_LASTKICK, MKTSTR(MKTC_TAFINISHED_LASTKICK) }, - { MKTC_TAFINISHED_FINDRENDER, MKTSTR(MKTC_TAFINISHED_FINDRENDER) }, - { MKTC_TAFINISHED_FINDTA, MKTSTR(MKTC_TAFINISHED_FINDTA) }, - { MKTC_TAFINISHED_END, MKTSTR(MKTC_TAFINISHED_END) }, - { MKTC_TAF_SPM_DEADLOCK_MEM_REMOVED, MKTSTR(MKTC_TAF_SPM_DEADLOCK_MEM_REMOVED) }, - { MKTC_TAF_RESERVE_MEM, MKTSTR(MKTC_TAF_RESERVE_MEM) }, - { MKTC_TAF_RESERVE_MEM_REQUEST_RENDER, MKTSTR(MKTC_TAF_RESERVE_MEM_REQUEST_RENDER) }, - { MKTC_TAF_RESERVE_FREE_RENDER_FINISHED, MKTSTR(MKTC_TAF_RESERVE_FREE_RENDER_FINISHED) }, - { MKTC_TAF_RESERVE_FREE_DUMMY_RENDER, MKTSTR(MKTC_TAF_RESERVE_FREE_DUMMY_RENDER) }, - { MKTC_TAF_DEBUG_SAS, MKTSTR(MKTC_TAF_DEBUG_SAS) }, - { MKTC_TAFINISHED_NOCONTEXTSWITCH, MKTSTR(MKTC_TAFINISHED_NOCONTEXTSWITCH) }, - - { MKTC_TAFINISHED_TERM_COMPLETE_START, MKTSTR(MKTC_TAFINISHED_TERM_COMPLETE_START) }, - { MKTC_TAFINISHED_TERM_COMPLETE_END, MKTSTR(MKTC_TAFINISHED_TERM_COMPLETE_END) }, - - { MKTC_TAFINISHED_ZERO_TAILPTRS, MKTSTR(MKTC_TAFINISHED_ZERO_TAILPTRS) }, - - { MKTC_2DEVENT_2DCOMPLETE, MKTSTR(MKTC_2DEVENT_2DCOMPLETE) }, - { MKTC_2DEVENT_END, MKTSTR(MKTC_2DEVENT_END) }, - { MKTC_2DLB_2DCOMPLETE, MKTSTR(MKTC_2DLB_2DCOMPLETE) }, - { MKTC_2DLB_FIND2D, MKTSTR(MKTC_2DLB_FIND2D) }, - { MKTC_2DLB_END, MKTSTR(MKTC_2DLB_END) }, - { MKTC_2DCOMPLETE_START, MKTSTR(MKTC_2DCOMPLETE_START) }, - { MKTC_2DCOMPLETE_END, MKTSTR(MKTC_2DCOMPLETE_END) }, - { MKTC_KICK2D_START, MKTSTR(MKTC_KICK2D_START) }, - { MKTC_KICK2D_END, MKTSTR(MKTC_KICK2D_END) }, - { MKTC_DUMMYPROC2D, MKTSTR(MKTC_DUMMYPROC2D) }, - { MKTC_FTD_SRCREADOPSBLOCKED, MKTSTR(MKTC_FTD_SRCREADOPSBLOCKED) }, - { MKTC_FTD_SRCWRITEOPSBLOCKED, MKTSTR(MKTC_FTD_SRCWRITEOPSBLOCKED) }, - { MKTC_FTD_DSTREADOPSBLOCKED, MKTSTR(MKTC_FTD_DSTREADOPSBLOCKED) }, - { MKTC_FTD_DSTWRITEOPSBLOCKED, MKTSTR(MKTC_FTD_DSTWRITEOPSBLOCKED) }, - { MKTC_FTD_TA2D_OVERLAP_BLOCKED, MKTSTR(MKTC_FTD_TA2D_OVERLAP_BLOCKED) }, - { MKTC_U2DSO_UPDATEREADOPS, MKTSTR(MKTC_U2DSO_UPDATEREADOPS) }, - { MKTC_U2DSO_UPDATEWRITEOPS, MKTSTR(MKTC_U2DSO_UPDATEWRITEOPS) }, - { MKTC_FTD_TAOPSBLOCKED, MKTSTR(MKTC_FTD_TAOPSBLOCKED) }, - { MKTC_KICK2D_2DSLAVEPORT, MKTSTR(MKTC_KICK2D_2DSLAVEPORT) }, - { MKTC_KICK2D_2DSLAVEPORT_DONE, MKTSTR(MKTC_KICK2D_2DSLAVEPORT_DONE) }, - { MKTC_FTD_CONTEXT_SUSPENDED, MKTSTR(MKTC_FTD_CONTEXT_SUSPENDED) }, - { MKTC_KICK2D_PID, MKTSTR(MKTC_KICK2D_PID) }, - { MKTC_FIND2D_ADDR_SPACE_DIFFERENT, MKTSTR(MKTC_FIND2D_ADDR_SPACE_DIFFERENT) }, - { MKTC_FTD_3DOPSBLOCKED, MKTSTR(MKTC_FTD_3DOPSBLOCKED) }, - - { MKTC_FCM_START, MKTSTR(MKTC_FCM_START) }, - { MKTC_FCM_END, MKTSTR(MKTC_FCM_END) }, - - { MKTC_TIMER_ACTIVE_POWER, MKTSTR(MKTC_TIMER_ACTIVE_POWER) }, - { MKTC_TIMER_POWER_3D_ACTIVE, MKTSTR(MKTC_TIMER_POWER_3D_ACTIVE) }, - { MKTC_TIMER_POWER_TA_ACTIVE, MKTSTR(MKTC_TIMER_POWER_TA_ACTIVE) }, - { MKTC_TIMER_POWER_2D_ACTIVE, MKTSTR(MKTC_TIMER_POWER_2D_ACTIVE) }, - { MKTC_TIMER_POWER_PENDING_EVENTS, MKTSTR(MKTC_TIMER_POWER_PENDING_EVENTS) }, - { MKTC_TIMER_POWER_IDLE, MKTSTR(MKTC_TIMER_POWER_IDLE) }, - { MKTC_TIMER_POWER_OFF, MKTSTR(MKTC_TIMER_POWER_OFF) }, - { MKTC_TIMER_POWER_CCB_ERROR, MKTSTR(MKTC_TIMER_POWER_CCB_ERROR) }, - { MKTC_TIMER_POWER_RESTART_IMMEDIATE, MKTSTR(MKTC_TIMER_POWER_RESTART_IMMEDIATE) }, - - { MKTC_3DCONTEXT_SWITCH, MKTSTR(MKTC_3DCONTEXT_SWITCH) }, - { MKTC_3DCONTEXT_SWITCH_END, MKTSTR(MKTC_3DCONTEXT_SWITCH_END) }, - - { MKTC_TACONTEXT_SWITCH, MKTSTR(MKTC_TACONTEXT_SWITCH) }, - { MKTC_TACONTEXT_SWITCH_FAST, MKTSTR(MKTC_TACONTEXT_SWITCH_FAST) }, - { MKTC_TACONTEXT_SWITCH_END, MKTSTR(MKTC_TACONTEXT_SWITCH_END) }, - - { MKTC_GETMISCINFO_MEMREAD_START, MKTSTR(MKTC_GETMISCINFO_MEMREAD_START) }, - { MKTC_GETMISCINFO_MEMREAD_END, MKTSTR(MKTC_GETMISCINFO_MEMREAD_END) }, - { MKTC_GETMISCINFO_MEMWRITE_START, MKTSTR(MKTC_GETMISCINFO_MEMWRITE_START) }, - { MKTC_GETMISCINFO_MEMWRITE_END, MKTSTR(MKTC_GETMISCINFO_MEMWRITE_END) }, - - { MKTC_HALTTA, MKTSTR(MKTC_HALTTA) }, - { MKTC_HTA_SET_FLAG, MKTSTR(MKTC_HTA_SET_FLAG) }, - { MKTC_HTA_SAVE_COMPLEX_PTR, MKTSTR(MKTC_HTA_SAVE_COMPLEX_PTR) }, - { MKTC_HALTTA_END, MKTSTR(MKTC_HALTTA_END) }, - - { MKTC_RESUMETA, MKTSTR(MKTC_RESUMETA) }, - { MKTC_RTA_CONTEXT_LOADED, MKTSTR(MKTC_RTA_CONTEXT_LOADED) }, - { MKTC_RTA_MTE_STATE_KICKED, MKTSTR(MKTC_RTA_MTE_STATE_KICKED) }, - { MKTC_RTA_CMPLX_GEOM_PRESENT, MKTSTR(MKTC_RTA_CMPLX_GEOM_PRESENT) }, - { MKTC_RTA_CMPLX_STATE_KICKED, MKTSTR(MKTC_RTA_CMPLX_STATE_KICKED) }, - { MKTC_RTA_CHECK_NEXT_SA_PROG, MKTSTR(MKTC_RTA_CHECK_NEXT_SA_PROG) }, - { MKTC_RTA_CORE_COMPLETED, MKTSTR(MKTC_RTA_CORE_COMPLETED) }, - { MKTC_RTA_DEBUG_SAS, MKTSTR(MKTC_RTA_DEBUG_SAS) }, - { MKTC_RESUMETA_END, MKTSTR(MKTC_RESUMETA_END) }, - - { MKTC_RESUME_SPMCS_START, MKTSTR(MKTC_RESUME_SPMCS_START) }, - { MKTC_RSPMCS_OVERLAP, MKTSTR(MKTC_RSPMCS_OVERLAP) }, - { MKTC_RSPMCS_START_PULSE, MKTSTR(MKTC_RSPMCS_START_PULSE) }, - { MKTC_RESUME_SPMCS_END, MKTSTR(MKTC_RESUME_SPMCS_END) }, - - { MKTC_RENDERHALT, MKTSTR(MKTC_RENDERHALT) }, - { MKTC_RH_CLEARFLAGS, MKTSTR(MKTC_RH_CLEARFLAGS) }, - { MKTC_RH_CTRL_ADDR, MKTSTR(MKTC_RH_CTRL_ADDR) }, - { MKTC_RH_RGN_ADDR, MKTSTR(MKTC_RH_RGN_ADDR) }, - { MKTC_RH_EMPTY_TILE, MKTSTR(MKTC_RH_EMPTY_TILE) }, - { MKTC_RH_EMPTY_LAST_TILE, MKTSTR(MKTC_RH_EMPTY_LAST_TILE) }, - { MKTC_RH_3D_TIMEOUT, MKTSTR(MKTC_RH_3D_TIMEOUT) }, - { MKTC_RH_NOT_EMPTY, MKTSTR(MKTC_RH_NOT_EMPTY) }, - { MKTC_RH_OBJECT_COMPLETE, MKTSTR(MKTC_RH_OBJECT_COMPLETE) }, - { MKTC_RH_STREAM_LINK, MKTSTR(MKTC_RH_STREAM_LINK) }, - { MKTC_RH_OBJECT_INCOMPLETE, MKTSTR(MKTC_RH_OBJECT_INCOMPLETE) }, - { MKTC_RH_PRIM_MASK_PRESENT, MKTSTR(MKTC_RH_PRIM_MASK_PRESENT) }, - { MKTC_RH_BYTE_MASK_PRESENT, MKTSTR(MKTC_RH_BYTE_MASK_PRESENT) }, - { MKTC_RH_BYTE_MASK_ZERO, MKTSTR(MKTC_RH_BYTE_MASK_ZERO) }, - { MKTC_RH_PRIM_MASK_ZERO, MKTSTR(MKTC_RH_PRIM_MASK_ZERO) }, - { MKTC_RH_INVALIDATE_OBJECTS, MKTSTR(MKTC_RH_INVALIDATE_OBJECTS) }, - { MKTC_RH_OBJECTS_INVALIDATED, MKTSTR(MKTC_RH_OBJECTS_INVALIDATED) }, - { MKTC_RH_DPM_RGN_PARSER_IDLE, MKTSTR(MKTC_RH_DPM_RGN_PARSER_IDLE) }, - { MKTC_RH_NEXT_RGN_BASE, MKTSTR(MKTC_RH_NEXT_RGN_BASE) }, - { MKTC_RH_OCC_EXIT, MKTSTR(MKTC_RH_OCC_EXIT) }, - { MKTC_RH_STILL_RUNNING, MKTSTR(MKTC_RH_STILL_RUNNING) }, - { MKTC_RH_CLEARMCI, MKTSTR(MKTC_RH_CLEARMCI) }, - { MKTC_RH_EOR, MKTSTR(MKTC_RH_EOR) }, - { MKTC_RENDERHALT_END, MKTSTR(MKTC_RENDERHALT_END) }, - - { MKTC_FIND3D_POWERREQUEST, MKTSTR(MKTC_FIND3D_POWERREQUEST) }, - - { MKTC_FIND2D_POWERREQUEST, MKTSTR(MKTC_FIND2D_POWERREQUEST) }, - - { MKTC_SPM_OOM_POWERREQUEST, MKTSTR(MKTC_SPM_OOM_POWERREQUEST) }, - { MKTC_SPM_AC_POWERREQUEST, MKTSTR(MKTC_SPM_AC_POWERREQUEST) }, - { MKTC_SPM_RF_POWERREQUEST, MKTSTR(MKTC_SPM_RF_POWERREQUEST) }, - - { MKTC_UKERNEL_INIT, MKTSTR(MKTC_UKERNEL_INIT) }, - { MKTC_UKERNEL_INIT_DCS_COMPLETE, MKTSTR(MKTC_UKERNEL_INIT_DCS_COMPLETE) }, - { MKTC_UKERNEL_INIT_VDMKICK_COMPLETE, MKTSTR(MKTC_UKERNEL_INIT_VDMKICK_COMPLETE) }, - - { MKTC_KICKTRANSFERRENDER_START, MKTSTR(MKTC_KICKTRANSFERRENDER_START) }, - { MKTC_KICKTRANSFERRENDER_ISP_START, MKTSTR(MKTC_KICKTRANSFERRENDER_ISP_START) }, - { MKTC_KICKTRANSFERRENDER_END, MKTSTR(MKTC_KICKTRANSFERRENDER_END) }, - { MKTC_DUMMYPROCTRANSFER, MKTSTR(MKTC_DUMMYPROCTRANSFER) }, - { MKTC_KTR_TQFENCE, MKTSTR(MKTC_KTR_TQFENCE) }, - { MKTC_KICKTRANSFERRENDER_PID, MKTSTR(MKTC_KICKTRANSFERRENDER_PID) }, - - { MKTC_HOSTKICK_CLEANUP_RT, MKTSTR(MKTC_HOSTKICK_CLEANUP_RT) }, - { MKTC_HOSTKICK_CLEANUP_RC, MKTSTR(MKTC_HOSTKICK_CLEANUP_RC) }, - { MKTC_HOSTKICK_CLEANUP_TC, MKTSTR(MKTC_HOSTKICK_CLEANUP_TC) }, - { MKTC_HOSTKICK_CLEANUP_2DC, MKTSTR(MKTC_HOSTKICK_CLEANUP_2DC) }, - { MKTC_HOSTKICK_CLEANUP_PB, MKTSTR(MKTC_HOSTKICK_CLEANUP_PB) }, - { MKTC_HOSTKICK_GETMISCINFO, MKTSTR(MKTC_HOSTKICK_GETMISCINFO) }, - { MKTC_HOSTKICK_DATABREAKPOINT, MKTSTR(MKTC_HOSTKICK_DATABREAKPOINT) }, - { MKTC_HOSTKICK_SETHWPERFSTATUS, MKTSTR(MKTC_HOSTKICK_SETHWPERFSTATUS) }, - - { MKTC_ZEROPC, MKTSTR(MKTC_ZEROPC) }, - - { MKTC_ASSERT_FAIL, MKTSTR(MKTC_ASSERT_FAIL) }, - - { MKTC_SDLB_ILLEGAL, MKTSTR(MKTC_SDLB_ILLEGAL) }, - - { MKTC_SPMEVENT_MEMTHRESHOLD, MKTSTR(MKTC_SPMEVENT_MEMTHRESHOLD) }, - { MKTC_SPMEVENT_OUTOFMEM, MKTSTR(MKTC_SPMEVENT_OUTOFMEM) }, - { MKTC_SPMEVENT_TATERMINATE, MKTSTR(MKTC_SPMEVENT_TATERMINATE) }, - { MKTC_SPMEVENT_MTE_DRAIN_COMPLETE, MKTSTR(MKTC_SPMEVENT_MTE_DRAIN_COMPLETE) }, - { MKTC_SPMEVENT_END, MKTSTR(MKTC_SPMEVENT_END) }, - { MKTC_SPMLB_MEMTHRESHOLD, MKTSTR(MKTC_SPMLB_MEMTHRESHOLD) }, - { MKTC_SPMLB_OUTOFMEM, MKTSTR(MKTC_SPMLB_OUTOFMEM) }, - { MKTC_SPMLB_TATERMINATE, MKTSTR(MKTC_SPMLB_TATERMINATE) }, - { MKTC_SPMLB_SPMRENDERFINSHED, MKTSTR(MKTC_SPMLB_SPMRENDERFINSHED) }, - { MKTC_SPMLB_MTE_DRAIN_COMPLETE, MKTSTR(MKTC_SPMLB_MTE_DRAIN_COMPLETE) }, - { MKTC_SPMLB_END, MKTSTR(MKTC_SPMLB_END) }, - - { MKTC_SPM_CHECK_MT_DEADLOCK, MKTSTR(MKTC_SPM_CHECK_MT_DEADLOCK) }, - { MKTC_SPM_CHECK_GLOBAL_DEADLOCK, MKTSTR(MKTC_SPM_CHECK_GLOBAL_DEADLOCK) }, - { MKTC_SPM_RESERVE_ADDED, MKTSTR(MKTC_SPM_RESERVE_ADDED) }, - - { MKTC_IBC_ILLEGAL, MKTSTR(MKTC_IBC_ILLEGAL) }, - - { MKTC_HWP_CLEARCOUNTERS, MKTSTR(MKTC_HWP_CLEARCOUNTERS) }, - - { MKTC_TA_FRAMENUM, MKTSTR(MKTC_TA_FRAMENUM) }, - { MKTC_3D_FRAMENUM, MKTSTR(MKTC_3D_FRAMENUM) }, - { MKTC_SPM3D_FRAMENUM, MKTSTR(MKTC_SPM3D_FRAMENUM) }, - - { MKTC_HKTA_RENDERCONTEXT, MKTSTR(MKTC_HKTA_RENDERCONTEXT) }, - { MKTC_IDLECORE_REFCOUNT_FAIL, MKTSTR(MKTC_IDLECORE_REFCOUNT_FAIL) }, - - { MKTC_MCISTATE_NOT_CLEARED, MKTSTR(MKTC_MCISTATE_NOT_CLEARED) }, - - - { MKTC_LOWERED_TO_PDS_THRESHOLD, MKTSTR(MKTC_LOWERED_TO_PDS_THRESHOLD) }, - { MKTC_REDUCE_MAX_VTX_PARTITIONS, MKTSTR(MKTC_REDUCE_MAX_VTX_PARTITIONS) }, - { MKTC_KTAOVERRIDE_MAX_VTX_PARTITIONS, MKTSTR(MKTC_KTAOVERRIDE_MAX_VTX_PARTITIONS) }, - { MKTC_KTANOOVERRIDE_MAX_VTX_PARTITIONS, MKTSTR(MKTC_KTANOOVERRIDE_MAX_VTX_PARTITIONS) }, - - - { MKTC_IPRB_NORENDERDETAILS, MKTSTR(MKTC_IPRB_NORENDERDETAILS) }, - { MKTC_IPRB_HAVERENDERDETAILS, MKTSTR(MKTC_IPRB_HAVERENDERDETAILS) }, - - { MKTC_RENDER_OUT_OF_ORDER, MKTSTR(MKTC_RENDER_OUT_OF_ORDER) }, - { MKTC_RENDER_NOT_OUT_OF_ORDER, MKTSTR(MKTC_RENDER_NOT_OUT_OF_ORDER) }, - - { MKTC_ZLS_IDLE_BEGIN, MKTSTR(MKTC_ZLS_IDLE_BEGIN) }, - { MKTC_ZLS_ISP_CLK_GATING_EN, MKTSTR(MKTC_ZLS_ISP_CLK_GATING_EN) }, - { MKTC_ZLS_IDLE_END, MKTSTR(MKTC_ZLS_IDLE_END) }, -}; - -#define MKTCSIZE (sizeof(MKTDecoder) / sizeof(MKTDecoder[0])) - -#endif /* __SGX_UKERNEL_STATUS_CODES_H__ */ - -/****************************************************************************** - End of file (sgx_ukernel_status_codes.h) -******************************************************************************/ - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxconfig.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxconfig.h deleted file mode 100644 index 5e38cd5..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxconfig.h +++ /dev/null @@ -1,361 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SGXCONFIG_H__ -#define __SGXCONFIG_H__ - -#include "sgxdefs.h" - -#define DEV_DEVICE_TYPE PVRSRV_DEVICE_TYPE_SGX -#define DEV_DEVICE_CLASS PVRSRV_DEVICE_CLASS_3D - -#define DEV_MAJOR_VERSION 1 -#define DEV_MINOR_VERSION 0 - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) -#define SGX_KERNEL_DATA_HEAP_OFFSET 0x00001000 -#else -#define SGX_KERNEL_DATA_HEAP_OFFSET 0x00000000 -#endif - -#if SGX_FEATURE_ADDRESS_SPACE_SIZE == 32 -#if defined(FIX_HW_BRN_31620) - #if defined(SGX_FEATURE_2D_HARDWARE) - #define SGX_2D_HEAP_BASE 0x04000000 - #define SGX_2D_HEAP_SIZE (0x08000000-0x04000000-0x00001000) - #endif - - #define SGX_GENERAL_HEAP_BASE 0x08000000 - #define SGX_GENERAL_HEAP_SIZE (0xB8000000-0x00001000) - - - #define SGX_3DPARAMETERS_HEAP_SIZE 0x10000000 - - -#if !defined(HYBRID_SHARED_PB_SIZE) - #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) -#endif -#if defined(SUPPORT_HYBRID_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) -#else -#if defined(SUPPORT_PERCONTEXT_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE 0 - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) -#endif -#if defined(SUPPORT_SHARED_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 -#endif -#endif - - #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0xC0000000 - - - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) - - - #define SGX_TADATA_HEAP_BASE 0xD0000000 - #define SGX_TADATA_HEAP_SIZE (0x0D000000-0x00001000) - - #define SGX_SYNCINFO_HEAP_BASE 0xE0000000 - #define SGX_SYNCINFO_HEAP_SIZE (0x01000000-0x00001000) - - #define SGX_PDSPIXEL_CODEDATA_HEAP_BASE 0xE4000000 - #define SGX_PDSPIXEL_CODEDATA_HEAP_SIZE (0x02000000-0x00001000) - - #define SGX_KERNEL_CODE_HEAP_BASE 0xE8000000 - #define SGX_KERNEL_CODE_HEAP_SIZE (0x00080000-0x00001000) - - #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0xEC000000 - #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x01C00000-0x00001000) - - #define SGX_KERNEL_DATA_HEAP_BASE (0xF0000000+SGX_KERNEL_DATA_HEAP_OFFSET) - #define SGX_KERNEL_DATA_HEAP_SIZE (0x03000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) - - - #define SGX_PIXELSHADER_HEAP_BASE 0xF4000000 - #define SGX_PIXELSHADER_HEAP_SIZE (0x05000000-0x00001000) - - #define SGX_VERTEXSHADER_HEAP_BASE 0xFC000000 - #define SGX_VERTEXSHADER_HEAP_SIZE (0x02000000-0x00001000) -#else - #if defined(SGX_FEATURE_2D_HARDWARE) - #define SGX_2D_HEAP_BASE 0x00100000 - #define SGX_2D_HEAP_SIZE (0x08000000-0x00100000-0x00001000) - #else - #if defined(FIX_HW_BRN_26915) - #define SGX_CGBUFFER_HEAP_BASE 0x00100000 - #define SGX_CGBUFFER_HEAP_SIZE (0x08000000-0x00100000-0x00001000) - #endif - #endif - - #if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #define SGX_GENERAL_MAPPING_HEAP_BASE 0x08000000 - #define SGX_GENERAL_MAPPING_HEAP_SIZE (0x08000000-0x00001000) - #endif - - #define SGX_GENERAL_HEAP_BASE 0x10000000 - #define SGX_GENERAL_HEAP_SIZE (0xC2000000-0x00001000) - - - #define SGX_3DPARAMETERS_HEAP_SIZE 0x10000000 - - -#if !defined(HYBRID_SHARED_PB_SIZE) - #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) -#endif -#if defined(SUPPORT_HYBRID_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) -#else -#if defined(SUPPORT_PERCONTEXT_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE 0 - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) -#endif -#if defined(SUPPORT_SHARED_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 -#endif -#endif - - #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0xD2000000 - - - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) - - - #define SGX_TADATA_HEAP_BASE 0xE2000000 - #define SGX_TADATA_HEAP_SIZE (0x0D000000-0x00001000) - - #define SGX_SYNCINFO_HEAP_BASE 0xEF000000 - #define SGX_SYNCINFO_HEAP_SIZE (0x01000000-0x00001000) - - #define SGX_PDSPIXEL_CODEDATA_HEAP_BASE 0xF0000000 - #define SGX_PDSPIXEL_CODEDATA_HEAP_SIZE (0x02000000-0x00001000) - - #define SGX_KERNEL_CODE_HEAP_BASE 0xF2000000 - #define SGX_KERNEL_CODE_HEAP_SIZE (0x00080000-0x00001000) - - #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0xF2400000 - #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x01C00000-0x00001000) - - #define SGX_KERNEL_DATA_HEAP_BASE (0xF4000000+SGX_KERNEL_DATA_HEAP_OFFSET) - #define SGX_KERNEL_DATA_HEAP_SIZE (0x05000000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) - - - #define SGX_PIXELSHADER_HEAP_BASE 0xF9000000 - #define SGX_PIXELSHADER_HEAP_SIZE (0x05000000-0x00001000) - - #define SGX_VERTEXSHADER_HEAP_BASE 0xFE000000 - #define SGX_VERTEXSHADER_HEAP_SIZE (0x02000000-0x00001000) -#endif - - #define SGX_CORE_IDENTIFIED -#endif - -#if SGX_FEATURE_ADDRESS_SPACE_SIZE == 28 - -#if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #define SGX_GENERAL_MAPPING_HEAP_BASE 0x00001000 - #define SGX_GENERAL_MAPPING_HEAP_SIZE (0x01800000-0x00001000-0x00001000) - - #define SGX_GENERAL_HEAP_BASE 0x01800000 - #define SGX_GENERAL_HEAP_SIZE (0x07000000-0x00001000) - -#else - #define SGX_GENERAL_HEAP_BASE 0x00001000 - #define SGX_GENERAL_HEAP_SIZE (0x08800000-0x00001000-0x00001000) -#endif - - #define SGX_3DPARAMETERS_HEAP_SIZE 0x04000000 - - -#if !defined(HYBRID_SHARED_PB_SIZE) - #define HYBRID_SHARED_PB_SIZE (SGX_3DPARAMETERS_HEAP_SIZE >> 1) -#endif -#if defined(SUPPORT_HYBRID_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE (HYBRID_SHARED_PB_SIZE) - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (HYBRID_SHARED_PB_SIZE-0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - SGX_SHARED_3DPARAMETERS_SIZE - 0x00001000) -#else -#if defined(SUPPORT_PERCONTEXT_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE 0 - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE 0 - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) -#endif -#if defined(SUPPORT_SHARED_PB) - #define SGX_SHARED_3DPARAMETERS_SIZE SGX_3DPARAMETERS_HEAP_SIZE - #define SGX_SHARED_3DPARAMETERS_HEAP_SIZE (SGX_3DPARAMETERS_HEAP_SIZE - 0x00001000) - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE 0 -#endif -#endif - - #define SGX_SHARED_3DPARAMETERS_HEAP_BASE 0x08800000 - - - #define SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE (SGX_SHARED_3DPARAMETERS_HEAP_BASE + SGX_SHARED_3DPARAMETERS_SIZE) - - - #define SGX_TADATA_HEAP_BASE 0x0C800000 - #define SGX_TADATA_HEAP_SIZE (0x01000000-0x00001000) - - #define SGX_SYNCINFO_HEAP_BASE 0x0D800000 - #define SGX_SYNCINFO_HEAP_SIZE (0x00400000-0x00001000) - - #define SGX_PDSPIXEL_CODEDATA_HEAP_BASE 0x0DC00000 - #define SGX_PDSPIXEL_CODEDATA_HEAP_SIZE (0x00800000-0x00001000) - - #define SGX_KERNEL_CODE_HEAP_BASE 0x0E400000 - #define SGX_KERNEL_CODE_HEAP_SIZE (0x00080000-0x00001000) - - #define SGX_PDSVERTEX_CODEDATA_HEAP_BASE 0x0E800000 - #define SGX_PDSVERTEX_CODEDATA_HEAP_SIZE (0x00800000-0x00001000) - - #define SGX_KERNEL_DATA_HEAP_BASE (0x0F000000+SGX_KERNEL_DATA_HEAP_OFFSET) - #define SGX_KERNEL_DATA_HEAP_SIZE (0x00400000-(0x00001000+SGX_KERNEL_DATA_HEAP_OFFSET)) - - #define SGX_PIXELSHADER_HEAP_BASE 0x0F400000 - #define SGX_PIXELSHADER_HEAP_SIZE (0x00500000-0x00001000) - - #define SGX_VERTEXSHADER_HEAP_BASE 0x0FC00000 - #define SGX_VERTEXSHADER_HEAP_SIZE (0x00200000-0x00001000) - - - #define SGX_CORE_IDENTIFIED - -#endif - -#if !defined(SGX_CORE_IDENTIFIED) - #error "sgxconfig.h: ERROR: unspecified SGX Core version" -#endif - -#if !defined (SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE) - #if ((SGX_KERNEL_CODE_HEAP_BASE + SGX_KERNEL_CODE_HEAP_SIZE - SGX_PDSPIXEL_CODEDATA_HEAP_BASE) > 0x4000000) - #error "sgxconfig.h: ERROR: SGX_KERNEL_CODE_HEAP_BASE out of range of SGX_PDSPIXEL_CODEDATA_HEAP_BASE" - #endif - - #if ((SGX_PDSVERTEX_CODEDATA_HEAP_BASE + SGX_PDSVERTEX_CODEDATA_HEAP_SIZE - SGX_PDSPIXEL_CODEDATA_HEAP_BASE) > 0x4000000) - #error "sgxconfig.h: ERROR: SGX_PDSVERTEX_CODEDATA_HEAP_BASE out of range of SGX_PDSPIXEL_CODEDATA_HEAP_BASE" - #endif -#endif - -#if defined(SGX_FEATURE_2D_HARDWARE) && defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #if ((SGX_GENERAL_MAPPING_HEAP_BASE + SGX_GENERAL_MAPPING_HEAP_SIZE - SGX_2D_HEAP_BASE) >= EUR_CR_BIF_TWOD_REQ_BASE_ADDR_MASK) - #error "sgxconfig.h: ERROR: SGX_GENERAL_MAPPING_HEAP inaccessable by 2D requestor" - #endif -#endif - -#if defined (EURASIA_USE_CODE_PAGE_SIZE) - #if ((SGX_KERNEL_CODE_HEAP_BASE & (EURASIA_USE_CODE_PAGE_SIZE - 1)) != 0) - #error "sgxconfig.h: ERROR: Kernel code heap base misalignment" - #endif -#endif - -#if defined(SGX_FEATURE_2D_HARDWARE) - #if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #if ((SGX_2D_HEAP_BASE + SGX_2D_HEAP_SIZE) >= SGX_GENERAL_MAPPING_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_2D_HEAP overlaps SGX_GENERAL_MAPPING_HEAP" - #endif - #else - #if ((SGX_2D_HEAP_BASE + SGX_2D_HEAP_SIZE) >= SGX_GENERAL_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_2D_HEAP overlaps SGX_GENERAL_HEAP_BASE" - #endif - #endif -#else - #if defined(FIX_HW_BRN_26915) - #if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #if ((SGX_CGBUFFER_HEAP_BASE + SGX_CGBUFFER_HEAP_SIZE) >= SGX_GENERAL_MAPPING_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_CGBUFFER_HEAP overlaps SGX_GENERAL_MAPPING_HEAP" - #endif - #else - #if ((SGX_CGBUFFER_HEAP_BASE + SGX_CGBUFFER_HEAP_SIZE) >= SGX_GENERAL_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_CGBUFFER_HEAP overlaps SGX_GENERAL_HEAP_BASE" - #endif - #endif - #endif -#endif - -#if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - #if ((SGX_GENERAL_MAPPING_HEAP_BASE + SGX_GENERAL_MAPPING_HEAP_SIZE) >= SGX_GENERAL_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_GENERAL_MAPPING_HEAP overlaps SGX_GENERAL_HEAP" - #endif -#endif - -#if defined(SUPPORT_HYBRID_PB) - #if ((HYBRID_SHARED_PB_SIZE + 0x000001000) > SGX_3DPARAMETERS_HEAP_SIZE) - #error "sgxconfig.h: ERROR: HYBRID_SHARED_PB_SIZE too large" - #endif -#endif - -#if ((SGX_GENERAL_HEAP_BASE + SGX_GENERAL_HEAP_SIZE) >= SGX_SHARED_3DPARAMETERS_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_GENERAL_HEAP overlaps SGX_3DPARAMETERS_HEAP" -#endif - -#if (((SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE + SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE) >= SGX_TADATA_HEAP_BASE) && (SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE > 0)) - #error "sgxconfig.h: ERROR: SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE overlaps SGX_TADATA_HEAP" -#endif - -#if ((SGX_TADATA_HEAP_BASE + SGX_TADATA_HEAP_SIZE) >= SGX_SYNCINFO_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_TADATA_HEAP overlaps SGX_SYNCINFO_HEAP" -#endif - -#if ((SGX_SYNCINFO_HEAP_BASE + SGX_SYNCINFO_HEAP_SIZE) >= SGX_PDSPIXEL_CODEDATA_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_SYNCINFO_HEAP overlaps SGX_PDSPIXEL_CODEDATA_HEAP" -#endif - -#if ((SGX_PDSPIXEL_CODEDATA_HEAP_BASE + SGX_PDSPIXEL_CODEDATA_HEAP_SIZE) >= SGX_KERNEL_CODE_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_PDSPIXEL_CODEDATA_HEAP overlaps SGX_KERNEL_CODE_HEAP" -#endif - -#if ((SGX_KERNEL_CODE_HEAP_BASE + SGX_KERNEL_CODE_HEAP_SIZE) >= SGX_PDSVERTEX_CODEDATA_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_KERNEL_CODE_HEAP overlaps SGX_PDSVERTEX_CODEDATA_HEAP" -#endif - -#if ((SGX_PDSVERTEX_CODEDATA_HEAP_BASE + SGX_PDSVERTEX_CODEDATA_HEAP_SIZE) >= SGX_KERNEL_DATA_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_PDSVERTEX_CODEDATA_HEAP overlaps SGX_KERNEL_DATA_HEAP" -#endif - -#if ((SGX_KERNEL_DATA_HEAP_BASE + SGX_KERNEL_DATA_HEAP_SIZE) >= SGX_PIXELSHADER_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_KERNEL_DATA_HEAP overlaps SGX_PIXELSHADER_HEAP" -#endif - -#if ((SGX_PIXELSHADER_HEAP_BASE + SGX_PIXELSHADER_HEAP_SIZE) >= SGX_VERTEXSHADER_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_PIXELSHADER_HEAP overlaps SGX_VERTEXSHADER_HEAP" -#endif - -#if ((SGX_VERTEXSHADER_HEAP_BASE + SGX_VERTEXSHADER_HEAP_SIZE) < SGX_VERTEXSHADER_HEAP_BASE) - #error "sgxconfig.h: ERROR: SGX_VERTEXSHADER_HEAP_BASE size cause wraparound" -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinfokm.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinfokm.h deleted file mode 100644 index 55bc9e4..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinfokm.h +++ /dev/null @@ -1,574 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SGXINFOKM_H__ -#define __SGXINFOKM_H__ - -#include "sgxdefs.h" -#include "device.h" -#include "power.h" -#include "sysconfig.h" -#include "sgxscript.h" -#include "sgxinfo.h" - -#if defined (__cplusplus) -extern "C" { -#endif - -#define SGX_HOSTPORT_PRESENT 0x00000001UL - - -#define SGX_PDUMPREG_NAME "SGXREG" - -typedef struct _PVRSRV_STUB_PBDESC_ PVRSRV_STUB_PBDESC; - - -typedef struct _PVRSRV_SGX_CCB_INFO_ *PPVRSRV_SGX_CCB_INFO; - -typedef struct _PVRSRV_SGXDEV_INFO_ -{ - PVRSRV_DEVICE_TYPE eDeviceType; - PVRSRV_DEVICE_CLASS eDeviceClass; - - IMG_UINT8 ui8VersionMajor; - IMG_UINT8 ui8VersionMinor; - IMG_UINT32 ui32CoreConfig; - IMG_UINT32 ui32CoreFlags; - - - IMG_PVOID pvRegsBaseKM; - -#if defined(SGX_FEATURE_HOST_PORT) - - IMG_PVOID pvHostPortBaseKM; - - IMG_UINT32 ui32HPSize; - - IMG_SYS_PHYADDR sHPSysPAddr; -#endif - - - IMG_HANDLE hRegMapping; - - - IMG_SYS_PHYADDR sRegsPhysBase; - - IMG_UINT32 ui32RegSize; - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) - - IMG_UINT32 ui32ExtSysCacheRegsSize; - - IMG_DEV_PHYADDR sExtSysCacheRegsDevPBase; - - IMG_UINT32 *pui32ExtSystemCacheRegsPT; - - IMG_HANDLE hExtSystemCacheRegsPTPageOSMemHandle; - - IMG_SYS_PHYADDR sExtSystemCacheRegsPTSysPAddr; -#endif - - - IMG_UINT32 ui32CoreClockSpeed; - IMG_UINT32 ui32uKernelTimerClock; - - PVRSRV_STUB_PBDESC *psStubPBDescListKM; - - - - IMG_DEV_PHYADDR sKernelPDDevPAddr; - - IMG_VOID *pvDeviceMemoryHeap; - PPVRSRV_KERNEL_MEM_INFO psKernelCCBMemInfo; - PVRSRV_SGX_KERNEL_CCB *psKernelCCB; - PPVRSRV_SGX_CCB_INFO psKernelCCBInfo; - PPVRSRV_KERNEL_MEM_INFO psKernelCCBCtlMemInfo; - PVRSRV_SGX_CCB_CTL *psKernelCCBCtl; - PPVRSRV_KERNEL_MEM_INFO psKernelCCBEventKickerMemInfo; - IMG_UINT32 *pui32KernelCCBEventKicker; -#if defined(PDUMP) - IMG_UINT32 ui32KernelCCBEventKickerDumpVal; -#endif - PVRSRV_KERNEL_MEM_INFO *psKernelSGXMiscMemInfo; - IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX]; -#if defined(SGX_SUPPORT_HWPROFILING) - PPVRSRV_KERNEL_MEM_INFO psKernelHWProfilingMemInfo; -#endif - PPVRSRV_KERNEL_MEM_INFO psKernelHWPerfCBMemInfo; - PPVRSRV_KERNEL_MEM_INFO psKernelTASigBufferMemInfo; - PPVRSRV_KERNEL_MEM_INFO psKernel3DSigBufferMemInfo; -#if defined(FIX_HW_BRN_29702) - PPVRSRV_KERNEL_MEM_INFO psKernelCFIMemInfo; -#endif -#if defined(FIX_HW_BRN_29823) - PPVRSRV_KERNEL_MEM_INFO psKernelDummyTermStreamMemInfo; -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - PPVRSRV_KERNEL_MEM_INFO psKernelVDMSnapShotBufferMemInfo; - PPVRSRV_KERNEL_MEM_INFO psKernelVDMCtrlStreamBufferMemInfo; -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - PPVRSRV_KERNEL_MEM_INFO psKernelVDMStateUpdateBufferMemInfo; -#endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - PPVRSRV_KERNEL_MEM_INFO psKernelEDMStatusBufferMemInfo; -#endif -#if defined(SGX_FEATURE_OVERLAPPED_SPM) - PPVRSRV_KERNEL_MEM_INFO psKernelTmpRgnHeaderMemInfo; -#endif - - IMG_UINT32 ui32ClientRefCount; - - - IMG_UINT32 ui32CacheControl; - - - IMG_UINT32 ui32ClientBuildOptions; - - - SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; - - - - - IMG_VOID *pvMMUContextList; - - - IMG_BOOL bForcePTOff; - - IMG_UINT32 ui32EDMTaskReg0; - IMG_UINT32 ui32EDMTaskReg1; - - IMG_UINT32 ui32ClkGateCtl; - IMG_UINT32 ui32ClkGateCtl2; - IMG_UINT32 ui32ClkGateStatusReg; - IMG_UINT32 ui32ClkGateStatusMask; -#if defined(SGX_FEATURE_MP) - IMG_UINT32 ui32MasterClkGateStatusReg; - IMG_UINT32 ui32MasterClkGateStatusMask; - IMG_UINT32 ui32MasterClkGateStatus2Reg; - IMG_UINT32 ui32MasterClkGateStatus2Mask; -#endif - SGX_INIT_SCRIPTS sScripts; - - - IMG_HANDLE hBIFResetPDOSMemHandle; - IMG_DEV_PHYADDR sBIFResetPDDevPAddr; - IMG_DEV_PHYADDR sBIFResetPTDevPAddr; - IMG_DEV_PHYADDR sBIFResetPageDevPAddr; - IMG_UINT32 *pui32BIFResetPD; - IMG_UINT32 *pui32BIFResetPT; - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) - - IMG_HANDLE hBRN22997PTPageOSMemHandle; - IMG_HANDLE hBRN22997PDPageOSMemHandle; - IMG_DEV_PHYADDR sBRN22997PTDevPAddr; - IMG_DEV_PHYADDR sBRN22997PDDevPAddr; - IMG_UINT32 *pui32BRN22997PT; - IMG_UINT32 *pui32BRN22997PD; - IMG_SYS_PHYADDR sBRN22997SysPAddr; -#endif - -#if defined(SUPPORT_HW_RECOVERY) - - IMG_HANDLE hTimer; - - IMG_UINT32 ui32TimeStamp; -#endif - - - IMG_UINT32 ui32NumResets; - - - PVRSRV_KERNEL_MEM_INFO *psKernelSGXHostCtlMemInfo; - SGXMKIF_HOST_CTL *psSGXHostCtl; - - - PVRSRV_KERNEL_MEM_INFO *psKernelSGXTA3DCtlMemInfo; - -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - PVRSRV_KERNEL_MEM_INFO *psKernelSGXPTLAWriteBackMemInfo; -#endif - - IMG_UINT32 ui32Flags; - - - IMG_UINT32 ui32MemTilingUsage; - - #if defined(PDUMP) - PVRSRV_SGX_PDUMP_CONTEXT sPDContext; - #endif - -#if defined(SUPPORT_SGX_MMU_DUMMY_PAGE) - - IMG_VOID *pvDummyPTPageCpuVAddr; - IMG_DEV_PHYADDR sDummyPTDevPAddr; - IMG_HANDLE hDummyPTPageOSMemHandle; - IMG_VOID *pvDummyDataPageCpuVAddr; - IMG_DEV_PHYADDR sDummyDataDevPAddr; - IMG_HANDLE hDummyDataPageOSMemHandle; -#endif -#if defined(PDUMP) - PDUMP_MMU_ATTRIB sMMUAttrib; -#endif - IMG_UINT32 asSGXDevData[SGX_MAX_DEV_DATA]; - -#if defined(FIX_HW_BRN_31620) - - IMG_VOID *pvBRN31620DummyPageCpuVAddr; - IMG_HANDLE hBRN31620DummyPageOSMemHandle; - IMG_DEV_PHYADDR sBRN31620DummyPageDevPAddr; - - - IMG_VOID *pvBRN31620DummyPTCpuVAddr; - IMG_HANDLE hBRN31620DummyPTOSMemHandle; - IMG_DEV_PHYADDR sBRN31620DummyPTDevPAddr; - - IMG_HANDLE hKernelMMUContext; -#endif - -} PVRSRV_SGXDEV_INFO; - - -typedef struct _SGX_TIMING_INFORMATION_ -{ - IMG_UINT32 ui32CoreClockSpeed; - IMG_UINT32 ui32HWRecoveryFreq; - IMG_BOOL bEnableActivePM; - IMG_UINT32 ui32ActivePowManLatencyms; - IMG_UINT32 ui32uKernelFreq; -} SGX_TIMING_INFORMATION; - -typedef struct _SGX_DEVICE_MAP_ -{ - IMG_UINT32 ui32Flags; - - - IMG_SYS_PHYADDR sRegsSysPBase; - IMG_CPU_PHYADDR sRegsCpuPBase; - IMG_CPU_VIRTADDR pvRegsCpuVBase; - IMG_UINT32 ui32RegsSize; - -#if defined(SGX_FEATURE_HOST_PORT) - IMG_SYS_PHYADDR sHPSysPBase; - IMG_CPU_PHYADDR sHPCpuPBase; - IMG_UINT32 ui32HPSize; -#endif - - - IMG_SYS_PHYADDR sLocalMemSysPBase; - IMG_DEV_PHYADDR sLocalMemDevPBase; - IMG_CPU_PHYADDR sLocalMemCpuPBase; - IMG_UINT32 ui32LocalMemSize; - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) - IMG_UINT32 ui32ExtSysCacheRegsSize; - IMG_DEV_PHYADDR sExtSysCacheRegsDevPBase; -#endif - - - IMG_UINT32 ui32IRQ; - -#if !defined(SGX_DYNAMIC_TIMING_INFO) - - SGX_TIMING_INFORMATION sTimingInfo; -#endif -#if defined(PDUMP) - - IMG_CHAR *pszPDumpDevName; -#endif -} SGX_DEVICE_MAP; - - -struct _PVRSRV_STUB_PBDESC_ -{ - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32TotalPBSize; - PVRSRV_KERNEL_MEM_INFO *psSharedPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWPBDescKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO **ppsSubKernelMemInfos; - IMG_UINT32 ui32SubKernelMemInfosCount; - IMG_HANDLE hDevCookie; - PVRSRV_KERNEL_MEM_INFO *psBlockKernelMemInfo; - PVRSRV_KERNEL_MEM_INFO *psHWBlockKernelMemInfo; - IMG_DEV_VIRTADDR sHWPBDescDevVAddr; - PVRSRV_STUB_PBDESC *psNext; - PVRSRV_STUB_PBDESC **ppsThis; -}; - -typedef struct _PVRSRV_SGX_CCB_INFO_ -{ - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo; - PVRSRV_KERNEL_MEM_INFO *psCCBCtlMemInfo; - SGXMKIF_COMMAND *psCommands; - IMG_UINT32 *pui32WriteOffset; - volatile IMG_UINT32 *pui32ReadOffset; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif -} PVRSRV_SGX_CCB_INFO; - - -typedef struct _SGX_BRIDGE_INIT_INFO_KM_ -{ - IMG_HANDLE hKernelCCBMemInfo; - IMG_HANDLE hKernelCCBCtlMemInfo; - IMG_HANDLE hKernelCCBEventKickerMemInfo; - IMG_HANDLE hKernelSGXHostCtlMemInfo; - IMG_HANDLE hKernelSGXTA3DCtlMemInfo; -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - IMG_HANDLE hKernelSGXPTLAWriteBackMemInfo; -#endif - IMG_HANDLE hKernelSGXMiscMemInfo; - - IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX]; - - SGX_INIT_SCRIPTS sScripts; - - IMG_UINT32 ui32ClientBuildOptions; - SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes; - -#if defined(SGX_SUPPORT_HWPROFILING) - IMG_HANDLE hKernelHWProfilingMemInfo; -#endif -#if defined(SUPPORT_SGX_HWPERF) - IMG_HANDLE hKernelHWPerfCBMemInfo; -#endif - IMG_HANDLE hKernelTASigBufferMemInfo; - IMG_HANDLE hKernel3DSigBufferMemInfo; - -#if defined(FIX_HW_BRN_29702) - IMG_HANDLE hKernelCFIMemInfo; -#endif -#if defined(FIX_HW_BRN_29823) - IMG_HANDLE hKernelDummyTermStreamMemInfo; -#endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - IMG_HANDLE hKernelEDMStatusBufferMemInfo; -#endif -#if defined(SGX_FEATURE_OVERLAPPED_SPM) - IMG_HANDLE hKernelTmpRgnHeaderMemInfo; -#endif - - IMG_UINT32 ui32EDMTaskReg0; - IMG_UINT32 ui32EDMTaskReg1; - - IMG_UINT32 ui32ClkGateStatusReg; - IMG_UINT32 ui32ClkGateStatusMask; -#if defined(SGX_FEATURE_MP) -#endif - - IMG_UINT32 ui32CacheControl; - - IMG_UINT32 asInitDevData[SGX_MAX_DEV_DATA]; - IMG_HANDLE asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES]; - -} SGX_BRIDGE_INIT_INFO_KM; - - -typedef struct _SGX_INTERNEL_STATUS_UPDATE_KM_ -{ - CTL_STATUS sCtlStatus; - IMG_HANDLE hKernelMemInfo; -} SGX_INTERNEL_STATUS_UPDATE_KM; - - -typedef struct _SGX_CCB_KICK_KM_ -{ - SGXMKIF_COMMAND sCommand; - IMG_HANDLE hCCBKernelMemInfo; - - IMG_UINT32 ui32NumDstSyncObjects; - IMG_HANDLE hKernelHWSyncListMemInfo; - - - IMG_HANDLE *pahDstSyncHandles; - - IMG_UINT32 ui32NumTAStatusVals; - IMG_UINT32 ui32Num3DStatusVals; - -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - SGX_INTERNEL_STATUS_UPDATE_KM asTAStatusUpdate[SGX_MAX_TA_STATUS_VALS]; - SGX_INTERNEL_STATUS_UPDATE_KM as3DStatusUpdate[SGX_MAX_3D_STATUS_VALS]; -#else - IMG_HANDLE ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS]; - IMG_HANDLE ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS]; -#endif - - IMG_BOOL bFirstKickOrResume; -#if (defined(NO_HARDWARE) || defined(PDUMP)) - IMG_BOOL bTerminateOrAbort; -#endif - - - IMG_UINT32 ui32CCBOffset; - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - IMG_UINT32 ui32NumTASrcSyncs; - IMG_HANDLE ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS]; - IMG_UINT32 ui32NumTADstSyncs; - IMG_HANDLE ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS]; - IMG_UINT32 ui32Num3DSrcSyncs; - IMG_HANDLE ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS]; -#else - - IMG_UINT32 ui32NumSrcSyncs; - IMG_HANDLE ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS]; -#endif - - - IMG_BOOL bTADependency; - IMG_HANDLE hTA3DSyncInfo; - - IMG_HANDLE hTASyncInfo; - IMG_HANDLE h3DSyncInfo; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif -#if defined(NO_HARDWARE) - IMG_UINT32 ui32WriteOpsPendingVal; -#endif -} SGX_CCB_KICK_KM; - - -#if defined(TRANSFER_QUEUE) -typedef struct _PVRSRV_TRANSFER_SGX_KICK_KM_ -{ - IMG_HANDLE hCCBMemInfo; - IMG_UINT32 ui32SharedCmdCCBOffset; - - IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; - - IMG_HANDLE hTASyncInfo; - IMG_HANDLE h3DSyncInfo; - - IMG_UINT32 ui32NumSrcSync; - IMG_HANDLE ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; - - IMG_UINT32 ui32NumDstSync; - IMG_HANDLE ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS]; - - IMG_UINT32 ui32Flags; - - IMG_UINT32 ui32PDumpFlags; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif -} PVRSRV_TRANSFER_SGX_KICK_KM, *PPVRSRV_TRANSFER_SGX_KICK_KM; - -#if defined(SGX_FEATURE_2D_HARDWARE) -typedef struct _PVRSRV_2D_SGX_KICK_KM_ -{ - IMG_HANDLE hCCBMemInfo; - IMG_UINT32 ui32SharedCmdCCBOffset; - - IMG_DEV_VIRTADDR sHW2DContextDevVAddr; - - IMG_UINT32 ui32NumSrcSync; - IMG_HANDLE ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS]; - - - IMG_HANDLE hDstSyncInfo; - - - IMG_HANDLE hTASyncInfo; - - - IMG_HANDLE h3DSyncInfo; - - IMG_UINT32 ui32PDumpFlags; -#if defined(PDUMP) - IMG_UINT32 ui32CCBDumpWOff; -#endif -} PVRSRV_2D_SGX_KICK_KM, *PPVRSRV_2D_SGX_KICK_KM; -#endif -#endif - -PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_VOID SGXOSTimer(IMG_VOID *pvData); - -IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bHardwareRecovery, - IMG_UINT32 ui32PDUMPFlags); - -IMG_VOID SGXInitClocks(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags); - -PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bHardwareRecovery); -PVRSRV_ERROR SGXDeinitialise(IMG_HANDLE hDevCookie); - -PVRSRV_ERROR SGXPrePowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -PVRSRV_ERROR SGXPostPowerState(IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -PVRSRV_ERROR SGXPreClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -PVRSRV_ERROR SGXPostClockSpeedChange(IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -IMG_VOID SGXPanic(PVRSRV_SGXDEV_INFO *psDevInfo); - -PVRSRV_ERROR SGXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode); - -#if defined(SGX_DYNAMIC_TIMING_INFO) -IMG_VOID SysGetSGXTimingInformation(SGX_TIMING_INFORMATION *psSGXTimingInfo); -#endif - -#if defined(NO_HARDWARE) -static INLINE IMG_VOID NoHardwareGenerateEvent(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32StatusRegister, - IMG_UINT32 ui32StatusValue, - IMG_UINT32 ui32StatusMask) -{ - IMG_UINT32 ui32RegVal; - - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, ui32StatusRegister); - - ui32RegVal &= ~ui32StatusMask; - ui32RegVal |= (ui32StatusValue & ui32StatusMask); - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32StatusRegister, ui32RegVal); -} -#endif - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinit.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinit.c deleted file mode 100644 index 6970947..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxinit.c +++ /dev/null @@ -1,2824 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include "sgxdefs.h" -#include "sgxmmu.h" -#include "services_headers.h" -#include "buffer_manager.h" -#include "sgxapi_km.h" -#include "sgxinfo.h" -#include "sgx_mkif_km.h" -#include "sgxconfig.h" -#include "sysconfig.h" -#include "pvr_bridge_km.h" - -#include "sgx_bridge_km.h" - -#include "pdump_km.h" -#include "ra.h" -#include "mmu.h" -#include "handle.h" -#include "perproc.h" - -#include "sgxutils.h" -#include "pvrversion.h" -#include "sgx_options.h" - -#include "lists.h" -#include "srvkm.h" -#include "ttrace.h" - -#define VAR(x) #x - - -#define CHECK_SIZE(NAME) \ -{ \ - if (psSGXStructSizes->ui32Sizeof_##NAME != psDevInfo->sSGXStructSizes.ui32Sizeof_##NAME) \ - { \ - PVR_DPF((PVR_DBG_ERROR, "SGXDevInitCompatCheck: Size check failed for SGXMKIF_%s (client) = %d bytes, (ukernel) = %d bytes\n", \ - VAR(NAME), \ - psDevInfo->sSGXStructSizes.ui32Sizeof_##NAME, \ - psSGXStructSizes->ui32Sizeof_##NAME )); \ - bStructSizesFailed = IMG_TRUE; \ - } \ -} - -#if defined (SYS_USING_INTERRUPTS) -IMG_BOOL SGX_ISRHandler(IMG_VOID *pvData); -#endif - - -static -PVRSRV_ERROR SGXGetMiscInfoUkernel(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_HANDLE hDevMemContext); -#if defined(PDUMP) -static -PVRSRV_ERROR SGXResetPDump(PVRSRV_DEVICE_NODE *psDeviceNode); -#endif - -static IMG_VOID SGXCommandComplete(PVRSRV_DEVICE_NODE *psDeviceNode) -{ -#if defined(OS_SUPPORTS_IN_LISR) - if (OSInLISR(psDeviceNode->psSysData)) - { - - psDeviceNode->bReProcessDeviceCommandComplete = IMG_TRUE; - } - else - { - SGXScheduleProcessQueuesKM(psDeviceNode); - } -#else - SGXScheduleProcessQueuesKM(psDeviceNode); -#endif -} - -static IMG_UINT32 DeinitDevInfo(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - if (psDevInfo->psKernelCCBInfo != IMG_NULL) - { - - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_SGX_CCB_INFO), psDevInfo->psKernelCCBInfo, IMG_NULL); - } - - return PVRSRV_OK; -} - -static PVRSRV_ERROR InitDevInfo(PVRSRV_PER_PROCESS_DATA *psPerProc, - PVRSRV_DEVICE_NODE *psDeviceNode, -#if defined (SUPPORT_SID_INTERFACE) - SGX_BRIDGE_INIT_INFO_KM *psInitInfo) -#else - SGX_BRIDGE_INIT_INFO *psInitInfo) -#endif -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - PVRSRV_ERROR eError; - - PVRSRV_SGX_CCB_INFO *psKernelCCBInfo = IMG_NULL; - - PVR_UNREFERENCED_PARAMETER(psPerProc); - psDevInfo->sScripts = psInitInfo->sScripts; - - psDevInfo->psKernelCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelCCBMemInfo; - psDevInfo->psKernelCCB = (PVRSRV_SGX_KERNEL_CCB *) psDevInfo->psKernelCCBMemInfo->pvLinAddrKM; - - psDevInfo->psKernelCCBCtlMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelCCBCtlMemInfo; - psDevInfo->psKernelCCBCtl = (PVRSRV_SGX_CCB_CTL *) psDevInfo->psKernelCCBCtlMemInfo->pvLinAddrKM; - - psDevInfo->psKernelCCBEventKickerMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelCCBEventKickerMemInfo; - psDevInfo->pui32KernelCCBEventKicker = (IMG_UINT32 *)psDevInfo->psKernelCCBEventKickerMemInfo->pvLinAddrKM; - - psDevInfo->psKernelSGXHostCtlMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXHostCtlMemInfo; - psDevInfo->psSGXHostCtl = (SGXMKIF_HOST_CTL *)psDevInfo->psKernelSGXHostCtlMemInfo->pvLinAddrKM; - - psDevInfo->psKernelSGXTA3DCtlMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXTA3DCtlMemInfo; - -#if defined(FIX_HW_BRN_31272) || defined(FIX_HW_BRN_31780) || defined(FIX_HW_BRN_33920) - psDevInfo->psKernelSGXPTLAWriteBackMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXPTLAWriteBackMemInfo; -#endif - - psDevInfo->psKernelSGXMiscMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelSGXMiscMemInfo; - -#if defined(SGX_SUPPORT_HWPROFILING) - psDevInfo->psKernelHWProfilingMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelHWProfilingMemInfo; -#endif -#if defined(SUPPORT_SGX_HWPERF) - psDevInfo->psKernelHWPerfCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelHWPerfCBMemInfo; -#endif - psDevInfo->psKernelTASigBufferMemInfo = psInitInfo->hKernelTASigBufferMemInfo; - psDevInfo->psKernel3DSigBufferMemInfo = psInitInfo->hKernel3DSigBufferMemInfo; -#if defined(FIX_HW_BRN_29702) - psDevInfo->psKernelCFIMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelCFIMemInfo; -#endif -#if defined(FIX_HW_BRN_29823) - psDevInfo->psKernelDummyTermStreamMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelDummyTermStreamMemInfo; -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && defined(FIX_HW_BRN_31425) - psDevInfo->psKernelVDMSnapShotBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMSnapShotBufferMemInfo; - psDevInfo->psKernelVDMCtrlStreamBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMCtrlStreamBufferMemInfo; -#endif -#if defined(SGX_FEATURE_VDM_CONTEXT_SWITCH) && \ - defined(FIX_HW_BRN_33657) && defined(SUPPORT_SECURE_33657_FIX) - psDevInfo->psKernelVDMStateUpdateBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelVDMStateUpdateBufferMemInfo; -#endif -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - psDevInfo->psKernelEDMStatusBufferMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelEDMStatusBufferMemInfo; -#endif -#if defined(SGX_FEATURE_OVERLAPPED_SPM) - psDevInfo->psKernelTmpRgnHeaderMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelTmpRgnHeaderMemInfo; -#endif -#if defined(SGX_FEATURE_SPM_MODE_0) - psDevInfo->psKernelTmpDPMStateMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psInitInfo->hKernelTmpDPMStateMemInfo; -#endif - - psDevInfo->ui32ClientBuildOptions = psInitInfo->ui32ClientBuildOptions; - - - psDevInfo->sSGXStructSizes = psInitInfo->sSGXStructSizes; - - - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_SGX_CCB_INFO), - (IMG_VOID **)&psKernelCCBInfo, 0, - "SGX Circular Command Buffer Info"); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"InitDevInfo: Failed to alloc memory")); - goto failed_allockernelccb; - } - - - OSMemSet(psKernelCCBInfo, 0, sizeof(PVRSRV_SGX_CCB_INFO)); - psKernelCCBInfo->psCCBMemInfo = psDevInfo->psKernelCCBMemInfo; - psKernelCCBInfo->psCCBCtlMemInfo = psDevInfo->psKernelCCBCtlMemInfo; - psKernelCCBInfo->psCommands = psDevInfo->psKernelCCB->asCommands; - psKernelCCBInfo->pui32WriteOffset = &psDevInfo->psKernelCCBCtl->ui32WriteOffset; - psKernelCCBInfo->pui32ReadOffset = &psDevInfo->psKernelCCBCtl->ui32ReadOffset; - psDevInfo->psKernelCCBInfo = psKernelCCBInfo; - - - - OSMemCopy(psDevInfo->aui32HostKickAddr, psInitInfo->aui32HostKickAddr, - SGXMKIF_CMD_MAX * sizeof(psDevInfo->aui32HostKickAddr[0])); - - psDevInfo->bForcePTOff = IMG_FALSE; - - psDevInfo->ui32CacheControl = psInitInfo->ui32CacheControl; - - psDevInfo->ui32EDMTaskReg0 = psInitInfo->ui32EDMTaskReg0; - psDevInfo->ui32EDMTaskReg1 = psInitInfo->ui32EDMTaskReg1; - psDevInfo->ui32ClkGateCtl = psInitInfo->ui32ClkGateCtl; - psDevInfo->ui32ClkGateCtl2 = psInitInfo->ui32ClkGateCtl2; - psDevInfo->ui32ClkGateStatusReg = psInitInfo->ui32ClkGateStatusReg; - psDevInfo->ui32ClkGateStatusMask = psInitInfo->ui32ClkGateStatusMask; -#if defined(SGX_FEATURE_MP) - psDevInfo->ui32MasterClkGateStatusReg = psInitInfo->ui32MasterClkGateStatusReg; - psDevInfo->ui32MasterClkGateStatusMask = psInitInfo->ui32MasterClkGateStatusMask; - psDevInfo->ui32MasterClkGateStatus2Reg = psInitInfo->ui32MasterClkGateStatus2Reg; - psDevInfo->ui32MasterClkGateStatus2Mask = psInitInfo->ui32MasterClkGateStatus2Mask; -#endif - - - - OSMemCopy(&psDevInfo->asSGXDevData, &psInitInfo->asInitDevData, sizeof(psDevInfo->asSGXDevData)); - - return PVRSRV_OK; - -failed_allockernelccb: - DeinitDevInfo(psDevInfo); - - return eError; -} - - - - -static PVRSRV_ERROR SGXRunScript(PVRSRV_SGXDEV_INFO *psDevInfo, SGX_INIT_COMMAND *psScript, IMG_UINT32 ui32NumInitCommands) -{ - IMG_UINT32 ui32PC; - SGX_INIT_COMMAND *psComm; - - for (ui32PC = 0, psComm = psScript; - ui32PC < ui32NumInitCommands; - ui32PC++, psComm++) - { - switch (psComm->eOp) - { - case SGX_INIT_OP_WRITE_HW_REG: - { - OSWriteHWReg(psDevInfo->pvRegsBaseKM, psComm->sWriteHWReg.ui32Offset, psComm->sWriteHWReg.ui32Value); - PDUMPCOMMENT("SGXRunScript: Write HW reg operation"); - PDUMPREG(SGX_PDUMPREG_NAME, psComm->sWriteHWReg.ui32Offset, psComm->sWriteHWReg.ui32Value); - break; - } -#if defined(PDUMP) - case SGX_INIT_OP_PDUMP_HW_REG: - { - PDUMPCOMMENT("SGXRunScript: Dump HW reg operation"); - PDUMPREG(SGX_PDUMPREG_NAME, psComm->sPDumpHWReg.ui32Offset, psComm->sPDumpHWReg.ui32Value); - break; - } -#endif - case SGX_INIT_OP_HALT: - { - return PVRSRV_OK; - } - case SGX_INIT_OP_ILLEGAL: - - default: - { - PVR_DPF((PVR_DBG_ERROR,"SGXRunScript: PC %d: Illegal command: %d", ui32PC, psComm->eOp)); - return PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION; - } - } - - } - - return PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION; -} - -PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bHardwareRecovery) -{ - PVRSRV_ERROR eError; - PVRSRV_KERNEL_MEM_INFO *psSGXHostCtlMemInfo = psDevInfo->psKernelSGXHostCtlMemInfo; - SGXMKIF_HOST_CTL *psSGXHostCtl = psSGXHostCtlMemInfo->pvLinAddrKM; - static IMG_BOOL bFirstTime = IMG_TRUE; -#if defined(PDUMP) - IMG_BOOL bPDumpIsSuspended = PDumpIsSuspended(); -#endif - -#if defined(SGX_FEATURE_MP) - -#else - SGXInitClocks(psDevInfo, PDUMP_FLAGS_CONTINUOUS); -#endif - - - - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "SGX initialisation script part 1\n"); - eError = SGXRunScript(psDevInfo, psDevInfo->sScripts.asInitCommandsPart1, SGX_MAX_INIT_COMMANDS); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXInitialise: SGXRunScript (part 1) failed (%d)", eError)); - return eError; - } - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "End of SGX initialisation script part 1\n"); - - - psDevInfo->ui32NumResets++; - SGXReset(psDevInfo, bFirstTime || bHardwareRecovery, PDUMP_FLAGS_CONTINUOUS); - -#if defined(EUR_CR_POWER) -#if defined(SGX531) - - - - - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_POWER, 1); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_POWER, 1); -#else - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_POWER, 0); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_POWER, 0); -#endif -#endif - - - *psDevInfo->pui32KernelCCBEventKicker = 0; -#if defined(PDUMP) - if (!bPDumpIsSuspended) - { - psDevInfo->ui32KernelCCBEventKickerDumpVal = 0; - PDUMPMEM(&psDevInfo->ui32KernelCCBEventKickerDumpVal, - psDevInfo->psKernelCCBEventKickerMemInfo, 0, - sizeof(*psDevInfo->pui32KernelCCBEventKicker), PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelCCBEventKickerMemInfo)); - } -#endif - - - - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "SGX initialisation script part 2\n"); - eError = SGXRunScript(psDevInfo, psDevInfo->sScripts.asInitCommandsPart2, SGX_MAX_INIT_COMMANDS); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXInitialise: SGXRunScript (part 2) failed (%d)", eError)); - return eError; - } - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, "End of SGX initialisation script part 2\n"); - - - psSGXHostCtl->ui32HostClock = OSClockus(); - - psSGXHostCtl->ui32InitStatus = 0; -#if defined(PDUMP) - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, - "Reset the SGX microkernel initialisation status\n"); - PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32InitStatus), - sizeof(IMG_UINT32), PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psSGXHostCtlMemInfo)); - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, - "Initialise the microkernel\n"); -#endif - -#if defined(SGX_FEATURE_MULTI_EVENT_KICK) - OSWriteMemoryBarrier(); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, - SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK2, 0), - EUR_CR_EVENT_KICK2_NOW_MASK); -#else - *psDevInfo->pui32KernelCCBEventKicker = (*psDevInfo->pui32KernelCCBEventKicker + 1) & 0xFF; - OSWriteMemoryBarrier(); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, - SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK, 0), - EUR_CR_EVENT_KICK_NOW_MASK); -#endif - - OSMemoryBarrier(); - -#if defined(PDUMP) - - - if (!bPDumpIsSuspended) - { -#if defined(SGX_FEATURE_MULTI_EVENT_KICK) - PDUMPREG(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK2, 0), EUR_CR_EVENT_KICK2_NOW_MASK); -#else - psDevInfo->ui32KernelCCBEventKickerDumpVal = 1; - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, - "First increment of the SGX event kicker value\n"); - PDUMPMEM(&psDevInfo->ui32KernelCCBEventKickerDumpVal, - psDevInfo->psKernelCCBEventKickerMemInfo, - 0, - sizeof(IMG_UINT32), - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelCCBEventKickerMemInfo)); - PDUMPREG(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK, 0), EUR_CR_EVENT_KICK_NOW_MASK); -#endif - } -#endif - -#if !defined(NO_HARDWARE) - - - if (PollForValueKM(&psSGXHostCtl->ui32InitStatus, - PVRSRV_USSE_EDM_INIT_COMPLETE, - PVRSRV_USSE_EDM_INIT_COMPLETE, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXInitialise: Wait for uKernel initialisation failed")); - #if !defined(FIX_HW_BRN_23281) - PVR_DBG_BREAK; - #endif - return PVRSRV_ERROR_RETRY; - } -#endif - -#if defined(PDUMP) - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, - "Wait for the SGX microkernel initialisation to complete"); - PDUMPMEMPOL(psSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32InitStatus), - PVRSRV_USSE_EDM_INIT_COMPLETE, - PVRSRV_USSE_EDM_INIT_COMPLETE, - PDUMP_POLL_OPERATOR_EQUAL, - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psSGXHostCtlMemInfo)); -#endif - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) - - - - WorkaroundBRN22997ReadHostPort(psDevInfo); -#endif - - PVR_ASSERT(psDevInfo->psKernelCCBCtl->ui32ReadOffset == psDevInfo->psKernelCCBCtl->ui32WriteOffset); - - bFirstTime = IMG_FALSE; - - return PVRSRV_OK; -} - -PVRSRV_ERROR SGXDeinitialise(IMG_HANDLE hDevCookie) - -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *) hDevCookie; - PVRSRV_ERROR eError; - - - if (psDevInfo->pvRegsBaseKM == IMG_NULL) - { - return PVRSRV_OK; - } - - eError = SGXRunScript(psDevInfo, psDevInfo->sScripts.asDeinitCommands, SGX_MAX_DEINIT_COMMANDS); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXDeinitialise: SGXRunScript failed (%d)", eError)); - return eError; - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR DevInitSGXPart1 (IMG_VOID *pvDeviceNode) -{ - IMG_HANDLE hDevMemHeap = IMG_NULL; - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_HANDLE hKernelDevMemContext; - IMG_DEV_PHYADDR sPDDevPAddr; - IMG_UINT32 i; - PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvDeviceNode; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap = psDeviceNode->sDevMemoryInfo.psDeviceMemoryHeap; - PVRSRV_ERROR eError; - - - PDUMPCOMMENT("SGX Core Version Information: %s", SGX_CORE_FRIENDLY_NAME); - - #if defined(SGX_FEATURE_MP) - #if !defined(SGX_FEATURE_MP_PLUS) - PDUMPCOMMENT("SGX Multi-processor: %d cores", SGX_FEATURE_MP_CORE_COUNT); - #else - PDUMPCOMMENT("SGX Multi-processor: %d TA cores, %d 3D cores", SGX_FEATURE_MP_CORE_COUNT_TA, SGX_FEATURE_MP_CORE_COUNT_3D); - #endif - #endif - -#if (SGX_CORE_REV == 0) - PDUMPCOMMENT("SGX Core Revision Information: head RTL"); -#else - PDUMPCOMMENT("SGX Core Revision Information: %d", SGX_CORE_REV); -#endif - - #if defined(SGX_FEATURE_SYSTEM_CACHE) - PDUMPCOMMENT("SGX System Level Cache is present\r\n"); - #if defined(SGX_BYPASS_SYSTEM_CACHE) - PDUMPCOMMENT("SGX System Level Cache is bypassed\r\n"); - #endif - #endif - - PDUMPCOMMENT("SGX Initialisation Part 1"); - - - if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_SGXDEV_INFO), - (IMG_VOID **)&psDevInfo, IMG_NULL, - "SGX Device Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart1 : Failed to alloc memory for DevInfo")); - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - OSMemSet (psDevInfo, 0, sizeof(PVRSRV_SGXDEV_INFO)); - - - psDevInfo->eDeviceType = DEV_DEVICE_TYPE; - psDevInfo->eDeviceClass = DEV_DEVICE_CLASS; - - - psDeviceNode->pvDevice = (IMG_PVOID)psDevInfo; - - - psDevInfo->pvDeviceMemoryHeap = (IMG_VOID*)psDeviceMemoryHeap; - - - hKernelDevMemContext = BM_CreateContext(psDeviceNode, - &sPDDevPAddr, - IMG_NULL, - IMG_NULL); - if (hKernelDevMemContext == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart1: Failed BM_CreateContext")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - psDevInfo->sKernelPDDevPAddr = sPDDevPAddr; - - - for(i=0; isDevMemoryInfo.ui32HeapCount; i++) - { - switch(psDeviceMemoryHeap[i].DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_KERNEL: - case DEVICE_MEMORY_HEAP_SHARED: - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED: - { - - if (psDeviceMemoryHeap[i].ui32HeapSize > 0) - { - hDevMemHeap = BM_CreateHeap (hKernelDevMemContext, - &psDeviceMemoryHeap[i]); - - - - psDeviceMemoryHeap[i].hDevMemHeap = hDevMemHeap; - } - break; - } - } - } -#if defined(PDUMP) - if(hDevMemHeap) - { - - psDevInfo->sMMUAttrib = *((BM_HEAP*)hDevMemHeap)->psMMUAttrib; - } -#endif - eError = MMU_BIFResetPDAlloc(psDevInfo); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGX : Failed to alloc memory for BIF reset")); - return eError; - } - - return PVRSRV_OK; -} - -IMG_EXPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, PVRSRV_HEAP_INFO_KM *pasHeapInfo, IMG_DEV_PHYADDR *psPDDevPAddr) -#else -PVRSRV_ERROR SGXGetInfoForSrvinitKM(IMG_HANDLE hDevHandle, SGX_BRIDGE_INFO_FOR_SRVINIT *psInitInfo) -#endif -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_SGXDEV_INFO *psDevInfo; - PVRSRV_ERROR eError; - - PDUMPCOMMENT("SGXGetInfoForSrvinit"); - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevHandle; - psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - -#if defined (SUPPORT_SID_INTERFACE) - *psPDDevPAddr = psDevInfo->sKernelPDDevPAddr; - - eError = PVRSRVGetDeviceMemHeapsKM(hDevHandle, pasHeapInfo); -#else - psInitInfo->sPDDevPAddr = psDevInfo->sKernelPDDevPAddr; - - eError = PVRSRVGetDeviceMemHeapsKM(hDevHandle, &psInitInfo->asHeapInfo[0]); -#endif - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXGetInfoForSrvinit: PVRSRVGetDeviceMemHeapsKM failed (%d)", eError)); - return eError; - } - - return eError; -} - -IMG_EXPORT -PVRSRV_ERROR DevInitSGXPart2KM (PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_HANDLE hDevHandle, -#if defined (SUPPORT_SID_INTERFACE) - SGX_BRIDGE_INIT_INFO_KM *psInitInfo) -#else - SGX_BRIDGE_INIT_INFO *psInitInfo) -#endif -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_SGXDEV_INFO *psDevInfo; - PVRSRV_ERROR eError; - SGX_DEVICE_MAP *psSGXDeviceMap; - PVRSRV_DEV_POWER_STATE eDefaultPowerState; - - PDUMPCOMMENT("SGX Initialisation Part 2"); - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevHandle; - psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - - - - eError = InitDevInfo(psPerProc, psDeviceNode, psInitInfo); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart2KM: Failed to load EDM program")); - goto failed_init_dev_info; - } - - - eError = SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE_SGX, - (IMG_VOID**)&psSGXDeviceMap); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart2KM: Failed to get device memory map!")); - return PVRSRV_ERROR_INIT_FAILURE; - } - - - if (psSGXDeviceMap->pvRegsCpuVBase) - { - psDevInfo->pvRegsBaseKM = psSGXDeviceMap->pvRegsCpuVBase; - } - else - { - - psDevInfo->pvRegsBaseKM = OSMapPhysToLin(psSGXDeviceMap->sRegsCpuPBase, - psSGXDeviceMap->ui32RegsSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - if (!psDevInfo->pvRegsBaseKM) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart2KM: Failed to map in regs\n")); - return PVRSRV_ERROR_BAD_MAPPING; - } - } - psDevInfo->ui32RegSize = psSGXDeviceMap->ui32RegsSize; - psDevInfo->sRegsPhysBase = psSGXDeviceMap->sRegsSysPBase; - - -#if defined(SGX_FEATURE_HOST_PORT) - if (psSGXDeviceMap->ui32Flags & SGX_HOSTPORT_PRESENT) - { - - psDevInfo->pvHostPortBaseKM = OSMapPhysToLin(psSGXDeviceMap->sHPCpuPBase, - psSGXDeviceMap->ui32HPSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - if (!psDevInfo->pvHostPortBaseKM) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart2KM: Failed to map in host port\n")); - return PVRSRV_ERROR_BAD_MAPPING; - } - psDevInfo->ui32HPSize = psSGXDeviceMap->ui32HPSize; - psDevInfo->sHPSysPAddr = psSGXDeviceMap->sHPSysPBase; - } -#endif - -#if defined (SYS_USING_INTERRUPTS) - - - psDeviceNode->pvISRData = psDeviceNode; - - PVR_ASSERT(psDeviceNode->pfnDeviceISR == SGX_ISRHandler); - -#endif - - - psDevInfo->psSGXHostCtl->ui32PowerStatus |= PVRSRV_USSE_EDM_POWMAN_NO_WORK; - eDefaultPowerState = PVRSRV_DEV_POWER_STATE_OFF; - - eError = PVRSRVRegisterPowerDevice (psDeviceNode->sDevId.ui32DeviceIndex, - &SGXPrePowerState, &SGXPostPowerState, - &SGXPreClockSpeedChange, &SGXPostClockSpeedChange, - (IMG_HANDLE)psDeviceNode, - PVRSRV_DEV_POWER_STATE_OFF, - eDefaultPowerState); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevInitSGXPart2KM: failed to register device with power manager")); - return eError; - } - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) - eError = WorkaroundBRN22997Alloc(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXInitialise : Failed to alloc memory for BRN22997 workaround")); - return eError; - } -#endif - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) - - psDevInfo->ui32ExtSysCacheRegsSize = psSGXDeviceMap->ui32ExtSysCacheRegsSize; - psDevInfo->sExtSysCacheRegsDevPBase = psSGXDeviceMap->sExtSysCacheRegsDevPBase; - eError = MMU_MapExtSystemCacheRegs(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXInitialise : Failed to map external system cache registers")); - return eError; - } -#endif - - - - OSMemSet(psDevInfo->psKernelCCB, 0, sizeof(PVRSRV_SGX_KERNEL_CCB)); - OSMemSet(psDevInfo->psKernelCCBCtl, 0, sizeof(PVRSRV_SGX_CCB_CTL)); - OSMemSet(psDevInfo->pui32KernelCCBEventKicker, 0, sizeof(*psDevInfo->pui32KernelCCBEventKicker)); - PDUMPCOMMENT("Initialise Kernel CCB"); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelCCBMemInfo, 0, sizeof(PVRSRV_SGX_KERNEL_CCB), PDUMP_FLAGS_CONTINUOUS, MAKEUNIQUETAG(psDevInfo->psKernelCCBMemInfo)); - PDUMPCOMMENT("Initialise Kernel CCB Control"); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelCCBCtlMemInfo, 0, sizeof(PVRSRV_SGX_CCB_CTL), PDUMP_FLAGS_CONTINUOUS, MAKEUNIQUETAG(psDevInfo->psKernelCCBCtlMemInfo)); - PDUMPCOMMENT("Initialise Kernel CCB Event Kicker"); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelCCBEventKickerMemInfo, 0, sizeof(*psDevInfo->pui32KernelCCBEventKicker), PDUMP_FLAGS_CONTINUOUS, MAKEUNIQUETAG(psDevInfo->psKernelCCBEventKickerMemInfo)); - - return PVRSRV_OK; - -failed_init_dev_info: - return eError; -} - -static PVRSRV_ERROR DevDeInitSGX (IMG_VOID *pvDeviceNode) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvDeviceNode; - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - PVRSRV_ERROR eError; - IMG_UINT32 ui32Heap; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - SGX_DEVICE_MAP *psSGXDeviceMap; - - if (!psDevInfo) - { - - PVR_DPF((PVR_DBG_ERROR,"DevDeInitSGX: Null DevInfo")); - return PVRSRV_OK; - } - -#if defined(SUPPORT_HW_RECOVERY) - if (psDevInfo->hTimer) - { - eError = OSRemoveTimer(psDevInfo->hTimer); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevDeInitSGX: Failed to remove timer")); - return eError; - } - psDevInfo->hTimer = IMG_NULL; - } -#endif - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) - - eError = MMU_UnmapExtSystemCacheRegs(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevDeInitSGX: Failed to unmap ext system cache registers")); - return eError; - } -#endif - -#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT) - WorkaroundBRN22997Free(psDeviceNode); -#endif - - MMU_BIFResetPDFree(psDevInfo); - - - - DeinitDevInfo(psDevInfo); - - - psDeviceMemoryHeap = (DEVICE_MEMORY_HEAP_INFO *)psDevInfo->pvDeviceMemoryHeap; - for(ui32Heap=0; ui32HeapsDevMemoryInfo.ui32HeapCount; ui32Heap++) - { - switch(psDeviceMemoryHeap[ui32Heap].DevMemHeapType) - { - case DEVICE_MEMORY_HEAP_KERNEL: - case DEVICE_MEMORY_HEAP_SHARED: - case DEVICE_MEMORY_HEAP_SHARED_EXPORTED: - { - if (psDeviceMemoryHeap[ui32Heap].hDevMemHeap != IMG_NULL) - { - BM_DestroyHeap(psDeviceMemoryHeap[ui32Heap].hDevMemHeap); - } - break; - } - } - } - - - eError = BM_DestroyContext(psDeviceNode->sDevMemoryInfo.pBMKernelContext, IMG_NULL); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevDeInitSGX : Failed to destroy kernel context")); - return eError; - } - - - eError = PVRSRVRemovePowerDevice (((PVRSRV_DEVICE_NODE*)pvDeviceNode)->sDevId.ui32DeviceIndex); - if (eError != PVRSRV_OK) - { - return eError; - } - - eError = SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE_SGX, - (IMG_VOID**)&psSGXDeviceMap); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"DevDeInitSGX: Failed to get device memory map!")); - return eError; - } - - - if (!psSGXDeviceMap->pvRegsCpuVBase) - { - - if (psDevInfo->pvRegsBaseKM != IMG_NULL) - { - OSUnMapPhysToLin(psDevInfo->pvRegsBaseKM, - psDevInfo->ui32RegSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - } - } - -#if defined(SGX_FEATURE_HOST_PORT) - if (psSGXDeviceMap->ui32Flags & SGX_HOSTPORT_PRESENT) - { - - if (psDevInfo->pvHostPortBaseKM != IMG_NULL) - { - OSUnMapPhysToLin(psDevInfo->pvHostPortBaseKM, - psDevInfo->ui32HPSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - } - } -#endif - - - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_SGXDEV_INFO), - psDevInfo, - 0); - - psDeviceNode->pvDevice = IMG_NULL; - - if (psDeviceMemoryHeap != IMG_NULL) - { - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(DEVICE_MEMORY_HEAP_INFO) * SGX_MAX_HEAP_ID, - psDeviceMemoryHeap, - 0); - } - - return PVRSRV_OK; -} - -static IMG_VOID SGXDumpRegDecode(IMG_UINT32 addr, IMG_UINT32 val) -{ - switch (addr) { - case EUR_CR_EVENT_STATUS: - PVR_LOG(("\t(master_irq: %s, timer_irq: %s, ta_dpm_fault: %s, zls_oom: %s, " - "ta_mem_free: %s, isp_end_tile: %s, dpm_initend: %s, zls_csw_finish: %s, " - "pbe_end_render: %s, isp_vis_fail: %s, isp_break: %s, sw_event %s, " - "ta_finish: %s, ta_terminate: %s, tpc_clear: %s, tpc_flush: %s, " - "dpm_clear: %s, dpm_load: %s, dpm_store: %s, dpm_state_clear: %s, " - "dpm_state_load: %s, dpm_state_store: %s, dpm_mem_thresh: %s, gbl_oom: %s, " - "mt_oom: %s, 3d_mem_free: %s)", - val & EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_TIMER_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK ? "yes": "no", - val & EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK ? "yes" : "no", - val & EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK ? "yes" : "no", - val & EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_INITEND_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_ISP2_ZLS_CSW_FINISHED_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_BREAKPOINT_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_SW_EVENT_MASK ?"yes":"no", - val & EUR_CR_EVENT_STATUS_TA_FINISHED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK ? "yes":"no")); - break; - case EUR_CR_EVENT_STATUS2: - PVR_LOG(("\t(mte_flush: %s, vdm_load: %s, vdm_kicked: %s, otpm_mem_clear: %s," - "otpm_flush: %s, dcu_invalid: %s, gsg_flush: %s, gsg_load: %s, " - "lockup_ta: %s, lockup_3d: %s, partial_deadlock: %s, dpm_dhost_free: %s" - "dpm_host_free: %s, dpm_3d_free: %s, dpm_ta_free: %s)", - val & EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_VDM_CONTEXT_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_VDM_TASK_KICKED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_OTPM_MEM_CLEARED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_OTPM_FLUSHED_INV_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_GSG_FLUSHED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_GSG_LOADED_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_TRIG_TA_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_TRIG_3D_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_TRIG_DL_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK ? "yes":"no", - val & EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK ? "yes":"no")); - break; - } -} - -static IMG_VOID SGXDumpDebugReg (PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32CoreNum, - IMG_CHAR *pszName, - IMG_UINT32 ui32RegAddr) -{ - IMG_UINT32 ui32RegVal; - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(ui32RegAddr, ui32CoreNum)); - PVR_LOG(("(P%u) %s%08X", ui32CoreNum, pszName, ui32RegVal)); - - SGXDumpRegDecode(ui32RegAddr, ui32RegVal); -} - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) -#if defined(PVRSRV_DUMP_MK_TRACE) -#include "sgx_ukernel_status_codes.h" - -static char *SGXMKTDecodeString(IMG_UINT32 m) -{ - int i; - - for (i = 0; i < MKTCSIZE; i++) { - if (m == MKTDecoder[i].m) - return MKTDecoder[i].s; - } - return NULL; -} -#endif -#endif - -static IMG_VOID SGXDumpDebugInfo (PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bDumpSGXRegs) -{ - IMG_UINT32 ui32CoreNum; - - PVR_LOG(("SGX debug (%s)", PVRVERSION_STRING)); - - if (bDumpSGXRegs) - { - PVR_DPF((PVR_DBG_ERROR,"SGX Register Base Address (Linear): 0x%08X", (IMG_UINTPTR_T)psDevInfo->pvRegsBaseKM)); - PVR_DPF((PVR_DBG_ERROR,"SGX Register Base Address (Physical): 0x%08X", psDevInfo->sRegsPhysBase.uiAddr)); - - SGXDumpDebugReg(psDevInfo, 0, "EUR_CR_CORE_ID: ", EUR_CR_CORE_ID); - SGXDumpDebugReg(psDevInfo, 0, "EUR_CR_CORE_REVISION: ", EUR_CR_CORE_REVISION); - - for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT_3D; ui32CoreNum++) - { - - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_EVENT_STATUS: ", EUR_CR_EVENT_STATUS); - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_EVENT_STATUS2: ", EUR_CR_EVENT_STATUS2); - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_CTRL: ", EUR_CR_BIF_CTRL); - #if defined(EUR_CR_BIF_BANK0) - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_BANK0: ", EUR_CR_BIF_BANK0); - #endif - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_INT_STAT: ", EUR_CR_BIF_INT_STAT); - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_FAULT: ", EUR_CR_BIF_FAULT); - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_BIF_MEM_REQ_STAT: ", EUR_CR_BIF_MEM_REQ_STAT); - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_CLKGATECTL: ", EUR_CR_CLKGATECTL); - #if defined(EUR_CR_PDS_PC_BASE) - SGXDumpDebugReg(psDevInfo, ui32CoreNum, "EUR_CR_PDS_PC_BASE: ", EUR_CR_PDS_PC_BASE); - #endif - } - } - - - - QueueDumpDebugInfo(); - - { - - - SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; - IMG_UINT32 *pui32HostCtlBuffer = (IMG_UINT32 *)psSGXHostCtl; - IMG_UINT32 ui32LoopCounter; - - if (psSGXHostCtl->ui32AssertFail != 0) - { - PVR_LOG(("SGX Microkernel assert fail: 0x%08X", psSGXHostCtl->ui32AssertFail)); - psSGXHostCtl->ui32AssertFail = 0; - } - - PVR_LOG(("SGX Host control:")); - - for (ui32LoopCounter = 0; - ui32LoopCounter < sizeof(*psDevInfo->psSGXHostCtl) / sizeof(*pui32HostCtlBuffer); - ui32LoopCounter += 4) - { - PVR_LOG(("\t(HC-%X) 0x%08X 0x%08X 0x%08X 0x%08X", ui32LoopCounter * sizeof(*pui32HostCtlBuffer), - pui32HostCtlBuffer[ui32LoopCounter + 0], pui32HostCtlBuffer[ui32LoopCounter + 1], - pui32HostCtlBuffer[ui32LoopCounter + 2], pui32HostCtlBuffer[ui32LoopCounter + 3])); - } - } - - { - - - IMG_UINT32 *pui32TA3DCtlBuffer = psDevInfo->psKernelSGXTA3DCtlMemInfo->pvLinAddrKM; - IMG_UINT32 ui32LoopCounter; - - PVR_LOG(("SGX TA/3D control:")); - - for (ui32LoopCounter = 0; - ui32LoopCounter < psDevInfo->psKernelSGXTA3DCtlMemInfo->uAllocSize / sizeof(*pui32TA3DCtlBuffer); - ui32LoopCounter += 4) - { - PVR_LOG(("\t(T3C-%X) 0x%08X 0x%08X 0x%08X 0x%08X", ui32LoopCounter * sizeof(*pui32TA3DCtlBuffer), - pui32TA3DCtlBuffer[ui32LoopCounter + 0], pui32TA3DCtlBuffer[ui32LoopCounter + 1], - pui32TA3DCtlBuffer[ui32LoopCounter + 2], pui32TA3DCtlBuffer[ui32LoopCounter + 3])); - } - } - - #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - { - IMG_UINT32 *pui32MKTraceBuffer = psDevInfo->psKernelEDMStatusBufferMemInfo->pvLinAddrKM; - IMG_UINT32 ui32LastStatusCode, ui32WriteOffset; - - ui32LastStatusCode = *pui32MKTraceBuffer; - pui32MKTraceBuffer++; - ui32WriteOffset = *pui32MKTraceBuffer; - pui32MKTraceBuffer++; - - PVR_LOG(("Last SGX microkernel status code: %08X", ui32LastStatusCode)); - - #if defined(PVRSRV_DUMP_MK_TRACE) - - - { - IMG_UINT32 ui32LoopCounter; - - for (ui32LoopCounter = 0; - ui32LoopCounter < SGXMK_TRACE_BUFFER_SIZE; - ui32LoopCounter++) - { - IMG_UINT32 *pui32BufPtr; - pui32BufPtr = pui32MKTraceBuffer + - (((ui32WriteOffset + ui32LoopCounter) % SGXMK_TRACE_BUFFER_SIZE) * 4); - PVR_LOG(("\t(MKT-%X) %08X %08X %08X %08X (%s)", ui32LoopCounter, - pui32BufPtr[2], pui32BufPtr[3], pui32BufPtr[1], pui32BufPtr[0], SGXMKTDecodeString(pui32BufPtr[0]))); - } - } - #endif - } - #endif - - { - - - PVR_LOG(("SGX Kernel CCB WO:0x%X RO:0x%X", - psDevInfo->psKernelCCBCtl->ui32WriteOffset, - psDevInfo->psKernelCCBCtl->ui32ReadOffset)); - - #if defined(PVRSRV_DUMP_KERNEL_CCB) - { - IMG_UINT32 ui32LoopCounter; - - for (ui32LoopCounter = 0; - ui32LoopCounter < sizeof(psDevInfo->psKernelCCB->asCommands) / - sizeof(psDevInfo->psKernelCCB->asCommands[0]); - ui32LoopCounter++) - { - SGXMKIF_COMMAND *psCommand = &psDevInfo->psKernelCCB->asCommands[ui32LoopCounter]; - - PVR_LOG(("\t(KCCB-%X) %08X %08X - %08X %08X %08X %08X", ui32LoopCounter, - psCommand->ui32ServiceAddress, psCommand->ui32CacheControl, - psCommand->ui32Data[0], psCommand->ui32Data[1], - psCommand->ui32Data[2], psCommand->ui32Data[3])); - } - } - #endif - } - #if defined (TTRACE) - PVRSRVDumpTimeTraceBuffers(); - #endif - -} - - -#if defined(SYS_USING_INTERRUPTS) || defined(SUPPORT_HW_RECOVERY) -static -IMG_VOID HWRecoveryResetSGX (PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_UINT32 ui32Component, - IMG_UINT32 ui32CallerID) -{ - PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psSGXHostCtl = (SGXMKIF_HOST_CTL *)psDevInfo->psSGXHostCtl; - - PVR_UNREFERENCED_PARAMETER(ui32Component); - - - - eError = PVRSRVPowerLock(ui32CallerID, IMG_FALSE); - if(eError != PVRSRV_OK) - { - - - - PVR_DPF((PVR_DBG_WARNING,"HWRecoveryResetSGX: Power transition in progress")); - return; - } - - psSGXHostCtl->ui32InterruptClearFlags |= PVRSRV_USSE_EDM_INTERRUPT_HWR; - - PVR_LOG(("HWRecoveryResetSGX: SGX Hardware Recovery triggered")); - - SGXDumpDebugInfo(psDeviceNode->pvDevice, IMG_TRUE); - - - PDUMPSUSPEND(); - - -#if defined(FIX_HW_BRN_23281) - - for (eError = PVRSRV_ERROR_RETRY; eError == PVRSRV_ERROR_RETRY;) -#endif - { - eError = SGXInitialise(psDevInfo, IMG_TRUE); - } - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"HWRecoveryResetSGX: SGXInitialise failed (%d)", eError)); - } - - - PDUMPRESUME(); - - PVRSRVPowerUnlock(ui32CallerID); - - - SGXScheduleProcessQueuesKM(psDeviceNode); - - - - PVRSRVProcessQueues(IMG_TRUE); -} -#endif - - -#if defined(SUPPORT_HW_RECOVERY) -IMG_VOID SGXOSTimer(IMG_VOID *pvData) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = pvData; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - static IMG_UINT32 ui32EDMTasks = 0; - static IMG_UINT32 ui32LockupCounter = 0; - static IMG_UINT32 ui32OpenCLDelayCounter = 0; - static IMG_UINT32 ui32NumResets = 0; -#if defined(FIX_HW_BRN_31093) - static IMG_BOOL bBRN31093Inval = IMG_FALSE; -#endif - IMG_UINT32 ui32CurrentEDMTasks; - IMG_UINT32 ui32CurrentOpenCLDelayCounter=0; - IMG_BOOL bLockup = IMG_FALSE; - IMG_BOOL bPoweredDown; - - - psDevInfo->ui32TimeStamp++; - -#if defined(NO_HARDWARE) - bPoweredDown = IMG_TRUE; -#else - bPoweredDown = (SGXIsDevicePowered(psDeviceNode)) ? IMG_FALSE : IMG_TRUE; -#endif - - - - if (bPoweredDown) - { - ui32LockupCounter = 0; - #if defined(FIX_HW_BRN_31093) - bBRN31093Inval = IMG_FALSE; - #endif - } - else - { - - ui32CurrentEDMTasks = OSReadHWReg(psDevInfo->pvRegsBaseKM, psDevInfo->ui32EDMTaskReg0); - if (psDevInfo->ui32EDMTaskReg1 != 0) - { - ui32CurrentEDMTasks ^= OSReadHWReg(psDevInfo->pvRegsBaseKM, psDevInfo->ui32EDMTaskReg1); - } - if ((ui32CurrentEDMTasks == ui32EDMTasks) && - (psDevInfo->ui32NumResets == ui32NumResets)) - { - ui32LockupCounter++; - if (ui32LockupCounter == 3) - { - ui32LockupCounter = 0; - ui32CurrentOpenCLDelayCounter = (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount; - if(0 != ui32CurrentOpenCLDelayCounter) - { - if(ui32OpenCLDelayCounter != ui32CurrentOpenCLDelayCounter){ - ui32OpenCLDelayCounter = ui32CurrentOpenCLDelayCounter; - }else{ - ui32OpenCLDelayCounter -= 1; - (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount = ui32OpenCLDelayCounter; - } - goto SGX_NoUKernel_LockUp; - } - - - #if defined(FIX_HW_BRN_31093) - if (bBRN31093Inval == IMG_FALSE) - { - - #if defined(FIX_HW_BRN_29997) - IMG_UINT32 ui32BIFCtrl; - - ui32BIFCtrl = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl | EUR_CR_BIF_CTRL_PAUSE_MASK); - - OSWaitus(200 * 1000000 / psDevInfo->ui32CoreClockSpeed); - #endif - - bBRN31093Inval = IMG_TRUE; - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL_INVAL, EUR_CR_BIF_CTRL_INVAL_PTE_MASK); - - OSWaitus(200 * 1000000 / psDevInfo->ui32CoreClockSpeed); - - #if defined(FIX_HW_BRN_29997) - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32BIFCtrl); - #endif - } - else - #endif - { - PVR_DPF((PVR_DBG_ERROR, "SGXOSTimer() detected SGX lockup (0x%x tasks)", ui32EDMTasks)); - - bLockup = IMG_TRUE; - (psDevInfo->psSGXHostCtl)->ui32OpenCLDelayCount = 0; - } - } - } - else - { - #if defined(FIX_HW_BRN_31093) - bBRN31093Inval = IMG_FALSE; - #endif - ui32LockupCounter = 0; - ui32EDMTasks = ui32CurrentEDMTasks; - ui32NumResets = psDevInfo->ui32NumResets; - } - } -SGX_NoUKernel_LockUp: - - if (bLockup) - { - SGXMKIF_HOST_CTL *psSGXHostCtl = (SGXMKIF_HOST_CTL *)psDevInfo->psSGXHostCtl; - - - psSGXHostCtl->ui32HostDetectedLockups ++; - - - HWRecoveryResetSGX(psDeviceNode, 0, ISR_ID); - } -} -#endif - - -#if defined(SYS_USING_INTERRUPTS) - -IMG_BOOL SGX_ISRHandler (IMG_VOID *pvData) -{ - IMG_BOOL bInterruptProcessed = IMG_FALSE; - - - - { - IMG_UINT32 ui32EventStatus, ui32EventEnable; - IMG_UINT32 ui32EventClear = 0; -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - IMG_UINT32 ui32EventStatus2, ui32EventEnable2; -#endif - IMG_UINT32 ui32EventClear2 = 0; - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_SGXDEV_INFO *psDevInfo; - - - if(pvData == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGX_ISRHandler: Invalid params\n")); - return bInterruptProcessed; - } - - psDeviceNode = (PVRSRV_DEVICE_NODE *)pvData; - psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - - ui32EventStatus = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_STATUS); - ui32EventEnable = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_ENABLE); - - - ui32EventStatus &= ui32EventEnable; - -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - ui32EventStatus2 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_STATUS2); - ui32EventEnable2 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_ENABLE2); - - - ui32EventStatus2 &= ui32EventEnable2; -#endif - - - - if (ui32EventStatus & EUR_CR_EVENT_STATUS_SW_EVENT_MASK) - { - ui32EventClear |= EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK; - } - -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - if (ui32EventStatus2 & EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_MASK) - { - ui32EventClear2 |= EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_MASK; - } - - if (ui32EventStatus2 & EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK) - { - ui32EventClear2 |= EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_MASK; - } -#endif - - if (ui32EventClear || ui32EventClear2) - { - bInterruptProcessed = IMG_TRUE; - - - ui32EventClear |= EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK; - - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR, ui32EventClear); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR2, ui32EventClear2); - } - } - - return bInterruptProcessed; -} - - -static IMG_VOID SGX_MISRHandler (IMG_VOID *pvData) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvData; - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO*)psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psSGXHostCtl = (SGXMKIF_HOST_CTL *)psDevInfo->psSGXHostCtl; - - if (((psSGXHostCtl->ui32InterruptFlags & PVRSRV_USSE_EDM_INTERRUPT_HWR) != 0UL) && - ((psSGXHostCtl->ui32InterruptClearFlags & PVRSRV_USSE_EDM_INTERRUPT_HWR) == 0UL)) - { - HWRecoveryResetSGX(psDeviceNode, 0, ISR_ID); - } - -#if defined(OS_SUPPORTS_IN_LISR) - if (psDeviceNode->bReProcessDeviceCommandComplete) - { - SGXScheduleProcessQueuesKM(psDeviceNode); - } -#endif - - SGXTestActivePowerEvent(psDeviceNode, ISR_ID); -} -#endif - - - -#if defined(SUPPORT_MEMORY_TILING) -PVRSRV_ERROR SGX_AllocMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32TilingStride, - IMG_UINT32 *pui32RangeIndex) -{ -#if defined(SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS) - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - IMG_UINT32 i; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32End; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Val; - - - for(i=0; i<10; i++) - { - if((psDevInfo->ui32MemTilingUsage & (1U << i)) == 0) - { - - psDevInfo->ui32MemTilingUsage |= 1U << i; - - *pui32RangeIndex = i; - goto RangeAllocated; - } - } - - PVR_DPF((PVR_DBG_ERROR,"SGX_AllocMemTilingRange: all tiling ranges in use")); - return PVRSRV_ERROR_EXCEEDED_HW_LIMITS; - -RangeAllocated: - ui32Offset = EUR_CR_BIF_TILE0 + (i<<2); - - ui32Start = psMemInfo->sDevVAddr.uiAddr; - ui32End = ui32Start + psMemInfo->uAllocSize + SGX_MMU_PAGE_SIZE - 1; - - ui32Val = ((ui32TilingStride << EUR_CR_BIF_TILE0_CFG_SHIFT) & EUR_CR_BIF_TILE0_CFG_MASK) - | (((ui32End>>20) << EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK) - | (((ui32Start>>20) << EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT) & EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK) - | (0x8 << EUR_CR_BIF_TILE0_CFG_SHIFT); - - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val); - PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val); - - ui32Offset = EUR_CR_BIF_TILE0_ADDR_EXT + (i<<2); - - ui32Val = (((ui32End>>12) << EUR_CR_BIF_TILE0_ADDR_EXT_MAX_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MAX_MASK) - | (((ui32Start>>12) << EUR_CR_BIF_TILE0_ADDR_EXT_MIN_SHIFT) & EUR_CR_BIF_TILE0_ADDR_EXT_MIN_MASK); - - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32Offset, ui32Val); - PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val); - - return PVRSRV_OK; -#else - PVR_UNREFERENCED_PARAMETER(psDeviceNode); - PVR_UNREFERENCED_PARAMETER(psMemInfo); - PVR_UNREFERENCED_PARAMETER(ui32TilingStride); - PVR_UNREFERENCED_PARAMETER(pui32RangeIndex); - - PVR_DPF((PVR_DBG_ERROR,"SGX_AllocMemTilingRange: device does not support memory tiling")); - return PVRSRV_ERROR_NOT_SUPPORTED; -#endif -} - -PVRSRV_ERROR SGX_FreeMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_UINT32 ui32RangeIndex) -{ -#if defined(SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS) - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - IMG_UINT32 ui32Offset; - IMG_UINT32 ui32Val; - - if(ui32RangeIndex >= 10) - { - PVR_DPF((PVR_DBG_ERROR,"SGX_FreeMemTilingRange: invalid Range index ")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - psDevInfo->ui32MemTilingUsage &= ~(1<pvRegsBaseKM, ui32Offset, ui32Val); - PDUMPREG(SGX_PDUMPREG_NAME, ui32Offset, ui32Val); - - return PVRSRV_OK; -#else - PVR_UNREFERENCED_PARAMETER(psDeviceNode); - PVR_UNREFERENCED_PARAMETER(ui32RangeIndex); - - PVR_DPF((PVR_DBG_ERROR,"SGX_FreeMemTilingRange: device does not support memory tiling")); - return PVRSRV_ERROR_NOT_SUPPORTED; -#endif -} -#endif - -static IMG_VOID SGXCacheInvalidate(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - - #if defined(SGX_FEATURE_MP) - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_SL; - #else - PVR_UNREFERENCED_PARAMETER(psDevInfo); - #endif -} - -PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) -{ - DEVICE_MEMORY_INFO *psDevMemoryInfo; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - - - psDeviceNode->sDevId.eDeviceType = DEV_DEVICE_TYPE; - psDeviceNode->sDevId.eDeviceClass = DEV_DEVICE_CLASS; -#if defined(PDUMP) - { - - SGX_DEVICE_MAP *psSGXDeviceMemMap; - SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE_SGX, - (IMG_VOID**)&psSGXDeviceMemMap); - - psDeviceNode->sDevId.pszPDumpDevName = psSGXDeviceMemMap->pszPDumpDevName; - PVR_ASSERT(psDeviceNode->sDevId.pszPDumpDevName != IMG_NULL); - } - - psDeviceNode->sDevId.pszPDumpRegName = SGX_PDUMPREG_NAME; -#endif - - psDeviceNode->pfnInitDevice = &DevInitSGXPart1; - psDeviceNode->pfnDeInitDevice = &DevDeInitSGX; - - psDeviceNode->pfnInitDeviceCompatCheck = &SGXDevInitCompatCheck; -#if defined(PDUMP) - psDeviceNode->pfnPDumpInitDevice = &SGXResetPDump; - psDeviceNode->pfnMMUGetContextID = &MMU_GetPDumpContextID; -#endif - - - psDeviceNode->pfnMMUInitialise = &MMU_Initialise; - psDeviceNode->pfnMMUFinalise = &MMU_Finalise; - psDeviceNode->pfnMMUInsertHeap = &MMU_InsertHeap; - psDeviceNode->pfnMMUCreate = &MMU_Create; - psDeviceNode->pfnMMUDelete = &MMU_Delete; - psDeviceNode->pfnMMUAlloc = &MMU_Alloc; - psDeviceNode->pfnMMUFree = &MMU_Free; - psDeviceNode->pfnMMUMapPages = &MMU_MapPages; - psDeviceNode->pfnMMUMapShadow = &MMU_MapShadow; - psDeviceNode->pfnMMUUnmapPages = &MMU_UnmapPages; - psDeviceNode->pfnMMUMapScatter = &MMU_MapScatter; - psDeviceNode->pfnMMUGetPhysPageAddr = &MMU_GetPhysPageAddr; - psDeviceNode->pfnMMUGetPDDevPAddr = &MMU_GetPDDevPAddr; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - psDeviceNode->pfnMMUIsHeapShared = &MMU_IsHeapShared; -#endif -#if defined(FIX_HW_BRN_31620) - psDeviceNode->pfnMMUGetCacheFlushRange = &MMU_GetCacheFlushRange; - psDeviceNode->pfnMMUGetPDPhysAddr = &MMU_GetPDPhysAddr; -#else - psDeviceNode->pfnMMUGetCacheFlushRange = IMG_NULL; - psDeviceNode->pfnMMUGetPDPhysAddr = IMG_NULL; -#endif -#if defined (SYS_USING_INTERRUPTS) - - - psDeviceNode->pfnDeviceISR = SGX_ISRHandler; - psDeviceNode->pfnDeviceMISR = SGX_MISRHandler; -#endif - -#if defined(SUPPORT_MEMORY_TILING) - psDeviceNode->pfnAllocMemTilingRange = SGX_AllocMemTilingRange; - psDeviceNode->pfnFreeMemTilingRange = SGX_FreeMemTilingRange; -#endif - - - - psDeviceNode->pfnDeviceCommandComplete = &SGXCommandComplete; - - psDeviceNode->pfnCacheInvalidate = SGXCacheInvalidate; - - - - psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; - - psDevMemoryInfo->ui32AddressSpaceSizeLog2 = SGX_FEATURE_ADDRESS_SPACE_SIZE; - - - psDevMemoryInfo->ui32Flags = 0; - - - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, - sizeof(DEVICE_MEMORY_HEAP_INFO) * SGX_MAX_HEAP_ID, - (IMG_VOID **)&psDevMemoryInfo->psDeviceMemoryHeap, 0, - "Array of Device Memory Heap Info") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXRegisterDevice : Failed to alloc memory for DEVICE_MEMORY_HEAP_INFO")); - return (PVRSRV_ERROR_OUT_OF_MEMORY); - } - OSMemSet(psDevMemoryInfo->psDeviceMemoryHeap, 0, sizeof(DEVICE_MEMORY_HEAP_INFO) * SGX_MAX_HEAP_ID); - - psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; - - - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_GENERAL_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_GENERAL_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_GENERAL_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "General"; - psDeviceMemoryHeap->pszBSName = "General BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; -#if !defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - - psDevMemoryInfo->ui32MappingHeapID = (IMG_UINT32)(psDeviceMemoryHeap - psDevMemoryInfo->psDeviceMemoryHeap); -#endif - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_TADATA_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_TADATA_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_TADATA_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->pszName = "TA Data"; - psDeviceMemoryHeap->pszBSName = "TA Data BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_KERNEL_CODE_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_KERNEL_CODE_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_KERNEL_CODE_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->pszName = "Kernel Code"; - psDeviceMemoryHeap->pszBSName = "Kernel Code BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_KERNEL_DATA_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_KERNEL_DATA_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_KERNEL_DATA_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->pszName = "KernelData"; - psDeviceMemoryHeap->pszBSName = "KernelData BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_PIXELSHADER_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_PIXELSHADER_HEAP_BASE; - - - - - - - psDeviceMemoryHeap->ui32HeapSize = ((10 << SGX_USE_CODE_SEGMENT_RANGE_BITS) - 0x00001000); - PVR_ASSERT(psDeviceMemoryHeap->ui32HeapSize <= SGX_PIXELSHADER_HEAP_SIZE); - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "PixelShaderUSSE"; - psDeviceMemoryHeap->pszBSName = "PixelShaderUSSE BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_VERTEXSHADER_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_VERTEXSHADER_HEAP_BASE; - - psDeviceMemoryHeap->ui32HeapSize = ((4 << SGX_USE_CODE_SEGMENT_RANGE_BITS) - 0x00001000); - PVR_ASSERT(psDeviceMemoryHeap->ui32HeapSize <= SGX_VERTEXSHADER_HEAP_SIZE); - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "VertexShaderUSSE"; - psDeviceMemoryHeap->pszBSName = "VertexShaderUSSE BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_PDSPIXEL_CODEDATA_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_PDSPIXEL_CODEDATA_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_PDSPIXEL_CODEDATA_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "PDSPixelCodeData"; - psDeviceMemoryHeap->pszBSName = "PDSPixelCodeData BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_PDSVERTEX_CODEDATA_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_PDSVERTEX_CODEDATA_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_PDSVERTEX_CODEDATA_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "PDSVertexCodeData"; - psDeviceMemoryHeap->pszBSName = "PDSVertexCodeData BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_SYNCINFO_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_SYNCINFO_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_SYNCINFO_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->pszName = "CacheCoherent"; - psDeviceMemoryHeap->pszBSName = "CacheCoherent BS"; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - - psDevMemoryInfo->ui32SyncHeapID = (IMG_UINT32)(psDeviceMemoryHeap - psDevMemoryInfo->psDeviceMemoryHeap); - psDeviceMemoryHeap++; - - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_SHARED_3DPARAMETERS_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_SHARED_3DPARAMETERS_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_SHARED_3DPARAMETERS_HEAP_SIZE; - psDeviceMemoryHeap->pszName = "Shared 3DParameters"; - psDeviceMemoryHeap->pszBSName = "Shared 3DParameters BS"; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_PERCONTEXT_3DPARAMETERS_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_PERCONTEXT_3DPARAMETERS_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_PERCONTEXT_3DPARAMETERS_HEAP_SIZE; - psDeviceMemoryHeap->pszName = "Percontext 3DParameters"; - psDeviceMemoryHeap->pszBSName = "Percontext 3DParameters BS"; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; - - -#if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_GENERAL_MAPPING_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_GENERAL_MAPPING_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_GENERAL_MAPPING_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_MULTI_PROCESS; - psDeviceMemoryHeap->pszName = "GeneralMapping"; - psDeviceMemoryHeap->pszBSName = "GeneralMapping BS"; - #if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) && defined(FIX_HW_BRN_23410) - - - - - - - - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - #else - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - #endif - - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - - psDevMemoryInfo->ui32MappingHeapID = (IMG_UINT32)(psDeviceMemoryHeap - psDevMemoryInfo->psDeviceMemoryHeap); - psDeviceMemoryHeap++; -#endif - - -#if defined(SGX_FEATURE_2D_HARDWARE) - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_2D_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_2D_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_2D_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "2D"; - psDeviceMemoryHeap->pszBSName = "2D BS"; - - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_SHARED_EXPORTED; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; -#endif - - -#if defined(FIX_HW_BRN_26915) - - - psDeviceMemoryHeap->ui32HeapID = HEAP_ID( PVRSRV_DEVICE_TYPE_SGX, SGX_CGBUFFER_HEAP_ID); - psDeviceMemoryHeap->sDevVAddrBase.uiAddr = SGX_CGBUFFER_HEAP_BASE; - psDeviceMemoryHeap->ui32HeapSize = SGX_CGBUFFER_HEAP_SIZE; - psDeviceMemoryHeap->ui32Attribs = PVRSRV_HAP_WRITECOMBINE - | PVRSRV_MEM_RAM_BACKED_ALLOCATION - | PVRSRV_HAP_SINGLE_PROCESS; - psDeviceMemoryHeap->pszName = "CGBuffer"; - psDeviceMemoryHeap->pszBSName = "CGBuffer BS"; - - psDeviceMemoryHeap->DevMemHeapType = DEVICE_MEMORY_HEAP_PERCONTEXT; - - psDeviceMemoryHeap->ui32DataPageSize = SGX_MMU_PAGE_SIZE; - psDeviceMemoryHeap++; -#endif - - - psDevMemoryInfo->ui32HeapCount = (IMG_UINT32)(psDeviceMemoryHeap - psDevMemoryInfo->psDeviceMemoryHeap); - - return PVRSRV_OK; -} - -#if defined(PDUMP) -static -PVRSRV_ERROR SGXResetPDump(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)(psDeviceNode->pvDevice); - psDevInfo->psKernelCCBInfo->ui32CCBDumpWOff = 0; - PVR_DPF((PVR_DBG_MESSAGE, "Reset pdump CCB write offset.")); - - return PVRSRV_OK; -} -#endif - - -IMG_EXPORT -PVRSRV_ERROR SGXGetClientInfoKM(IMG_HANDLE hDevCookie, - SGX_CLIENT_INFO* psClientInfo) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookie)->pvDevice; - - - - psDevInfo->ui32ClientRefCount++; - - - - psClientInfo->ui32ProcessID = OSGetCurrentProcessIDKM(); - - - - OSMemCopy(&psClientInfo->asDevData, &psDevInfo->asSGXDevData, sizeof(psClientInfo->asDevData)); - - - return PVRSRV_OK; -} - - -IMG_VOID SGXPanic(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - PVR_LOG(("SGX panic")); - SGXDumpDebugInfo(psDevInfo, IMG_FALSE); - OSPanic(); -} - - -PVRSRV_ERROR SGXDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psDevInfo; - IMG_UINT32 ui32BuildOptions, ui32BuildOptionsMismatch; -#if !defined(NO_HARDWARE) - PPVRSRV_KERNEL_MEM_INFO psMemInfo; - PVRSRV_SGX_MISCINFO_INFO *psSGXMiscInfoInt; - PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - SGX_MISCINFO_STRUCT_SIZES *psSGXStructSizes; - IMG_BOOL bStructSizesFailed; - - - IMG_BOOL bCheckCoreRev; - const IMG_UINT32 aui32CoreRevExceptions[] = - { - 0x10100, 0x10101 - }; - const IMG_UINT32 ui32NumCoreExceptions = sizeof(aui32CoreRevExceptions) / (2*sizeof(IMG_UINT32)); - IMG_UINT i; -#endif - - - if(psDeviceNode->sDevId.eDeviceType != PVRSRV_DEVICE_TYPE_SGX) - { - PVR_LOG(("(FAIL) SGXInit: Device not of type SGX")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - goto chk_exit; - } - - psDevInfo = psDeviceNode->pvDevice; - - - - ui32BuildOptions = (SGX_BUILD_OPTIONS); - if (ui32BuildOptions != psDevInfo->ui32ClientBuildOptions) - { - ui32BuildOptionsMismatch = ui32BuildOptions ^ psDevInfo->ui32ClientBuildOptions; - if ( (psDevInfo->ui32ClientBuildOptions & ui32BuildOptionsMismatch) != 0) - { - PVR_LOG(("(FAIL) SGXInit: Mismatch in client-side and KM driver build options; " - "extra options present in client-side driver: (0x%x). Please check sgx_options.h", - psDevInfo->ui32ClientBuildOptions & ui32BuildOptionsMismatch )); - } - - if ( (ui32BuildOptions & ui32BuildOptionsMismatch) != 0) - { - PVR_LOG(("(FAIL) SGXInit: Mismatch in client-side and KM driver build options; " - "extra options present in KM: (0x%x). Please check sgx_options.h", - ui32BuildOptions & ui32BuildOptionsMismatch )); - } - eError = PVRSRV_ERROR_BUILD_MISMATCH; - PVR_LOG(("SGXInit: KM options 0x%x; client-side options 0x%x\n", ui32BuildOptions, psDevInfo->ui32ClientBuildOptions)); - goto chk_exit; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "SGXInit: Client-side and KM driver build options match. [ OK ]")); - } - -#if !defined (NO_HARDWARE) - psMemInfo = psDevInfo->psKernelSGXMiscMemInfo; - - - psSGXMiscInfoInt = psMemInfo->pvLinAddrKM; - psSGXMiscInfoInt->ui32MiscInfoFlags = 0; - psSGXMiscInfoInt->ui32MiscInfoFlags |= PVRSRV_USSE_MISCINFO_GET_STRUCT_SIZES; - eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode, IMG_NULL); - - - if(eError != PVRSRV_OK) - { - PVR_LOG(("(FAIL) SGXInit: Unable to validate device DDK version")); - goto chk_exit; - } - psSGXFeatures = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXFeatures; - if( (psSGXFeatures->ui32DDKVersion != - ((PVRVERSION_MAJ << 16) | - (PVRVERSION_MIN << 8) | - PVRVERSION_BRANCH) ) || - (psSGXFeatures->ui32DDKBuild != PVRVERSION_BUILD) ) - { - PVR_LOG(("(FAIL) SGXInit: Incompatible driver DDK revision (%d)/device DDK revision (%d).", - PVRVERSION_BUILD, psSGXFeatures->ui32DDKBuild)); - eError = PVRSRV_ERROR_DDK_VERSION_MISMATCH; - PVR_DBG_BREAK; - goto chk_exit; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "SGXInit: driver DDK (%d) and device DDK (%d) match. [ OK ]", - PVRVERSION_BUILD, psSGXFeatures->ui32DDKBuild)); - } - - - if (psSGXFeatures->ui32CoreRevSW == 0) - { - - - PVR_LOG(("SGXInit: HW core rev (%x) check skipped.", - psSGXFeatures->ui32CoreRev)); - } - else - { - - bCheckCoreRev = IMG_TRUE; - for(i=0; iui32CoreRev==aui32CoreRevExceptions[i]) && - (psSGXFeatures->ui32CoreRevSW==aui32CoreRevExceptions[i+1]) ) - { - PVR_LOG(("SGXInit: HW core rev (%x), SW core rev (%x) check skipped.", - psSGXFeatures->ui32CoreRev, - psSGXFeatures->ui32CoreRevSW)); - bCheckCoreRev = IMG_FALSE; - } - } - - if (bCheckCoreRev) - { - if (psSGXFeatures->ui32CoreRev != psSGXFeatures->ui32CoreRevSW) - { - PVR_LOG(("(FAIL) SGXInit: Incompatible HW core rev (%x) and SW core rev (%x).", - psSGXFeatures->ui32CoreRev, psSGXFeatures->ui32CoreRevSW)); - eError = PVRSRV_ERROR_BUILD_MISMATCH; - goto chk_exit; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "SGXInit: HW core rev (%x) and SW core rev (%x) match. [ OK ]", - psSGXFeatures->ui32CoreRev, psSGXFeatures->ui32CoreRevSW)); - } - } - } - - - psSGXStructSizes = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXStructSizes; - - bStructSizesFailed = IMG_FALSE; - - CHECK_SIZE(HOST_CTL); - CHECK_SIZE(COMMAND); -#if defined(SGX_FEATURE_2D_HARDWARE) - CHECK_SIZE(2DCMD); - CHECK_SIZE(2DCMD_SHARED); -#endif - CHECK_SIZE(CMDTA); - CHECK_SIZE(CMDTA_SHARED); - CHECK_SIZE(TRANSFERCMD); - CHECK_SIZE(TRANSFERCMD_SHARED); - - CHECK_SIZE(3DREGISTERS); - CHECK_SIZE(HWPBDESC); - CHECK_SIZE(HWRENDERCONTEXT); - CHECK_SIZE(HWRENDERDETAILS); - CHECK_SIZE(HWRTDATA); - CHECK_SIZE(HWRTDATASET); - CHECK_SIZE(HWTRANSFERCONTEXT); - - if (bStructSizesFailed == IMG_TRUE) - { - PVR_LOG(("(FAIL) SGXInit: Mismatch in SGXMKIF structure sizes.")); - eError = PVRSRV_ERROR_BUILD_MISMATCH; - goto chk_exit; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "SGXInit: SGXMKIF structure sizes match. [ OK ]")); - } - - - ui32BuildOptions = psSGXFeatures->ui32BuildOptions; - if (ui32BuildOptions != (SGX_BUILD_OPTIONS)) - { - ui32BuildOptionsMismatch = ui32BuildOptions ^ (SGX_BUILD_OPTIONS); - if ( ((SGX_BUILD_OPTIONS) & ui32BuildOptionsMismatch) != 0) - { - PVR_LOG(("(FAIL) SGXInit: Mismatch in driver and microkernel build options; " - "extra options present in driver: (0x%x). Please check sgx_options.h", - (SGX_BUILD_OPTIONS) & ui32BuildOptionsMismatch )); - } - - if ( (ui32BuildOptions & ui32BuildOptionsMismatch) != 0) - { - PVR_LOG(("(FAIL) SGXInit: Mismatch in driver and microkernel build options; " - "extra options present in microkernel: (0x%x). Please check sgx_options.h", - ui32BuildOptions & ui32BuildOptionsMismatch )); - } - eError = PVRSRV_ERROR_BUILD_MISMATCH; - goto chk_exit; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE, "SGXInit: Driver and microkernel build options match. [ OK ]")); - } -#endif - - eError = PVRSRV_OK; -chk_exit: -#if defined(IGNORE_SGX_INIT_COMPATIBILITY_CHECK) - return PVRSRV_OK; -#else - return eError; -#endif -} - -static -PVRSRV_ERROR SGXGetMiscInfoUkernel(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_HANDLE hDevMemContext) -{ - PVRSRV_ERROR eError; - SGXMKIF_COMMAND sCommandData; - PVRSRV_SGX_MISCINFO_INFO *psSGXMiscInfoInt; - PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - SGX_MISCINFO_STRUCT_SIZES *psSGXStructSizes; - - PPVRSRV_KERNEL_MEM_INFO psMemInfo = psDevInfo->psKernelSGXMiscMemInfo; - - if (! psMemInfo->pvLinAddrKM) - { - PVR_DPF((PVR_DBG_ERROR, "SGXGetMiscInfoUkernel: Invalid address.")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - psSGXMiscInfoInt = psMemInfo->pvLinAddrKM; - psSGXFeatures = &psSGXMiscInfoInt->sSGXFeatures; - psSGXStructSizes = &psSGXMiscInfoInt->sSGXStructSizes; - - psSGXMiscInfoInt->ui32MiscInfoFlags &= ~PVRSRV_USSE_MISCINFO_READY; - - - OSMemSet(psSGXFeatures, 0, sizeof(*psSGXFeatures)); - OSMemSet(psSGXStructSizes, 0, sizeof(*psSGXStructSizes)); - - - sCommandData.ui32Data[1] = psMemInfo->sDevVAddr.uiAddr; - - PDUMPCOMMENT("Microkernel kick for SGXGetMiscInfo"); - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_GETMISCINFO, - &sCommandData, - KERNEL_ID, - 0, - hDevMemContext, - IMG_FALSE); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXGetMiscInfoUkernel: SGXScheduleCCBCommandKM failed.")); - return eError; - } - - -#if !defined(NO_HARDWARE) - { - IMG_BOOL bExit; - - bExit = IMG_FALSE; - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if ((psSGXMiscInfoInt->ui32MiscInfoFlags & PVRSRV_USSE_MISCINFO_READY) != 0) - { - bExit = IMG_TRUE; - break; - } - } END_LOOP_UNTIL_TIMEOUT(); - - - if (!bExit) - { - PVR_DPF((PVR_DBG_ERROR, "SGXGetMiscInfoUkernel: Timeout occurred waiting for misc info.")); - return PVRSRV_ERROR_TIMEOUT; - } - } -#endif - - return PVRSRV_OK; -} - - - -IMG_EXPORT -PVRSRV_ERROR SGXGetMiscInfoKM(PVRSRV_SGXDEV_INFO *psDevInfo, - SGX_MISC_INFO *psMiscInfo, - PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_HANDLE hDevMemContext) -{ - PVRSRV_ERROR eError; - PPVRSRV_KERNEL_MEM_INFO psMemInfo = psDevInfo->psKernelSGXMiscMemInfo; - IMG_UINT32 *pui32MiscInfoFlags = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->ui32MiscInfoFlags; - - - *pui32MiscInfoFlags = 0; - -#if !defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - PVR_UNREFERENCED_PARAMETER(hDevMemContext); -#endif - - switch(psMiscInfo->eRequest) - { -#if defined(SGX_FEATURE_DATA_BREAKPOINTS) - case SGX_MISC_INFO_REQUEST_SET_BREAKPOINT: - { - IMG_UINT32 ui32MaskDM; - IMG_UINT32 ui32CtrlWEnable; - IMG_UINT32 ui32CtrlREnable; - IMG_UINT32 ui32CtrlTrapEnable; - IMG_UINT32 ui32RegVal; - IMG_UINT32 ui32StartRegVal; - IMG_UINT32 ui32EndRegVal; - SGXMKIF_COMMAND sCommandData; - - - if(psMiscInfo->uData.sSGXBreakpointInfo.bBPEnable) - { - - IMG_DEV_VIRTADDR sBPDevVAddr = psMiscInfo->uData.sSGXBreakpointInfo.sBPDevVAddr; - IMG_DEV_VIRTADDR sBPDevVAddrEnd = psMiscInfo->uData.sSGXBreakpointInfo.sBPDevVAddrEnd; - - - ui32StartRegVal = sBPDevVAddr.uiAddr & EUR_CR_BREAKPOINT0_START_ADDRESS_MASK; - ui32EndRegVal = sBPDevVAddrEnd.uiAddr & EUR_CR_BREAKPOINT0_END_ADDRESS_MASK; - - ui32MaskDM = psMiscInfo->uData.sSGXBreakpointInfo.ui32DataMasterMask; - ui32CtrlWEnable = psMiscInfo->uData.sSGXBreakpointInfo.bWrite; - ui32CtrlREnable = psMiscInfo->uData.sSGXBreakpointInfo.bRead; - ui32CtrlTrapEnable = psMiscInfo->uData.sSGXBreakpointInfo.bTrapped; - - - ui32RegVal = ((ui32MaskDM<uData.sSGXBreakpointInfo.ui32BPIndex; - sCommandData.ui32Data[1] = ui32StartRegVal; - sCommandData.ui32Data[2] = ui32EndRegVal; - sCommandData.ui32Data[3] = ui32RegVal; - - - psDevInfo->psSGXHostCtl->ui32BPSetClearSignal = 0; - - PDUMPCOMMENT("Microkernel kick for setting a data breakpoint"); - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_DATABREAKPOINT, - &sCommandData, - KERNEL_ID, - 0, - hDevMemContext, - IMG_FALSE); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXGetMiscInfoKM: SGXScheduleCCBCommandKM failed.")); - return eError; - } - -#if defined(NO_HARDWARE) - - psDevInfo->psSGXHostCtl->ui32BPSetClearSignal = 0; -#else - { - IMG_BOOL bExit; - - bExit = IMG_FALSE; - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if (psDevInfo->psSGXHostCtl->ui32BPSetClearSignal != 0) - { - bExit = IMG_TRUE; - - psDevInfo->psSGXHostCtl->ui32BPSetClearSignal = 0; - break; - } - } END_LOOP_UNTIL_TIMEOUT(); - - - if (!bExit) - { - PVR_DPF((PVR_DBG_ERROR, "SGXGetMiscInfoKM: Timeout occurred waiting BP set/clear")); - return PVRSRV_ERROR_TIMEOUT; - } - } -#endif - - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_POLL_BREAKPOINT: - { - - - - - - - -#if !defined(NO_HARDWARE) -#if defined(SGX_FEATURE_MP) - IMG_BOOL bTrappedBPMaster; - IMG_UINT32 ui32CoreNum, ui32TrappedBPCoreNum; -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - IMG_UINT32 ui32PipeNum, ui32TrappedBPPipeNum; -#define NUM_PIPES_PLUS_ONE (SGX_FEATURE_PERPIPE_BKPT_REGS_NUMPIPES+1) -#endif - IMG_BOOL bTrappedBPAny; -#endif - IMG_BOOL bFoundOne; - -#if defined(SGX_FEATURE_MP) - ui32TrappedBPCoreNum = 0; - bTrappedBPMaster = !!(EUR_CR_MASTER_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BREAKPOINT)); - bTrappedBPAny = bTrappedBPMaster; -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - ui32TrappedBPPipeNum = 0; -#endif - for (ui32CoreNum = 0; ui32CoreNum < SGX_FEATURE_MP_CORE_COUNT_3D; ui32CoreNum++) - { -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - - - -#define SGX_MP_CORE_PIPE_SELECT(r,c,p) \ - ((SGX_MP_CORE_SELECT(EUR_CR_PARTITION_##r,c) + p*(EUR_CR_PIPE0_##r-EUR_CR_PARTITION_##r))) - for (ui32PipeNum = 0; ui32PipeNum < NUM_PIPES_PLUS_ONE; ui32PipeNum++) - { - bFoundOne = - 0 != (EUR_CR_PARTITION_BREAKPOINT_TRAPPED_MASK & - OSReadHWReg(psDevInfo->pvRegsBaseKM, - SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, - ui32CoreNum, - ui32PipeNum))); - if (bFoundOne) - { - bTrappedBPAny = IMG_TRUE; - ui32TrappedBPCoreNum = ui32CoreNum; - ui32TrappedBPPipeNum = ui32PipeNum; - } - } -#else - bFoundOne = !!(EUR_CR_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum))); - if (bFoundOne) - { - bTrappedBPAny = IMG_TRUE; - ui32TrappedBPCoreNum = ui32CoreNum; - } -#endif - } - - psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP = bTrappedBPAny; -#else -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - #error Not yet considered the case for per-pipe regs in non-mp case -#endif - psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP = 0 != (EUR_CR_BREAKPOINT_TRAPPED_MASK & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT)); -#endif - - if (psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBP) - { - IMG_UINT32 ui32Info0, ui32Info1; - -#if defined(SGX_FEATURE_MP) -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0:SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP_INFO0, ui32TrappedBPCoreNum, ui32TrappedBPPipeNum)); - ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1:SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP_INFO1, ui32TrappedBPCoreNum, ui32TrappedBPPipeNum)); -#else - ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0:SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP_INFO0, ui32TrappedBPCoreNum)); - ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, bTrappedBPMaster?EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1:SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP_INFO1, ui32TrappedBPCoreNum)); -#endif -#else - ui32Info0 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT_TRAP_INFO0); - ui32Info1 = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BREAKPOINT_TRAP_INFO1); -#endif - -#ifdef SGX_FEATURE_PERPIPE_BKPT_REGS - psMiscInfo->uData.sSGXBreakpointInfo.ui32BPIndex = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.sTrappedBPDevVAddr.uiAddr = ui32Info0 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK; - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPBurstLength = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBPRead = !!(ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_MASK); - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPDataMaster = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPTag = (ui32Info1 & EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_MASK) >> EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SHIFT; -#else - psMiscInfo->uData.sSGXBreakpointInfo.ui32BPIndex = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.sTrappedBPDevVAddr.uiAddr = ui32Info0 & EUR_CR_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK; - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPBurstLength = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.bTrappedBPRead = !!(ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_RNW_MASK); - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPDataMaster = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT; - psMiscInfo->uData.sSGXBreakpointInfo.ui32TrappedBPTag = (ui32Info1 & EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_MASK) >> EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_SHIFT; -#endif -#if defined(SGX_FEATURE_MP) -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - - psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = bTrappedBPMaster?65535:(ui32TrappedBPCoreNum + (ui32TrappedBPPipeNum<<10)); -#else - - psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = bTrappedBPMaster?65535:ui32TrappedBPCoreNum; -#endif -#else -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - -#error non-mp perpipe regs not yet supported -#else - - psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum = 65534; -#endif -#endif - } -#endif - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_RESUME_BREAKPOINT: - { - - - -#if !defined(NO_HARDWARE) -#if defined(SGX_FEATURE_MP) - IMG_UINT32 ui32CoreNum; - IMG_BOOL bMaster; -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - IMG_UINT32 ui32PipeNum; -#endif -#endif - IMG_UINT32 ui32OldSeqNum, ui32NewSeqNum; - -#if defined(SGX_FEATURE_MP) -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - ui32PipeNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum >> 10; - ui32CoreNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum & 1023; - bMaster = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum > 32767; -#else - ui32CoreNum = psMiscInfo->uData.sSGXBreakpointInfo.ui32CoreNum; - bMaster = ui32CoreNum > SGX_FEATURE_MP_CORE_COUNT_3D; -#endif - if (bMaster) - { - - - ui32OldSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BREAKPOINT); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BREAKPOINT_TRAP, EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_MASK); - do - { - ui32NewSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BREAKPOINT); - } - while (ui32OldSeqNum == ui32NewSeqNum); - } - else -#endif - { - -#if defined(SGX_FEATURE_PERPIPE_BKPT_REGS) - ui32OldSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, ui32CoreNum, ui32PipeNum)); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT_TRAP, ui32CoreNum, ui32PipeNum), EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_MASK); - do - { - ui32NewSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_PIPE_SELECT(BREAKPOINT, ui32CoreNum, ui32PipeNum)); - } - while (ui32OldSeqNum == ui32NewSeqNum); -#else - ui32OldSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum)); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT_TRAP, ui32CoreNum), EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_MASK | EUR_CR_BREAKPOINT_TRAP_CONTINUE_MASK); - do - { - ui32NewSeqNum = 0x1c & OSReadHWReg(psDevInfo->pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BREAKPOINT, ui32CoreNum)); - } - while (ui32OldSeqNum == ui32NewSeqNum); -#endif - } -#endif - return PVRSRV_OK; - } -#endif - - case SGX_MISC_INFO_REQUEST_CLOCKSPEED: - { - psMiscInfo->uData.ui32SGXClockSpeed = psDevInfo->ui32CoreClockSpeed; - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_ACTIVEPOWER: - { - psMiscInfo->uData.sActivePower.ui32NumActivePowerEvents = psDevInfo->psSGXHostCtl->ui32NumActivePowerEvents; - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_LOCKUPS: - { -#if defined(SUPPORT_HW_RECOVERY) - psMiscInfo->uData.sLockups.ui32uKernelDetectedLockups = psDevInfo->psSGXHostCtl->ui32uKernelDetectedLockups; - psMiscInfo->uData.sLockups.ui32HostDetectedLockups = psDevInfo->psSGXHostCtl->ui32HostDetectedLockups; -#else - psMiscInfo->uData.sLockups.ui32uKernelDetectedLockups = 0; - psMiscInfo->uData.sLockups.ui32HostDetectedLockups = 0; -#endif - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_SPM: - { - - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_SGXREV: - { - PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode, hDevMemContext); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "An error occurred in SGXGetMiscInfoUkernel: %d\n", - eError)); - return eError; - } - psSGXFeatures = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXFeatures; - - - psMiscInfo->uData.sSGXFeatures = *psSGXFeatures; - - - PVR_DPF((PVR_DBG_MESSAGE, "SGXGetMiscInfoKM: Core 0x%x, sw ID 0x%x, sw Rev 0x%x\n", - psSGXFeatures->ui32CoreRev, - psSGXFeatures->ui32CoreIdSW, - psSGXFeatures->ui32CoreRevSW)); - PVR_DPF((PVR_DBG_MESSAGE, "SGXGetMiscInfoKM: DDK version 0x%x, DDK build 0x%x\n", - psSGXFeatures->ui32DDKVersion, - psSGXFeatures->ui32DDKBuild)); - - - return PVRSRV_OK; - } - - case SGX_MISC_INFO_REQUEST_DRIVER_SGXREV: - { - PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - - psSGXFeatures = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXFeatures; - - - OSMemSet(psMemInfo->pvLinAddrKM, 0, - sizeof(PVRSRV_SGX_MISCINFO_INFO)); - - psSGXFeatures->ui32DDKVersion = - (PVRVERSION_MAJ << 16) | - (PVRVERSION_MIN << 8) | - PVRVERSION_BRANCH; - psSGXFeatures->ui32DDKBuild = PVRVERSION_BUILD; - - - psSGXFeatures->ui32BuildOptions = (SGX_BUILD_OPTIONS); - -#if defined(PVRSRV_USSE_EDM_STATUS_DEBUG) - - psSGXFeatures->sDevVAEDMStatusBuffer = psDevInfo->psKernelEDMStatusBufferMemInfo->sDevVAddr; - psSGXFeatures->pvEDMStatusBuffer = psDevInfo->psKernelEDMStatusBufferMemInfo->pvLinAddrKM; -#endif - - - psMiscInfo->uData.sSGXFeatures = *psSGXFeatures; - return PVRSRV_OK; - } - -#if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - case SGX_MISC_INFO_REQUEST_MEMREAD: - case SGX_MISC_INFO_REQUEST_MEMCOPY: - { - PVRSRV_ERROR eError; - PVRSRV_SGX_MISCINFO_FEATURES *psSGXFeatures; - PVRSRV_SGX_MISCINFO_MEMACCESS *psSGXMemSrc; - PVRSRV_SGX_MISCINFO_MEMACCESS *psSGXMemDest; - - { - - *pui32MiscInfoFlags |= PVRSRV_USSE_MISCINFO_MEMREAD; - psSGXMemSrc = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXMemAccessSrc; - - if(psMiscInfo->sDevVAddrSrc.uiAddr != 0) - { - psSGXMemSrc->sDevVAddr = psMiscInfo->sDevVAddrSrc; - } - else - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - } - - if( psMiscInfo->eRequest == SGX_MISC_INFO_REQUEST_MEMCOPY) - { - - *pui32MiscInfoFlags |= PVRSRV_USSE_MISCINFO_MEMWRITE; - psSGXMemDest = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXMemAccessDest; - - if(psMiscInfo->sDevVAddrDest.uiAddr != 0) - { - psSGXMemDest->sDevVAddr = psMiscInfo->sDevVAddrDest; - } - else - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - } - - - if(psMiscInfo->hDevMemContext != IMG_NULL) - { - SGXGetMMUPDAddrKM( (IMG_HANDLE)psDeviceNode, hDevMemContext, &psSGXMemSrc->sPDDevPAddr); - - - psSGXMemDest->sPDDevPAddr = psSGXMemSrc->sPDDevPAddr; - } - else - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - eError = SGXGetMiscInfoUkernel(psDevInfo, psDeviceNode); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "An error occurred in SGXGetMiscInfoUkernel: %d\n", - eError)); - return eError; - } - psSGXFeatures = &((PVRSRV_SGX_MISCINFO_INFO*)(psMemInfo->pvLinAddrKM))->sSGXFeatures; - -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - if(*pui32MiscInfoFlags & PVRSRV_USSE_MISCINFO_MEMREAD_FAIL) - { - return PVRSRV_ERROR_INVALID_MISCINFO; - } -#endif - - psMiscInfo->uData.sSGXFeatures = *psSGXFeatures; - return PVRSRV_OK; - } -#endif - -#if defined(SUPPORT_SGX_HWPERF) - case SGX_MISC_INFO_REQUEST_SET_HWPERF_STATUS: - { - PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS *psSetHWPerfStatus = &psMiscInfo->uData.sSetHWPerfStatus; - const IMG_UINT32 ui32ValidFlags = PVRSRV_SGX_HWPERF_STATUS_RESET_COUNTERS | - PVRSRV_SGX_HWPERF_STATUS_GRAPHICS_ON | - PVRSRV_SGX_HWPERF_STATUS_PERIODIC_ON | - PVRSRV_SGX_HWPERF_STATUS_MK_EXECUTION_ON; - SGXMKIF_COMMAND sCommandData = {0}; - - - if ((psSetHWPerfStatus->ui32NewHWPerfStatus & ~ui32ValidFlags) != 0) - { - return PVRSRV_ERROR_INVALID_PARAMS; - } - - #if defined(PDUMP) - PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS, - "SGX ukernel HWPerf status %u\n", - psSetHWPerfStatus->ui32NewHWPerfStatus); - #endif - - - #if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) - OSMemCopy(&psDevInfo->psSGXHostCtl->aui32PerfGroup[0], - &psSetHWPerfStatus->aui32PerfGroup[0], - sizeof(psDevInfo->psSGXHostCtl->aui32PerfGroup)); - OSMemCopy(&psDevInfo->psSGXHostCtl->aui32PerfBit[0], - &psSetHWPerfStatus->aui32PerfBit[0], - sizeof(psDevInfo->psSGXHostCtl->aui32PerfBit)); - #if defined(PDUMP) - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, aui32PerfGroup), - sizeof(psDevInfo->psSGXHostCtl->aui32PerfGroup), - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, aui32PerfBit), - sizeof(psDevInfo->psSGXHostCtl->aui32PerfBit), - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); - #endif - #else - psDevInfo->psSGXHostCtl->ui32PerfGroup = psSetHWPerfStatus->ui32PerfGroup; - #if defined(PDUMP) - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32PerfGroup), - sizeof(psDevInfo->psSGXHostCtl->ui32PerfGroup), - PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); - #endif - #endif - - - sCommandData.ui32Data[0] = psSetHWPerfStatus->ui32NewHWPerfStatus; - eError = SGXScheduleCCBCommandKM(psDeviceNode, - SGXMKIF_CMD_SETHWPERFSTATUS, - &sCommandData, - KERNEL_ID, - 0, - hDevMemContext, - IMG_FALSE); - return eError; - } -#endif - - case SGX_MISC_INFO_DUMP_DEBUG_INFO: - { - PVR_LOG(("User requested SGX debug info")); - - - SGXDumpDebugInfo(psDeviceNode->pvDevice, IMG_FALSE); - - return PVRSRV_OK; - } - - case SGX_MISC_INFO_PANIC: - { - PVR_LOG(("User requested SGX panic")); - - SGXPanic(psDeviceNode->pvDevice); - - return PVRSRV_OK; - } - - default: - { - - return PVRSRV_ERROR_INVALID_PARAMS; - } - } -} - - -IMG_EXPORT -PVRSRV_ERROR SGXReadHWPerfCBKM(IMG_HANDLE hDevHandle, - IMG_UINT32 ui32ArraySize, - PVRSRV_SGX_HWPERF_CB_ENTRY *psClientHWPerfEntry, - IMG_UINT32 *pui32DataCount, - IMG_UINT32 *pui32ClockSpeed, - IMG_UINT32 *pui32HostTimeStamp) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - PVRSRV_DEVICE_NODE *psDeviceNode = hDevHandle; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - SGXMKIF_HWPERF_CB *psHWPerfCB = psDevInfo->psKernelHWPerfCBMemInfo->pvLinAddrKM; - IMG_UINT i; - - for (i = 0; - psHWPerfCB->ui32Woff != psHWPerfCB->ui32Roff && i < ui32ArraySize; - i++) - { - SGXMKIF_HWPERF_CB_ENTRY *psMKPerfEntry = &psHWPerfCB->psHWPerfCBData[psHWPerfCB->ui32Roff]; - - psClientHWPerfEntry[i].ui32FrameNo = psMKPerfEntry->ui32FrameNo; - psClientHWPerfEntry[i].ui32PID = psMKPerfEntry->ui32PID; - psClientHWPerfEntry[i].ui32RTData = psMKPerfEntry->ui32RTData; - psClientHWPerfEntry[i].ui32Type = psMKPerfEntry->ui32Type; - psClientHWPerfEntry[i].ui32Ordinal = psMKPerfEntry->ui32Ordinal; - psClientHWPerfEntry[i].ui32Info = psMKPerfEntry->ui32Info; - psClientHWPerfEntry[i].ui32Clocksx16 = SGXConvertTimeStamp(psDevInfo, - psMKPerfEntry->ui32TimeWraps, - psMKPerfEntry->ui32Time); - OSMemCopy(&psClientHWPerfEntry[i].ui32Counters[0][0], - &psMKPerfEntry->ui32Counters[0][0], - sizeof(psMKPerfEntry->ui32Counters)); - - OSMemCopy(&psClientHWPerfEntry[i].ui32MiscCounters[0][0], - &psMKPerfEntry->ui32MiscCounters[0][0], - sizeof(psMKPerfEntry->ui32MiscCounters)); - - psHWPerfCB->ui32Roff = (psHWPerfCB->ui32Roff + 1) & (SGXMKIF_HWPERF_CB_SIZE - 1); - } - - *pui32DataCount = i; - *pui32ClockSpeed = psDevInfo->ui32CoreClockSpeed; - *pui32HostTimeStamp = OSClockus(); - - return eError; -} - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxkick.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxkick.c deleted file mode 100644 index d1220cf..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxkick.c +++ /dev/null @@ -1,784 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include "services_headers.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#if defined (PDUMP) -#include "sgxapi_km.h" -#include "pdump_km.h" -#endif -#include "sgx_bridge_km.h" -#include "osfunc.h" -#include "pvr_debug.h" -#include "sgxutils.h" -#include "ttrace.h" - -IMG_EXPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK_KM *psCCBKick) -#else -PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) -#endif -{ - PVRSRV_ERROR eError; - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *) psCCBKick->hCCBKernelMemInfo; - SGXMKIF_CMDTA_SHARED *psTACmd; - IMG_UINT32 i; - IMG_HANDLE hDevMemContext = IMG_NULL; -#if defined(FIX_HW_BRN_31620) - hDevMemContext = psCCBKick->hDevMemContext; -#endif - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, KICK_TOKEN_DOKICK); - - if (!CCB_OFFSET_IS_VALID(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset)) - { - PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: Invalid CCB offset")); - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, KICK_TOKEN_DOKICK); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - psTACmd = CCB_DATA_FROM_OFFSET(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset); - - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CMD_START, KICK_TOKEN_DOKICK); - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CCB, - KICK_TOKEN_CCB_OFFSET, psCCBKick->ui32CCBOffset); - - - if (psCCBKick->hTA3DSyncInfo) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_TA3D_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psTACmd->sTA3DDependency.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->sTA3DDependency.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - - if (psCCBKick->bTADependency) - { - psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - } - - if (psCCBKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_TA_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psTACmd->sTATQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sTATQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->ui32TATQSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - psTACmd->ui32TATQSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - if (psCCBKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_3D_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psTACmd->s3DTQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->s3DTQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->ui323DTQSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - psTACmd->ui323DTQSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - psTACmd->ui32NumTAStatusVals = psCCBKick->ui32NumTAStatusVals; - if (psCCBKick->ui32NumTAStatusVals != 0) - { - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - psTACmd->sCtlTAStatusInfo[i] = psCCBKick->asTAStatusUpdate[i].sCtlStatus; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - psTACmd->sCtlTAStatusInfo[i].sStatusDevAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sCtlTAStatusInfo[i].ui32StatusValue = psSyncInfo->psSyncData->ui32ReadOpsPending; -#endif - } - } - - psTACmd->ui32Num3DStatusVals = psCCBKick->ui32Num3DStatusVals; - if (psCCBKick->ui32Num3DStatusVals != 0) - { - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - psTACmd->sCtl3DStatusInfo[i] = psCCBKick->as3DStatusUpdate[i].sCtlStatus; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - psTACmd->sCtl3DStatusInfo[i].sStatusDevAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sCtl3DStatusInfo[i].ui32StatusValue = psSyncInfo->psSyncData->ui32ReadOpsPending; -#endif - } - } - - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - psTACmd->ui32NumTASrcSyncs = psCCBKick->ui32NumTASrcSyncs; - for (i=0; iui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - - psTACmd->asTASrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asTASrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asTASrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->asTASrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - psTACmd->ui32NumTADstSyncs = psCCBKick->ui32NumTADstSyncs; - for (i=0; iui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - - psTACmd->asTADstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asTADstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asTADstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psTACmd->asTADstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - - psTACmd->ui32Num3DSrcSyncs = psCCBKick->ui32Num3DSrcSyncs; - for (i=0; iui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - - psTACmd->as3DSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->as3DSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->as3DSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->as3DSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } -#else - - psTACmd->ui32NumSrcSyncs = psCCBKick->ui32NumSrcSyncs; - for (i=0; iui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_SRC_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psTACmd->asSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } -#endif - - if (psCCBKick->bFirstKickOrResume && psCCBKick->ui32NumDstSyncObjects > 0) - { - PVRSRV_KERNEL_MEM_INFO *psHWDstSyncListMemInfo = - (PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo; - SGXMKIF_HWDEVICE_SYNC_LIST *psHWDeviceSyncList = psHWDstSyncListMemInfo->pvLinAddrKM; - IMG_UINT32 ui32NumDstSyncs = psCCBKick->ui32NumDstSyncObjects; - - PVR_ASSERT(((PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo)->uAllocSize >= (sizeof(SGXMKIF_HWDEVICE_SYNC_LIST) + - (sizeof(PVRSRV_DEVICE_SYNC_OBJECT) * ui32NumDstSyncs))); - - psHWDeviceSyncList->ui32NumSyncObjects = ui32NumDstSyncs; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - PDUMPCOMMENT("HWDeviceSyncList for TACmd\r\n"); - PDUMPMEM(IMG_NULL, - psHWDstSyncListMemInfo, - 0, - sizeof(SGXMKIF_HWDEVICE_SYNC_LIST), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - } -#endif - - for (i=0; ipahDstSyncHandles[i]; - - if (psSyncInfo) - { - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_KICK, KICK_TOKEN_DST_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - - #if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - IMG_UINT32 ui32ModifiedValue; - IMG_UINT32 ui32SyncOffset = offsetof(SGXMKIF_HWDEVICE_SYNC_LIST, asSyncData) - + (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)); - IMG_UINT32 ui32WOpsOffset = ui32SyncOffset - + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal); - IMG_UINT32 ui32ROpsOffset = ui32SyncOffset - + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal); - - PDUMPCOMMENT("HWDeviceSyncObject for RT: %i\r\n", i); - - PDUMPMEM(IMG_NULL, - psHWDstSyncListMemInfo, - ui32SyncOffset, - sizeof(PVRSRV_DEVICE_SYNC_OBJECT), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT ROpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastOpDumpVal - 1; - - PDUMPCOMMENT("Modify RT %d WOpPendingVal in HWDevSyncList\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psHWDstSyncListMemInfo, - ui32WOpsOffset, - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - - ui32ModifiedValue = 0; - PDUMPCOMMENT("Modify RT %d ROpsPendingVal in HWDevSyncList\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psHWDstSyncListMemInfo, - ui32ROpsOffset, - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - } - #endif - } - else - { - psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr.uiAddr = 0; - psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr.uiAddr = 0; - - psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = 0; - psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = 0; - } - } - } - - - - - psTACmd->ui32CtrlFlags |= SGXMKIF_CMDTA_CTRLFLAGS_READY; - -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - PDUMPCOMMENT("Shared part of TA command\r\n"); - - PDUMPMEM(psTACmd, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff, - sizeof(SGXMKIF_CMDTA_SHARED), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - for (i=0; iui32NumTASrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT TA-SRC ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT TA-SRC WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify TA SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTASrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify TA SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTASrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - for (i=0; iui32NumTADstSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT TA-DST ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT TA-DST WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastOpDumpVal - 1; - - PDUMPCOMMENT("Modify TA DstSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTADstSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify TA DstSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTADstSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - for (i=0; iui32Num3DSrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT 3D-SRC ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT 3D-SRC WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify 3D SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, as3DSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify 3D SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, as3DSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } -#else - for (i=0; iui32NumSrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT ROpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - if (psCCBKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; - - PDUMPCOMMENT("Modify TA/TQ ROpPendingVal\r\n"); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, ui32TATQSyncReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - } - - if (psCCBKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; - - PDUMPCOMMENT("Modify 3D/TQ ROpPendingVal\r\n"); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, ui323DTQSyncReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - } - -#endif - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if !defined(SUPPORT_SGX_NEW_STATUS_VALS) - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - PDUMPCOMMENT("Modify TA status value in TA cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_CMDTA_SHARED, sCtlTAStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#endif - } - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if !defined(SUPPORT_SGX_NEW_STATUS_VALS) - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - PDUMPCOMMENT("Modify 3D status value in TA cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_CMDTA_SHARED, sCtl3DStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#endif - } - } -#endif - - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_CMD_END, - KICK_TOKEN_DOKICK); - - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TA, &psCCBKick->sCommand, KERNEL_ID, 0, hDevMemContext, psCCBKick->bLastInScene); - if (eError == PVRSRV_ERROR_RETRY) - { - if (psCCBKick->bFirstKickOrResume && psCCBKick->ui32NumDstSyncObjects > 0) - { - for (i=0; i < psCCBKick->ui32NumDstSyncObjects; i++) - { - - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->pahDstSyncHandles[i]; - - if (psSyncInfo) - { - psSyncInfo->psSyncData->ui32WriteOpsPending--; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - psSyncInfo->psSyncData->ui32LastOpDumpVal--; - } -#endif - } - } - } - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - for (i=0; iui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } - for (i=0; iui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - for (i=0; iui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } -#else - for (i=0; iui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } -#endif - - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - KICK_TOKEN_DOKICK); - return eError; - } - else if (PVRSRV_OK != eError) - { - PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: SGXScheduleCCBCommandKM failed.")); - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - KICK_TOKEN_DOKICK); - return eError; - } - - -#if defined(NO_HARDWARE) - - - - if (psCCBKick->hTA3DSyncInfo) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo; - - if (psCCBKick->bTADependency) - { - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - } - - if (psCCBKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; - - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - if (psCCBKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; - - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = (PVRSRV_KERNEL_MEM_INFO*)psCCBKick->asTAStatusUpdate[i].hKernelMemInfo; - - *(IMG_UINT32*)((IMG_UINTPTR_T)psKernelMemInfo->pvLinAddrKM - + (psTACmd->sCtlTAStatusInfo[i].sStatusDevAddr.uiAddr - - psKernelMemInfo->sDevVAddr.uiAddr)) = psTACmd->sCtlTAStatusInfo[i].ui32StatusValue; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psTACmd->sCtlTAStatusInfo[i].ui32StatusValue; -#endif - } - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - for (i=0; iui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - for (i=0; iui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - for (i=0; iui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } -#else - - for (i=0; iui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } -#endif - - if (psCCBKick->bTerminateOrAbort) - { - if (psCCBKick->ui32NumDstSyncObjects > 0) - { - PVRSRV_KERNEL_MEM_INFO *psHWDstSyncListMemInfo = - (PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo; - SGXMKIF_HWDEVICE_SYNC_LIST *psHWDeviceSyncList = psHWDstSyncListMemInfo->pvLinAddrKM; - - for (i=0; iui32NumDstSyncObjects; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->pahDstSyncHandles[i]; - if (psSyncInfo) - psSyncInfo->psSyncData->ui32WriteOpsComplete = psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal+1; - } - } - - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = (PVRSRV_KERNEL_MEM_INFO*)psCCBKick->as3DStatusUpdate[i].hKernelMemInfo; - - *(IMG_UINT32*)((IMG_UINTPTR_T)psKernelMemInfo->pvLinAddrKM - + (psTACmd->sCtl3DStatusInfo[i].sStatusDevAddr.uiAddr - - psKernelMemInfo->sDevVAddr.uiAddr)) = psTACmd->sCtl3DStatusInfo[i].ui32StatusValue; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psTACmd->sCtl3DStatusInfo[i].ui32StatusValue; -#endif - } - } -#endif - PVR_TTRACE(PVRSRV_TRACE_GROUP_KICK, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - KICK_TOKEN_DOKICK); - return eError; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxpower.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxpower.c deleted file mode 100644 index 3947cdd..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxpower.c +++ /dev/null @@ -1,481 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include "sgxdefs.h" -#include "services_headers.h" -#include "sgxapi_km.h" -#include "sgx_mkif_km.h" -#include "sgxutils.h" -#include "pdump_km.h" - - -#if defined(SUPPORT_HW_RECOVERY) -static PVRSRV_ERROR SGXAddTimer(PVRSRV_DEVICE_NODE *psDeviceNode, - SGX_TIMING_INFORMATION *psSGXTimingInfo, - IMG_HANDLE *phTimer) -{ - - - - *phTimer = OSAddTimer(SGXOSTimer, psDeviceNode, - 1000 * 50 / psSGXTimingInfo->ui32uKernelFreq); - if(*phTimer == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"SGXAddTimer : Failed to register timer callback function")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - return PVRSRV_OK; -} -#endif - - -static PVRSRV_ERROR SGXUpdateTimingInfo(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; -#if defined(SGX_DYNAMIC_TIMING_INFO) - SGX_TIMING_INFORMATION sSGXTimingInfo = {0}; -#else - SGX_DEVICE_MAP *psSGXDeviceMap; -#endif - IMG_UINT32 ui32ActivePowManSampleRate; - SGX_TIMING_INFORMATION *psSGXTimingInfo; - - -#if defined(SGX_DYNAMIC_TIMING_INFO) - psSGXTimingInfo = &sSGXTimingInfo; - SysGetSGXTimingInformation(psSGXTimingInfo); -#else - SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE_SGX, - (IMG_VOID**)&psSGXDeviceMap); - psSGXTimingInfo = &psSGXDeviceMap->sTimingInfo; -#endif - -#if defined(SUPPORT_HW_RECOVERY) - { - PVRSRV_ERROR eError; - IMG_UINT32 ui32OlduKernelFreq; - - if (psDevInfo->hTimer != IMG_NULL) - { - ui32OlduKernelFreq = psDevInfo->ui32CoreClockSpeed / psDevInfo->ui32uKernelTimerClock; - if (ui32OlduKernelFreq != psSGXTimingInfo->ui32uKernelFreq) - { - - - IMG_HANDLE hNewTimer; - - eError = SGXAddTimer(psDeviceNode, psSGXTimingInfo, &hNewTimer); - if (eError == PVRSRV_OK) - { - eError = OSRemoveTimer(psDevInfo->hTimer); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXUpdateTimingInfo: Failed to remove timer")); - } - psDevInfo->hTimer = hNewTimer; - } - else - { - - } - } - } - else - { - eError = SGXAddTimer(psDeviceNode, psSGXTimingInfo, &psDevInfo->hTimer); - if (eError != PVRSRV_OK) - { - return eError; - } - } - - psDevInfo->psSGXHostCtl->ui32HWRecoverySampleRate = - psSGXTimingInfo->ui32uKernelFreq / psSGXTimingInfo->ui32HWRecoveryFreq; - } -#endif - - - psDevInfo->ui32CoreClockSpeed = psSGXTimingInfo->ui32CoreClockSpeed; - psDevInfo->ui32uKernelTimerClock = psSGXTimingInfo->ui32CoreClockSpeed / psSGXTimingInfo->ui32uKernelFreq; - - - psDevInfo->psSGXHostCtl->ui32uKernelTimerClock = psDevInfo->ui32uKernelTimerClock; -#if defined(PDUMP) - PDUMPCOMMENT("Host Control - Microkernel clock"); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32uKernelTimerClock), - sizeof(IMG_UINT32), PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); -#endif - - if (psSGXTimingInfo->bEnableActivePM) - { - ui32ActivePowManSampleRate = - psSGXTimingInfo->ui32uKernelFreq * psSGXTimingInfo->ui32ActivePowManLatencyms / 1000; - - - - - - - - ui32ActivePowManSampleRate += 1; - } - else - { - ui32ActivePowManSampleRate = 0; - } - - psDevInfo->psSGXHostCtl->ui32ActivePowManSampleRate = ui32ActivePowManSampleRate; -#if defined(PDUMP) - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32ActivePowManSampleRate), - sizeof(IMG_UINT32), PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); -#endif - - return PVRSRV_OK; -} - - -static IMG_VOID SGXStartTimer(PVRSRV_SGXDEV_INFO *psDevInfo) -{ - #if defined(SUPPORT_HW_RECOVERY) - PVRSRV_ERROR eError; - - eError = OSEnableTimer(psDevInfo->hTimer); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXStartTimer : Failed to enable host timer")); - } - #else - PVR_UNREFERENCED_PARAMETER(psDevInfo); - #endif -} - - -static IMG_VOID SGXPollForClockGating (PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32Register, - IMG_UINT32 ui32RegisterValue, - IMG_CHAR *pszComment) -{ - PVR_UNREFERENCED_PARAMETER(psDevInfo); - PVR_UNREFERENCED_PARAMETER(ui32Register); - PVR_UNREFERENCED_PARAMETER(ui32RegisterValue); - PVR_UNREFERENCED_PARAMETER(pszComment); - - #if !defined(NO_HARDWARE) - PVR_ASSERT(psDevInfo != IMG_NULL); - - - if (PollForValueKM((IMG_UINT32 *)psDevInfo->pvRegsBaseKM + (ui32Register >> 2), - 0, - ui32RegisterValue, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPollForClockGating: %s failed.", pszComment)); - PVR_DBG_BREAK; - } - #endif - - PDUMPCOMMENT("%s", pszComment); - PDUMPREGPOL(SGX_PDUMPREG_NAME, ui32Register, 0, ui32RegisterValue, PDUMP_POLL_OPERATOR_EQUAL); -} - - -PVRSRV_ERROR SGXPrePowerState (IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - if ((eNewPowerState != eCurrentPowerState) && - (eNewPowerState != PVRSRV_DEV_POWER_STATE_ON)) - { - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode = hDevHandle; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - IMG_UINT32 ui32PowerCmd, ui32CompleteStatus; - SGXMKIF_COMMAND sCommand = {0}; - IMG_UINT32 ui32Core; - IMG_UINT32 ui32CoresEnabled; - - #if defined(SUPPORT_HW_RECOVERY) - - eError = OSDisableTimer(psDevInfo->hTimer); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: Failed to disable timer")); - return eError; - } - #endif - - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF) - { - - ui32PowerCmd = PVRSRV_POWERCMD_POWEROFF; - ui32CompleteStatus = PVRSRV_USSE_EDM_POWMAN_POWEROFF_COMPLETE; - PDUMPCOMMENT("SGX power off request"); - } - else - { - - ui32PowerCmd = PVRSRV_POWERCMD_IDLE; - ui32CompleteStatus = PVRSRV_USSE_EDM_POWMAN_IDLE_COMPLETE; - PDUMPCOMMENT("SGX idle request"); - } - - sCommand.ui32Data[1] = ui32PowerCmd; - - eError = SGXScheduleCCBCommand(psDeviceNode, SGXMKIF_CMD_POWER, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: Failed to submit power down command")); - return eError; - } - - - #if !defined(NO_HARDWARE) - if (PollForValueKM(&psDevInfo->psSGXHostCtl->ui32PowerStatus, - ui32CompleteStatus, - ui32CompleteStatus, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: Wait for SGX ukernel power transition failed.")); - PVR_DBG_BREAK; - } - #endif - - #if defined(PDUMP) - PDUMPCOMMENT("TA/3D CCB Control - Wait for power event on uKernel."); - PDUMPMEMPOL(psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32PowerStatus), - ui32CompleteStatus, - ui32CompleteStatus, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); - #endif - -#if defined(SGX_FEATURE_MP) - ui32CoresEnabled = ((OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_CORE) & EUR_CR_MASTER_CORE_ENABLE_MASK) >> EUR_CR_MASTER_CORE_ENABLE_SHIFT) + 1; -#else - ui32CoresEnabled = 1; -#endif - - for (ui32Core = 0; ui32Core < ui32CoresEnabled; ui32Core++) - { - - SGXPollForClockGating(psDevInfo, - SGX_MP_CORE_SELECT(psDevInfo->ui32ClkGateStatusReg, ui32Core), - psDevInfo->ui32ClkGateStatusMask, - "Wait for SGX clock gating"); - } - - #if defined(SGX_FEATURE_MP) - - SGXPollForClockGating(psDevInfo, - psDevInfo->ui32MasterClkGateStatusReg, - psDevInfo->ui32MasterClkGateStatusMask, - "Wait for SGX master clock gating"); - - SGXPollForClockGating(psDevInfo, - psDevInfo->ui32MasterClkGateStatus2Reg, - psDevInfo->ui32MasterClkGateStatus2Mask, - "Wait for SGX master clock gating (2)"); - #endif - - if (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF) - { - - eError = SGXDeinitialise(psDevInfo); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: SGXDeinitialise failed: %u", eError)); - return eError; - } - } - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SGXPostPowerState (IMG_HANDLE hDevHandle, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - if ((eNewPowerState != eCurrentPowerState) && - (eCurrentPowerState != PVRSRV_DEV_POWER_STATE_ON)) - { - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode = hDevHandle; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; - - - psSGXHostCtl->ui32PowerStatus = 0; - #if defined(PDUMP) - PDUMPCOMMENT("Host Control - Reset power status"); - PDUMPMEM(IMG_NULL, psDevInfo->psKernelSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32PowerStatus), - sizeof(IMG_UINT32), PDUMP_FLAGS_CONTINUOUS, - MAKEUNIQUETAG(psDevInfo->psKernelSGXHostCtlMemInfo)); - #endif - - if (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF) - { - - - - - eError = SGXUpdateTimingInfo(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPostPowerState: SGXUpdateTimingInfo failed")); - return eError; - } - - - - eError = SGXInitialise(psDevInfo, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPostPowerState: SGXInitialise failed")); - return eError; - } - } - else - { - - - SGXMKIF_COMMAND sCommand = {0}; - - sCommand.ui32Data[1] = PVRSRV_POWERCMD_RESUME; - eError = SGXScheduleCCBCommand(psDeviceNode, SGXMKIF_CMD_POWER, &sCommand, ISR_ID, 0, IMG_NULL, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPostPowerState failed to schedule CCB command: %u", eError)); - return eError; - } - } - - SGXStartTimer(psDevInfo); - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SGXPreClockSpeedChange (IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode = hDevHandle; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - - PVR_UNREFERENCED_PARAMETER(psDevInfo); - - if (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_ON) - { - if (bIdleDevice) - { - - PDUMPSUSPEND(); - - eError = SGXPrePowerState(hDevHandle, PVRSRV_DEV_POWER_STATE_IDLE, - PVRSRV_DEV_POWER_STATE_ON); - - if (eError != PVRSRV_OK) - { - PDUMPRESUME(); - return eError; - } - } - } - - PVR_DPF((PVR_DBG_MESSAGE,"SGXPreClockSpeedChange: SGX clock speed was %uHz", - psDevInfo->ui32CoreClockSpeed)); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SGXPostClockSpeedChange (IMG_HANDLE hDevHandle, - IMG_BOOL bIdleDevice, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - PVRSRV_DEVICE_NODE *psDeviceNode = hDevHandle; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - IMG_UINT32 ui32OldClockSpeed = psDevInfo->ui32CoreClockSpeed; - - PVR_UNREFERENCED_PARAMETER(ui32OldClockSpeed); - - if (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_ON) - { - PVRSRV_ERROR eError; - - - - eError = SGXUpdateTimingInfo(psDeviceNode); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXPostPowerState: SGXUpdateTimingInfo failed")); - return eError; - } - - if (bIdleDevice) - { - - eError = SGXPostPowerState(hDevHandle, PVRSRV_DEV_POWER_STATE_ON, - PVRSRV_DEV_POWER_STATE_IDLE); - - PDUMPRESUME(); - - if (eError != PVRSRV_OK) - { - return eError; - } - } - else - { - SGXStartTimer(psDevInfo); - } - } - - PVR_DPF((PVR_DBG_MESSAGE,"SGXPostClockSpeedChange: SGX clock speed changed from %uHz to %uHz", - ui32OldClockSpeed, psDevInfo->ui32CoreClockSpeed)); - - return PVRSRV_OK; -} - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxreset.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxreset.c deleted file mode 100644 index ffed9ea..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxreset.c +++ /dev/null @@ -1,667 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "sgxdefs.h" -#include "sgxmmu.h" -#include "services_headers.h" -#include "sgxinfokm.h" -#include "sgxconfig.h" - -#include "pdump_km.h" - - -IMG_VOID SGXInitClocks(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags) -{ - IMG_UINT32 ui32RegVal; - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - ui32RegVal = psDevInfo->ui32ClkGateCtl; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_CLKGATECTL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_CLKGATECTL, ui32RegVal, ui32PDUMPFlags); - -#if defined(EUR_CR_CLKGATECTL2) - ui32RegVal = psDevInfo->ui32ClkGateCtl2; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_CLKGATECTL2, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_CLKGATECTL2, ui32RegVal, ui32PDUMPFlags); -#endif -} - - -static IMG_VOID SGXResetInitBIFContexts(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags) -{ - IMG_UINT32 ui32RegVal; - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the BIF bank settings\r\n"); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK_SET, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK_SET, ui32RegVal, ui32PDUMPFlags); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); -#endif - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the BIF directory list\r\n"); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal, ui32PDUMPFlags); - -#if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - { - IMG_UINT32 ui32DirList, ui32DirListReg; - - for (ui32DirList = 1; - ui32DirList < SGX_FEATURE_BIF_NUM_DIRLISTS; - ui32DirList++) - { - ui32DirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (ui32DirList - 1); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32DirListReg, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, ui32DirListReg, ui32RegVal, ui32PDUMPFlags); - } - } -#endif -} - - -static IMG_VOID SGXResetSetupBIFContexts(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags) -{ - IMG_UINT32 ui32RegVal; - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - #if defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - - ui32RegVal = (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT); - - #if defined(SGX_FEATURE_2D_HARDWARE) && !defined(SGX_FEATURE_PTLA) - - ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_2D_SHIFT); - #endif - - #if defined(FIX_HW_BRN_23410) - - ui32RegVal |= (SGX_BIF_DIR_LIST_INDEX_EDM << EUR_CR_BIF_BANK0_INDEX_TA_SHIFT); - #endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_BANK0, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Set up EDM requestor page table in BIF\r\n"); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_BANK0, ui32RegVal, ui32PDUMPFlags); - #endif - - { - IMG_UINT32 ui32EDMDirListReg; - - - #if (SGX_BIF_DIR_LIST_INDEX_EDM == 0) - ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE0; - #else - - ui32EDMDirListReg = EUR_CR_BIF_DIR_LIST_BASE1 + 4 * (SGX_BIF_DIR_LIST_INDEX_EDM - 1); - #endif - - ui32RegVal = psDevInfo->sKernelPDDevPAddr.uiAddr >> SGX_MMU_PDE_ADDR_ALIGNSHIFT; - -#if defined(FIX_HW_BRN_28011) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); - PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); -#endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, ui32EDMDirListReg, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the EDM's directory list base\r\n"); - PDUMPPDREGWITHFLAGS(&psDevInfo->sMMUAttrib, ui32EDMDirListReg, ui32RegVal, ui32PDUMPFlags, PDUMP_PD_UNIQUETAG); - } -} - - -static IMG_VOID SGXResetSleep(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags, - IMG_BOOL bPDump) -{ -#if defined(PDUMP) || defined(EMULATOR) - IMG_UINT32 ui32ReadRegister; - - #if defined(SGX_FEATURE_MP) - ui32ReadRegister = EUR_CR_MASTER_SOFT_RESET; - #else - ui32ReadRegister = EUR_CR_SOFT_RESET; - #endif -#endif - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - - OSWaitus(100 * 1000000 / psDevInfo->ui32CoreClockSpeed); - if (bPDump) - { - PDUMPIDLWITHFLAGS(30, ui32PDUMPFlags); -#if defined(PDUMP) - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Read back to flush the register writes\r\n"); - PDumpRegRead(SGX_PDUMPREG_NAME, ui32ReadRegister, ui32PDUMPFlags); -#endif - } - -#if defined(EMULATOR) - - - OSReadHWReg(psDevInfo->pvRegsBaseKM, ui32ReadRegister); -#endif -} - - -#if !defined(SGX_FEATURE_MP) -static IMG_VOID SGXResetSoftReset(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bResetBIF, - IMG_UINT32 ui32PDUMPFlags, - IMG_BOOL bPDump) -{ - IMG_UINT32 ui32SoftResetRegVal; - - ui32SoftResetRegVal = - - EUR_CR_SOFT_RESET_DPM_RESET_MASK | - EUR_CR_SOFT_RESET_TA_RESET_MASK | - EUR_CR_SOFT_RESET_USE_RESET_MASK | - EUR_CR_SOFT_RESET_ISP_RESET_MASK | - EUR_CR_SOFT_RESET_TSP_RESET_MASK; - -#ifdef EUR_CR_SOFT_RESET_TWOD_RESET_MASK - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_TWOD_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_TE_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_TE_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_MTE_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_MTE_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_ISP2_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_ISP2_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_PDS_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_PDS_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_PBE_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_PBE_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_CACHEL2_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_CACHEL2_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_TCU_L2_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_TCU_L2_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_MADD_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_MADD_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_ITR_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_ITR_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_TEX_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_TEX_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_VDM_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_VDM_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_DCU_L2_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_DCU_L2_RESET_MASK; -#endif -#if defined(EUR_CR_SOFT_RESET_DCU_L0L1_RESET_MASK) - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_DCU_L0L1_RESET_MASK; -#endif - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - if (bResetBIF) - { - ui32SoftResetRegVal |= EUR_CR_SOFT_RESET_BIF_RESET_MASK; - } - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_SOFT_RESET, ui32SoftResetRegVal); - if (bPDump) - { - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_SOFT_RESET, ui32SoftResetRegVal, ui32PDUMPFlags); - } -} - - -static IMG_VOID SGXResetInvalDC(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32PDUMPFlags, - IMG_BOOL bPDump) -{ - IMG_UINT32 ui32RegVal; - - -#if defined(EUR_CR_BIF_CTRL_INVAL) - ui32RegVal = EUR_CR_BIF_CTRL_INVAL_ALL_MASK; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL_INVAL, ui32RegVal); - if (bPDump) - { - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL_INVAL, ui32RegVal, ui32PDUMPFlags); - } -#else - ui32RegVal = EUR_CR_BIF_CTRL_INVALDC_MASK; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - if (bPDump) - { - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - } - - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - if (bPDump) - { - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - } -#endif - SGXResetSleep(psDevInfo, ui32PDUMPFlags, bPDump); - -#if !defined(SGX_FEATURE_MULTIPLE_MEM_CONTEXTS) - { - - - - if (PollForValueKM((IMG_UINT32 *)((IMG_UINT8*)psDevInfo->pvRegsBaseKM + EUR_CR_BIF_MEM_REQ_STAT), - 0, - EUR_CR_BIF_MEM_REQ_STAT_READS_MASK, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"Wait for DC invalidate failed.")); - PVR_DBG_BREAK; - } - - if (bPDump) - { - PDUMPREGPOLWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_MEM_REQ_STAT, 0, EUR_CR_BIF_MEM_REQ_STAT_READS_MASK, ui32PDUMPFlags, PDUMP_POLL_OPERATOR_EQUAL); - } - } -#endif -} -#endif - - -IMG_VOID SGXReset(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_BOOL bHardwareRecovery, - IMG_UINT32 ui32PDUMPFlags) -#if !defined(SGX_FEATURE_MP) -{ - IMG_UINT32 ui32RegVal; -#if defined(EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK) - const IMG_UINT32 ui32BifFaultMask = EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK; -#else - const IMG_UINT32 ui32BifFaultMask = EUR_CR_BIF_INT_STAT_FAULT_MASK; -#endif - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Start of SGX reset sequence\r\n"); - -#if defined(FIX_HW_BRN_23944) - - ui32RegVal = EUR_CR_BIF_CTRL_PAUSE_MASK; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_INT_STAT); - if (ui32RegVal & ui32BifFaultMask) - { - - ui32RegVal = EUR_CR_BIF_CTRL_PAUSE_MASK | EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - ui32RegVal = EUR_CR_BIF_CTRL_PAUSE_MASK; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - } -#endif - - - SGXResetSoftReset(psDevInfo, IMG_TRUE, ui32PDUMPFlags, IMG_TRUE); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - - -#if defined(SGX_FEATURE_36BIT_MMU) - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_36BIT_ADDRESSING, EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_MASK); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_36BIT_ADDRESSING, EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_MASK, ui32PDUMPFlags); -#endif - - SGXResetInitBIFContexts(psDevInfo, ui32PDUMPFlags); - -#if defined(EUR_CR_BIF_MEM_ARB_CONFIG) - - - ui32RegVal = (12UL << EUR_CR_BIF_MEM_ARB_CONFIG_PAGE_SIZE_SHIFT) | - (7UL << EUR_CR_BIF_MEM_ARB_CONFIG_BEST_CNT_SHIFT) | - (12UL << EUR_CR_BIF_MEM_ARB_CONFIG_TTE_THRESH_SHIFT); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_MEM_ARB_CONFIG, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_MEM_ARB_CONFIG, ui32RegVal, ui32PDUMPFlags); -#endif - -#if defined(SGX_FEATURE_SYSTEM_CACHE) - #if defined(SGX_BYPASS_SYSTEM_CACHE) - - ui32RegVal = MNE_CR_CTRL_BYPASS_ALL_MASK; - #else - #if defined(FIX_HW_BRN_26620) - ui32RegVal = 0; - #else - - ui32RegVal = MNE_CR_CTRL_BYP_CC_MASK; - #endif - #if defined(FIX_HW_BRN_34028) - - ui32RegVal |= (8 << MNE_CR_CTRL_BYPASS_SHIFT); - #endif - #endif - OSWriteHWReg(psDevInfo->pvRegsBaseKM, MNE_CR_CTRL, ui32RegVal); - PDUMPREG(SGX_PDUMPREG_NAME, MNE_CR_CTRL, ui32RegVal); -#endif - - if (bHardwareRecovery) - { - - - - - - - - ui32RegVal = (IMG_UINT32)psDevInfo->sBIFResetPDDevPAddr.uiAddr; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_DIR_LIST_BASE0, ui32RegVal); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - - SGXResetSoftReset(psDevInfo, IMG_FALSE, ui32PDUMPFlags, IMG_TRUE); - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - SGXResetInvalDC(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - - - for (;;) - { - IMG_UINT32 ui32BifIntStat = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_INT_STAT); - IMG_DEV_VIRTADDR sBifFault; - IMG_UINT32 ui32PDIndex, ui32PTIndex; - - if ((ui32BifIntStat & ui32BifFaultMask) == 0) - { - break; - } - - - - - sBifFault.uiAddr = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_FAULT); - PVR_DPF((PVR_DBG_WARNING, "SGXReset: Page fault 0x%x/0x%x", ui32BifIntStat, sBifFault.uiAddr)); - ui32PDIndex = sBifFault.uiAddr >> (SGX_MMU_PAGE_SHIFT + SGX_MMU_PT_SHIFT); - ui32PTIndex = (sBifFault.uiAddr & SGX_MMU_PT_MASK) >> SGX_MMU_PAGE_SHIFT; - - - SGXResetSoftReset(psDevInfo, IMG_TRUE, ui32PDUMPFlags, IMG_FALSE); - - - psDevInfo->pui32BIFResetPD[ui32PDIndex] = (psDevInfo->sBIFResetPTDevPAddr.uiAddr - >>SGX_MMU_PDE_ADDR_ALIGNSHIFT) - | SGX_MMU_PDE_PAGE_SIZE_4K - | SGX_MMU_PDE_VALID; - psDevInfo->pui32BIFResetPT[ui32PTIndex] = (psDevInfo->sBIFResetPageDevPAddr.uiAddr - >>SGX_MMU_PTE_ADDR_ALIGNSHIFT) - | SGX_MMU_PTE_VALID; - - - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_STATUS); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR, ui32RegVal); - ui32RegVal = OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_STATUS2); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR2, ui32RegVal); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - - SGXResetSoftReset(psDevInfo, IMG_FALSE, ui32PDUMPFlags, IMG_FALSE); - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - - SGXResetInvalDC(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - - - psDevInfo->pui32BIFResetPD[ui32PDIndex] = 0; - psDevInfo->pui32BIFResetPT[ui32PTIndex] = 0; - } - } - else - { - - SGXResetSoftReset(psDevInfo, IMG_FALSE, ui32PDUMPFlags, IMG_TRUE); - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_FALSE); - } - - - - SGXResetSetupBIFContexts(psDevInfo, ui32PDUMPFlags); - -#if defined(SGX_FEATURE_2D_HARDWARE) && !defined(SGX_FEATURE_PTLA) - - #if ((SGX_2D_HEAP_BASE & ~EUR_CR_BIF_TWOD_REQ_BASE_ADDR_MASK) != 0) - #error "SGXReset: SGX_2D_HEAP_BASE doesn't match EUR_CR_BIF_TWOD_REQ_BASE_ADDR_MASK alignment" - #endif - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_BIF_TWOD_REQ_BASE, SGX_2D_HEAP_BASE); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_BIF_TWOD_REQ_BASE, SGX_2D_HEAP_BASE, ui32PDUMPFlags); -#endif - - - SGXResetInvalDC(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - PVR_DPF((PVR_DBG_MESSAGE,"Soft Reset of SGX")); - - - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_SOFT_RESET, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); - - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "End of SGX reset sequence\r\n"); -} - -#else - -{ - IMG_UINT32 ui32RegVal; - - PVR_UNREFERENCED_PARAMETER(bHardwareRecovery); - -#if !defined(PDUMP) - PVR_UNREFERENCED_PARAMETER(ui32PDUMPFlags); -#endif - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Start of SGX MP reset sequence\r\n"); - - - ui32RegVal = EUR_CR_MASTER_SOFT_RESET_BIF_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_IPF_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_DPM_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_MCI_RESET_MASK | - EUR_CR_MASTER_SOFT_RESET_VDM_RESET_MASK; - -#if defined(SGX_FEATURE_PTLA) - ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_MASK; -#endif -#if defined(SGX_FEATURE_SYSTEM_CACHE) - ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_SLC_RESET_MASK; -#endif - - - ui32RegVal |= EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(0) | - EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(1) | - EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(2) | - EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(3); - - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Soft reset hydra partition, hard reset the cores\r\n"); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_BIF_CTRL, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra BIF control\r\n"); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_BIF_CTRL, ui32RegVal, ui32PDUMPFlags); - -#if defined(SGX_FEATURE_SYSTEM_CACHE) - #if defined(SGX_BYPASS_SYSTEM_CACHE) - #error SGX_BYPASS_SYSTEM_CACHE not supported - #else - ui32RegVal = EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_MASK | - #if defined(FIX_HW_BRN_30954) - EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_MASK | - #endif - #if defined(PVR_SLC_8KB_ADDRESS_MODE) - (4 << EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SHIFT) | - #endif - (0xC << EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SHIFT); - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra SLC control\r\n"); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL, ui32RegVal); - - ui32RegVal = EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_MASK; - #if defined(FIX_HW_BRN_31620) - ui32RegVal |= EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_MASK; - #endif - #if defined(FIX_HW_BRN_31195) - ui32RegVal |= EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_MASK | - EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_MASK; - #endif - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the hydra SLC bypass control\r\n"); - PDUMPREG(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SLC_CTRL_BYPASS, ui32RegVal); - #endif -#endif - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - - ui32RegVal = 0; - OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_MASTER_SOFT_RESET, ui32RegVal); - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Remove the resets from all of SGX\r\n"); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_SOFT_RESET, ui32RegVal, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Turn on the slave cores' clock gating\r\n"); - SGXInitClocks(psDevInfo, ui32PDUMPFlags); - - SGXResetSleep(psDevInfo, ui32PDUMPFlags, IMG_TRUE); - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "Initialise the slave BIFs\r\n"); - -#if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_31620) || defined(FIX_HW_BRN_31671) || defined(FIX_HW_BRN_32085) - #if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_32085) - - ui32RegVal = (1<pvRegsBaseKM, EUR_CR_MASTER_BIF_MMU_CTRL, ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, EUR_CR_MASTER_BIF_MMU_CTRL, ui32RegVal, ui32PDUMPFlags); - - #if defined(FIX_HW_BRN_31278) || defined(FIX_HW_BRN_32085) - - ui32RegVal = (1<pvRegsBaseKM, SGX_MP_CORE_SELECT(EUR_CR_BIF_MMU_CTRL, ui32Core), ui32RegVal); - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_BIF_MMU_CTRL, ui32Core), ui32RegVal, ui32PDUMPFlags); - } - } -#endif - - SGXResetInitBIFContexts(psDevInfo, ui32PDUMPFlags); - SGXResetSetupBIFContexts(psDevInfo, ui32PDUMPFlags); - - PDUMPCOMMENTWITHFLAGS(ui32PDUMPFlags, "End of SGX MP reset sequence\r\n"); -} -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxtransfer.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxtransfer.c deleted file mode 100644 index 8a9415f..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxtransfer.c +++ /dev/null @@ -1,750 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(TRANSFER_QUEUE) - -#include - -#include "sgxdefs.h" -#include "services_headers.h" -#include "buffer_manager.h" -#include "sgxinfo.h" -#include "sysconfig.h" -#include "pdump_km.h" -#include "mmu.h" -#include "pvr_bridge.h" -#include "sgx_bridge_km.h" -#include "sgxinfokm.h" -#include "osfunc.h" -#include "pvr_debug.h" -#include "sgxutils.h" -#include "ttrace.h" - -#if defined (SUPPORT_SID_INTERFACE) -IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK_KM *psKick) -#else -IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSFER_SGX_KICK *psKick) -#endif -{ - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psKick->hCCBMemInfo; - SGXMKIF_COMMAND sCommand = {0}; - SGXMKIF_TRANSFERCMD_SHARED *psSharedTransferCmd; - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - IMG_UINT32 loop; - IMG_HANDLE hDevMemContext = IMG_NULL; - IMG_BOOL abSrcSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS]; - IMG_UINT32 ui32RealSrcSyncNum = 0; - IMG_BOOL abDstSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS]; - IMG_UINT32 ui32RealDstSyncNum = 0; - - -#if defined(PDUMP) - IMG_BOOL bPersistentProcess = IMG_FALSE; - - { - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc != IMG_NULL) - { - bPersistentProcess = psPerProc->bPDumpPersistent; - } - } -#endif -#if defined(FIX_HW_BRN_31620) - hDevMemContext = psKick->hDevMemContext; -#endif - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, TRANSFER_TOKEN_SUBMIT); - - for (loop = 0; loop < SGX_MAX_TRANSFER_SYNC_OPS; loop++) - { - abSrcSyncEnable[loop] = IMG_TRUE; - abDstSyncEnable[loop] = IMG_TRUE; - } - - if (!CCB_OFFSET_IS_VALID(SGXMKIF_TRANSFERCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset)) - { - PVR_DPF((PVR_DBG_ERROR, "SGXSubmitTransferKM: Invalid CCB offset")); - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - TRANSFER_TOKEN_SUBMIT); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - psSharedTransferCmd = CCB_DATA_FROM_OFFSET(SGXMKIF_TRANSFERCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset); - - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CMD_START, TRANSFER_TOKEN_SUBMIT); - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CCB, - TRANSFER_TOKEN_CCB_OFFSET, psKick->ui32SharedCmdCCBOffset); - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_TA_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psSharedTransferCmd->ui32TASyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - psSharedTransferCmd->ui32TASyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psSharedTransferCmd->sTASyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->sTASyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - else - { - psSharedTransferCmd->sTASyncWriteOpsCompleteDevVAddr.uiAddr = 0; - psSharedTransferCmd->sTASyncReadOpsCompleteDevVAddr.uiAddr = 0; - } - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_3D_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psSharedTransferCmd->ui323DSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - psSharedTransferCmd->ui323DSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psSharedTransferCmd->s3DSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->s3DSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - else - { - psSharedTransferCmd->s3DSyncWriteOpsCompleteDevVAddr.uiAddr = 0; - psSharedTransferCmd->s3DSyncReadOpsCompleteDevVAddr.uiAddr = 0; - } - - - for (loop = 0; loop < MIN(SGX_MAX_TRANSFER_SYNC_OPS, psKick->ui32NumSrcSync); loop++) - { - IMG_UINT32 i; - - PVRSRV_KERNEL_SYNC_INFO * psMySyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - - for (i = 0; i < loop; i++) - { - if (abSrcSyncEnable[i]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[i]; - - if (psSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr == psMySyncInfo->sWriteOpsCompleteDevVAddr.uiAddr) - { - PVR_DPF((PVR_DBG_WARNING, "SGXSubmitTransferKM : Same src synchronized multiple times!")); - abSrcSyncEnable[loop] = IMG_FALSE; - break; - } - } - } - if (abSrcSyncEnable[loop]) - { - ui32RealSrcSyncNum++; - } - } - for (loop = 0; loop < MIN(SGX_MAX_TRANSFER_SYNC_OPS, psKick->ui32NumDstSync); loop++) - { - IMG_UINT32 i; - - PVRSRV_KERNEL_SYNC_INFO * psMySyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - - for (i = 0; i < loop; i++) - { - if (abDstSyncEnable[i]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[i]; - - if (psSyncInfo->sWriteOpsCompleteDevVAddr.uiAddr == psMySyncInfo->sWriteOpsCompleteDevVAddr.uiAddr) - { - PVR_DPF((PVR_DBG_WARNING, "SGXSubmitTransferKM : Same dst synchronized multiple times!")); - abDstSyncEnable[loop] = IMG_FALSE; - break; - } - } - } - if (abDstSyncEnable[loop]) - { - ui32RealDstSyncNum++; - } - } - - psSharedTransferCmd->ui32NumSrcSyncs = ui32RealSrcSyncNum; - psSharedTransferCmd->ui32NumDstSyncs = ui32RealDstSyncNum; - - if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) - { - IMG_UINT32 i = 0; - - for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_SRC_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psSharedTransferCmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - psSharedTransferCmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psSharedTransferCmd->asSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->asSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - i++; - } - } - PVR_ASSERT(i == ui32RealSrcSyncNum); - - i = 0; - for (loop = 0; loop < psKick->ui32NumDstSync; loop++) - { - if (abDstSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - - PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_DST_SYNC, - psSyncInfo, PVRSRV_SYNCOP_SAMPLE); - - psSharedTransferCmd->asDstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - psSharedTransferCmd->asDstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psSharedTransferCmd->asDstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psSharedTransferCmd->asDstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - i++; - } - } - PVR_ASSERT(i == ui32RealDstSyncNum); - - - for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32ReadOpsPending++; - } - } - for (loop = 0; loop < psKick->ui32NumDstSync; loop++) - { - if (abDstSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - } - } - -#if defined(PDUMP) - if ((PDumpIsCaptureFrameKM() - || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - && (bPersistentProcess == IMG_FALSE) ) - { - PDUMPCOMMENT("Shared part of transfer command\r\n"); - PDUMPMEM(psSharedTransferCmd, - psCCBMemInfo, - psKick->ui32CCBDumpWOff, - sizeof(SGXMKIF_TRANSFERCMD_SHARED), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) - { - IMG_UINT32 i = 0; - - for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = psKick->ahSrcSyncInfo[loop]; - - PDUMPCOMMENT("Hack src surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack src surface read op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - i++; - } - } - - i = 0; - for (loop = 0; loop < psKick->ui32NumDstSync; loop++) - { - if (abDstSyncEnable[i]) - { - psSyncInfo = psKick->ahDstSyncInfo[loop]; - - PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack dest surface read op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - i++; - } - } - - - for (loop = 0; loop < (psKick->ui32NumSrcSync); loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - } - } - - for (loop = 0; loop < (psKick->ui32NumDstSync); loop++) - { - if (abDstSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - } - } - } - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hTASyncInfo; - - PDUMPCOMMENT("Tweak TA/TQ surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, ui32TASyncWriteOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - } - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->h3DSyncInfo; - - PDUMPCOMMENT("Tweak 3D/TQ surface write op in transfer cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, ui323DSyncWriteOpsPendingVal)), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - } - } -#endif - - sCommand.ui32Data[1] = psKick->sHWTransferContextDevVAddr.uiAddr; - - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_CMD_END, - TRANSFER_TOKEN_SUBMIT); - - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TRANSFER, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, hDevMemContext, IMG_FALSE); - - if (eError == PVRSRV_ERROR_RETRY) - { - - if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) - { - for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM() - || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - { - psSyncInfo->psSyncData->ui32LastReadOpDumpVal--; - } -#endif - } - } - for (loop = 0; loop < psKick->ui32NumDstSync; loop++) - { - if (abDstSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - psSyncInfo->psSyncData->ui32WriteOpsPending--; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM() - || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - { - psSyncInfo->psSyncData->ui32LastOpDumpVal--; - } -#endif - } - } - } - - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - } - - else if (PVRSRV_OK != eError) - { - PVR_DPF((PVR_DBG_ERROR, "SGXSubmitTransferKM: SGXScheduleCCBCommandKM failed.")); - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - TRANSFER_TOKEN_SUBMIT); - return eError; - } - - -#if defined(NO_HARDWARE) - if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_NOSYNCUPDATE) == 0) - { - - for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) - { - if (abSrcSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - } - - for (loop = 0; loop < psKick->ui32NumDstSync; loop++) - { - if (abDstSyncEnable[loop]) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - } - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - } -#endif - PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_EXIT, - TRANSFER_TOKEN_SUBMIT); - return eError; -} - -#if defined(SGX_FEATURE_2D_HARDWARE) -#if defined (SUPPORT_SID_INTERFACE) -IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK_KM *psKick) -#else -IMG_EXPORT PVRSRV_ERROR SGXSubmit2DKM(IMG_HANDLE hDevHandle, PVRSRV_2D_SGX_KICK *psKick) -#endif - -{ - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *)psKick->hCCBMemInfo; - SGXMKIF_COMMAND sCommand = {0}; - SGXMKIF_2DCMD_SHARED *ps2DCmd; - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_ERROR eError; - IMG_UINT32 i; - IMG_HANDLE hDevMemContext = IMG_NULL; -#if defined(PDUMP) - IMG_BOOL bPersistentProcess = IMG_FALSE; - - { - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc != IMG_NULL) - { - bPersistentProcess = psPerProc->bPDumpPersistent; - } - } -#endif -#if defined(FIX_HW_BRN_31620) - hDevMemContext = psKick->hDevMemContext; -#endif - - if (!CCB_OFFSET_IS_VALID(SGXMKIF_2DCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset)) - { - PVR_DPF((PVR_DBG_ERROR, "SGXSubmit2DKM: Invalid CCB offset")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - ps2DCmd = CCB_DATA_FROM_OFFSET(SGXMKIF_2DCMD_SHARED, psCCBMemInfo, psKick, ui32SharedCmdCCBOffset); - - OSMemSet(ps2DCmd, 0, sizeof(*ps2DCmd)); - - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - - ps2DCmd->sTASyncData.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - ps2DCmd->sTASyncData.ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - ps2DCmd->sTASyncData.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - ps2DCmd->sTASyncData.sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - - ps2DCmd->s3DSyncData.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - ps2DCmd->s3DSyncData.ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - ps2DCmd->s3DSyncData.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - ps2DCmd->s3DSyncData.sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - - - ps2DCmd->ui32NumSrcSync = psKick->ui32NumSrcSync; - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - - ps2DCmd->sSrcSyncData[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - ps2DCmd->sSrcSyncData[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - ps2DCmd->sSrcSyncData[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - ps2DCmd->sSrcSyncData[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - - ps2DCmd->sDstSyncData.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - ps2DCmd->sDstSyncData.ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - ps2DCmd->sDstSyncData.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - ps2DCmd->sDstSyncData.sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - } - - - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending++; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - -#if defined(PDUMP) - if ((PDumpIsCaptureFrameKM() - || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - && (bPersistentProcess == IMG_FALSE) ) - { - - PDUMPCOMMENT("Shared part of 2D command\r\n"); - PDUMPMEM(ps2DCmd, - psCCBMemInfo, - psKick->ui32CCBDumpWOff, - sizeof(SGXMKIF_2DCMD_SHARED), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - - PDUMPCOMMENT("Hack src surface write op in 2D cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32WriteOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack src surface read op in 2D cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sSrcSyncData[i].ui32ReadOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - - PDUMPCOMMENT("Hack dest surface write op in 2D cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32WriteOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Hack dest surface read op in 2D cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psKick->ui32CCBDumpWOff + (IMG_UINT32)offsetof(SGXMKIF_2DCMD_SHARED, sDstSyncData.ui32ReadOpsPendingVal), - sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), - psKick->ui32PDumpFlags, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - } - } -#endif - - sCommand.ui32Data[1] = psKick->sHW2DContextDevVAddr.uiAddr; - - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_2D, &sCommand, KERNEL_ID, psKick->ui32PDumpFlags, hDevMemContext, IMG_FALSE); - - if (eError == PVRSRV_ERROR_RETRY) - { - - -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32LastReadOpDumpVal--; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - psSyncInfo->psSyncData->ui32LastOpDumpVal--; - } - } -#endif - - for (i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = psKick->hDstSyncInfo; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - } - - - - -#if defined(NO_HARDWARE) - - for(i = 0; i < psKick->ui32NumSrcSync; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - if (psKick->hDstSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hDstSyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - if (psKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->hTASyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - if (psKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->h3DSyncInfo; - - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } -#endif - - return eError; -} -#endif -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.c b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.c deleted file mode 100644 index 7ee082a..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.c +++ /dev/null @@ -1,1168 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#include "sgxdefs.h" -#include "services_headers.h" -#include "buffer_manager.h" -#include "sgx_bridge_km.h" -#include "sgxapi_km.h" -#include "sgxinfo.h" -#include "sgx_mkif_km.h" -#include "sysconfig.h" -#include "pdump_km.h" -#include "mmu.h" -#include "pvr_bridge_km.h" -#include "osfunc.h" -#include "pvr_debug.h" -#include "sgxutils.h" -#include "ttrace.h" - -#ifdef __linux__ -#include -#include -#else -#include -#endif - - -#if defined(SYS_CUSTOM_POWERDOWN) -PVRSRV_ERROR SysPowerDownMISR(PVRSRV_DEVICE_NODE * psDeviceNode, IMG_UINT32 ui32CallerID); -#endif - - - -static IMG_VOID SGXPostActivePowerEvent(PVRSRV_DEVICE_NODE * psDeviceNode, - IMG_UINT32 ui32CallerID) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; - - - psSGXHostCtl->ui32NumActivePowerEvents++; - - if ((psSGXHostCtl->ui32PowerStatus & PVRSRV_USSE_EDM_POWMAN_POWEROFF_RESTART_IMMEDIATE) != 0) - { - - - - if (ui32CallerID == ISR_ID) - { - psDeviceNode->bReProcessDeviceCommandComplete = IMG_TRUE; - } - else - { - SGXScheduleProcessQueuesKM(psDeviceNode); - } - } -} - - -IMG_VOID SGXTestActivePowerEvent (PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_UINT32 ui32CallerID) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; - - if (((psSGXHostCtl->ui32InterruptFlags & PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER) != 0) && - ((psSGXHostCtl->ui32InterruptClearFlags & PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER) == 0)) - { - - psSGXHostCtl->ui32InterruptClearFlags |= PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER; - - - PDUMPSUSPEND(); - -#if defined(SYS_CUSTOM_POWERDOWN) - - - - eError = SysPowerDownMISR(psDeviceNode, ui32CallerID); -#else - eError = PVRSRVSetDevicePowerStateKM(psDeviceNode->sDevId.ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE_OFF, - ui32CallerID, IMG_FALSE); - if (eError == PVRSRV_OK) - { - SGXPostActivePowerEvent(psDeviceNode, ui32CallerID); - } -#endif - if (eError == PVRSRV_ERROR_RETRY) - { - - - psSGXHostCtl->ui32InterruptClearFlags &= ~PVRSRV_USSE_EDM_INTERRUPT_ACTIVE_POWER; - eError = PVRSRV_OK; - } - - - PDUMPRESUME(); - } - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXTestActivePowerEvent error:%u", eError)); - } -} - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SGXAcquireKernelCCBSlot) -#endif -static INLINE SGXMKIF_COMMAND * SGXAcquireKernelCCBSlot(PVRSRV_SGX_CCB_INFO *psCCB) -{ - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - if(((*psCCB->pui32WriteOffset + 1) & 255) != *psCCB->pui32ReadOffset) - { - return &psCCB->psCommands[*psCCB->pui32WriteOffset]; - } - - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - - return IMG_NULL; -} - -PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, - SGXMKIF_CMD_TYPE eCmdType, - SGXMKIF_COMMAND *psCommandData, - IMG_UINT32 ui32CallerID, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hDevMemContext, - IMG_BOOL bLastInScene) -{ - PVRSRV_SGX_CCB_INFO *psKernelCCB; - PVRSRV_ERROR eError = PVRSRV_OK; - SGXMKIF_COMMAND *psSGXCommand; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; -#if defined(FIX_HW_BRN_31620) - IMG_UINT32 ui32CacheMasks[4]; - IMG_UINT32 i; - MMU_CONTEXT *psMMUContext; -#endif -#if defined(PDUMP) - IMG_VOID *pvDumpCommand; - IMG_BOOL bPDumpIsSuspended = PDumpIsSuspended(); - IMG_BOOL bPersistentProcess = IMG_FALSE; -#else - PVR_UNREFERENCED_PARAMETER(ui32CallerID); - PVR_UNREFERENCED_PARAMETER(ui32PDumpFlags); -#endif - -#if defined(FIX_HW_BRN_31620) - for(i=0;i<4;i++) - { - ui32CacheMasks[i] = 0; - } - - psMMUContext = psDevInfo->hKernelMMUContext; - psDeviceNode->pfnMMUGetCacheFlushRange(psMMUContext, &ui32CacheMasks[0]); - - - if (hDevMemContext) - { - BM_CONTEXT *psBMContext = (BM_CONTEXT *) hDevMemContext; - - psMMUContext = psBMContext->psMMUContext; - psDeviceNode->pfnMMUGetCacheFlushRange(psMMUContext, &ui32CacheMasks[2]); - } - - - if (ui32CacheMasks[0] || ui32CacheMasks[1] || ui32CacheMasks[2] || ui32CacheMasks[3]) - { - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_PD; - } -#endif - -#if defined(FIX_HW_BRN_28889) - - - - - if ( (eCmdType != SGXMKIF_CMD_PROCESS_QUEUES) && - ((psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_DATA) != 0) && - ((psDevInfo->ui32CacheControl & (SGXMKIF_CC_INVAL_BIF_PT | SGXMKIF_CC_INVAL_BIF_PD)) != 0)) - { - #if defined(PDUMP) - PVRSRV_KERNEL_MEM_INFO *psSGXHostCtlMemInfo = psDevInfo->psKernelSGXHostCtlMemInfo; - #endif - SGXMKIF_HOST_CTL *psSGXHostCtl = psDevInfo->psSGXHostCtl; - SGXMKIF_COMMAND sCacheCommand = {0}; - - eError = SGXScheduleCCBCommand(psDeviceNode, - SGXMKIF_CMD_PROCESS_QUEUES, - &sCacheCommand, - ui32CallerID, - ui32PDumpFlags, - hDevMemContext, - bLastInScene); - if (eError != PVRSRV_OK) - { - goto Exit; - } - - - #if !defined(NO_HARDWARE) - if(PollForValueKM(&psSGXHostCtl->ui32InvalStatus, - PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, - PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, - 2 * MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXScheduleCCBCommand: Wait for uKernel to Invalidate BIF cache failed")); - PVR_DBG_BREAK; - } - #endif - - #if defined(PDUMP) - - PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for BIF cache invalidate request to complete"); - PDUMPMEMPOL(psSGXHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32InvalStatus), - PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, - PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psSGXHostCtlMemInfo)); - #endif - - psSGXHostCtl->ui32InvalStatus &= ~(PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE); - PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); - } -#else - PVR_UNREFERENCED_PARAMETER(hDevMemContext); -#endif - -#if defined(FIX_HW_BRN_31620) - if ((eCmdType != SGXMKIF_CMD_FLUSHPDCACHE) && (psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_BIF_PD)) - { - SGXMKIF_COMMAND sPDECacheCommand = {0}; - IMG_DEV_PHYADDR sDevPAddr; - - - psMMUContext = psDevInfo->hKernelMMUContext; - - psDeviceNode->pfnMMUGetPDPhysAddr(psMMUContext, &sDevPAddr); - sPDECacheCommand.ui32Data[0] = sDevPAddr.uiAddr | 1; - sPDECacheCommand.ui32Data[1] = ui32CacheMasks[0]; - sPDECacheCommand.ui32Data[2] = ui32CacheMasks[1]; - - - if (hDevMemContext) - { - BM_CONTEXT *psBMContext = (BM_CONTEXT *) hDevMemContext; - - psMMUContext = psBMContext->psMMUContext; - - psDeviceNode->pfnMMUGetPDPhysAddr(psMMUContext, &sDevPAddr); - - sPDECacheCommand.ui32Data[3] = sDevPAddr.uiAddr | 1; - sPDECacheCommand.ui32Data[4] = ui32CacheMasks[2]; - sPDECacheCommand.ui32Data[5] = ui32CacheMasks[3]; - } - - - if (sPDECacheCommand.ui32Data[1] | sPDECacheCommand.ui32Data[2] | sPDECacheCommand.ui32Data[4] | - sPDECacheCommand.ui32Data[5]) - { - eError = SGXScheduleCCBCommand(psDeviceNode, - SGXMKIF_CMD_FLUSHPDCACHE, - &sPDECacheCommand, - ui32CallerID, - ui32PDumpFlags, - hDevMemContext, - bLastInScene); - if (eError != PVRSRV_OK) - { - goto Exit; - } - } - } -#endif -#if defined(PDUMP) - - { - PVRSRV_PER_PROCESS_DATA* psPerProc = PVRSRVFindPerProcessData(); - if(psPerProc != IMG_NULL) - { - bPersistentProcess = psPerProc->bPDumpPersistent; - } - } -#endif - psKernelCCB = psDevInfo->psKernelCCBInfo; - - psSGXCommand = SGXAcquireKernelCCBSlot(psKernelCCB); - - - if(!psSGXCommand) - { - PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Wait for CCB space timed out")) ; - eError = PVRSRV_ERROR_TIMEOUT; - goto Exit; - } - - - psCommandData->ui32CacheControl = psDevInfo->ui32CacheControl; - -#if defined(PDUMP) - - psDevInfo->sPDContext.ui32CacheControl |= psDevInfo->ui32CacheControl; -#endif - - - psDevInfo->ui32CacheControl = 0; - - - *psSGXCommand = *psCommandData; - - if (eCmdType >= SGXMKIF_CMD_MAX) - { - PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Unknown command type: %d", eCmdType)) ; - eError = PVRSRV_ERROR_INVALID_CCB_COMMAND; - goto Exit; - } - - if ((eCmdType == SGXMKIF_CMD_TA) && bLastInScene) - { - SYS_DATA *psSysData; - - - SysAcquireData(&psSysData); - - if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) - { - OSFlushCPUCacheKM(); - } - else if(psSysData->ePendingCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN) - { - OSCleanCPUCacheKM(); - } - - - psSysData->ePendingCacheOpType = PVRSRV_MISC_INFO_CPUCACHEOP_NONE; - } - - PVR_ASSERT(eCmdType < SGXMKIF_CMD_MAX); - psSGXCommand->ui32ServiceAddress = psDevInfo->aui32HostKickAddr[eCmdType]; - -#if defined(PDUMP) - if ((ui32CallerID != ISR_ID) && (bPDumpIsSuspended == IMG_FALSE) && - (bPersistentProcess == IMG_FALSE) ) - { - - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Poll for space in the Kernel CCB\r\n"); - PDUMPMEMPOL(psKernelCCB->psCCBCtlMemInfo, - offsetof(PVRSRV_SGX_CCB_CTL, ui32ReadOffset), - (psKernelCCB->ui32CCBDumpWOff + 1) & 0xff, - 0xff, - PDUMP_POLL_OPERATOR_NOTEQUAL, - ui32PDumpFlags, - MAKEUNIQUETAG(psKernelCCB->psCCBCtlMemInfo)); - - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Kernel CCB command (type == %d)\r\n", eCmdType); - pvDumpCommand = (IMG_VOID *)((IMG_UINT8 *)psKernelCCB->psCCBMemInfo->pvLinAddrKM + (*psKernelCCB->pui32WriteOffset * sizeof(SGXMKIF_COMMAND))); - - PDUMPMEM(pvDumpCommand, - psKernelCCB->psCCBMemInfo, - psKernelCCB->ui32CCBDumpWOff * sizeof(SGXMKIF_COMMAND), - sizeof(SGXMKIF_COMMAND), - ui32PDumpFlags, - MAKEUNIQUETAG(psKernelCCB->psCCBMemInfo)); - - - PDUMPMEM(&psDevInfo->sPDContext.ui32CacheControl, - psKernelCCB->psCCBMemInfo, - psKernelCCB->ui32CCBDumpWOff * sizeof(SGXMKIF_COMMAND) + - offsetof(SGXMKIF_COMMAND, ui32CacheControl), - sizeof(IMG_UINT32), - ui32PDumpFlags, - MAKEUNIQUETAG(psKernelCCB->psCCBMemInfo)); - - if (PDumpIsCaptureFrameKM() - || ((ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - { - - psDevInfo->sPDContext.ui32CacheControl = 0; - } - } -#endif - -#if defined(FIX_HW_BRN_26620) && defined(SGX_FEATURE_SYSTEM_CACHE) && !defined(SGX_BYPASS_SYSTEM_CACHE) - - eError = PollForValueKM (psKernelCCB->pui32ReadOffset, - *psKernelCCB->pui32WriteOffset, - 0xFF, - MAX_HW_TIME_US, - MAX_HW_TIME_US/WAIT_TRY_COUNT, - IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXScheduleCCBCommand: Timeout waiting for previous command to be read")) ; - eError = PVRSRV_ERROR_TIMEOUT; - goto Exit; - } -#endif - - - - *psKernelCCB->pui32WriteOffset = (*psKernelCCB->pui32WriteOffset + 1) & 255; - -#if defined(PDUMP) - if ((ui32CallerID != ISR_ID) && (bPDumpIsSuspended == IMG_FALSE) && - (bPersistentProcess == IMG_FALSE) ) - { - #if defined(FIX_HW_BRN_26620) && defined(SGX_FEATURE_SYSTEM_CACHE) && !defined(SGX_BYPASS_SYSTEM_CACHE) - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Poll for previous Kernel CCB CMD to be read\r\n"); - PDUMPMEMPOL(psKernelCCB->psCCBCtlMemInfo, - offsetof(PVRSRV_SGX_CCB_CTL, ui32ReadOffset), - (psKernelCCB->ui32CCBDumpWOff), - 0xFF, - PDUMP_POLL_OPERATOR_EQUAL, - ui32PDumpFlags, - MAKEUNIQUETAG(psKernelCCB->psCCBCtlMemInfo)); - #endif - - if (PDumpIsCaptureFrameKM() - || ((ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) - { - psKernelCCB->ui32CCBDumpWOff = (psKernelCCB->ui32CCBDumpWOff + 1) & 0xFF; - psDevInfo->ui32KernelCCBEventKickerDumpVal = (psDevInfo->ui32KernelCCBEventKickerDumpVal + 1) & 0xFF; - } - - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Kernel CCB write offset\r\n"); - PDUMPMEM(&psKernelCCB->ui32CCBDumpWOff, - psKernelCCB->psCCBCtlMemInfo, - offsetof(PVRSRV_SGX_CCB_CTL, ui32WriteOffset), - sizeof(IMG_UINT32), - ui32PDumpFlags, - MAKEUNIQUETAG(psKernelCCB->psCCBCtlMemInfo)); - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Kernel CCB event kicker\r\n"); - PDUMPMEM(&psDevInfo->ui32KernelCCBEventKickerDumpVal, - psDevInfo->psKernelCCBEventKickerMemInfo, - 0, - sizeof(IMG_UINT32), - ui32PDumpFlags, - MAKEUNIQUETAG(psDevInfo->psKernelCCBEventKickerMemInfo)); - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, "Kick the SGX microkernel\r\n"); - #if defined(FIX_HW_BRN_26620) && defined(SGX_FEATURE_SYSTEM_CACHE) && !defined(SGX_BYPASS_SYSTEM_CACHE) - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK2, 0), EUR_CR_EVENT_KICK2_NOW_MASK, ui32PDumpFlags); - #else - PDUMPREGWITHFLAGS(SGX_PDUMPREG_NAME, SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK, 0), EUR_CR_EVENT_KICK_NOW_MASK, ui32PDumpFlags); - #endif - } -#endif - - *psDevInfo->pui32KernelCCBEventKicker = (*psDevInfo->pui32KernelCCBEventKicker + 1) & 0xFF; - - OSWriteMemoryBarrier(); - - - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, - MKSYNC_TOKEN_KERNEL_CCB_OFFSET, *psKernelCCB->pui32WriteOffset); - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, - MKSYNC_TOKEN_CORE_CLK, psDevInfo->ui32CoreClockSpeed); - PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_MKSYNC, PVRSRV_TRACE_CLASS_NONE, - MKSYNC_TOKEN_UKERNEL_CLK, psDevInfo->ui32uKernelTimerClock); - - -#if defined(FIX_HW_BRN_26620) && defined(SGX_FEATURE_SYSTEM_CACHE) && !defined(SGX_BYPASS_SYSTEM_CACHE) - OSWriteHWReg(psDevInfo->pvRegsBaseKM, - SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK2, 0), - EUR_CR_EVENT_KICK2_NOW_MASK); -#else - OSWriteHWReg(psDevInfo->pvRegsBaseKM, - SGX_MP_CORE_SELECT(EUR_CR_EVENT_KICK, 0), - EUR_CR_EVENT_KICK_NOW_MASK); -#endif - - OSMemoryBarrier(); - -#if defined(NO_HARDWARE) - - *psKernelCCB->pui32ReadOffset = (*psKernelCCB->pui32ReadOffset + 1) & 255; -#endif - -Exit: - return eError; -} - - -PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE *psDeviceNode, - SGXMKIF_CMD_TYPE eCmdType, - SGXMKIF_COMMAND *psCommandData, - IMG_UINT32 ui32CallerID, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hDevMemContext, - IMG_BOOL bLastInScene) -{ - PVRSRV_ERROR eError; - - - PDUMPSUSPEND(); - - - eError = PVRSRVSetDevicePowerStateKM(psDeviceNode->sDevId.ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE_ON, - ui32CallerID, - IMG_TRUE); - - PDUMPRESUME(); - - if (eError == PVRSRV_OK) - { - psDeviceNode->bReProcessDeviceCommandComplete = IMG_FALSE; - } - else - { - if (eError == PVRSRV_ERROR_RETRY) - { - if (ui32CallerID == ISR_ID) - { - SYS_DATA *psSysData; - - - - - psDeviceNode->bReProcessDeviceCommandComplete = IMG_TRUE; - eError = PVRSRV_OK; - - SysAcquireData(&psSysData); - OSScheduleMISR(psSysData); - } - else - { - - - } - } - else - { - PVR_DPF((PVR_DBG_ERROR,"SGXScheduleCCBCommandKM failed to acquire lock - " - "ui32CallerID:%d eError:%u", ui32CallerID, eError)); - } - - return eError; - } - - eError = SGXScheduleCCBCommand(psDeviceNode, eCmdType, psCommandData, ui32CallerID, ui32PDumpFlags, hDevMemContext, bLastInScene); - - PVRSRVPowerUnlock(ui32CallerID); - return eError; -} - - -PVRSRV_ERROR SGXScheduleProcessQueuesKM(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - SGXMKIF_HOST_CTL *psHostCtl = psDevInfo->psKernelSGXHostCtlMemInfo->pvLinAddrKM; - IMG_UINT32 ui32PowerStatus; - SGXMKIF_COMMAND sCommand = {0}; - - ui32PowerStatus = psHostCtl->ui32PowerStatus; - if ((ui32PowerStatus & PVRSRV_USSE_EDM_POWMAN_NO_WORK) != 0) - { - - return PVRSRV_OK; - } - - eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_PROCESS_QUEUES, &sCommand, ISR_ID, 0, IMG_NULL, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXScheduleProcessQueuesKM failed to schedule CCB command: %u", eError)); - return eError; - } - - return PVRSRV_OK; -} - - -IMG_BOOL SGXIsDevicePowered(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - return PVRSRVIsDevicePowered(psDeviceNode->sDevId.ui32DeviceIndex); -} - -IMG_EXPORT -PVRSRV_ERROR SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, -#if defined (SUPPORT_SID_INTERFACE) - SGX_INTERNAL_DEVINFO_KM *psSGXInternalDevInfo) -#else - SGX_INTERNAL_DEVINFO *psSGXInternalDevInfo) -#endif -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)((PVRSRV_DEVICE_NODE *)hDevCookie)->pvDevice; - - psSGXInternalDevInfo->ui32Flags = psDevInfo->ui32Flags; - psSGXInternalDevInfo->bForcePTOff = (IMG_BOOL)psDevInfo->bForcePTOff; - - - psSGXInternalDevInfo->hHostCtlKernelMemInfoHandle = - (IMG_HANDLE)psDevInfo->psKernelSGXHostCtlMemInfo; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_VIRTADDR *psHWDataDevVAddr, - IMG_UINT32 ui32CleanupType, - IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; - PVRSRV_KERNEL_MEM_INFO *psHostCtlMemInfo = psDevInfo->psKernelSGXHostCtlMemInfo; - SGXMKIF_HOST_CTL *psHostCtl = psHostCtlMemInfo->pvLinAddrKM; - - SGXMKIF_COMMAND sCommand = {0}; - - - if (bForceCleanup != FORCE_CLEANUP) - { - sCommand.ui32Data[0] = ui32CleanupType; - sCommand.ui32Data[1] = (psHWDataDevVAddr == IMG_NULL) ? 0 : psHWDataDevVAddr->uiAddr; - PDUMPCOMMENTWITHFLAGS(0, "Request ukernel resource clean-up, Type %u, Data 0x%X", sCommand.ui32Data[0], sCommand.ui32Data[1]); - - eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CLEANUP, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command")); - PVR_DBG_BREAK; - return eError; - } - - - #if !defined(NO_HARDWARE) - if(PollForValueKM(&psHostCtl->ui32CleanupStatus, - PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, - PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, - 10 * MAX_HW_TIME_US, - 1000, - IMG_TRUE) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType)); - eError = PVRSRV_ERROR_TIMEOUT; - PVR_DBG_BREAK; - } - #endif - - #if defined(PDUMP) - - PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for clean-up request to complete"); - PDUMPMEMPOL(psHostCtlMemInfo, - offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), - PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, - PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, - PDUMP_POLL_OPERATOR_EQUAL, - 0, - MAKEUNIQUETAG(psHostCtlMemInfo)); - #endif - - if (eError != PVRSRV_OK) - { - return eError; - } - } - - psHostCtl->ui32CleanupStatus &= ~(PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE); - PDUMPMEM(IMG_NULL, psHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psHostCtlMemInfo)); - - -#if defined(SGX_FEATURE_SYSTEM_CACHE) - psDevInfo->ui32CacheControl |= (SGXMKIF_CC_INVAL_BIF_SL | SGXMKIF_CC_INVAL_DATA); -#else - psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_DATA; -#endif - return PVRSRV_OK; -} - - -typedef struct _SGX_HW_RENDER_CONTEXT_CLEANUP_ -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_DEV_VIRTADDR sHWRenderContextDevVAddr; - IMG_HANDLE hBlockAlloc; - PRESMAN_ITEM psResItem; -} SGX_HW_RENDER_CONTEXT_CLEANUP; - - -static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup = pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - - eError = SGXCleanupRequest(psCleanup->psDeviceNode, - &psCleanup->sHWRenderContextDevVAddr, - PVRSRV_CLEANUPCMD_RC, - bForceCleanup); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return eError; -} - -typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_DEV_VIRTADDR sHWTransferContextDevVAddr; - IMG_HANDLE hBlockAlloc; - PRESMAN_ITEM psResItem; -} SGX_HW_TRANSFER_CONTEXT_CLEANUP; - - -static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup = (SGX_HW_TRANSFER_CONTEXT_CLEANUP *)pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - - eError = SGXCleanupRequest(psCleanup->psDeviceNode, - &psCleanup->sHWTransferContextDevVAddr, - PVRSRV_CLEANUPCMD_TC, - bForceCleanup); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return eError; -} - -IMG_EXPORT -IMG_HANDLE SGXRegisterHWRenderContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHWRenderContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_ERROR eError; - IMG_HANDLE hBlockAlloc; - SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup; - PRESMAN_ITEM psResItem; - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), - (IMG_VOID **)&psCleanup, - &hBlockAlloc, - "SGX Hardware Render Context Cleanup"); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHWRenderContextKM: Couldn't allocate memory for SGX_HW_RENDER_CONTEXT_CLEANUP structure")); - return IMG_NULL; - } - - psCleanup->hBlockAlloc = hBlockAlloc; - psCleanup->psDeviceNode = psDeviceNode; - psCleanup->sHWRenderContextDevVAddr = *psHWRenderContextDevVAddr; - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_HW_RENDER_CONTEXT, - (IMG_VOID *)psCleanup, - 0, - &SGXCleanupHWRenderContextCallback); - - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHWRenderContextKM: ResManRegisterRes failed")); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return IMG_NULL; - } - - psCleanup->psResItem = psResItem; - - return (IMG_HANDLE)psCleanup; -} - -IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup; - - PVR_ASSERT(hHWRenderContext != IMG_NULL); - - psCleanup = (SGX_HW_RENDER_CONTEXT_CLEANUP *)hHWRenderContext; - - if (psCleanup == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXUnregisterHWRenderContextKM: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); - - return eError; -} - - -IMG_EXPORT -IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHWTransferContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_ERROR eError; - IMG_HANDLE hBlockAlloc; - SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup; - PRESMAN_ITEM psResItem; - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), - (IMG_VOID **)&psCleanup, - &hBlockAlloc, - "SGX Hardware Transfer Context Cleanup"); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHWTransferContextKM: Couldn't allocate memory for SGX_HW_TRANSFER_CONTEXT_CLEANUP structure")); - return IMG_NULL; - } - - psCleanup->hBlockAlloc = hBlockAlloc; - psCleanup->psDeviceNode = psDeviceNode; - psCleanup->sHWTransferContextDevVAddr = *psHWTransferContextDevVAddr; - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_HW_TRANSFER_CONTEXT, - psCleanup, - 0, - &SGXCleanupHWTransferContextCallback); - - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHWTransferContextKM: ResManRegisterRes failed")); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return IMG_NULL; - } - - psCleanup->psResItem = psResItem; - - return (IMG_HANDLE)psCleanup; -} - -IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup; - - PVR_ASSERT(hHWTransferContext != IMG_NULL); - - psCleanup = (SGX_HW_TRANSFER_CONTEXT_CLEANUP *)hHWTransferContext; - - if (psCleanup == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXUnregisterHWTransferContextKM: invalid parameter")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); - - return eError; -} - -#if defined(SGX_FEATURE_2D_HARDWARE) -typedef struct _SGX_HW_2D_CONTEXT_CLEANUP_ -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_DEV_VIRTADDR sHW2DContextDevVAddr; - IMG_HANDLE hBlockAlloc; - PRESMAN_ITEM psResItem; -} SGX_HW_2D_CONTEXT_CLEANUP; - -static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_2D_CONTEXT_CLEANUP *psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)pvParam; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - - eError = SGXCleanupRequest(psCleanup->psDeviceNode, - &psCleanup->sHW2DContextDevVAddr, - PVRSRV_CLEANUPCMD_2DC, - bForceCleanup); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_2D_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return eError; -} - -IMG_EXPORT -IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHW2DContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - PVRSRV_ERROR eError; - IMG_HANDLE hBlockAlloc; - SGX_HW_2D_CONTEXT_CLEANUP *psCleanup; - PRESMAN_ITEM psResItem; - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_2D_CONTEXT_CLEANUP), - (IMG_VOID **)&psCleanup, - &hBlockAlloc, - "SGX Hardware 2D Context Cleanup"); - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHW2DContextKM: Couldn't allocate memory for SGX_HW_2D_CONTEXT_CLEANUP structure")); - return IMG_NULL; - } - - psCleanup->hBlockAlloc = hBlockAlloc; - psCleanup->psDeviceNode = psDeviceNode; - psCleanup->sHW2DContextDevVAddr = *psHW2DContextDevVAddr; - - psResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_HW_2D_CONTEXT, - psCleanup, - 0, - &SGXCleanupHW2DContextCallback); - - if (psResItem == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "SGXRegisterHW2DContextKM: ResManRegisterRes failed")); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - sizeof(SGX_HW_2D_CONTEXT_CLEANUP), - psCleanup, - psCleanup->hBlockAlloc); - - - return IMG_NULL; - } - - psCleanup->psResItem = psResItem; - - return (IMG_HANDLE)psCleanup; -} - -IMG_EXPORT -PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup) -{ - PVRSRV_ERROR eError; - SGX_HW_2D_CONTEXT_CLEANUP *psCleanup; - - PVR_ASSERT(hHW2DContext != IMG_NULL); - - if (hHW2DContext == IMG_NULL) - { - return (PVRSRV_ERROR_INVALID_PARAMS); - } - - psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)hHW2DContext; - - eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); - - return eError; -} -#endif - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SGX2DQuerySyncOpsComplete) -#endif -static INLINE -IMG_BOOL SGX2DQuerySyncOpsComplete(PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, - IMG_UINT32 ui32ReadOpsPending, - IMG_UINT32 ui32WriteOpsPending) -{ - PVRSRV_SYNC_DATA *psSyncData = psSyncInfo->psSyncData; - - return (IMG_BOOL)( - (psSyncData->ui32ReadOpsComplete >= ui32ReadOpsPending) && - (psSyncData->ui32WriteOpsComplete >= ui32WriteOpsPending) - ); -} - -IMG_EXPORT -PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo, - IMG_BOOL bWaitForComplete) -{ - IMG_UINT32 ui32ReadOpsPending, ui32WriteOpsPending; - - PVR_UNREFERENCED_PARAMETER(psDevInfo); - - PVR_DPF((PVR_DBG_CALLTRACE, "SGX2DQueryBlitsCompleteKM: Start")); - - ui32ReadOpsPending = psSyncInfo->psSyncData->ui32ReadOpsPending; - ui32WriteOpsPending = psSyncInfo->psSyncData->ui32WriteOpsPending; - - if(SGX2DQuerySyncOpsComplete(psSyncInfo, ui32ReadOpsPending, ui32WriteOpsPending)) - { - - PVR_DPF((PVR_DBG_CALLTRACE, "SGX2DQueryBlitsCompleteKM: No wait. Blits complete.")); - return PVRSRV_OK; - } - - - if (!bWaitForComplete) - { - - PVR_DPF((PVR_DBG_CALLTRACE, "SGX2DQueryBlitsCompleteKM: No wait. Ops pending.")); - return PVRSRV_ERROR_CMD_NOT_PROCESSED; - } - - - PVR_DPF((PVR_DBG_MESSAGE, "SGX2DQueryBlitsCompleteKM: Ops pending. Start polling.")); - - LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) - { - OSSleepms(1); - - if(SGX2DQuerySyncOpsComplete(psSyncInfo, ui32ReadOpsPending, ui32WriteOpsPending)) - { - - PVR_DPF((PVR_DBG_CALLTRACE, "SGX2DQueryBlitsCompleteKM: Wait over. Blits complete.")); - return PVRSRV_OK; - } - - OSSleepms(1); - } END_LOOP_UNTIL_TIMEOUT(); - - - PVR_DPF((PVR_DBG_ERROR,"SGX2DQueryBlitsCompleteKM: Timed out. Ops pending.")); - -#if defined(DEBUG) - { - PVRSRV_SYNC_DATA *psSyncData = psSyncInfo->psSyncData; - - PVR_TRACE(("SGX2DQueryBlitsCompleteKM: Syncinfo: 0x%x, Syncdata: 0x%x", - (IMG_UINTPTR_T)psSyncInfo, (IMG_UINTPTR_T)psSyncData)); - - PVR_TRACE(("SGX2DQueryBlitsCompleteKM: Read ops complete: %d, Read ops pending: %d", psSyncData->ui32ReadOpsComplete, psSyncData->ui32ReadOpsPending)); - PVR_TRACE(("SGX2DQueryBlitsCompleteKM: Write ops complete: %d, Write ops pending: %d", psSyncData->ui32WriteOpsComplete, psSyncData->ui32WriteOpsPending)); - - } -#endif - - return PVRSRV_ERROR_TIMEOUT; -} - - -IMG_EXPORT -PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr, - IMG_BOOL bForceCleanup) -{ - PVR_ASSERT(sHWRTDataSetDevVAddr.uiAddr != IMG_NULL); - - return SGXCleanupRequest(psDeviceNode, - &sHWRTDataSetDevVAddr, - PVRSRV_CLEANUPCMD_RT, - bForceCleanup); -} - - -IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32TimeWraps, - IMG_UINT32 ui32Time) -{ -#if defined(EUR_CR_TIMER) - PVR_UNREFERENCED_PARAMETER(psDevInfo); - PVR_UNREFERENCED_PARAMETER(ui32TimeWraps); - return ui32Time; -#else - IMG_UINT64 ui64Clocks; - IMG_UINT32 ui32Clocksx16; - - ui64Clocks = ((IMG_UINT64)ui32TimeWraps * psDevInfo->ui32uKernelTimerClock) + - (psDevInfo->ui32uKernelTimerClock - (ui32Time & EUR_CR_EVENT_TIMER_VALUE_MASK)); - ui32Clocksx16 = (IMG_UINT32)(ui64Clocks / 16); - - return ui32Clocksx16; -#endif -} - - - -IMG_EXPORT -PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, - IMG_UINT32 *pui32SGXCoreID) -{ - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; - SGX_MISC_INFO sMiscInfo; - PVRSRV_ERROR eError; - - sMiscInfo.eRequest = SGX_MISC_INFO_REQUEST_SGXREV; - eError = SGXGetMiscInfoKM(psDevInfo, &sMiscInfo, psDeviceNode, NULL); - - *pui32SGXCoreRev = sMiscInfo.uData.sSGXFeatures.ui32CoreRev; - *pui32SGXCoreID = sMiscInfo.uData.sSGXFeatures.ui32CoreID; - return eError; -} - - -PVRSRV_ERROR SGXContextSuspend(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_VIRTADDR *psHWContextDevVAddr, - IMG_BOOL bResume) -{ - PVRSRV_ERROR eError; - SGXMKIF_COMMAND sCommand = {0}; - - sCommand.ui32Data[0] = psHWContextDevVAddr->uiAddr; - sCommand.ui32Data[1] = bResume ? PVRSRV_CTXSUSPCMD_RESUME : PVRSRV_CTXSUSPCMD_SUSPEND; - - eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CONTEXTSUSPEND, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SGXContextSuspend: Failed to submit context suspend command")); - return eError; - } - - return eError; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.h b/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.h deleted file mode 100644 index bc60fdd..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/devices/sgx/sgxutils.h +++ /dev/null @@ -1,114 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "perproc.h" -#include "sgxinfokm.h" - - -#define CCB_OFFSET_IS_VALID(type, psCCBMemInfo, psCCBKick, offset) \ - ((sizeof(type) <= (psCCBMemInfo)->uAllocSize) && \ - ((psCCBKick)->offset <= (psCCBMemInfo)->uAllocSize - sizeof(type))) - -#define CCB_DATA_FROM_OFFSET(type, psCCBMemInfo, psCCBKick, offset) \ - ((type *)(((IMG_CHAR *)(psCCBMemInfo)->pvLinAddrKM) + \ - (psCCBKick)->offset)) - - -IMG_IMPORT -IMG_VOID SGXTestActivePowerEvent(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_UINT32 ui32CallerID); - -IMG_IMPORT -PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, - SGXMKIF_CMD_TYPE eCommandType, - SGXMKIF_COMMAND *psCommandData, - IMG_UINT32 ui32CallerID, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hDevMemContext, - IMG_BOOL bLastInScene); -IMG_IMPORT -PVRSRV_ERROR SGXScheduleCCBCommandKM(PVRSRV_DEVICE_NODE *psDeviceNode, - SGXMKIF_CMD_TYPE eCommandType, - SGXMKIF_COMMAND *psCommandData, - IMG_UINT32 ui32CallerID, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hDevMemContext, - IMG_BOOL bLastInScene); - -IMG_IMPORT -PVRSRV_ERROR SGXScheduleProcessQueuesKM(PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_IMPORT -IMG_BOOL SGXIsDevicePowered(PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_IMPORT -IMG_HANDLE SGXRegisterHWRenderContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHWRenderContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc); - -IMG_IMPORT -IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHWTransferContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc); - -IMG_IMPORT -PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psSGXDevInfo, - IMG_DEV_VIRTADDR psHWRTDataSetDevVAddr, - IMG_BOOL bForceCleanup); - -IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup); - -IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup); - -#if defined(SGX_FEATURE_2D_HARDWARE) -IMG_IMPORT -IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, - IMG_DEV_VIRTADDR *psHW2DContextDevVAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc); - -IMG_IMPORT -PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup); -#endif - -IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, - IMG_UINT32 ui32TimeWraps, - IMG_UINT32 ui32Time); - -PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_VIRTADDR *psHWDataDevVAddr, - IMG_UINT32 ui32CleanupType, - IMG_BOOL bForceCleanup); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, - IMG_UINT32 *pui32SGXCoreID); - -PVRSRV_ERROR SGXContextSuspend(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_VIRTADDR *psHWContextDevVAddr, - IMG_BOOL bResume); - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/.gitignore b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/.gitignore deleted file mode 100644 index 2f89523..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -bin_pc_i686* -tmp_pc_i686* -host_pc_i686* -*.o -*.o.cmd diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_data.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_data.h deleted file mode 100644 index 7716529..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_data.h +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _ENV_DATA_ -#define _ENV_DATA_ - -#include -#include - -#if defined(PVR_LINUX_MISR_USING_WORKQUEUE) || defined(PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE) -#include -#endif - -#define PVRSRV_MAX_BRIDGE_IN_SIZE 0x1000 -#define PVRSRV_MAX_BRIDGE_OUT_SIZE 0x1000 - -typedef struct _PVR_PCI_DEV_TAG -{ - struct pci_dev *psPCIDev; - HOST_PCI_INIT_FLAGS ePCIFlags; - IMG_BOOL abPCIResourceInUse[DEVICE_COUNT_RESOURCE]; -} PVR_PCI_DEV; - -typedef struct _ENV_DATA_TAG -{ - IMG_VOID *pvBridgeData; - struct pm_dev *psPowerDevice; - IMG_BOOL bLISRInstalled; - IMG_BOOL bMISRInstalled; - IMG_UINT32 ui32IRQ; - IMG_VOID *pvISRCookie; -#if defined(PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE) - struct workqueue_struct *psWorkQueue; -#endif -#if defined(PVR_LINUX_MISR_USING_WORKQUEUE) || defined(PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE) - struct work_struct sMISRWork; - IMG_VOID *pvMISRData; -#else - struct tasklet_struct sMISRTasklet; -#endif -} ENV_DATA; - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_perproc.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_perproc.h deleted file mode 100644 index dabf1e3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/env_perproc.h +++ /dev/null @@ -1,56 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __ENV_PERPROC_H__ -#define __ENV_PERPROC_H__ - -#include -#include - -#include "services.h" -#include "handle.h" - -typedef struct _PVRSRV_ENV_PER_PROCESS_DATA_ -{ - IMG_HANDLE hBlockAlloc; - struct proc_dir_entry *psProcDir; -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - struct list_head sDRMAuthListHead; -#endif -} PVRSRV_ENV_PER_PROCESS_DATA; - -IMG_VOID RemovePerProcessProcDir(PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc); - -PVRSRV_ERROR LinuxMMapPerProcessConnect(PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc); - -IMG_VOID LinuxMMapPerProcessDisconnect(PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc); - -PVRSRV_ERROR LinuxMMapPerProcessHandleOptions(PVRSRV_HANDLE_BASE *psHandleBase); - -IMG_HANDLE LinuxTerminatingProcessPrivateData(IMG_VOID); - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.c deleted file mode 100644 index 7e160c3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.c +++ /dev/null @@ -1,293 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) -#include -#endif -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "img_types.h" -#include "services_headers.h" -#include "mm.h" -#include "pvrmmap.h" -#include "mmap.h" -#include "env_data.h" -#include "proc.h" -#include "mutex.h" -#include "lock.h" -#include "event.h" - -typedef struct PVRSRV_LINUX_EVENT_OBJECT_LIST_TAG -{ - rwlock_t sLock; - struct list_head sList; - -} PVRSRV_LINUX_EVENT_OBJECT_LIST; - - -typedef struct PVRSRV_LINUX_EVENT_OBJECT_TAG -{ - atomic_t sTimeStamp; - IMG_UINT32 ui32TimeStampPrevious; -#if defined(DEBUG) - IMG_UINT ui32Stats; -#endif - wait_queue_head_t sWait; - struct list_head sList; - IMG_HANDLE hResItem; - PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList; -} PVRSRV_LINUX_EVENT_OBJECT; - -PVRSRV_ERROR LinuxEventObjectListCreate(IMG_HANDLE *phEventObjectList) -{ - PVRSRV_LINUX_EVENT_OBJECT_LIST *psEventObjectList; - - if(OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_LINUX_EVENT_OBJECT_LIST), - (IMG_VOID **)&psEventObjectList, IMG_NULL, - "Linux Event Object List") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectCreate: failed to allocate memory for event list")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - INIT_LIST_HEAD(&psEventObjectList->sList); - - rwlock_init(&psEventObjectList->sLock); - - *phEventObjectList = (IMG_HANDLE *) psEventObjectList; - - return PVRSRV_OK; -} - -PVRSRV_ERROR LinuxEventObjectListDestroy(IMG_HANDLE hEventObjectList) -{ - - PVRSRV_LINUX_EVENT_OBJECT_LIST *psEventObjectList = (PVRSRV_LINUX_EVENT_OBJECT_LIST *) hEventObjectList ; - - if(psEventObjectList) - { - IMG_BOOL bListEmpty; - - read_lock(&psEventObjectList->sLock); - bListEmpty = list_empty(&psEventObjectList->sList); - read_unlock(&psEventObjectList->sLock); - - if (!bListEmpty) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectListDestroy: Event List is not empty")); - return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; - } - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_LINUX_EVENT_OBJECT_LIST), psEventObjectList, IMG_NULL); - - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hOSEventObject) -{ - if(hOSEventObjectList) - { - if(hOSEventObject) - { - PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = (PVRSRV_LINUX_EVENT_OBJECT *)hOSEventObject; -#if defined(DEBUG) - PVR_DPF((PVR_DBG_MESSAGE, "LinuxEventObjectListDelete: Event object waits: %u", psLinuxEventObject->ui32Stats)); -#endif - if(ResManFreeResByPtr(psLinuxEventObject->hResItem, CLEANUP_WITH_POLL) != PVRSRV_OK) - { - return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; - } - - return PVRSRV_OK; - } - } - return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; - -} - -static PVRSRV_ERROR LinuxEventObjectDeleteCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup) -{ - PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = pvParam; - PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = psLinuxEventObject->psLinuxEventObjectList; - unsigned long ulLockFlags; - - PVR_UNREFERENCED_PARAMETER(ui32Param); - PVR_UNREFERENCED_PARAMETER(bForceCleanup); - - write_lock_irqsave(&psLinuxEventObjectList->sLock, ulLockFlags); - list_del(&psLinuxEventObject->sList); - write_unlock_irqrestore(&psLinuxEventObjectList->sLock, ulLockFlags); - -#if defined(DEBUG) - PVR_DPF((PVR_DBG_MESSAGE, "LinuxEventObjectDeleteCallback: Event object waits: %u", psLinuxEventObject->ui32Stats)); -#endif - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_LINUX_EVENT_OBJECT), psLinuxEventObject, IMG_NULL); - - - return PVRSRV_OK; -} -PVRSRV_ERROR LinuxEventObjectAdd(IMG_HANDLE hOSEventObjectList, IMG_HANDLE *phOSEventObject) - { - PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject; - PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = (PVRSRV_LINUX_EVENT_OBJECT_LIST*)hOSEventObjectList; - IMG_UINT32 ui32PID = OSGetCurrentProcessIDKM(); - PVRSRV_PER_PROCESS_DATA *psPerProc; - unsigned long ulLockFlags; - - psPerProc = PVRSRVPerProcessData(ui32PID); - if (psPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectAdd: Couldn't find per-process data")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - - if(OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_LINUX_EVENT_OBJECT), - (IMG_VOID **)&psLinuxEventObject, IMG_NULL, - "Linux Event Object") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectAdd: failed to allocate memory ")); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - INIT_LIST_HEAD(&psLinuxEventObject->sList); - - atomic_set(&psLinuxEventObject->sTimeStamp, 0); - psLinuxEventObject->ui32TimeStampPrevious = 0; - -#if defined(DEBUG) - psLinuxEventObject->ui32Stats = 0; -#endif - init_waitqueue_head(&psLinuxEventObject->sWait); - - psLinuxEventObject->psLinuxEventObjectList = psLinuxEventObjectList; - - psLinuxEventObject->hResItem = ResManRegisterRes(psPerProc->hResManContext, - RESMAN_TYPE_EVENT_OBJECT, - psLinuxEventObject, - 0, - &LinuxEventObjectDeleteCallback); - - write_lock_irqsave(&psLinuxEventObjectList->sLock, ulLockFlags); - list_add(&psLinuxEventObject->sList, &psLinuxEventObjectList->sList); - write_unlock_irqrestore(&psLinuxEventObjectList->sLock, ulLockFlags); - - *phOSEventObject = psLinuxEventObject; - - return PVRSRV_OK; -} - -PVRSRV_ERROR LinuxEventObjectSignal(IMG_HANDLE hOSEventObjectList) -{ - PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject; - PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = (PVRSRV_LINUX_EVENT_OBJECT_LIST*)hOSEventObjectList; - struct list_head *psListEntry, *psList; - - psList = &psLinuxEventObjectList->sList; - - - read_lock(&psLinuxEventObjectList->sLock); - list_for_each(psListEntry, psList) - { - - psLinuxEventObject = (PVRSRV_LINUX_EVENT_OBJECT *)list_entry(psListEntry, PVRSRV_LINUX_EVENT_OBJECT, sList); - - atomic_inc(&psLinuxEventObject->sTimeStamp); - wake_up_interruptible(&psLinuxEventObject->sWait); - } - read_unlock(&psLinuxEventObjectList->sLock); - - return PVRSRV_OK; - -} - -PVRSRV_ERROR LinuxEventObjectWait(IMG_HANDLE hOSEventObject, IMG_UINT32 ui32MSTimeout) -{ - IMG_UINT32 ui32TimeStamp; - DEFINE_WAIT(sWait); - - PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = (PVRSRV_LINUX_EVENT_OBJECT *) hOSEventObject; - - IMG_UINT32 ui32TimeOutJiffies = msecs_to_jiffies(ui32MSTimeout); - - do - { - prepare_to_wait(&psLinuxEventObject->sWait, &sWait, TASK_INTERRUPTIBLE); - ui32TimeStamp = (IMG_UINT32)atomic_read(&psLinuxEventObject->sTimeStamp); - - if(psLinuxEventObject->ui32TimeStampPrevious != ui32TimeStamp) - { - break; - } - - LinuxUnLockMutex(&gPVRSRVLock); - - ui32TimeOutJiffies = (IMG_UINT32)schedule_timeout((IMG_INT32)ui32TimeOutJiffies); - - LinuxLockMutex(&gPVRSRVLock); -#if defined(DEBUG) - psLinuxEventObject->ui32Stats++; -#endif - - - } while (ui32TimeOutJiffies); - - finish_wait(&psLinuxEventObject->sWait, &sWait); - - psLinuxEventObject->ui32TimeStampPrevious = ui32TimeStamp; - - return ui32TimeOutJiffies ? PVRSRV_OK : PVRSRV_ERROR_TIMEOUT; - -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.h deleted file mode 100644 index 3035283..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/event.h +++ /dev/null @@ -1,32 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -PVRSRV_ERROR LinuxEventObjectListCreate(IMG_HANDLE *phEventObjectList); -PVRSRV_ERROR LinuxEventObjectListDestroy(IMG_HANDLE hEventObjectList); -PVRSRV_ERROR LinuxEventObjectAdd(IMG_HANDLE hOSEventObjectList, IMG_HANDLE *phOSEventObject); -PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hOSEventObject); -PVRSRV_ERROR LinuxEventObjectSignal(IMG_HANDLE hOSEventObjectList); -PVRSRV_ERROR LinuxEventObjectWait(IMG_HANDLE hOSEventObject, IMG_UINT32 ui32MSTimeout); diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/linkage.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/linkage.h deleted file mode 100644 index e64012c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/linkage.h +++ /dev/null @@ -1,52 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __LINKAGE_H__ -#define __LINKAGE_H__ - -#if !defined(SUPPORT_DRI_DRM) -long PVRSRV_BridgeDispatchKM(struct file *file, unsigned int cmd, unsigned long arg); -#endif - -IMG_VOID PVRDPFInit(IMG_VOID); -PVRSRV_ERROR PVROSFuncInit(IMG_VOID); -IMG_VOID PVROSFuncDeInit(IMG_VOID); - -#ifdef DEBUG - -IMG_INT PVRDebugProcSetLevel(struct file *file, const IMG_CHAR *buffer, IMG_UINT32 count, IMG_VOID *data); -void ProcSeqShowDebugLevel(struct seq_file *sfile,void* el); - -#ifdef PVR_MANUAL_POWER_CONTROL -IMG_INT PVRProcSetPowerLevel(struct file *file, const IMG_CHAR *buffer, IMG_UINT32 count, IMG_VOID *data); - -void ProcSeqShowPowerLevel(struct seq_file *sfile,void* el); - -#endif - -#endif - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/lock.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/lock.h deleted file mode 100644 index a0854c3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/lock.h +++ /dev/null @@ -1,32 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __LOCK_H__ -#define __LOCK_H__ - -extern PVRSRV_LINUX_MUTEX gPVRSRVLock; - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.c deleted file mode 100644 index a96d28c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.c +++ /dev/null @@ -1,2027 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) -#include -#endif -#include -#include -#include - -#include "img_defs.h" -#include "services.h" -#include "servicesint.h" -#include "syscommon.h" -#include "mutils.h" -#include "mm.h" -#include "pvrmmap.h" -#include "mmap.h" -#include "osfunc.h" -#include "pvr_debug.h" -#include "proc.h" -#include "mutex.h" -#include "lock.h" - -#if defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - #include "lists.h" -#endif - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -typedef enum { - DEBUG_MEM_ALLOC_TYPE_KMALLOC, - DEBUG_MEM_ALLOC_TYPE_VMALLOC, - DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES, - DEBUG_MEM_ALLOC_TYPE_IOREMAP, - DEBUG_MEM_ALLOC_TYPE_IO, - DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE, - DEBUG_MEM_ALLOC_TYPE_COUNT -}DEBUG_MEM_ALLOC_TYPE; - -typedef struct _DEBUG_MEM_ALLOC_REC -{ - DEBUG_MEM_ALLOC_TYPE eAllocType; - IMG_VOID *pvKey; - IMG_VOID *pvCpuVAddr; - IMG_UINT32 ulCpuPAddr; - IMG_VOID *pvPrivateData; - IMG_UINT32 ui32Bytes; - pid_t pid; - IMG_CHAR *pszFileName; - IMG_UINT32 ui32Line; - - struct _DEBUG_MEM_ALLOC_REC *psNext; - struct _DEBUG_MEM_ALLOC_REC **ppsThis; -}DEBUG_MEM_ALLOC_REC; - -static IMPLEMENT_LIST_ANY_VA_2(DEBUG_MEM_ALLOC_REC, IMG_BOOL, IMG_FALSE) -static IMPLEMENT_LIST_ANY_VA(DEBUG_MEM_ALLOC_REC) -static IMPLEMENT_LIST_FOR_EACH(DEBUG_MEM_ALLOC_REC) -static IMPLEMENT_LIST_INSERT(DEBUG_MEM_ALLOC_REC) -static IMPLEMENT_LIST_REMOVE(DEBUG_MEM_ALLOC_REC) - - -static DEBUG_MEM_ALLOC_REC *g_MemoryRecords; - -static IMG_UINT32 g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_COUNT]; -static IMG_UINT32 g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_COUNT]; - -static IMG_UINT32 g_SysRAMWaterMark; -static IMG_UINT32 g_SysRAMHighWaterMark; - -static IMG_UINT32 g_IOMemWaterMark; -static IMG_UINT32 g_IOMemHighWaterMark; - -static IMG_VOID DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE eAllocType, - IMG_VOID *pvKey, - IMG_VOID *pvCpuVAddr, - IMG_UINT32 ulCpuPAddr, - IMG_VOID *pvPrivateData, - IMG_UINT32 ui32Bytes, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line); - -static IMG_VOID DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE eAllocType, IMG_VOID *pvKey, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - -static IMG_CHAR *DebugMemAllocRecordTypeToString(DEBUG_MEM_ALLOC_TYPE eAllocType); - - -static struct proc_dir_entry *g_SeqFileMemoryRecords =0; -static void* ProcSeqNextMemoryRecords(struct seq_file *sfile,void* el,loff_t off); -static void ProcSeqShowMemoryRecords(struct seq_file *sfile,void* el); -static void* ProcSeqOff2ElementMemoryRecords(struct seq_file * sfile, loff_t off); - -#endif - - -#if defined(DEBUG_LINUX_MEM_AREAS) -typedef struct _DEBUG_LINUX_MEM_AREA_REC -{ - LinuxMemArea *psLinuxMemArea; - IMG_UINT32 ui32Flags; - pid_t pid; - - struct _DEBUG_LINUX_MEM_AREA_REC *psNext; - struct _DEBUG_LINUX_MEM_AREA_REC **ppsThis; -}DEBUG_LINUX_MEM_AREA_REC; - - -static IMPLEMENT_LIST_ANY_VA(DEBUG_LINUX_MEM_AREA_REC) -static IMPLEMENT_LIST_FOR_EACH(DEBUG_LINUX_MEM_AREA_REC) -static IMPLEMENT_LIST_INSERT(DEBUG_LINUX_MEM_AREA_REC) -static IMPLEMENT_LIST_REMOVE(DEBUG_LINUX_MEM_AREA_REC) - - - - -static DEBUG_LINUX_MEM_AREA_REC *g_LinuxMemAreaRecords; -static IMG_UINT32 g_LinuxMemAreaCount; -static IMG_UINT32 g_LinuxMemAreaWaterMark; -static IMG_UINT32 g_LinuxMemAreaHighWaterMark; - - -static struct proc_dir_entry *g_SeqFileMemArea=0; - -static void* ProcSeqNextMemArea(struct seq_file *sfile,void* el,loff_t off); -static void ProcSeqShowMemArea(struct seq_file *sfile,void* el); -static void* ProcSeqOff2ElementMemArea(struct seq_file *sfile, loff_t off); - -#endif - -#if defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -static PVRSRV_LINUX_MUTEX g_sDebugMutex; -#endif - -#if (defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MEMORY_ALLOCATIONS)) -static void ProcSeqStartstopDebugMutex(struct seq_file *sfile,IMG_BOOL start); -#endif - -static LinuxKMemCache *psLinuxMemAreaCache; - - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) -static IMG_VOID ReservePages(IMG_VOID *pvAddress, IMG_UINT32 ui32Length); -static IMG_VOID UnreservePages(IMG_VOID *pvAddress, IMG_UINT32 ui32Length); -#endif - -static LinuxMemArea *LinuxMemAreaStructAlloc(IMG_VOID); -static IMG_VOID LinuxMemAreaStructFree(LinuxMemArea *psLinuxMemArea); -#if defined(DEBUG_LINUX_MEM_AREAS) -static IMG_VOID DebugLinuxMemAreaRecordAdd(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32Flags); -static DEBUG_LINUX_MEM_AREA_REC *DebugLinuxMemAreaRecordFind(LinuxMemArea *psLinuxMemArea); -static IMG_VOID DebugLinuxMemAreaRecordRemove(LinuxMemArea *psLinuxMemArea); -#endif - -PVRSRV_ERROR -LinuxMMInit(IMG_VOID) -{ -#if defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - LinuxInitMutex(&g_sDebugMutex); -#endif - -#if defined(DEBUG_LINUX_MEM_AREAS) - { - g_SeqFileMemArea = CreateProcReadEntrySeq( - "mem_areas", - NULL, - ProcSeqNextMemArea, - ProcSeqShowMemArea, - ProcSeqOff2ElementMemArea, - ProcSeqStartstopDebugMutex - ); - if(!g_SeqFileMemArea) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } -#endif - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - { - g_SeqFileMemoryRecords =CreateProcReadEntrySeq( - "meminfo", - NULL, - ProcSeqNextMemoryRecords, - ProcSeqShowMemoryRecords, - ProcSeqOff2ElementMemoryRecords, - ProcSeqStartstopDebugMutex - ); - if(!g_SeqFileMemoryRecords) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } -#endif - - psLinuxMemAreaCache = KMemCacheCreateWrapper("img-mm", sizeof(LinuxMemArea), 0, 0); - if(!psLinuxMemAreaCache) - { - PVR_DPF((PVR_DBG_ERROR,"%s: failed to allocate kmem_cache", __FUNCTION__)); - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - return PVRSRV_OK; -} - -#if defined(DEBUG_LINUX_MEM_AREAS) -static IMG_VOID LinuxMMCleanup_MemAreas_ForEachCb(DEBUG_LINUX_MEM_AREA_REC *psCurrentRecord) -{ - LinuxMemArea *psLinuxMemArea; - - psLinuxMemArea = psCurrentRecord->psLinuxMemArea; - PVR_DPF((PVR_DBG_ERROR, "%s: BUG!: Cleaning up Linux memory area (%p), type=%s, size=%d bytes", - __FUNCTION__, - psCurrentRecord->psLinuxMemArea, - LinuxMemAreaTypeToString(psCurrentRecord->psLinuxMemArea->eAreaType), - psCurrentRecord->psLinuxMemArea->ui32ByteSize)); - - LinuxMemAreaDeepFree(psLinuxMemArea); -} -#endif - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -static IMG_VOID LinuxMMCleanup_MemRecords_ForEachVa(DEBUG_MEM_ALLOC_REC *psCurrentRecord) - -{ - - PVR_DPF((PVR_DBG_ERROR, "%s: BUG!: Cleaning up memory: " - "type=%s " - "CpuVAddr=%p " - "CpuPAddr=0x%08x, " - "allocated @ file=%s,line=%d", - __FUNCTION__, - DebugMemAllocRecordTypeToString(psCurrentRecord->eAllocType), - psCurrentRecord->pvCpuVAddr, - psCurrentRecord->ulCpuPAddr, - psCurrentRecord->pszFileName, - psCurrentRecord->ui32Line)); - switch(psCurrentRecord->eAllocType) - { - case DEBUG_MEM_ALLOC_TYPE_KMALLOC: - KFreeWrapper(psCurrentRecord->pvCpuVAddr); - break; - case DEBUG_MEM_ALLOC_TYPE_IOREMAP: - IOUnmapWrapper(psCurrentRecord->pvCpuVAddr); - break; - case DEBUG_MEM_ALLOC_TYPE_IO: - - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_IO, psCurrentRecord->pvKey, __FILE__, __LINE__); - break; - case DEBUG_MEM_ALLOC_TYPE_VMALLOC: - VFreeWrapper(psCurrentRecord->pvCpuVAddr); - break; - case DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES: - - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES, psCurrentRecord->pvKey, __FILE__, __LINE__); - break; - case DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE: - KMemCacheFreeWrapper(psCurrentRecord->pvPrivateData, psCurrentRecord->pvCpuVAddr); - break; - default: - PVR_ASSERT(0); - } -} -#endif - - -IMG_VOID -LinuxMMCleanup(IMG_VOID) -{ - -#if defined(DEBUG_LINUX_MEM_AREAS) - { - if(g_LinuxMemAreaCount) - { - PVR_DPF((PVR_DBG_ERROR, "%s: BUG!: There are %d LinuxMemArea allocation unfreed (%d bytes)", - __FUNCTION__, g_LinuxMemAreaCount, g_LinuxMemAreaWaterMark)); - } - - List_DEBUG_LINUX_MEM_AREA_REC_ForEach(g_LinuxMemAreaRecords, - LinuxMMCleanup_MemAreas_ForEachCb); - - RemoveProcEntrySeq( g_SeqFileMemArea ); - } -#endif - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - { - - - List_DEBUG_MEM_ALLOC_REC_ForEach(g_MemoryRecords, - LinuxMMCleanup_MemRecords_ForEachVa); - - RemoveProcEntrySeq( g_SeqFileMemoryRecords ); - } -#endif - - if(psLinuxMemAreaCache) - { - KMemCacheDestroyWrapper(psLinuxMemAreaCache); - psLinuxMemAreaCache=NULL; - } -} - - -IMG_VOID * -_KMallocWrapper(IMG_UINT32 ui32ByteSize, gfp_t uFlags, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ - IMG_VOID *pvRet; - pvRet = kmalloc(ui32ByteSize, uFlags); -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - if(pvRet) - { - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_KMALLOC, - pvRet, - pvRet, - 0, - NULL, - ui32ByteSize, - pszFileName, - ui32Line - ); - } -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - return pvRet; -} - - -IMG_VOID -_KFreeWrapper(IMG_VOID *pvCpuVAddr, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_KMALLOC, pvCpuVAddr, pszFileName, ui32Line); -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - kfree(pvCpuVAddr); -} - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -static IMG_VOID -DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE eAllocType, - IMG_VOID *pvKey, - IMG_VOID *pvCpuVAddr, - IMG_UINT32 ulCpuPAddr, - IMG_VOID *pvPrivateData, - IMG_UINT32 ui32Bytes, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line) -{ - DEBUG_MEM_ALLOC_REC *psRecord; - - - LinuxLockMutex(&g_sDebugMutex); - psRecord = kzalloc(sizeof(DEBUG_MEM_ALLOC_REC), GFP_KERNEL); - if (psRecord == NULL) { - /* If it can't allocate memory, it means that we can't - * record the usage of memory. So skip it as - * it is harmless. - */ - LinuxUnLockMutex(&g_sDebugMutex); - PVR_DPF((PVR_DBG_ERROR, - "%s: failed to allocate linux memory record.", - __func__)); - return; - } - - psRecord->eAllocType = eAllocType; - psRecord->pvKey = pvKey; - psRecord->pvCpuVAddr = pvCpuVAddr; - psRecord->ulCpuPAddr = ulCpuPAddr; - psRecord->pvPrivateData = pvPrivateData; - psRecord->pid = OSGetCurrentProcessIDKM(); - psRecord->ui32Bytes = ui32Bytes; - psRecord->pszFileName = pszFileName; - psRecord->ui32Line = ui32Line; - - List_DEBUG_MEM_ALLOC_REC_Insert(&g_MemoryRecords, psRecord); - - g_WaterMarkData[eAllocType] += ui32Bytes; - if(g_WaterMarkData[eAllocType] > g_HighWaterMarkData[eAllocType]) - { - g_HighWaterMarkData[eAllocType] = g_WaterMarkData[eAllocType]; - } - - if(eAllocType == DEBUG_MEM_ALLOC_TYPE_KMALLOC - || eAllocType == DEBUG_MEM_ALLOC_TYPE_VMALLOC - || eAllocType == DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES - || eAllocType == DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE) - { - g_SysRAMWaterMark += ui32Bytes; - if(g_SysRAMWaterMark > g_SysRAMHighWaterMark) - { - g_SysRAMHighWaterMark = g_SysRAMWaterMark; - } - } - else if(eAllocType == DEBUG_MEM_ALLOC_TYPE_IOREMAP - || eAllocType == DEBUG_MEM_ALLOC_TYPE_IO) - { - g_IOMemWaterMark += ui32Bytes; - if(g_IOMemWaterMark > g_IOMemHighWaterMark) - { - g_IOMemHighWaterMark = g_IOMemWaterMark; - } - } - - LinuxUnLockMutex(&g_sDebugMutex); -} - - -static IMG_BOOL DebugMemAllocRecordRemove_AnyVaCb(DEBUG_MEM_ALLOC_REC *psCurrentRecord, va_list va) -{ - DEBUG_MEM_ALLOC_TYPE eAllocType; - IMG_VOID *pvKey; - - eAllocType = va_arg(va, DEBUG_MEM_ALLOC_TYPE); - pvKey = va_arg(va, IMG_VOID*); - - if(psCurrentRecord->eAllocType == eAllocType - && psCurrentRecord->pvKey == pvKey) - { - eAllocType = psCurrentRecord->eAllocType; - g_WaterMarkData[eAllocType] -= psCurrentRecord->ui32Bytes; - - if(eAllocType == DEBUG_MEM_ALLOC_TYPE_KMALLOC - || eAllocType == DEBUG_MEM_ALLOC_TYPE_VMALLOC - || eAllocType == DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES - || eAllocType == DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE) - { - g_SysRAMWaterMark -= psCurrentRecord->ui32Bytes; - } - else if(eAllocType == DEBUG_MEM_ALLOC_TYPE_IOREMAP - || eAllocType == DEBUG_MEM_ALLOC_TYPE_IO) - { - g_IOMemWaterMark -= psCurrentRecord->ui32Bytes; - } - - List_DEBUG_MEM_ALLOC_REC_Remove(psCurrentRecord); - kfree(psCurrentRecord); - - return IMG_TRUE; - } - else - { - return IMG_FALSE; - } -} - - -static IMG_VOID -DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE eAllocType, IMG_VOID *pvKey, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ - LinuxLockMutex(&g_sDebugMutex); - - - if(!List_DEBUG_MEM_ALLOC_REC_IMG_BOOL_Any_va(g_MemoryRecords, - DebugMemAllocRecordRemove_AnyVaCb, - eAllocType, - pvKey)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: couldn't find an entry for type=%s with pvKey=%p (called from %s, line %d\n", - __FUNCTION__, DebugMemAllocRecordTypeToString(eAllocType), pvKey, - pszFileName, ui32Line)); - } - - LinuxUnLockMutex(&g_sDebugMutex); -} - - -static IMG_CHAR * -DebugMemAllocRecordTypeToString(DEBUG_MEM_ALLOC_TYPE eAllocType) -{ - IMG_CHAR *apszDebugMemoryRecordTypes[] = { - "KMALLOC", - "VMALLOC", - "ALLOC_PAGES", - "IOREMAP", - "IO", - "KMEM_CACHE_ALLOC" - }; - return apszDebugMemoryRecordTypes[eAllocType]; -} -#endif - - - -IMG_VOID * -_VMallocWrapper(IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32AllocFlags, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line) -{ - pgprot_t PGProtFlags; - IMG_VOID *pvRet; - - switch(ui32AllocFlags & PVRSRV_HAP_CACHETYPE_MASK) - { - case PVRSRV_HAP_CACHED: - PGProtFlags = PAGE_KERNEL; - break; - case PVRSRV_HAP_WRITECOMBINE: - PGProtFlags = PGPROT_WC(PAGE_KERNEL); - break; - case PVRSRV_HAP_UNCACHED: - PGProtFlags = PGPROT_UC(PAGE_KERNEL); - break; - default: - PVR_DPF((PVR_DBG_ERROR, - "VMAllocWrapper: unknown mapping flags=0x%08x", - ui32AllocFlags)); - dump_stack(); - return NULL; - } - - - pvRet = __vmalloc(ui32Bytes, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PGProtFlags); - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - if(pvRet) - { - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_VMALLOC, - pvRet, - pvRet, - 0, - NULL, - PAGE_ALIGN(ui32Bytes), - pszFileName, - ui32Line - ); - } -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - - return pvRet; -} - - -IMG_VOID -_VFreeWrapper(IMG_VOID *pvCpuVAddr, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_VMALLOC, pvCpuVAddr, pszFileName, ui32Line); -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - vfree(pvCpuVAddr); -} - - -LinuxMemArea * -NewVMallocLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags) -{ - LinuxMemArea *psLinuxMemArea; - IMG_VOID *pvCpuVAddr; - - psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - goto failed; - } - - pvCpuVAddr = VMallocWrapper(ui32Bytes, ui32AreaFlags); - if(!pvCpuVAddr) - { - goto failed; - } - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) - - ReservePages(pvCpuVAddr, ui32Bytes); -#endif - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_VMALLOC; - psLinuxMemArea->uData.sVmalloc.pvVmallocAddress = pvCpuVAddr; - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); -#endif - - - if(ui32AreaFlags & (PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_UNCACHED)) - OSInvalidateCPUCacheRangeKM(psLinuxMemArea, pvCpuVAddr, ui32Bytes); - - return psLinuxMemArea; - -failed: - PVR_DPF((PVR_DBG_ERROR, "%s: failed!", __FUNCTION__)); - if(psLinuxMemArea) - LinuxMemAreaStructFree(psLinuxMemArea); - return NULL; -} - - -IMG_VOID -FreeVMallocLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - PVR_ASSERT(psLinuxMemArea); - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_VMALLOC); - PVR_ASSERT(psLinuxMemArea->uData.sVmalloc.pvVmallocAddress); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) - UnreservePages(psLinuxMemArea->uData.sVmalloc.pvVmallocAddress, - psLinuxMemArea->ui32ByteSize); -#endif - - PVR_DPF((PVR_DBG_MESSAGE,"%s: pvCpuVAddr: %p", - __FUNCTION__, psLinuxMemArea->uData.sVmalloc.pvVmallocAddress)); - VFreeWrapper(psLinuxMemArea->uData.sVmalloc.pvVmallocAddress); - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) -static IMG_VOID -ReservePages(IMG_VOID *pvAddress, IMG_UINT32 ui32Length) -{ - IMG_VOID *pvPage; - IMG_VOID *pvEnd = pvAddress + ui32Length; - - for(pvPage = pvAddress; pvPage < pvEnd; pvPage += PAGE_SIZE) - { -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)) - SetPageReserved(vmalloc_to_page(pvPage)); -#else - mem_map_reserve(vmalloc_to_page(pvPage)); -#endif - } -} - - -static IMG_VOID -UnreservePages(IMG_VOID *pvAddress, IMG_UINT32 ui32Length) -{ - IMG_VOID *pvPage; - IMG_VOID *pvEnd = pvAddress + ui32Length; - - for(pvPage = pvAddress; pvPage < pvEnd; pvPage += PAGE_SIZE) - { -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)) - ClearPageReserved(vmalloc_to_page(pvPage)); -#else - mem_map_unreserve(vmalloc_to_page(pvPage)); -#endif - } -} -#endif - - -IMG_VOID * -_IORemapWrapper(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line) -{ - IMG_VOID *pvIORemapCookie; - - switch(ui32MappingFlags & PVRSRV_HAP_CACHETYPE_MASK) - { - case PVRSRV_HAP_CACHED: - pvIORemapCookie = (IMG_VOID *)IOREMAP(BasePAddr.uiAddr, ui32Bytes); - break; - case PVRSRV_HAP_WRITECOMBINE: - pvIORemapCookie = (IMG_VOID *)IOREMAP_WC(BasePAddr.uiAddr, ui32Bytes); - break; - case PVRSRV_HAP_UNCACHED: - pvIORemapCookie = (IMG_VOID *)IOREMAP_UC(BasePAddr.uiAddr, ui32Bytes); - break; - default: - PVR_DPF((PVR_DBG_ERROR, "IORemapWrapper: unknown mapping flags")); - return NULL; - } - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - if(pvIORemapCookie) - { - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_IOREMAP, - pvIORemapCookie, - pvIORemapCookie, - BasePAddr.uiAddr, - NULL, - ui32Bytes, - pszFileName, - ui32Line - ); - } -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - - return pvIORemapCookie; -} - - -IMG_VOID -_IOUnmapWrapper(IMG_VOID *pvIORemapCookie, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_IOREMAP, pvIORemapCookie, pszFileName, ui32Line); -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - iounmap(pvIORemapCookie); -} - - -LinuxMemArea * -NewIORemapLinuxMemArea(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32AreaFlags) -{ - LinuxMemArea *psLinuxMemArea; - IMG_VOID *pvIORemapCookie; - - psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - return NULL; - } - - pvIORemapCookie = IORemapWrapper(BasePAddr, ui32Bytes, ui32AreaFlags); - if(!pvIORemapCookie) - { - LinuxMemAreaStructFree(psLinuxMemArea); - return NULL; - } - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_IOREMAP; - psLinuxMemArea->uData.sIORemap.pvIORemapCookie = pvIORemapCookie; - psLinuxMemArea->uData.sIORemap.CPUPhysAddr = BasePAddr; - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); -#endif - - return psLinuxMemArea; -} - - -IMG_VOID -FreeIORemapLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_IOREMAP); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - - IOUnmapWrapper(psLinuxMemArea->uData.sIORemap.pvIORemapCookie); - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -static IMG_BOOL -TreatExternalPagesAsContiguous(IMG_SYS_PHYADDR *psSysPhysAddr, IMG_UINT32 ui32Bytes, IMG_BOOL bPhysContig) -{ - IMG_UINT32 ui32; - IMG_UINT32 ui32AddrChk; - IMG_UINT32 ui32NumPages = RANGE_TO_PAGES(ui32Bytes); - - - for (ui32 = 0, ui32AddrChk = psSysPhysAddr[0].uiAddr; - ui32 < ui32NumPages; - ui32++, ui32AddrChk = (bPhysContig) ? (ui32AddrChk + PAGE_SIZE) : psSysPhysAddr[ui32].uiAddr) - { - if (!pfn_valid(PHYS_TO_PFN(ui32AddrChk))) - { - break; - } - } - if (ui32 == ui32NumPages) - { - return IMG_FALSE; - } - - if (!bPhysContig) - { - for (ui32 = 0, ui32AddrChk = psSysPhysAddr[0].uiAddr; - ui32 < ui32NumPages; - ui32++, ui32AddrChk += PAGE_SIZE) - { - if (psSysPhysAddr[ui32].uiAddr != ui32AddrChk) - { - return IMG_FALSE; - } - } - } - - return IMG_TRUE; -} -#endif - -LinuxMemArea *NewExternalKVLinuxMemArea(IMG_SYS_PHYADDR *pBasePAddr, IMG_VOID *pvCPUVAddr, IMG_UINT32 ui32Bytes, IMG_BOOL bPhysContig, IMG_UINT32 ui32AreaFlags) -{ - LinuxMemArea *psLinuxMemArea; - - psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - return NULL; - } - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_EXTERNAL_KV; - psLinuxMemArea->uData.sExternalKV.pvExternalKV = pvCPUVAddr; - psLinuxMemArea->uData.sExternalKV.bPhysContig = -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - (bPhysContig || TreatExternalPagesAsContiguous(pBasePAddr, ui32Bytes, bPhysContig)) - ? IMG_TRUE : IMG_FALSE; -#else - bPhysContig; -#endif - if (psLinuxMemArea->uData.sExternalKV.bPhysContig) - { - psLinuxMemArea->uData.sExternalKV.uPhysAddr.SysPhysAddr = *pBasePAddr; - } - else - { - psLinuxMemArea->uData.sExternalKV.uPhysAddr.pSysPhysAddr = pBasePAddr; - } - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); -#endif - - return psLinuxMemArea; -} - - -IMG_VOID -FreeExternalKVLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_EXTERNAL_KV); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -LinuxMemArea * -NewIOLinuxMemArea(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32AreaFlags) -{ - LinuxMemArea *psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - return NULL; - } - - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_IO; - psLinuxMemArea->uData.sIO.CPUPhysAddr.uiAddr = BasePAddr.uiAddr; - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_IO, - (IMG_VOID *)BasePAddr.uiAddr, - 0, - BasePAddr.uiAddr, - NULL, - ui32Bytes, - "unknown", - 0 - ); -#endif - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); -#endif - - return psLinuxMemArea; -} - - -IMG_VOID -FreeIOLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_IO); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_IO, - (IMG_VOID *)psLinuxMemArea->uData.sIO.CPUPhysAddr.uiAddr, __FILE__, __LINE__); -#endif - - - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -LinuxMemArea * -NewAllocPagesLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags) -{ - LinuxMemArea *psLinuxMemArea; - IMG_UINT32 ui32PageCount; - struct page **pvPageList; - IMG_HANDLE hBlockPageList; - IMG_INT32 i; - PVRSRV_ERROR eError; - - psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - goto failed_area_alloc; - } - - ui32PageCount = RANGE_TO_PAGES(ui32Bytes); - eError = OSAllocMem(0, sizeof(*pvPageList) * ui32PageCount, (IMG_VOID **)&pvPageList, &hBlockPageList, - "Array of pages"); - if(eError != PVRSRV_OK) - { - goto failed_page_list_alloc; - } - - for(i=0; i<(IMG_INT32)ui32PageCount; i++) - { - pvPageList[i] = alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, 0); - if(!pvPageList[i]) - { - goto failed_alloc_pages; - } -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)) - SetPageReserved(pvPageList[i]); -#else - mem_map_reserve(pvPageList[i]); -#endif -#endif - - } - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES, - pvPageList, - 0, - 0, - NULL, - PAGE_ALIGN(ui32Bytes), - "unknown", - 0 - ); -#endif - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_ALLOC_PAGES; - psLinuxMemArea->uData.sPageList.pvPageList = pvPageList; - psLinuxMemArea->uData.sPageList.hBlockPageList = hBlockPageList; - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - - - if(ui32AreaFlags & (PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_UNCACHED)) - { - psLinuxMemArea->bNeedsCacheInvalidate = IMG_TRUE; - } - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); -#endif - - return psLinuxMemArea; - -failed_alloc_pages: - for(i--; i >= 0; i--) - { - __free_pages(pvPageList[i], 0); - } - (IMG_VOID) OSFreeMem(0, sizeof(*pvPageList) * ui32PageCount, pvPageList, hBlockPageList); - psLinuxMemArea->uData.sPageList.pvPageList = IMG_NULL; -failed_page_list_alloc: - LinuxMemAreaStructFree(psLinuxMemArea); -failed_area_alloc: - PVR_DPF((PVR_DBG_ERROR, "%s: failed", __FUNCTION__)); - - return NULL; -} - - -IMG_VOID -FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - IMG_UINT32 ui32PageCount; - struct page **pvPageList; - IMG_HANDLE hBlockPageList; - IMG_INT32 i; - - PVR_ASSERT(psLinuxMemArea); - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_ALLOC_PAGES); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - - ui32PageCount = RANGE_TO_PAGES(psLinuxMemArea->ui32ByteSize); - pvPageList = psLinuxMemArea->uData.sPageList.pvPageList; - hBlockPageList = psLinuxMemArea->uData.sPageList.hBlockPageList; - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES, pvPageList, __FILE__, __LINE__); -#endif - - for(i=0;i<(IMG_INT32)ui32PageCount;i++) - { -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)) - ClearPageReserved(pvPageList[i]); -#else - mem_map_reserve(pvPageList[i]); -#endif -#endif - __free_pages(pvPageList[i], 0); - } - - (IMG_VOID) OSFreeMem(0, sizeof(*pvPageList) * ui32PageCount, pvPageList, hBlockPageList); - psLinuxMemArea->uData.sPageList.pvPageList = IMG_NULL; - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -struct page* -LinuxMemAreaOffsetToPage(LinuxMemArea *psLinuxMemArea, - IMG_UINT32 ui32ByteOffset) -{ - IMG_UINT32 ui32PageIndex; - IMG_CHAR *pui8Addr; - - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_ALLOC_PAGES: - ui32PageIndex = PHYS_TO_PFN(ui32ByteOffset); - return psLinuxMemArea->uData.sPageList.pvPageList[ui32PageIndex]; - - case LINUX_MEM_AREA_VMALLOC: - pui8Addr = psLinuxMemArea->uData.sVmalloc.pvVmallocAddress; - pui8Addr += ui32ByteOffset; - return vmalloc_to_page(pui8Addr); - - case LINUX_MEM_AREA_SUB_ALLOC: - - return LinuxMemAreaOffsetToPage(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea, - psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset - + ui32ByteOffset); - default: - PVR_DPF((PVR_DBG_ERROR, - "%s: Unsupported request for struct page from LinuxMemArea with type=%s", - __FUNCTION__, LinuxMemAreaTypeToString(psLinuxMemArea->eAreaType))); - return NULL; - } -} - - -LinuxKMemCache * -KMemCacheCreateWrapper(IMG_CHAR *pszName, - size_t Size, - size_t Align, - IMG_UINT32 ui32Flags) -{ -#if defined(DEBUG_LINUX_SLAB_ALLOCATIONS) - ui32Flags |= SLAB_POISON|SLAB_RED_ZONE; -#endif - return kmem_cache_create(pszName, Size, Align, ui32Flags, NULL -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22)) - , NULL -#endif - ); -} - - -IMG_VOID -KMemCacheDestroyWrapper(LinuxKMemCache *psCache) -{ - kmem_cache_destroy(psCache); -} - - -IMG_VOID * -_KMemCacheAllocWrapper(LinuxKMemCache *psCache, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) - gfp_t Flags, -#else - IMG_INT Flags, -#endif - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line) -{ - IMG_VOID *pvRet; - - pvRet = kmem_cache_zalloc(psCache, Flags); - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - if (pvRet) - DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE, - pvRet, - pvRet, - 0, - psCache, - kmem_cache_size(psCache), - pszFileName, - ui32Line - ); -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - - return pvRet; -} - - -IMG_VOID -_KMemCacheFreeWrapper(LinuxKMemCache *psCache, IMG_VOID *pvObject, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line) -{ -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE, pvObject, pszFileName, ui32Line); -#else - PVR_UNREFERENCED_PARAMETER(pszFileName); - PVR_UNREFERENCED_PARAMETER(ui32Line); -#endif - - kmem_cache_free(psCache, pvObject); -} - - -const IMG_CHAR * -KMemCacheNameWrapper(LinuxKMemCache *psCache) -{ - PVR_UNREFERENCED_PARAMETER(psCache); - - - return ""; -} - - -LinuxMemArea * -NewSubLinuxMemArea(LinuxMemArea *psParentLinuxMemArea, - IMG_UINT32 ui32ByteOffset, - IMG_UINT32 ui32Bytes) -{ - LinuxMemArea *psLinuxMemArea; - - PVR_ASSERT((ui32ByteOffset+ui32Bytes) <= psParentLinuxMemArea->ui32ByteSize); - - psLinuxMemArea = LinuxMemAreaStructAlloc(); - if(!psLinuxMemArea) - { - return NULL; - } - - psLinuxMemArea->eAreaType = LINUX_MEM_AREA_SUB_ALLOC; - psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea = psParentLinuxMemArea; - psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset = ui32ByteOffset; - psLinuxMemArea->ui32ByteSize = ui32Bytes; - psLinuxMemArea->ui32AreaFlags = psParentLinuxMemArea->ui32AreaFlags; - psLinuxMemArea->bNeedsCacheInvalidate = psParentLinuxMemArea->bNeedsCacheInvalidate; - INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); - -#if defined(DEBUG_LINUX_MEM_AREAS) - { - DEBUG_LINUX_MEM_AREA_REC *psParentRecord; - psParentRecord = DebugLinuxMemAreaRecordFind(psParentLinuxMemArea); - DebugLinuxMemAreaRecordAdd(psLinuxMemArea, psParentRecord->ui32Flags); - } -#endif - - return psLinuxMemArea; -} - - -static IMG_VOID -FreeSubLinuxMemArea(LinuxMemArea *psLinuxMemArea) -{ - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_SUB_ALLOC); - -#if defined(DEBUG_LINUX_MEM_AREAS) - DebugLinuxMemAreaRecordRemove(psLinuxMemArea); -#endif - - - - LinuxMemAreaStructFree(psLinuxMemArea); -} - - -static LinuxMemArea * -LinuxMemAreaStructAlloc(IMG_VOID) -{ -#if 0 - LinuxMemArea *psLinuxMemArea; - psLinuxMemArea = kmem_cache_alloc(psLinuxMemAreaCache, GFP_KERNEL); - printk(KERN_ERR "%s: psLinuxMemArea=%p\n", __FUNCTION__, psLinuxMemArea); - dump_stack(); - return psLinuxMemArea; -#else - return KMemCacheAllocWrapper(psLinuxMemAreaCache, GFP_KERNEL); -#endif -} - - -static IMG_VOID -LinuxMemAreaStructFree(LinuxMemArea *psLinuxMemArea) -{ - KMemCacheFreeWrapper(psLinuxMemAreaCache, psLinuxMemArea); - - -} - - -IMG_VOID -LinuxMemAreaDeepFree(LinuxMemArea *psLinuxMemArea) -{ - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_VMALLOC: - FreeVMallocLinuxMemArea(psLinuxMemArea); - break; - case LINUX_MEM_AREA_ALLOC_PAGES: - FreeAllocPagesLinuxMemArea(psLinuxMemArea); - break; - case LINUX_MEM_AREA_IOREMAP: - FreeIORemapLinuxMemArea(psLinuxMemArea); - break; - case LINUX_MEM_AREA_EXTERNAL_KV: - FreeExternalKVLinuxMemArea(psLinuxMemArea); - break; - case LINUX_MEM_AREA_IO: - FreeIOLinuxMemArea(psLinuxMemArea); - break; - case LINUX_MEM_AREA_SUB_ALLOC: - FreeSubLinuxMemArea(psLinuxMemArea); - break; - default: - PVR_DPF((PVR_DBG_ERROR, "%s: Unknown are type (%d)\n", - __FUNCTION__, psLinuxMemArea->eAreaType)); - break; - } -} - - -#if defined(DEBUG_LINUX_MEM_AREAS) -static IMG_VOID -DebugLinuxMemAreaRecordAdd(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32Flags) -{ - DEBUG_LINUX_MEM_AREA_REC *psNewRecord; - const IMG_CHAR *pi8FlagsString; - - LinuxLockMutex(&g_sDebugMutex); - - if(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC) - { - g_LinuxMemAreaWaterMark += psLinuxMemArea->ui32ByteSize; - if(g_LinuxMemAreaWaterMark > g_LinuxMemAreaHighWaterMark) - { - g_LinuxMemAreaHighWaterMark = g_LinuxMemAreaWaterMark; - } - } - g_LinuxMemAreaCount++; - - - psNewRecord = kmalloc(sizeof(DEBUG_LINUX_MEM_AREA_REC), GFP_KERNEL); - if(psNewRecord) - { - - psNewRecord->psLinuxMemArea = psLinuxMemArea; - psNewRecord->ui32Flags = ui32Flags; - psNewRecord->pid = OSGetCurrentProcessIDKM(); - - List_DEBUG_LINUX_MEM_AREA_REC_Insert(&g_LinuxMemAreaRecords, psNewRecord); - } - else - { - PVR_DPF((PVR_DBG_ERROR, - "%s: failed to allocate linux memory area record.", - __FUNCTION__)); - } - - - pi8FlagsString = HAPFlagsToString(ui32Flags); - if(strstr(pi8FlagsString, "UNKNOWN")) - { - PVR_DPF((PVR_DBG_ERROR, - "%s: Unexpected flags (0x%08x) associated with psLinuxMemArea @ %p", - __FUNCTION__, - ui32Flags, - psLinuxMemArea)); - - } - - LinuxUnLockMutex(&g_sDebugMutex); -} - - - -static IMG_VOID* MatchLinuxMemArea_AnyVaCb(DEBUG_LINUX_MEM_AREA_REC *psCurrentRecord, - va_list va) -{ - LinuxMemArea *psLinuxMemArea; - - psLinuxMemArea = va_arg(va, LinuxMemArea*); - if(psCurrentRecord->psLinuxMemArea == psLinuxMemArea) - { - return psCurrentRecord; - } - else - { - return IMG_NULL; - } -} - - -static DEBUG_LINUX_MEM_AREA_REC * -DebugLinuxMemAreaRecordFind(LinuxMemArea *psLinuxMemArea) -{ - DEBUG_LINUX_MEM_AREA_REC *psCurrentRecord; - - LinuxLockMutex(&g_sDebugMutex); - psCurrentRecord = List_DEBUG_LINUX_MEM_AREA_REC_Any_va(g_LinuxMemAreaRecords, - MatchLinuxMemArea_AnyVaCb, - psLinuxMemArea); - - LinuxUnLockMutex(&g_sDebugMutex); - - return psCurrentRecord; -} - - -static IMG_VOID -DebugLinuxMemAreaRecordRemove(LinuxMemArea *psLinuxMemArea) -{ - DEBUG_LINUX_MEM_AREA_REC *psCurrentRecord; - - LinuxLockMutex(&g_sDebugMutex); - - if(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC) - { - g_LinuxMemAreaWaterMark -= psLinuxMemArea->ui32ByteSize; - } - g_LinuxMemAreaCount--; - - - psCurrentRecord = List_DEBUG_LINUX_MEM_AREA_REC_Any_va(g_LinuxMemAreaRecords, - MatchLinuxMemArea_AnyVaCb, - psLinuxMemArea); - if(psCurrentRecord) - { - - List_DEBUG_LINUX_MEM_AREA_REC_Remove(psCurrentRecord); - kfree(psCurrentRecord); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "%s: couldn't find an entry for psLinuxMemArea=%p\n", - __FUNCTION__, psLinuxMemArea)); - } - - LinuxUnLockMutex(&g_sDebugMutex); -} -#endif - - -IMG_VOID * -LinuxMemAreaToCpuVAddr(LinuxMemArea *psLinuxMemArea) -{ - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_VMALLOC: - return psLinuxMemArea->uData.sVmalloc.pvVmallocAddress; - case LINUX_MEM_AREA_IOREMAP: - return psLinuxMemArea->uData.sIORemap.pvIORemapCookie; - case LINUX_MEM_AREA_EXTERNAL_KV: - return psLinuxMemArea->uData.sExternalKV.pvExternalKV; - case LINUX_MEM_AREA_SUB_ALLOC: - { - IMG_CHAR *pAddr = - LinuxMemAreaToCpuVAddr(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea); - if(!pAddr) - { - return NULL; - } - return pAddr + psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset; - } - default: - return NULL; - } -} - - -IMG_CPU_PHYADDR -LinuxMemAreaToCpuPAddr(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset) -{ - IMG_CPU_PHYADDR CpuPAddr; - - CpuPAddr.uiAddr = 0; - - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_IOREMAP: - { - CpuPAddr = psLinuxMemArea->uData.sIORemap.CPUPhysAddr; - CpuPAddr.uiAddr += ui32ByteOffset; - break; - } - case LINUX_MEM_AREA_EXTERNAL_KV: - { - if (psLinuxMemArea->uData.sExternalKV.bPhysContig) - { - CpuPAddr = SysSysPAddrToCpuPAddr(psLinuxMemArea->uData.sExternalKV.uPhysAddr.SysPhysAddr); - CpuPAddr.uiAddr += ui32ByteOffset; - } - else - { - IMG_UINT32 ui32PageIndex = PHYS_TO_PFN(ui32ByteOffset); - IMG_SYS_PHYADDR SysPAddr = psLinuxMemArea->uData.sExternalKV.uPhysAddr.pSysPhysAddr[ui32PageIndex]; - - CpuPAddr = SysSysPAddrToCpuPAddr(SysPAddr); - CpuPAddr.uiAddr += ADDR_TO_PAGE_OFFSET(ui32ByteOffset); - } - break; - } - case LINUX_MEM_AREA_IO: - { - CpuPAddr = psLinuxMemArea->uData.sIO.CPUPhysAddr; - CpuPAddr.uiAddr += ui32ByteOffset; - break; - } - case LINUX_MEM_AREA_VMALLOC: - { - IMG_CHAR *pCpuVAddr; - pCpuVAddr = - (IMG_CHAR *)psLinuxMemArea->uData.sVmalloc.pvVmallocAddress; - pCpuVAddr += ui32ByteOffset; - CpuPAddr.uiAddr = VMallocToPhys(pCpuVAddr); - break; - } - case LINUX_MEM_AREA_ALLOC_PAGES: - { - struct page *page; - IMG_UINT32 ui32PageIndex = PHYS_TO_PFN(ui32ByteOffset); - page = psLinuxMemArea->uData.sPageList.pvPageList[ui32PageIndex]; - CpuPAddr.uiAddr = page_to_phys(page); - CpuPAddr.uiAddr += ADDR_TO_PAGE_OFFSET(ui32ByteOffset); - break; - } - case LINUX_MEM_AREA_SUB_ALLOC: - { - CpuPAddr = - OSMemHandleToCpuPAddr(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea, - psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset - + ui32ByteOffset); - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)\n", - __FUNCTION__, psLinuxMemArea->eAreaType)); - PVR_ASSERT(CpuPAddr.uiAddr); - break; - } - } - - return CpuPAddr; -} - - -IMG_BOOL -LinuxMemAreaPhysIsContig(LinuxMemArea *psLinuxMemArea) -{ - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_IOREMAP: - case LINUX_MEM_AREA_IO: - return IMG_TRUE; - - case LINUX_MEM_AREA_EXTERNAL_KV: - return psLinuxMemArea->uData.sExternalKV.bPhysContig; - - case LINUX_MEM_AREA_VMALLOC: - case LINUX_MEM_AREA_ALLOC_PAGES: - return IMG_FALSE; - - case LINUX_MEM_AREA_SUB_ALLOC: - - return LinuxMemAreaPhysIsContig(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea); - - default: - PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)\n", - __FUNCTION__, psLinuxMemArea->eAreaType)); - break; - } - return IMG_FALSE; -} - - -const IMG_CHAR * -LinuxMemAreaTypeToString(LINUX_MEM_AREA_TYPE eMemAreaType) -{ - - switch(eMemAreaType) - { - case LINUX_MEM_AREA_IOREMAP: - return "LINUX_MEM_AREA_IOREMAP"; - case LINUX_MEM_AREA_EXTERNAL_KV: - return "LINUX_MEM_AREA_EXTERNAL_KV"; - case LINUX_MEM_AREA_IO: - return "LINUX_MEM_AREA_IO"; - case LINUX_MEM_AREA_VMALLOC: - return "LINUX_MEM_AREA_VMALLOC"; - case LINUX_MEM_AREA_SUB_ALLOC: - return "LINUX_MEM_AREA_SUB_ALLOC"; - case LINUX_MEM_AREA_ALLOC_PAGES: - return "LINUX_MEM_AREA_ALLOC_PAGES"; - default: - PVR_ASSERT(0); - } - - return ""; -} - - -#if defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -static void ProcSeqStartstopDebugMutex(struct seq_file *sfile, IMG_BOOL start) -{ - if(start) - { - LinuxLockMutex(&g_sDebugMutex); - } - else - { - LinuxUnLockMutex(&g_sDebugMutex); - } -} -#endif - -#if defined(DEBUG_LINUX_MEM_AREAS) - -static IMG_VOID* DecOffMemAreaRec_AnyVaCb(DEBUG_LINUX_MEM_AREA_REC *psNode, va_list va) -{ - off_t *pOff = va_arg(va, off_t*); - if (--(*pOff)) - { - return IMG_NULL; - } - else - { - return psNode; - } -} - - -static void* ProcSeqNextMemArea(struct seq_file *sfile,void* el,loff_t off) -{ - DEBUG_LINUX_MEM_AREA_REC *psRecord; - psRecord = (DEBUG_LINUX_MEM_AREA_REC*) - List_DEBUG_LINUX_MEM_AREA_REC_Any_va(g_LinuxMemAreaRecords, - DecOffMemAreaRec_AnyVaCb, - &off); - return (void*)psRecord; -} - -static void* ProcSeqOff2ElementMemArea(struct seq_file * sfile, loff_t off) -{ - DEBUG_LINUX_MEM_AREA_REC *psRecord; - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - psRecord = (DEBUG_LINUX_MEM_AREA_REC*) - List_DEBUG_LINUX_MEM_AREA_REC_Any_va(g_LinuxMemAreaRecords, - DecOffMemAreaRec_AnyVaCb, - &off); - return (void*)psRecord; -} - - -static void ProcSeqShowMemArea(struct seq_file *sfile,void* el) -{ - DEBUG_LINUX_MEM_AREA_REC *psRecord = (DEBUG_LINUX_MEM_AREA_REC*)el; - if(el == PVR_PROC_SEQ_START_TOKEN) - { - -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - seq_printf( sfile, - "Number of Linux Memory Areas: %u\n" - "At the current water mark these areas correspond to %u bytes (excluding SUB areas)\n" - "At the highest water mark these areas corresponded to %u bytes (excluding SUB areas)\n" - "\nDetails for all Linux Memory Areas:\n" - "%s %-24s %s %s %-8s %-5s %s\n", - g_LinuxMemAreaCount, - g_LinuxMemAreaWaterMark, - g_LinuxMemAreaHighWaterMark, - "psLinuxMemArea", - "LinuxMemType", - "CpuVAddr", - "CpuPAddr", - "Bytes", - "Pid", - "Flags" - ); -#else - seq_printf( sfile, - "\n" - "\t%u\n" - "\t\n" - "\t\n" - "\n", - g_LinuxMemAreaCount, - g_LinuxMemAreaWaterMark, - g_LinuxMemAreaHighWaterMark - ); -#endif - return; - } - - seq_printf( sfile, -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - "%8p %-24s %8p %08x %-8d %-5u %08x=(%s)\n", -#else - "\n" - "\t%8p\n" - "\t%s\n" - "\t%8p\n" - "\t%08x\n" - "\t%ld\n" - "\t%u\n" - "\t%08lx\n" - "\t%s\n" - "\n", -#endif - psRecord->psLinuxMemArea, - LinuxMemAreaTypeToString(psRecord->psLinuxMemArea->eAreaType), - LinuxMemAreaToCpuVAddr(psRecord->psLinuxMemArea), - LinuxMemAreaToCpuPAddr(psRecord->psLinuxMemArea,0).uiAddr, - psRecord->psLinuxMemArea->ui32ByteSize, - psRecord->pid, - psRecord->ui32Flags, - HAPFlagsToString(psRecord->ui32Flags) - ); - -} - -#endif - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - -static IMG_VOID* DecOffMemAllocRec_AnyVaCb(DEBUG_MEM_ALLOC_REC *psNode, va_list va) -{ - off_t *pOff = va_arg(va, off_t*); - if (--(*pOff)) - { - return IMG_NULL; - } - else - { - return psNode; - } -} - - - -static void* ProcSeqNextMemoryRecords(struct seq_file *sfile,void* el,loff_t off) -{ - DEBUG_MEM_ALLOC_REC *psRecord; - psRecord = (DEBUG_MEM_ALLOC_REC*) - List_DEBUG_MEM_ALLOC_REC_Any_va(g_MemoryRecords, - DecOffMemAllocRec_AnyVaCb, - &off); -#if defined(DEBUG_LINUX_XML_PROC_FILES) - if(!psRecord) - { - seq_printf( sfile, "\n"); - } -#endif - - return (void*)psRecord; -} - -static void* ProcSeqOff2ElementMemoryRecords(struct seq_file *sfile, loff_t off) -{ - DEBUG_MEM_ALLOC_REC *psRecord; - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - psRecord = (DEBUG_MEM_ALLOC_REC*) - List_DEBUG_MEM_ALLOC_REC_Any_va(g_MemoryRecords, - DecOffMemAllocRec_AnyVaCb, - &off); - -#if defined(DEBUG_LINUX_XML_PROC_FILES) - if(!psRecord) - { - seq_printf( sfile, "\n"); - } -#endif - - return (void*)psRecord; -} - -static void ProcSeqShowMemoryRecords(struct seq_file *sfile,void* el) -{ - DEBUG_MEM_ALLOC_REC *psRecord = (DEBUG_MEM_ALLOC_REC*)el; - if(el == PVR_PROC_SEQ_START_TOKEN) - { -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes allocated via kmalloc", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMALLOC]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated via kmalloc", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMALLOC]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes allocated via vmalloc", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_VMALLOC]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated via vmalloc", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_VMALLOC]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes allocated via alloc_pages", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated via alloc_pages", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes allocated via ioremap", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_IOREMAP]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated via ioremap", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_IOREMAP]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes reserved for \"IO\" memory areas", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_IO]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated for \"IO\" memory areas", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_IO]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Current Water Mark of bytes allocated via kmem_cache_alloc", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE]); - seq_printf( sfile, "%-60s: %d bytes\n", - "Highest Water Mark of bytes allocated via kmem_cache_alloc", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE]); - seq_printf( sfile, "\n"); - - seq_printf( sfile, "%-60s: %d bytes\n", - "The Current Water Mark for memory allocated from system RAM", - g_SysRAMWaterMark); - seq_printf( sfile, "%-60s: %d bytes\n", - "The Highest Water Mark for memory allocated from system RAM", - g_SysRAMHighWaterMark); - seq_printf( sfile, "%-60s: %d bytes\n", - "The Current Water Mark for memory allocated from IO memory", - g_IOMemWaterMark); - seq_printf( sfile, "%-60s: %d bytes\n", - "The Highest Water Mark for memory allocated from IO memory", - g_IOMemHighWaterMark); - - seq_printf( sfile, "\n"); - - seq_printf( sfile, "Details for all known allocations:\n" - "%-16s %-8s %-8s %-10s %-5s %-10s %s\n", - "Type", - "CpuVAddr", - "CpuPAddr", - "Bytes", - "PID", - "PrivateData", - "Filename:Line"); - -#else - - - seq_printf( sfile, "\n\n"); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMALLOC]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMALLOC]); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_VMALLOC]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_VMALLOC]); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES]); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_IOREMAP]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_IOREMAP]); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_IO]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_IO]); - seq_printf( sfile, - "\n", - g_WaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE]); - seq_printf( sfile, - "\n", - g_HighWaterMarkData[DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE]); - seq_printf( sfile,"\n" ); - - seq_printf( sfile, - "\n", - g_SysRAMWaterMark); - seq_printf( sfile, - "\n", - g_SysRAMHighWaterMark); - seq_printf( sfile, - "\n", - g_IOMemWaterMark); - seq_printf( sfile, - "\n", - g_IOMemHighWaterMark); - - seq_printf( sfile, "\n"); - -#endif - return; - } - - if(psRecord->eAllocType != DEBUG_MEM_ALLOC_TYPE_KMEM_CACHE) - { - seq_printf( sfile, -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - "%-16s %-8p %08x %-10d %-5d %-10s %s:%d\n", -#else - "\n" - "\t%s\n" - "\t%-8p\n" - "\t%08x\n" - "\t%d\n" - "\t%d\n" - "\t%s\n" - "\t%s\n" - "\t%d\n" - "\n", -#endif - DebugMemAllocRecordTypeToString(psRecord->eAllocType), - psRecord->pvCpuVAddr, - psRecord->ulCpuPAddr, - psRecord->ui32Bytes, - psRecord->pid, - "NULL", - psRecord->pszFileName, - psRecord->ui32Line); - } - else - { - seq_printf( sfile, -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - "%-16s %-8p %08x %-10d %-5d %-10s %s:%d\n", -#else - "\n" - "\t%s\n" - "\t%-8p\n" - "\t%08x\n" - "\t%d\n" - "\t%d\n" - "\t%s\n" - "\t%s\n" - "\t%d\n" - "\n", -#endif - DebugMemAllocRecordTypeToString(psRecord->eAllocType), - psRecord->pvCpuVAddr, - psRecord->ulCpuPAddr, - psRecord->ui32Bytes, - psRecord->pid, - KMemCacheNameWrapper(psRecord->pvPrivateData), - psRecord->pszFileName, - psRecord->ui32Line); - } -} - -#endif - - -#if defined(DEBUG_LINUX_MEM_AREAS) || defined(DEBUG_LINUX_MMAP_AREAS) -const IMG_CHAR * -HAPFlagsToString(IMG_UINT32 ui32Flags) -{ - static IMG_CHAR szFlags[50]; - IMG_INT32 i32Pos = 0; - IMG_UINT32 ui32CacheTypeIndex, ui32MapTypeIndex; - IMG_CHAR *apszCacheTypes[] = { - "UNCACHED", - "CACHED", - "WRITECOMBINE", - "UNKNOWN" - }; - IMG_CHAR *apszMapType[] = { - "KERNEL_ONLY", - "SINGLE_PROCESS", - "MULTI_PROCESS", - "FROM_EXISTING_PROCESS", - "NO_CPU_VIRTUAL", - "UNKNOWN" - }; - - - if(ui32Flags & PVRSRV_HAP_UNCACHED){ - ui32CacheTypeIndex=0; - }else if(ui32Flags & PVRSRV_HAP_CACHED){ - ui32CacheTypeIndex=1; - }else if(ui32Flags & PVRSRV_HAP_WRITECOMBINE){ - ui32CacheTypeIndex=2; - }else{ - ui32CacheTypeIndex=3; - PVR_DPF((PVR_DBG_ERROR, "%s: unknown cache type (%u)", - __FUNCTION__, (ui32Flags & PVRSRV_HAP_CACHETYPE_MASK))); - } - - - if(ui32Flags & PVRSRV_HAP_KERNEL_ONLY){ - ui32MapTypeIndex = 0; - }else if(ui32Flags & PVRSRV_HAP_SINGLE_PROCESS){ - ui32MapTypeIndex = 1; - }else if(ui32Flags & PVRSRV_HAP_MULTI_PROCESS){ - ui32MapTypeIndex = 2; - }else if(ui32Flags & PVRSRV_HAP_FROM_EXISTING_PROCESS){ - ui32MapTypeIndex = 3; - }else if(ui32Flags & PVRSRV_HAP_NO_CPU_VIRTUAL){ - ui32MapTypeIndex = 4; - }else{ - ui32MapTypeIndex = 5; - PVR_DPF((PVR_DBG_ERROR, "%s: unknown map type (%u)", - __FUNCTION__, (ui32Flags & PVRSRV_HAP_MAPTYPE_MASK))); - } - - i32Pos = sprintf(szFlags, "%s|", apszCacheTypes[ui32CacheTypeIndex]); - if (i32Pos <= 0) - { - PVR_DPF((PVR_DBG_ERROR, "%s: sprintf for cache type %u failed (%d)", - __FUNCTION__, ui32CacheTypeIndex, i32Pos)); - szFlags[0] = 0; - } - else - { - sprintf(szFlags + i32Pos, "%s", apszMapType[ui32MapTypeIndex]); - } - - return szFlags; -} -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.h deleted file mode 100644 index b32f5e8..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mm.h +++ /dev/null @@ -1,336 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __IMG_LINUX_MM_H__ -#define __IMG_LINUX_MM_H__ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include - -#include - -#define PHYS_TO_PFN(phys) ((phys) >> PAGE_SHIFT) -#define PFN_TO_PHYS(pfn) ((pfn) << PAGE_SHIFT) - -#define RANGE_TO_PAGES(range) (((range) + (PAGE_SIZE - 1)) >> PAGE_SHIFT) - -#define ADDR_TO_PAGE_OFFSET(addr) (((unsigned long)(addr)) & (PAGE_SIZE - 1)) - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)) -#define REMAP_PFN_RANGE(vma, addr, pfn, size, prot) remap_pfn_range(vma, addr, pfn, size, prot) -#else -#define REMAP_PFN_RANGE(vma, addr, pfn, size, prot) remap_page_range(vma, addr, PFN_TO_PHYS(pfn), size, prot) -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)) -#define IO_REMAP_PFN_RANGE(vma, addr, pfn, size, prot) io_remap_pfn_range(vma, addr, pfn, size, prot) -#else -#define IO_REMAP_PFN_RANGE(vma, addr, pfn, size, prot) io_remap_page_range(vma, addr, PFN_TO_PHYS(pfn), size, prot) -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) -#define VM_INSERT_PAGE(vma, addr, page) vm_insert_page(vma, addr, page) -#else -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)) -#define VM_INSERT_PAGE(vma, addr, page) remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE, vma->vm_page_prot); -#else -#define VM_INSERT_PAGE(vma, addr, page) remap_page_range(vma, addr, page_to_phys(page), PAGE_SIZE, vma->vm_page_prot); -#endif -#endif - -static inline IMG_UINT32 VMallocToPhys(IMG_VOID *pCpuVAddr) -{ - return (page_to_phys(vmalloc_to_page(pCpuVAddr)) + ADDR_TO_PAGE_OFFSET(pCpuVAddr)); - -} - -typedef enum { - LINUX_MEM_AREA_IOREMAP, - LINUX_MEM_AREA_EXTERNAL_KV, - LINUX_MEM_AREA_IO, - LINUX_MEM_AREA_VMALLOC, - LINUX_MEM_AREA_ALLOC_PAGES, - LINUX_MEM_AREA_SUB_ALLOC, - LINUX_MEM_AREA_TYPE_COUNT -}LINUX_MEM_AREA_TYPE; - -typedef struct _LinuxMemArea LinuxMemArea; - - -struct _LinuxMemArea { - LINUX_MEM_AREA_TYPE eAreaType; - union _uData - { - struct _sIORemap - { - - IMG_CPU_PHYADDR CPUPhysAddr; - IMG_VOID *pvIORemapCookie; - }sIORemap; - struct _sExternalKV - { - - IMG_BOOL bPhysContig; - union { - - IMG_SYS_PHYADDR SysPhysAddr; - IMG_SYS_PHYADDR *pSysPhysAddr; - } uPhysAddr; - IMG_VOID *pvExternalKV; - }sExternalKV; - struct _sIO - { - - IMG_CPU_PHYADDR CPUPhysAddr; - }sIO; - struct _sVmalloc - { - - IMG_VOID *pvVmallocAddress; - }sVmalloc; - struct _sPageList - { - - struct page **pvPageList; - IMG_HANDLE hBlockPageList; - }sPageList; - struct _sSubAlloc - { - - LinuxMemArea *psParentLinuxMemArea; - IMG_UINT32 ui32ByteOffset; - }sSubAlloc; - }uData; - - IMG_UINT32 ui32ByteSize; - - IMG_UINT32 ui32AreaFlags; - - IMG_BOOL bMMapRegistered; - - IMG_BOOL bNeedsCacheInvalidate; - - - struct list_head sMMapItem; - - - struct list_head sMMapOffsetStructList; -}; - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)) -typedef kmem_cache_t LinuxKMemCache; -#else -typedef struct kmem_cache LinuxKMemCache; -#endif - - -PVRSRV_ERROR LinuxMMInit(IMG_VOID); - - -IMG_VOID LinuxMMCleanup(IMG_VOID); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define KMallocWrapper(ui32ByteSize, uFlags) _KMallocWrapper(ui32ByteSize, uFlags, __FILE__, __LINE__) -#else -#define KMallocWrapper(ui32ByteSize, uFlags) _KMallocWrapper(ui32ByteSize, uFlags, NULL, 0) -#endif -IMG_VOID *_KMallocWrapper(IMG_UINT32 ui32ByteSize, gfp_t uFlags, IMG_CHAR *szFileName, IMG_UINT32 ui32Line); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define KFreeWrapper(pvCpuVAddr) _KFreeWrapper(pvCpuVAddr, __FILE__, __LINE__) -#else -#define KFreeWrapper(pvCpuVAddr) _KFreeWrapper(pvCpuVAddr, NULL, 0) -#endif -IMG_VOID _KFreeWrapper(IMG_VOID *pvCpuVAddr, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define VMallocWrapper(ui32Bytes, ui32AllocFlags) _VMallocWrapper(ui32Bytes, ui32AllocFlags, __FILE__, __LINE__) -#else -#define VMallocWrapper(ui32Bytes, ui32AllocFlags) _VMallocWrapper(ui32Bytes, ui32AllocFlags, NULL, 0) -#endif -IMG_VOID *_VMallocWrapper(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AllocFlags, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define VFreeWrapper(pvCpuVAddr) _VFreeWrapper(pvCpuVAddr, __FILE__, __LINE__) -#else -#define VFreeWrapper(pvCpuVAddr) _VFreeWrapper(pvCpuVAddr, NULL, 0) -#endif -IMG_VOID _VFreeWrapper(IMG_VOID *pvCpuVAddr, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - - -LinuxMemArea *NewVMallocLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags); - - -IMG_VOID FreeVMallocLinuxMemArea(LinuxMemArea *psLinuxMemArea); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define IORemapWrapper(BasePAddr, ui32Bytes, ui32MappingFlags) \ - _IORemapWrapper(BasePAddr, ui32Bytes, ui32MappingFlags, __FILE__, __LINE__) -#else -#define IORemapWrapper(BasePAddr, ui32Bytes, ui32MappingFlags) \ - _IORemapWrapper(BasePAddr, ui32Bytes, ui32MappingFlags, NULL, 0) -#endif -IMG_VOID *_IORemapWrapper(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32Line); - - -LinuxMemArea *NewIORemapLinuxMemArea(IMG_CPU_PHYADDR BasePAddr, IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags); - - -IMG_VOID FreeIORemapLinuxMemArea(LinuxMemArea *psLinuxMemArea); - -LinuxMemArea *NewExternalKVLinuxMemArea(IMG_SYS_PHYADDR *pBasePAddr, IMG_VOID *pvCPUVAddr, IMG_UINT32 ui32Bytes, IMG_BOOL bPhysContig, IMG_UINT32 ui32AreaFlags); - - -IMG_VOID FreeExternalKVLinuxMemArea(LinuxMemArea *psLinuxMemArea); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define IOUnmapWrapper(pvIORemapCookie) \ - _IOUnmapWrapper(pvIORemapCookie, __FILE__, __LINE__) -#else -#define IOUnmapWrapper(pvIORemapCookie) \ - _IOUnmapWrapper(pvIORemapCookie, NULL, 0) -#endif -IMG_VOID _IOUnmapWrapper(IMG_VOID *pvIORemapCookie, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - - -struct page *LinuxMemAreaOffsetToPage(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset); - - -LinuxKMemCache *KMemCacheCreateWrapper(IMG_CHAR *pszName, size_t Size, size_t Align, IMG_UINT32 ui32Flags); - - -IMG_VOID KMemCacheDestroyWrapper(LinuxKMemCache *psCache); - - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define KMemCacheAllocWrapper(psCache, Flags) _KMemCacheAllocWrapper(psCache, Flags, __FILE__, __LINE__) -#else -#define KMemCacheAllocWrapper(psCache, Flags) _KMemCacheAllocWrapper(psCache, Flags, NULL, 0) -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) -IMG_VOID *_KMemCacheAllocWrapper(LinuxKMemCache *psCache, gfp_t Flags, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); -#else -IMG_VOID *_KMemCacheAllocWrapper(LinuxKMemCache *psCache, int Flags, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); -#endif - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -#define KMemCacheFreeWrapper(psCache, pvObject) _KMemCacheFreeWrapper(psCache, pvObject, __FILE__, __LINE__) -#else -#define KMemCacheFreeWrapper(psCache, pvObject) _KMemCacheFreeWrapper(psCache, pvObject, NULL, 0) -#endif -IMG_VOID _KMemCacheFreeWrapper(LinuxKMemCache *psCache, IMG_VOID *pvObject, IMG_CHAR *pszFileName, IMG_UINT32 ui32Line); - - -const IMG_CHAR *KMemCacheNameWrapper(LinuxKMemCache *psCache); - - -LinuxMemArea *NewIOLinuxMemArea(IMG_CPU_PHYADDR BasePAddr, IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags); - - -IMG_VOID FreeIOLinuxMemArea(LinuxMemArea *psLinuxMemArea); - - -LinuxMemArea *NewAllocPagesLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags); - - -IMG_VOID FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea); - - -LinuxMemArea *NewSubLinuxMemArea(LinuxMemArea *psParentLinuxMemArea, - IMG_UINT32 ui32ByteOffset, - IMG_UINT32 ui32Bytes); - - -IMG_VOID LinuxMemAreaDeepFree(LinuxMemArea *psLinuxMemArea); - - -#if defined(LINUX_MEM_AREAS_DEBUG) -IMG_VOID LinuxMemAreaRegister(LinuxMemArea *psLinuxMemArea); -#else -#define LinuxMemAreaRegister(X) -#endif - - -IMG_VOID *LinuxMemAreaToCpuVAddr(LinuxMemArea *psLinuxMemArea); - - -IMG_CPU_PHYADDR LinuxMemAreaToCpuPAddr(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset); - - -#define LinuxMemAreaToCpuPFN(psLinuxMemArea, ui32ByteOffset) PHYS_TO_PFN(LinuxMemAreaToCpuPAddr(psLinuxMemArea, ui32ByteOffset).uiAddr) - -IMG_BOOL LinuxMemAreaPhysIsContig(LinuxMemArea *psLinuxMemArea); - -static inline LinuxMemArea * -LinuxMemAreaRoot(LinuxMemArea *psLinuxMemArea) -{ - if(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_SUB_ALLOC) - { - return psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea; - } - else - { - return psLinuxMemArea; - } -} - - -static inline LINUX_MEM_AREA_TYPE -LinuxMemAreaRootType(LinuxMemArea *psLinuxMemArea) -{ - return LinuxMemAreaRoot(psLinuxMemArea)->eAreaType; -} - - -const IMG_CHAR *LinuxMemAreaTypeToString(LINUX_MEM_AREA_TYPE eMemAreaType); - - -#if defined(DEBUG) || defined(DEBUG_LINUX_MEM_AREAS) -const IMG_CHAR *HAPFlagsToString(IMG_UINT32 ui32Flags); -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.c deleted file mode 100644 index 00c8b9d..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.c +++ /dev/null @@ -1,1151 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) -#include -#endif -#include -#include -#include -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) -#include -#include -#endif -#if defined(SUPPORT_DRI_DRM) -#include -#endif - -#include "img_defs.h" -#include "services.h" -#include "servicesint.h" -#include "pvrmmap.h" -#include "mutils.h" -#include "mmap.h" -#include "mm.h" -#include "pvr_debug.h" -#include "osfunc.h" -#include "proc.h" -#include "mutex.h" -#include "handle.h" -#include "perproc.h" -#include "env_perproc.h" -#include "bridged_support.h" -#if defined(SUPPORT_DRI_DRM) -#include "pvr_drm.h" -#endif - -#if !defined(PVR_SECURE_HANDLES) && !defined (SUPPORT_SID_INTERFACE) -#error "The mmap code requires PVR_SECURE_HANDLES" -#endif - -static PVRSRV_LINUX_MUTEX g_sMMapMutex; - -static LinuxKMemCache *g_psMemmapCache = NULL; -static LIST_HEAD(g_sMMapAreaList); -static LIST_HEAD(g_sMMapOffsetStructList); -#if defined(DEBUG_LINUX_MMAP_AREAS) -static IMG_UINT32 g_ui32RegisteredAreas = 0; -static IMG_UINT32 g_ui32TotalByteSize = 0; -#endif - - -#if defined(DEBUG_LINUX_MMAP_AREAS) -static struct proc_dir_entry *g_ProcMMap; -#endif - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -#define MMAP2_PGOFF_RESOLUTION (32-PAGE_SHIFT+12) -#define RESERVED_PGOFF_BITS 1 -#define MAX_MMAP_HANDLE ((1UL<<(MMAP2_PGOFF_RESOLUTION-RESERVED_PGOFF_BITS))-1) - -#define FIRST_PHYSICAL_PFN 0 -#define LAST_PHYSICAL_PFN (FIRST_PHYSICAL_PFN + MAX_MMAP_HANDLE) -#define FIRST_SPECIAL_PFN (LAST_PHYSICAL_PFN + 1) -#define LAST_SPECIAL_PFN (FIRST_SPECIAL_PFN + MAX_MMAP_HANDLE) - -#else - -#if PAGE_SHIFT != 12 -#error This build variant has not yet been made non-4KB page-size aware -#endif - -#if defined(PVR_MMAP_OFFSET_BASE) -#define FIRST_SPECIAL_PFN PVR_MMAP_OFFSET_BASE -#else -#define FIRST_SPECIAL_PFN 0x80000000UL -#endif - -#if defined(PVR_NUM_MMAP_HANDLES) -#define MAX_MMAP_HANDLE PVR_NUM_MMAP_HANDLES -#else -#define MAX_MMAP_HANDLE 0x7fffffffUL -#endif - -#endif - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -static inline IMG_BOOL -PFNIsPhysical(IMG_UINT32 pfn) -{ - - return ( (pfn <= LAST_PHYSICAL_PFN)) ? IMG_TRUE : IMG_FALSE; -} - -static inline IMG_BOOL -PFNIsSpecial(IMG_UINT32 pfn) -{ - - return ((pfn >= FIRST_SPECIAL_PFN) ) ? IMG_TRUE : IMG_FALSE; -} -#endif - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -static inline IMG_HANDLE -MMapOffsetToHandle(IMG_UINT32 pfn) -{ - if (PFNIsPhysical(pfn)) - { - PVR_ASSERT(PFNIsPhysical(pfn)); - return IMG_NULL; - } - return (IMG_HANDLE)(pfn - FIRST_SPECIAL_PFN); -} -#endif - -static inline IMG_UINT32 -#if defined (SUPPORT_SID_INTERFACE) -HandleToMMapOffset(IMG_SID hHandle) -#else -HandleToMMapOffset(IMG_HANDLE hHandle) -#endif -{ - IMG_UINT32 ulHandle = (IMG_UINT32)hHandle; - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - if (PFNIsSpecial(ulHandle)) - { - PVR_ASSERT(PFNIsSpecial(ulHandle)); - return 0; - } -#endif - return ulHandle + FIRST_SPECIAL_PFN; -} - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -static inline IMG_BOOL -LinuxMemAreaUsesPhysicalMap(LinuxMemArea *psLinuxMemArea) -{ - return LinuxMemAreaPhysIsContig(psLinuxMemArea); -} -#endif - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) -static inline IMG_UINT32 -GetCurrentThreadID(IMG_VOID) -{ - - return (IMG_UINT32)current->pid; -} -#endif - -static PKV_OFFSET_STRUCT -CreateOffsetStruct(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32Offset, IMG_UINT32 ui32RealByteSize) -{ - PKV_OFFSET_STRUCT psOffsetStruct; -#if defined(DEBUG) || defined(DEBUG_LINUX_MMAP_AREAS) - const IMG_CHAR *pszName = LinuxMemAreaTypeToString(LinuxMemAreaRootType(psLinuxMemArea)); -#endif - -#if defined(DEBUG) || defined(DEBUG_LINUX_MMAP_AREAS) - PVR_DPF((PVR_DBG_MESSAGE, - "%s(%s, psLinuxMemArea: 0x%p, ui32AllocFlags: 0x%8x)", - __FUNCTION__, pszName, psLinuxMemArea, psLinuxMemArea->ui32AreaFlags)); -#endif - - PVR_ASSERT(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC || LinuxMemAreaRoot(psLinuxMemArea)->eAreaType != LINUX_MEM_AREA_SUB_ALLOC); - - PVR_ASSERT(psLinuxMemArea->bMMapRegistered); - - psOffsetStruct = KMemCacheAllocWrapper(g_psMemmapCache, GFP_KERNEL); - if(psOffsetStruct == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR,"PVRMMapRegisterArea: Couldn't alloc another mapping record from cache")); - return IMG_NULL; - } - - psOffsetStruct->ui32MMapOffset = ui32Offset; - - psOffsetStruct->psLinuxMemArea = psLinuxMemArea; - - psOffsetStruct->ui32RealByteSize = ui32RealByteSize; - - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - psOffsetStruct->ui32TID = GetCurrentThreadID(); -#endif - psOffsetStruct->ui32PID = OSGetCurrentProcessIDKM(); - -#if defined(DEBUG_LINUX_MMAP_AREAS) - - psOffsetStruct->pszName = pszName; -#endif - - list_add_tail(&psOffsetStruct->sAreaItem, &psLinuxMemArea->sMMapOffsetStructList); - - return psOffsetStruct; -} - - -static IMG_VOID -DestroyOffsetStruct(PKV_OFFSET_STRUCT psOffsetStruct) -{ -#ifdef DEBUG - IMG_CPU_PHYADDR CpuPAddr; - CpuPAddr = LinuxMemAreaToCpuPAddr(psOffsetStruct->psLinuxMemArea, 0); -#endif - - list_del(&psOffsetStruct->sAreaItem); - - if (psOffsetStruct->bOnMMapList) - { - list_del(&psOffsetStruct->sMMapItem); - } - -#ifdef DEBUG - PVR_DPF((PVR_DBG_MESSAGE, "%s: Table entry: " - "psLinuxMemArea=%p, CpuPAddr=0x%08X", __FUNCTION__, - psOffsetStruct->psLinuxMemArea, - CpuPAddr.uiAddr)); -#endif - - KMemCacheFreeWrapper(g_psMemmapCache, psOffsetStruct); -} - - -static inline IMG_VOID -DetermineUsersSizeAndByteOffset(LinuxMemArea *psLinuxMemArea, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32ByteOffset) -{ - IMG_UINT32 ui32PageAlignmentOffset; - IMG_CPU_PHYADDR CpuPAddr; - - CpuPAddr = LinuxMemAreaToCpuPAddr(psLinuxMemArea, 0); - ui32PageAlignmentOffset = ADDR_TO_PAGE_OFFSET(CpuPAddr.uiAddr); - - *pui32ByteOffset = ui32PageAlignmentOffset; - - *pui32RealByteSize = PAGE_ALIGN(psLinuxMemArea->ui32ByteSize + ui32PageAlignmentOffset); -} - - -PVRSRV_ERROR -PVRMMapOSMemHandleToMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle, -#else - IMG_HANDLE hMHandle, -#endif - IMG_UINT32 *pui32MMapOffset, - IMG_UINT32 *pui32ByteOffset, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32UserVAddr) -{ - LinuxMemArea *psLinuxMemArea; - PKV_OFFSET_STRUCT psOffsetStruct; - IMG_HANDLE hOSMemHandle; - PVRSRV_ERROR eError; - - LinuxLockMutex(&g_sMMapMutex); - - PVR_ASSERT(PVRSRVGetMaxHandle(psPerProc->psHandleBase) <= MAX_MMAP_HANDLE); - - eError = PVRSRVLookupOSMemHandle(psPerProc->psHandleBase, &hOSMemHandle, hMHandle); - if (eError != PVRSRV_OK) - { -#if defined (SUPPORT_SID_INTERFACE) - PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %x failed", __FUNCTION__, hMHandle)); -#else - PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %p failed", __FUNCTION__, hMHandle)); -#endif - - goto exit_unlock; - } - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - DetermineUsersSizeAndByteOffset(psLinuxMemArea, - pui32RealByteSize, - pui32ByteOffset); - - - list_for_each_entry(psOffsetStruct, &psLinuxMemArea->sMMapOffsetStructList, sAreaItem) - { - if (psPerProc->ui32PID == psOffsetStruct->ui32PID) - { - - PVR_ASSERT(*pui32RealByteSize == psOffsetStruct->ui32RealByteSize); - - *pui32MMapOffset = psOffsetStruct->ui32MMapOffset; - *pui32UserVAddr = psOffsetStruct->ui32UserVAddr; - psOffsetStruct->ui32RefCount++; - - eError = PVRSRV_OK; - goto exit_unlock; - } - } - - - *pui32UserVAddr = 0; - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - if (LinuxMemAreaUsesPhysicalMap(psLinuxMemArea)) - { - *pui32MMapOffset = LinuxMemAreaToCpuPFN(psLinuxMemArea, 0); - PVR_ASSERT(PFNIsPhysical(*pui32MMapOffset)); - } - else -#endif - { - *pui32MMapOffset = HandleToMMapOffset(hMHandle); -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - PVR_ASSERT(PFNIsSpecial(*pui32MMapOffset)); -#endif - } - - psOffsetStruct = CreateOffsetStruct(psLinuxMemArea, *pui32MMapOffset, *pui32RealByteSize); - if (psOffsetStruct == IMG_NULL) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - goto exit_unlock; - } - - - list_add_tail(&psOffsetStruct->sMMapItem, &g_sMMapOffsetStructList); - - psOffsetStruct->bOnMMapList = IMG_TRUE; - - psOffsetStruct->ui32RefCount++; - - eError = PVRSRV_OK; - - - - - *pui32MMapOffset = *pui32MMapOffset << (PAGE_SHIFT - 12); - -exit_unlock: - LinuxUnLockMutex(&g_sMMapMutex); - - return eError; -} - - -PVRSRV_ERROR -PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle, -#else - IMG_HANDLE hMHandle, -#endif - IMG_BOOL *pbMUnmap, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32UserVAddr) -{ - LinuxMemArea *psLinuxMemArea; - PKV_OFFSET_STRUCT psOffsetStruct; - IMG_HANDLE hOSMemHandle; - PVRSRV_ERROR eError; - IMG_UINT32 ui32PID = OSGetCurrentProcessIDKM(); - - LinuxLockMutex(&g_sMMapMutex); - - PVR_ASSERT(PVRSRVGetMaxHandle(psPerProc->psHandleBase) <= MAX_MMAP_HANDLE); - - eError = PVRSRVLookupOSMemHandle(psPerProc->psHandleBase, &hOSMemHandle, hMHandle); - if (eError != PVRSRV_OK) - { -#if defined (SUPPORT_SID_INTERFACE) - PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %x failed", __FUNCTION__, hMHandle)); -#else - PVR_DPF((PVR_DBG_ERROR, "%s: Lookup of handle %p failed", __FUNCTION__, hMHandle)); -#endif - - goto exit_unlock; - } - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - - list_for_each_entry(psOffsetStruct, &psLinuxMemArea->sMMapOffsetStructList, sAreaItem) - { - if (psOffsetStruct->ui32PID == ui32PID) - { - if (psOffsetStruct->ui32RefCount == 0) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Attempt to release mmap data with zero reference count for offset struct 0x%p, memory area %p", __FUNCTION__, psOffsetStruct, psLinuxMemArea)); - eError = PVRSRV_ERROR_STILL_MAPPED; - goto exit_unlock; - } - - psOffsetStruct->ui32RefCount--; - - *pbMUnmap = (IMG_BOOL)((psOffsetStruct->ui32RefCount == 0) && (psOffsetStruct->ui32UserVAddr != 0)); - - *pui32UserVAddr = (*pbMUnmap) ? psOffsetStruct->ui32UserVAddr : 0; - *pui32RealByteSize = (*pbMUnmap) ? psOffsetStruct->ui32RealByteSize : 0; - - eError = PVRSRV_OK; - goto exit_unlock; - } - } - - -#if defined (SUPPORT_SID_INTERFACE) - PVR_DPF((PVR_DBG_ERROR, "%s: Mapping data not found for handle %x (memory area %p)", __FUNCTION__, hMHandle, psLinuxMemArea)); -#else - PVR_DPF((PVR_DBG_ERROR, "%s: Mapping data not found for handle %p (memory area %p)", __FUNCTION__, hMHandle, psLinuxMemArea)); -#endif - - eError = PVRSRV_ERROR_MAPPING_NOT_FOUND; - -exit_unlock: - LinuxUnLockMutex(&g_sMMapMutex); - - return eError; -} - -static inline PKV_OFFSET_STRUCT -FindOffsetStructByOffset(IMG_UINT32 ui32Offset, IMG_UINT32 ui32RealByteSize) -{ - PKV_OFFSET_STRUCT psOffsetStruct; -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - IMG_UINT32 ui32TID = GetCurrentThreadID(); -#endif - IMG_UINT32 ui32PID = OSGetCurrentProcessIDKM(); - - list_for_each_entry(psOffsetStruct, &g_sMMapOffsetStructList, sMMapItem) - { - if (ui32Offset == psOffsetStruct->ui32MMapOffset && ui32RealByteSize == psOffsetStruct->ui32RealByteSize && psOffsetStruct->ui32PID == ui32PID) - { -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - - if (!PFNIsPhysical(ui32Offset) || psOffsetStruct->ui32TID == ui32TID) -#endif - { - return psOffsetStruct; - } - } - } - - return IMG_NULL; -} - - -static IMG_BOOL -DoMapToUser(LinuxMemArea *psLinuxMemArea, - struct vm_area_struct* ps_vma, - IMG_UINT32 ui32ByteOffset) -{ - IMG_UINT32 ui32ByteSize; - - if (psLinuxMemArea->eAreaType == LINUX_MEM_AREA_SUB_ALLOC) - { - return DoMapToUser(LinuxMemAreaRoot(psLinuxMemArea), - ps_vma, - psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset + ui32ByteOffset); - } - - - ui32ByteSize = ps_vma->vm_end - ps_vma->vm_start; - PVR_ASSERT(ADDR_TO_PAGE_OFFSET(ui32ByteSize) == 0); - -#if defined (__sparc__) - -#error "SPARC not supported" -#endif - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - if (PFNIsPhysical(ps_vma->vm_pgoff)) - { - IMG_INT result; - - PVR_ASSERT(LinuxMemAreaPhysIsContig(psLinuxMemArea)); - PVR_ASSERT(LinuxMemAreaToCpuPFN(psLinuxMemArea, ui32ByteOffset) == ps_vma->vm_pgoff); - - result = IO_REMAP_PFN_RANGE(ps_vma, ps_vma->vm_start, ps_vma->vm_pgoff, ui32ByteSize, ps_vma->vm_page_prot); - - if(result == 0) - { - return IMG_TRUE; - } - - PVR_DPF((PVR_DBG_MESSAGE, "%s: Failed to map contiguous physical address range (%d), trying non-contiguous path", __FUNCTION__, result)); - } -#endif - - { - - IMG_UINT32 ulVMAPos; - IMG_UINT32 ui32ByteEnd = ui32ByteOffset + ui32ByteSize; - IMG_UINT32 ui32PA; -#if defined(PVR_MAKE_ALL_PFNS_SPECIAL) - IMG_BOOL bMixedMap = IMG_FALSE; -#endif - - for(ui32PA = ui32ByteOffset; ui32PA < ui32ByteEnd; ui32PA += PAGE_SIZE) - { - IMG_UINT32 pfn = LinuxMemAreaToCpuPFN(psLinuxMemArea, ui32PA); - - if (!pfn_valid(pfn)) - { -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - PVR_DPF((PVR_DBG_ERROR,"%s: Error - PFN invalid: 0x%x", __FUNCTION__, pfn)); - return IMG_FALSE; -#else - bMixedMap = IMG_TRUE; -#endif - } - } - -#if defined(PVR_MAKE_ALL_PFNS_SPECIAL) - if (bMixedMap) - { - ps_vma->vm_flags |= VM_MIXEDMAP; - } -#endif - - ulVMAPos = ps_vma->vm_start; - for(ui32PA = ui32ByteOffset; ui32PA < ui32ByteEnd; ui32PA += PAGE_SIZE) - { - IMG_UINT32 pfn; - IMG_INT result; - - pfn = LinuxMemAreaToCpuPFN(psLinuxMemArea, ui32PA); - -#if defined(PVR_MAKE_ALL_PFNS_SPECIAL) - if (bMixedMap) - { - result = vm_insert_mixed(ps_vma, ulVMAPos, pfn); - if(result != 0) - { - PVR_DPF((PVR_DBG_ERROR,"%s: Error - vm_insert_mixed failed (%d)", __FUNCTION__, result)); - return IMG_FALSE; - } - } - else -#endif - { - struct page *psPage; - - PVR_ASSERT(pfn_valid(pfn)); - - psPage = pfn_to_page(pfn); - - result = VM_INSERT_PAGE(ps_vma, ulVMAPos, psPage); - if(result != 0) - { - PVR_DPF((PVR_DBG_ERROR,"%s: Error - VM_INSERT_PAGE failed (%d)", __FUNCTION__, result)); - return IMG_FALSE; - } - } - ulVMAPos += PAGE_SIZE; - } - } - - return IMG_TRUE; -} - - -static IMG_VOID -MMapVOpenNoLock(struct vm_area_struct* ps_vma) -{ - PKV_OFFSET_STRUCT psOffsetStruct = (PKV_OFFSET_STRUCT)ps_vma->vm_private_data; - PVR_ASSERT(psOffsetStruct != IMG_NULL) - psOffsetStruct->ui32Mapped++; - PVR_ASSERT(!psOffsetStruct->bOnMMapList); - - if (psOffsetStruct->ui32Mapped > 1) - { - PVR_DPF((PVR_DBG_WARNING, "%s: Offset structure 0x%p is being shared across processes (psOffsetStruct->ui32Mapped: %u)", __FUNCTION__, psOffsetStruct, psOffsetStruct->ui32Mapped)); - PVR_ASSERT((ps_vma->vm_flags & VM_DONTCOPY) == 0); - } - -#if defined(DEBUG_LINUX_MMAP_AREAS) - - PVR_DPF((PVR_DBG_MESSAGE, - "%s: psLinuxMemArea 0x%p, KVAddress 0x%p MMapOffset %d, ui32Mapped %d", - __FUNCTION__, - psOffsetStruct->psLinuxMemArea, - LinuxMemAreaToCpuVAddr(psOffsetStruct->psLinuxMemArea), - psOffsetStruct->ui32MMapOffset, - psOffsetStruct->ui32Mapped)); -#endif -} - - -static void -MMapVOpen(struct vm_area_struct* ps_vma) -{ - LinuxLockMutex(&g_sMMapMutex); - - MMapVOpenNoLock(ps_vma); - - LinuxUnLockMutex(&g_sMMapMutex); -} - - -static IMG_VOID -MMapVCloseNoLock(struct vm_area_struct* ps_vma) -{ - PKV_OFFSET_STRUCT psOffsetStruct = (PKV_OFFSET_STRUCT)ps_vma->vm_private_data; - PVR_ASSERT(psOffsetStruct != IMG_NULL) - -#if defined(DEBUG_LINUX_MMAP_AREAS) - PVR_DPF((PVR_DBG_MESSAGE, - "%s: psLinuxMemArea %p, CpuVAddr %p ui32MMapOffset %d, ui32Mapped %d", - __FUNCTION__, - psOffsetStruct->psLinuxMemArea, - LinuxMemAreaToCpuVAddr(psOffsetStruct->psLinuxMemArea), - psOffsetStruct->ui32MMapOffset, - psOffsetStruct->ui32Mapped)); -#endif - - PVR_ASSERT(!psOffsetStruct->bOnMMapList); - psOffsetStruct->ui32Mapped--; - if (psOffsetStruct->ui32Mapped == 0) - { - if (psOffsetStruct->ui32RefCount != 0) - { - PVR_DPF((PVR_DBG_MESSAGE, "%s: psOffsetStruct %p has non-zero reference count (ui32RefCount = %u). User mode address of start of mapping: 0x%x", __FUNCTION__, psOffsetStruct, psOffsetStruct->ui32RefCount, psOffsetStruct->ui32UserVAddr)); - } - - DestroyOffsetStruct(psOffsetStruct); - } - - ps_vma->vm_private_data = NULL; -} - -static void -MMapVClose(struct vm_area_struct* ps_vma) -{ - LinuxLockMutex(&g_sMMapMutex); - - MMapVCloseNoLock(ps_vma); - - LinuxUnLockMutex(&g_sMMapMutex); -} - - -static struct vm_operations_struct MMapIOOps = -{ - .open=MMapVOpen, - .close=MMapVClose -}; - - -int -PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma) -{ - IMG_UINT32 ui32ByteSize; - PKV_OFFSET_STRUCT psOffsetStruct; - int iRetVal = 0; - - PVR_UNREFERENCED_PARAMETER(pFile); - - LinuxLockMutex(&g_sMMapMutex); - - ui32ByteSize = ps_vma->vm_end - ps_vma->vm_start; - - PVR_DPF((PVR_DBG_MESSAGE, "%s: Received mmap(2) request with ui32MMapOffset 0x%08lx," - " and ui32ByteSize %d(0x%08x)", - __FUNCTION__, - ps_vma->vm_pgoff, - ui32ByteSize, ui32ByteSize)); - - psOffsetStruct = FindOffsetStructByOffset(ps_vma->vm_pgoff, ui32ByteSize); - if (psOffsetStruct == IMG_NULL) - { -#if defined(SUPPORT_DRI_DRM) - LinuxUnLockMutex(&g_sMMapMutex); - -#if !defined(SUPPORT_DRI_DRM_EXT) - - return drm_mmap(pFile, ps_vma); -#else - - return -ENOENT; -#endif -#else - PVR_UNREFERENCED_PARAMETER(pFile); - - PVR_DPF((PVR_DBG_ERROR, - "%s: Attempted to mmap unregistered area at vm_pgoff 0x%lx", - __FUNCTION__, ps_vma->vm_pgoff)); - iRetVal = -EINVAL; -#endif - goto unlock_and_return; - } - list_del(&psOffsetStruct->sMMapItem); - psOffsetStruct->bOnMMapList = IMG_FALSE; - - - if (((ps_vma->vm_flags & VM_WRITE) != 0) && - ((ps_vma->vm_flags & VM_SHARED) == 0)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Cannot mmap non-shareable writable areas", __FUNCTION__)); - iRetVal = -EINVAL; - goto unlock_and_return; - } - - PVR_DPF((PVR_DBG_MESSAGE, "%s: Mapped psLinuxMemArea 0x%p\n", - __FUNCTION__, psOffsetStruct->psLinuxMemArea)); - - ps_vma->vm_flags |= VM_RESERVED; - ps_vma->vm_flags |= VM_IO; - - - ps_vma->vm_flags |= VM_DONTEXPAND; - - - ps_vma->vm_flags |= VM_DONTCOPY; - - ps_vma->vm_private_data = (void *)psOffsetStruct; - - switch(psOffsetStruct->psLinuxMemArea->ui32AreaFlags & PVRSRV_HAP_CACHETYPE_MASK) - { - case PVRSRV_HAP_CACHED: - - break; - case PVRSRV_HAP_WRITECOMBINE: - ps_vma->vm_page_prot = PGPROT_WC(ps_vma->vm_page_prot); - break; - case PVRSRV_HAP_UNCACHED: - ps_vma->vm_page_prot = PGPROT_UC(ps_vma->vm_page_prot); - break; - default: - PVR_DPF((PVR_DBG_ERROR, "%s: unknown cache type", __FUNCTION__)); - iRetVal = -EINVAL; - goto unlock_and_return; - } - - - ps_vma->vm_ops = &MMapIOOps; - - if(!DoMapToUser(psOffsetStruct->psLinuxMemArea, ps_vma, 0)) - { - iRetVal = -EAGAIN; - goto unlock_and_return; - } - - PVR_ASSERT(psOffsetStruct->ui32UserVAddr == 0) - - psOffsetStruct->ui32UserVAddr = ps_vma->vm_start; - - - if(psOffsetStruct->psLinuxMemArea->bNeedsCacheInvalidate) - { - IMG_UINT32 ui32RealByteSize, ui32ByteOffset; - IMG_VOID *pvBase; - - DetermineUsersSizeAndByteOffset(psOffsetStruct->psLinuxMemArea, - &ui32RealByteSize, - &ui32ByteOffset); - - ui32RealByteSize = psOffsetStruct->psLinuxMemArea->ui32ByteSize; - pvBase = (IMG_VOID *)ps_vma->vm_start + ui32ByteOffset; - - OSInvalidateCPUCacheRangeKM(psOffsetStruct->psLinuxMemArea, - pvBase, ui32RealByteSize); - psOffsetStruct->psLinuxMemArea->bNeedsCacheInvalidate = IMG_FALSE; - } - - - MMapVOpenNoLock(ps_vma); - - PVR_DPF((PVR_DBG_MESSAGE, "%s: Mapped area at offset 0x%08lx\n", - __FUNCTION__, ps_vma->vm_pgoff)); - -unlock_and_return: - if (iRetVal != 0 && psOffsetStruct != IMG_NULL) - { - DestroyOffsetStruct(psOffsetStruct); - } - - LinuxUnLockMutex(&g_sMMapMutex); - - return iRetVal; -} - - -#if defined(DEBUG_LINUX_MMAP_AREAS) - -static void ProcSeqStartstopMMapRegistations(struct seq_file *sfile,IMG_BOOL start) -{ - if(start) - { - LinuxLockMutex(&g_sMMapMutex); - } - else - { - LinuxUnLockMutex(&g_sMMapMutex); - } -} - - -static void* ProcSeqOff2ElementMMapRegistrations(struct seq_file *sfile, loff_t off) -{ - LinuxMemArea *psLinuxMemArea; - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - list_for_each_entry(psLinuxMemArea, &g_sMMapAreaList, sMMapItem) - { - PKV_OFFSET_STRUCT psOffsetStruct; - - list_for_each_entry(psOffsetStruct, &psLinuxMemArea->sMMapOffsetStructList, sAreaItem) - { - off--; - if (off == 0) - { - PVR_ASSERT(psOffsetStruct->psLinuxMemArea == psLinuxMemArea); - return (void*)psOffsetStruct; - } - } - } - return (void*)0; -} - -static void* ProcSeqNextMMapRegistrations(struct seq_file *sfile,void* el,loff_t off) -{ - return ProcSeqOff2ElementMMapRegistrations(sfile,off); -} - - -static void ProcSeqShowMMapRegistrations(struct seq_file *sfile, void *el) -{ - KV_OFFSET_STRUCT *psOffsetStruct = (KV_OFFSET_STRUCT*)el; - LinuxMemArea *psLinuxMemArea; - IMG_UINT32 ui32RealByteSize; - IMG_UINT32 ui32ByteOffset; - - if(el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf( sfile, -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - "Allocations registered for mmap: %u\n" - "In total these areas correspond to %u bytes\n" - "psLinuxMemArea " - "UserVAddr " - "KernelVAddr " - "CpuPAddr " - "MMapOffset " - "ByteLength " - "LinuxMemType " - "Pid Name Flags\n", -#else - "\n" - "\t%u\n" - "\t%u\n" - "\n", -#endif - g_ui32RegisteredAreas, - g_ui32TotalByteSize - ); - return; - } - - psLinuxMemArea = psOffsetStruct->psLinuxMemArea; - - DetermineUsersSizeAndByteOffset(psLinuxMemArea, - &ui32RealByteSize, - &ui32ByteOffset); - - seq_printf( sfile, -#if !defined(DEBUG_LINUX_XML_PROC_FILES) - "%-8p %08x %-8p %08x %08x %-8d %-24s %-5u %-8s %08x(%s)\n", -#else - "\n" - "\t%-8p\n" - "\t%-8x\n" - "\t%-8p\n" - "\t%08x\n" - "\t%08x\n" - "\t%-8d\n" - "\t%-24s\n" - "\t%-5u\n" - "\t%-8s\n" - "\t%08x\n" - "\t%s\n" - "\n", -#endif - psLinuxMemArea, - psOffsetStruct->ui32UserVAddr + ui32ByteOffset, - LinuxMemAreaToCpuVAddr(psLinuxMemArea), - LinuxMemAreaToCpuPAddr(psLinuxMemArea,0).uiAddr, - psOffsetStruct->ui32MMapOffset, - psLinuxMemArea->ui32ByteSize, - LinuxMemAreaTypeToString(psLinuxMemArea->eAreaType), - psOffsetStruct->ui32PID, - psOffsetStruct->pszName, - psLinuxMemArea->ui32AreaFlags, - HAPFlagsToString(psLinuxMemArea->ui32AreaFlags)); -} - -#endif - - -PVRSRV_ERROR -PVRMMapRegisterArea(LinuxMemArea *psLinuxMemArea) -{ - PVRSRV_ERROR eError; -#if defined(DEBUG) || defined(DEBUG_LINUX_MMAP_AREAS) - const IMG_CHAR *pszName = LinuxMemAreaTypeToString(LinuxMemAreaRootType(psLinuxMemArea)); -#endif - - LinuxLockMutex(&g_sMMapMutex); - -#if defined(DEBUG) || defined(DEBUG_LINUX_MMAP_AREAS) - PVR_DPF((PVR_DBG_MESSAGE, - "%s(%s, psLinuxMemArea 0x%p, ui32AllocFlags 0x%8x)", - __FUNCTION__, pszName, psLinuxMemArea, psLinuxMemArea->ui32AreaFlags)); -#endif - - PVR_ASSERT(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC || LinuxMemAreaRoot(psLinuxMemArea)->eAreaType != LINUX_MEM_AREA_SUB_ALLOC); - - - if(psLinuxMemArea->bMMapRegistered) - { - PVR_DPF((PVR_DBG_ERROR, "%s: psLinuxMemArea 0x%p is already registered", - __FUNCTION__, psLinuxMemArea)); - eError = PVRSRV_ERROR_INVALID_PARAMS; - goto exit_unlock; - } - - list_add_tail(&psLinuxMemArea->sMMapItem, &g_sMMapAreaList); - - psLinuxMemArea->bMMapRegistered = IMG_TRUE; - -#if defined(DEBUG_LINUX_MMAP_AREAS) - g_ui32RegisteredAreas++; - - if (psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC) - { - g_ui32TotalByteSize += psLinuxMemArea->ui32ByteSize; - } -#endif - - eError = PVRSRV_OK; - -exit_unlock: - LinuxUnLockMutex(&g_sMMapMutex); - - return eError; -} - - -PVRSRV_ERROR -PVRMMapRemoveRegisteredArea(LinuxMemArea *psLinuxMemArea) -{ - PVRSRV_ERROR eError; - PKV_OFFSET_STRUCT psOffsetStruct, psTmpOffsetStruct; - - LinuxLockMutex(&g_sMMapMutex); - - PVR_ASSERT(psLinuxMemArea->bMMapRegistered); - - list_for_each_entry_safe(psOffsetStruct, psTmpOffsetStruct, &psLinuxMemArea->sMMapOffsetStructList, sAreaItem) - { - if (psOffsetStruct->ui32Mapped != 0) - { - PVR_DPF((PVR_DBG_ERROR, "%s: psOffsetStruct 0x%p for memory area 0x0x%p is still mapped; psOffsetStruct->ui32Mapped %u", __FUNCTION__, psOffsetStruct, psLinuxMemArea, psOffsetStruct->ui32Mapped)); - eError = PVRSRV_ERROR_STILL_MAPPED; - goto exit_unlock; - } - else - { - - PVR_DPF((PVR_DBG_WARNING, "%s: psOffsetStruct 0x%p was never mapped", __FUNCTION__, psOffsetStruct)); - } - - PVR_ASSERT((psOffsetStruct->ui32Mapped == 0) && psOffsetStruct->bOnMMapList); - - DestroyOffsetStruct(psOffsetStruct); - } - - list_del(&psLinuxMemArea->sMMapItem); - - psLinuxMemArea->bMMapRegistered = IMG_FALSE; - -#if defined(DEBUG_LINUX_MMAP_AREAS) - g_ui32RegisteredAreas--; - if (psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC) - { - g_ui32TotalByteSize -= psLinuxMemArea->ui32ByteSize; - } -#endif - - eError = PVRSRV_OK; - -exit_unlock: - LinuxUnLockMutex(&g_sMMapMutex); - return eError; -} - - -PVRSRV_ERROR -LinuxMMapPerProcessConnect(PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc) -{ - PVR_UNREFERENCED_PARAMETER(psEnvPerProc); - - return PVRSRV_OK; -} - -IMG_VOID -LinuxMMapPerProcessDisconnect(PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc) -{ - PKV_OFFSET_STRUCT psOffsetStruct, psTmpOffsetStruct; - IMG_BOOL bWarn = IMG_FALSE; - IMG_UINT32 ui32PID = OSGetCurrentProcessIDKM(); - - PVR_UNREFERENCED_PARAMETER(psEnvPerProc); - - LinuxLockMutex(&g_sMMapMutex); - - list_for_each_entry_safe(psOffsetStruct, psTmpOffsetStruct, &g_sMMapOffsetStructList, sMMapItem) - { - if (psOffsetStruct->ui32PID == ui32PID) - { - if (!bWarn) - { - PVR_DPF((PVR_DBG_WARNING, "%s: process has unmapped offset structures. Removing them", __FUNCTION__)); - bWarn = IMG_TRUE; - } - PVR_ASSERT(psOffsetStruct->ui32Mapped == 0); - PVR_ASSERT(psOffsetStruct->bOnMMapList); - - DestroyOffsetStruct(psOffsetStruct); - } - } - - LinuxUnLockMutex(&g_sMMapMutex); -} - - -PVRSRV_ERROR LinuxMMapPerProcessHandleOptions(PVRSRV_HANDLE_BASE *psHandleBase) -{ - PVRSRV_ERROR eError; - - eError = PVRSRVSetMaxHandle(psHandleBase, MAX_MMAP_HANDLE); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"%s: failed to set handle limit (%d)", __FUNCTION__, eError)); - return eError; - } - - return eError; -} - - -IMG_VOID -PVRMMapInit(IMG_VOID) -{ - LinuxInitMutex(&g_sMMapMutex); - - g_psMemmapCache = KMemCacheCreateWrapper("img-mmap", sizeof(KV_OFFSET_STRUCT), 0, 0); - if (!g_psMemmapCache) - { - PVR_DPF((PVR_DBG_ERROR,"%s: failed to allocate kmem_cache", __FUNCTION__)); - goto error; - } - -#if defined(DEBUG_LINUX_MMAP_AREAS) - g_ProcMMap = CreateProcReadEntrySeq("mmap", NULL, - ProcSeqNextMMapRegistrations, - ProcSeqShowMMapRegistrations, - ProcSeqOff2ElementMMapRegistrations, - ProcSeqStartstopMMapRegistations - ); -#endif - return; - -error: - PVRMMapCleanup(); - return; -} - - -IMG_VOID -PVRMMapCleanup(IMG_VOID) -{ - PVRSRV_ERROR eError; - - if (!list_empty(&g_sMMapAreaList)) - { - LinuxMemArea *psLinuxMemArea, *psTmpMemArea; - - PVR_DPF((PVR_DBG_ERROR, "%s: Memory areas are still registered with MMap", __FUNCTION__)); - - PVR_TRACE(("%s: Unregistering memory areas", __FUNCTION__)); - list_for_each_entry_safe(psLinuxMemArea, psTmpMemArea, &g_sMMapAreaList, sMMapItem) - { - eError = PVRMMapRemoveRegisteredArea(psLinuxMemArea); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "%s: PVRMMapRemoveRegisteredArea failed (%d)", __FUNCTION__, eError)); - } - PVR_ASSERT(eError == PVRSRV_OK); - - LinuxMemAreaDeepFree(psLinuxMemArea); - } - } - PVR_ASSERT(list_empty((&g_sMMapAreaList))); - -#if defined(DEBUG_LINUX_MMAP_AREAS) - RemoveProcEntrySeq(g_ProcMMap); -#endif - - if(g_psMemmapCache) - { - KMemCacheDestroyWrapper(g_psMemmapCache); - g_psMemmapCache = NULL; - } -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.h deleted file mode 100644 index 224e652..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mmap.h +++ /dev/null @@ -1,122 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__MMAP_H__) -#define __MMAP_H__ - -#include -#include - -#if defined(VM_MIXEDMAP) -#define PVR_MAKE_ALL_PFNS_SPECIAL -#endif - -#include "perproc.h" -#include "mm.h" - -typedef struct KV_OFFSET_STRUCT_TAG -{ - - IMG_UINT32 ui32Mapped; - - - IMG_UINT32 ui32MMapOffset; - - IMG_UINT32 ui32RealByteSize; - - - LinuxMemArea *psLinuxMemArea; - -#if !defined(PVR_MAKE_ALL_PFNS_SPECIAL) - - IMG_UINT32 ui32TID; -#endif - - - IMG_UINT32 ui32PID; - - - IMG_BOOL bOnMMapList; - - - IMG_UINT32 ui32RefCount; - - - IMG_UINT32 ui32UserVAddr; - - -#if defined(DEBUG_LINUX_MMAP_AREAS) - const IMG_CHAR *pszName; -#endif - - - struct list_head sMMapItem; - - - struct list_head sAreaItem; -}KV_OFFSET_STRUCT, *PKV_OFFSET_STRUCT; - - - -IMG_VOID PVRMMapInit(IMG_VOID); - - -IMG_VOID PVRMMapCleanup(IMG_VOID); - - -PVRSRV_ERROR PVRMMapRegisterArea(LinuxMemArea *psLinuxMemArea); - - -PVRSRV_ERROR PVRMMapRemoveRegisteredArea(LinuxMemArea *psLinuxMemArea); - - -PVRSRV_ERROR PVRMMapOSMemHandleToMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle, -#else - IMG_HANDLE hMHandle, -#endif - IMG_UINT32 *pui32MMapOffset, - IMG_UINT32 *pui32ByteOffset, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32UserVAddr); - -PVRSRV_ERROR -PVRMMapReleaseMMapData(PVRSRV_PER_PROCESS_DATA *psPerProc, -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hMHandle, -#else - IMG_HANDLE hMHandle, -#endif - IMG_BOOL *pbMUnmap, - IMG_UINT32 *pui32RealByteSize, - IMG_UINT32 *pui32UserVAddr); - -int PVRMMap(struct file* pFile, struct vm_area_struct* ps_vma); - - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/module.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/module.c deleted file mode 100644 index 9899d85..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/module.c +++ /dev/null @@ -1,771 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#if defined(SUPPORT_DRI_DRM) -#define PVR_MOD_STATIC -#else - - #if defined(LDM_PLATFORM) - #define PVR_LDM_PLATFORM_MODULE - #define PVR_LDM_MODULE - #else - #if defined(LDM_PCI) - #define PVR_LDM_PCI_MODULE - #define PVR_LDM_MODULE - #endif - #endif -#define PVR_MOD_STATIC static -#endif - -#if defined(PVR_LDM_PLATFORM_PRE_REGISTERED) -#if !defined(NO_HARDWARE) -#define PVR_USE_PRE_REGISTERED_PLATFORM_DEV -#endif -#endif - -#include -#include -#include -#include -#include - -#if defined(SUPPORT_DRI_DRM) -#include -#if defined(PVR_SECURE_DRM_AUTH_EXPORT) -#include "env_perproc.h" -#endif -#endif - -#if defined(PVR_LDM_PLATFORM_MODULE) -#include -#endif - -#if defined(PVR_LDM_PCI_MODULE) -#include -#endif - -#if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) -#include -#endif - -#include "img_defs.h" -#include "services.h" -#include "kerneldisplay.h" -#include "kernelbuffer.h" -#include "syscommon.h" -#include "pvrmmap.h" -#include "mutils.h" -#include "mm.h" -#include "mmap.h" -#include "mutex.h" -#include "pvr_debug.h" -#include "srvkm.h" -#include "perproc.h" -#include "handle.h" -#include "pvr_bridge_km.h" -#include "proc.h" -#include "pvrmodule.h" -#include "private_data.h" -#include "lock.h" -#include "linkage.h" - -#if defined(SUPPORT_DRI_DRM) -#include "pvr_drm.h" -#endif -#define PVRSRV_MODNAME "PowerVR" -#define DRVNAME PVRSRV_MODNAME -#define DEVNAME PVRSRV_MODNAME - -#if defined(SUPPORT_DRI_DRM) -#define PRIVATE_DATA(pFile) ((pFile)->driver_priv) -#else -#define PRIVATE_DATA(pFile) ((pFile)->private_data) -#endif - -MODULE_SUPPORTED_DEVICE(DEVNAME); - -#if defined(PVRSRV_NEED_PVR_DPF) -#include -extern IMG_UINT32 gPVRDebugLevel; -module_param(gPVRDebugLevel, uint, 0644); -MODULE_PARM_DESC(gPVRDebugLevel, "Sets the level of debug output (default 0x7)"); -#endif - - -EXPORT_SYMBOL(PVRGetDisplayClassJTable); -EXPORT_SYMBOL(PVRGetBufferClassJTable); - -#if defined(PVR_LDM_MODULE) -static struct class *psPvrClass; -#endif - -#if !defined(SUPPORT_DRI_DRM) -static int AssignedMajorNumber; - -static int PVRSRVOpen(struct inode* pInode, struct file* pFile); -static int PVRSRVRelease(struct inode* pInode, struct file* pFile); - -static struct file_operations pvrsrv_fops = -{ - .owner=THIS_MODULE, - .unlocked_ioctl = PVRSRV_BridgeDispatchKM, - .open=PVRSRVOpen, - .release=PVRSRVRelease, - .mmap=PVRMMap, -}; -#endif - -PVRSRV_LINUX_MUTEX gPVRSRVLock; - -IMG_UINT32 gui32ReleasePID; - -#if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) -static IMG_UINT32 gPVRPowerLevel; -#endif - -#if defined(PVR_LDM_MODULE) - -#if defined(PVR_LDM_PLATFORM_MODULE) -#define LDM_DEV struct platform_device -#define LDM_DRV struct platform_driver -#endif - -#if defined(PVR_LDM_PCI_MODULE) -#define LDM_DEV struct pci_dev -#define LDM_DRV struct pci_driver -#endif -#if defined(PVR_LDM_PLATFORM_MODULE) -static int PVRSRVDriverRemove(LDM_DEV *device); -static int PVRSRVDriverProbe(LDM_DEV *device); -#endif -#if defined(PVR_LDM_PCI_MODULE) -static void PVRSRVDriverRemove(LDM_DEV *device); -static int PVRSRVDriverProbe(LDM_DEV *device, const struct pci_device_id *id); -#endif -static int PVRSRVDriverSuspend(LDM_DEV *device, pm_message_t state); -static void PVRSRVDriverShutdown(LDM_DEV *device); -static int PVRSRVDriverResume(LDM_DEV *device); - -#if defined(PVR_LDM_PCI_MODULE) -struct pci_device_id powervr_id_table[] __devinitdata = { - {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID)}, -#if defined (SYS_SGX_DEV1_DEVICE_ID) - {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID)}, -#endif - {0} -}; - -MODULE_DEVICE_TABLE(pci, powervr_id_table); -#endif - -#if defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) -static struct platform_device_id powervr_id_table[] __devinitdata = { - {SYS_SGX_DEV_NAME, 0}, - {} -}; -#endif - -static LDM_DRV powervr_driver = { -#if defined(PVR_LDM_PLATFORM_MODULE) - .driver = { - .name = DRVNAME, - }, -#endif -#if defined(PVR_LDM_PCI_MODULE) - .name = DRVNAME, -#endif -#if defined(PVR_LDM_PCI_MODULE) || defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) - .id_table = powervr_id_table, -#endif - .probe = PVRSRVDriverProbe, -#if defined(PVR_LDM_PLATFORM_MODULE) - .remove = PVRSRVDriverRemove, -#endif -#if defined(PVR_LDM_PCI_MODULE) - .remove = __devexit_p(PVRSRVDriverRemove), -#endif - .suspend = PVRSRVDriverSuspend, - .resume = PVRSRVDriverResume, - .shutdown = PVRSRVDriverShutdown, -}; - -LDM_DEV *gpsPVRLDMDev; - -#if defined(MODULE) && defined(PVR_LDM_PLATFORM_MODULE) && \ - !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) -static void PVRSRVDeviceRelease(struct device unref__ *pDevice) -{ -} - -static struct platform_device powervr_device = { - .name = DEVNAME, - .id = -1, - .dev = { - .release = PVRSRVDeviceRelease - } -}; -#endif - -#if defined(PVR_LDM_PLATFORM_MODULE) -static int PVRSRVDriverProbe(LDM_DEV *pDevice) -#endif -#if defined(PVR_LDM_PCI_MODULE) -static int __devinit PVRSRVDriverProbe(LDM_DEV *pDevice, const struct pci_device_id *id) -#endif -{ - SYS_DATA *psSysData; - - PVR_TRACE(("PVRSRVDriverProbe(pDevice=%p)", pDevice)); - -#if 0 - - if (PerDeviceSysInitialise((IMG_PVOID)pDevice) != PVRSRV_OK) - { - return -EINVAL; - } -#endif - - psSysData = SysAcquireDataNoCheck(); - if ( psSysData == IMG_NULL) - { - gpsPVRLDMDev = pDevice; - - if (SysInitialise() != PVRSRV_OK) - { - return -ENODEV; - } - } - - return 0; -} - - -#if defined (PVR_LDM_PLATFORM_MODULE) -static int PVRSRVDriverRemove(LDM_DEV *pDevice) -#endif -#if defined(PVR_LDM_PCI_MODULE) -static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice) -#endif -{ - SYS_DATA *psSysData; - - PVR_TRACE(("PVRSRVDriverRemove(pDevice=%p)", pDevice)); - - SysAcquireData(&psSysData); - -#if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) - if (gPVRPowerLevel != 0) - { - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0) == PVRSRV_OK) - { - gPVRPowerLevel = 0; - } - } -#endif - (void) SysDeinitialise(psSysData); - - gpsPVRLDMDev = IMG_NULL; - -#if 0 - if (PerDeviceSysDeInitialise((IMG_PVOID)pDevice) != PVRSRV_OK) - { - return -EINVAL; - } -#endif - -#if defined (PVR_LDM_PLATFORM_MODULE) - return 0; -#endif -#if defined (PVR_LDM_PCI_MODULE) - return; -#endif -} -#endif - - -#if defined(PVR_LDM_MODULE) || defined(PVR_DRI_DRM_PLATFORM_DEV) -PVR_MOD_STATIC void PVRSRVDriverShutdown(LDM_DEV *pDevice) -{ - PVR_TRACE(("PVRSRVDriverShutdown(pDevice=%p)", pDevice)); - - (void) PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3); -} - -#endif - - -#if defined(PVR_LDM_MODULE) || defined(SUPPORT_DRI_DRM) -#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) -int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state) -#else -PVR_MOD_STATIC int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) -#endif -{ -#if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) - PVR_TRACE(( "PVRSRVDriverSuspend(pDevice=%p)", pDevice)); - - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3) != PVRSRV_OK) - { - return -EINVAL; - } -#endif - return 0; -} - - -#if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) -int PVRSRVDriverResume(struct drm_device *pDevice) -#else -PVR_MOD_STATIC int PVRSRVDriverResume(LDM_DEV *pDevice) -#endif -{ -#if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) - PVR_TRACE(("PVRSRVDriverResume(pDevice=%p)", pDevice)); - - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0) != PVRSRV_OK) - { - return -EINVAL; - } -#endif - return 0; -} -#endif - - -#if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM) -IMG_INT PVRProcSetPowerLevel(struct file *file, const IMG_CHAR *buffer, IMG_UINT32 count, IMG_VOID *data) -{ - IMG_CHAR data_buffer[2]; - IMG_UINT32 PVRPowerLevel; - - if (count != sizeof(data_buffer)) - { - return -EINVAL; - } - else - { - if (copy_from_user(data_buffer, buffer, count)) - return -EINVAL; - if (data_buffer[count - 1] != '\n') - return -EINVAL; - PVRPowerLevel = data_buffer[0] - '0'; - if (PVRPowerLevel != gPVRPowerLevel) - { - if (PVRPowerLevel != 0) - { - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3) != PVRSRV_OK) - { - return -EINVAL; - } - } - else - { - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0) != PVRSRV_OK) - { - return -EINVAL; - } - } - - gPVRPowerLevel = PVRPowerLevel; - } - } - return (count); -} - -void ProcSeqShowPowerLevel(struct seq_file *sfile,void* el) -{ - seq_printf(sfile, "%lu\n", gPVRPowerLevel); -} - -#endif - -#if defined(SUPPORT_DRI_DRM) -int PVRSRVOpen(struct drm_device unref__ *dev, struct drm_file *pFile) -#else -static int PVRSRVOpen(struct inode unref__ * pInode, struct file *pFile) -#endif -{ - PVRSRV_FILE_PRIVATE_DATA *psPrivateData; - IMG_HANDLE hBlockAlloc; - int iRet = -ENOMEM; - PVRSRV_ERROR eError; - IMG_UINT32 ui32PID; -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; -#endif - - LinuxLockMutex(&gPVRSRVLock); - - ui32PID = OSGetCurrentProcessIDKM(); - - if (PVRSRVProcessConnect(ui32PID, 0) != PVRSRV_OK) - goto err_unlock; - -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - psEnvPerProc = PVRSRVPerProcessPrivateData(ui32PID); - if (psEnvPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "%s: No per-process private data", __FUNCTION__)); - goto err_unlock; - } -#endif - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_FILE_PRIVATE_DATA), - (IMG_PVOID *)&psPrivateData, - &hBlockAlloc, - "File Private Data"); - - if(eError != PVRSRV_OK) - goto err_unlock; - -#if defined (SUPPORT_SID_INTERFACE) - psPrivateData->hKernelMemInfo = 0; -#else - psPrivateData->hKernelMemInfo = NULL; -#endif -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - psPrivateData->psDRMFile = pFile; - - list_add_tail(&psPrivateData->sDRMAuthListItem, &psEnvPerProc->sDRMAuthListHead); -#endif - psPrivateData->ui32OpenPID = ui32PID; - psPrivateData->hBlockAlloc = hBlockAlloc; - PRIVATE_DATA(pFile) = psPrivateData; - iRet = 0; -err_unlock: - LinuxUnLockMutex(&gPVRSRVLock); - return iRet; -} - - -#if defined(SUPPORT_DRI_DRM) -void PVRSRVRelease(void *pvPrivData) -#else -static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile) -#endif -{ - PVRSRV_FILE_PRIVATE_DATA *psPrivateData; - - LinuxLockMutex(&gPVRSRVLock); - -#if defined(SUPPORT_DRI_DRM) - psPrivateData = (PVRSRV_FILE_PRIVATE_DATA *)pvPrivData; -#else - psPrivateData = PRIVATE_DATA(pFile); -#endif - if (psPrivateData != IMG_NULL) - { -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - list_del(&psPrivateData->sDRMAuthListItem); -#endif - - - gui32ReleasePID = psPrivateData->ui32OpenPID; - PVRSRVProcessDisconnect(psPrivateData->ui32OpenPID); - gui32ReleasePID = 0; - - OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_FILE_PRIVATE_DATA), - psPrivateData, psPrivateData->hBlockAlloc); - -#if !defined(SUPPORT_DRI_DRM) - PRIVATE_DATA(pFile) = IMG_NULL; -#endif - } - - LinuxUnLockMutex(&gPVRSRVLock); - -#if !defined(SUPPORT_DRI_DRM) - return 0; -#endif -} - - -#if defined(SUPPORT_DRI_DRM) -int PVRCore_Init(void) -#else -static int __init PVRCore_Init(void) -#endif -{ - int error; -#if !defined(PVR_LDM_MODULE) - PVRSRV_ERROR eError; -#else - struct device *psDev; -#endif - -#if !defined(SUPPORT_DRI_DRM) - - PVRDPFInit(); -#endif - PVR_TRACE(("PVRCore_Init")); - - LinuxInitMutex(&gPVRSRVLock); - - if (CreateProcEntries ()) - { - error = -ENOMEM; - return error; - } - - if (PVROSFuncInit() != PVRSRV_OK) - { - error = -ENOMEM; - goto init_failed; - } - - PVRLinuxMUtilsInit(); - - if(LinuxMMInit() != PVRSRV_OK) - { - error = -ENOMEM; - goto init_failed; - } - - LinuxBridgeInit(); - - PVRMMapInit(); - -#if defined(PVR_LDM_MODULE) - -#if defined(PVR_LDM_PLATFORM_MODULE) - if ((error = platform_driver_register(&powervr_driver)) != 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to register platform driver (%d)", error)); - - goto init_failed; - } - -#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) - if ((error = platform_device_register(&powervr_device)) != 0) - { - platform_driver_unregister(&powervr_driver); - - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to register platform device (%d)", error)); - - goto init_failed; - } -#endif -#endif - -#if defined(PVR_LDM_PCI_MODULE) - if ((error = pci_register_driver(&powervr_driver)) != 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to register PCI driver (%d)", error)); - - goto init_failed; - } -#endif - -#else - - if ((eError = SysInitialise()) != PVRSRV_OK) - { - error = -ENODEV; -#if defined(TCF_REV) && (TCF_REV == 110) - if(eError == PVRSRV_ERROR_NOT_SUPPORTED) - { - printk("\nAtlas wrapper (FPGA image) version mismatch"); - error = -ENODEV; - } -#endif - goto init_failed; - } -#endif - -#if !defined(SUPPORT_DRI_DRM) - AssignedMajorNumber = register_chrdev(0, DEVNAME, &pvrsrv_fops); - - if (AssignedMajorNumber <= 0) - { - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to get major number")); - - error = -EBUSY; - goto sys_deinit; - } - - PVR_TRACE(("PVRCore_Init: major device %d", AssignedMajorNumber)); -#endif - -#if defined(PVR_LDM_MODULE) - - psPvrClass = class_create(THIS_MODULE, "pvr"); - - if (IS_ERR(psPvrClass)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to create class (%ld)", PTR_ERR(psPvrClass))); - error = -EBUSY; - goto unregister_device; - } - - psDev = device_create(psPvrClass, NULL, MKDEV(AssignedMajorNumber, 0), -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) - NULL, -#endif - DEVNAME); - if (IS_ERR(psDev)) - { - PVR_DPF((PVR_DBG_ERROR, "PVRCore_Init: unable to create device (%ld)", PTR_ERR(psDev))); - error = -EBUSY; - goto destroy_class; - } -#endif - - return 0; - -#if defined(PVR_LDM_MODULE) -destroy_class: - class_destroy(psPvrClass); -unregister_device: - unregister_chrdev((IMG_UINT)AssignedMajorNumber, DRVNAME); -#endif -#if !defined(SUPPORT_DRI_DRM) -sys_deinit: -#endif -#if defined(PVR_LDM_MODULE) -#if defined(PVR_LDM_PCI_MODULE) - pci_unregister_driver(&powervr_driver); -#endif - -#if defined (PVR_LDM_PLATFORM_MODULE) -#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) - platform_device_unregister(&powervr_device); -#endif - platform_driver_unregister(&powervr_driver); -#endif - -#else - - { - SYS_DATA *psSysData; - - psSysData = SysAcquireDataNoCheck(); - if (psSysData != IMG_NULL) - { - (void) SysDeinitialise(psSysData); - } - } -#endif -init_failed: - PVRMMapCleanup(); - LinuxMMCleanup(); - LinuxBridgeDeInit(); - PVROSFuncDeInit(); - RemoveProcEntries(); - - return error; - -} - - -#if defined(SUPPORT_DRI_DRM) -void PVRCore_Cleanup(void) -#else -static void __exit PVRCore_Cleanup(void) -#endif -{ -#if !defined(PVR_LDM_MODULE) - SYS_DATA *psSysData; -#endif - PVR_TRACE(("PVRCore_Cleanup")); - -#if !defined(PVR_LDM_MODULE) - SysAcquireData(&psSysData); -#endif - -#if defined(PVR_LDM_MODULE) - device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0)); - class_destroy(psPvrClass); -#endif - -#if !defined(SUPPORT_DRI_DRM) -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22)) - if ( -#endif - unregister_chrdev((IMG_UINT)AssignedMajorNumber, DRVNAME) -#if !(LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22)) - ; -#else - ) - { - PVR_DPF((PVR_DBG_ERROR," can't unregister device major %d", AssignedMajorNumber)); - } -#endif -#endif - -#if defined(PVR_LDM_MODULE) - -#if defined(PVR_LDM_PCI_MODULE) - pci_unregister_driver(&powervr_driver); -#endif - -#if defined (PVR_LDM_PLATFORM_MODULE) -#if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) - platform_device_unregister(&powervr_device); -#endif - platform_driver_unregister(&powervr_driver); -#endif - -#else -#if defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) - if (gPVRPowerLevel != 0) - { - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0) == PVRSRV_OK) - { - gPVRPowerLevel = 0; - } - } -#endif - - (void) SysDeinitialise(psSysData); -#endif - - PVRMMapCleanup(); - - LinuxMMCleanup(); - - LinuxBridgeDeInit(); - - PVROSFuncDeInit(); - - RemoveProcEntries(); - - PVR_TRACE(("PVRCore_Cleanup: unloading")); -} - -#if !defined(SUPPORT_DRI_DRM) -module_init(PVRCore_Init); -module_exit(PVRCore_Cleanup); -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutex.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutex.h deleted file mode 100644 index b2c744a..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutex.h +++ /dev/null @@ -1,85 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __INCLUDED_LINUX_MUTEX_H_ -#define __INCLUDED_LINUX_MUTEX_H_ - -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) -#include -#else -#include -#endif - - - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) - -typedef struct mutex PVRSRV_LINUX_MUTEX; - -#else - - -typedef struct { - struct semaphore sSemaphore; - - atomic_t Count; -}PVRSRV_LINUX_MUTEX; - -#endif - - -static inline IMG_VOID LinuxInitMutex(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - mutex_init(psPVRSRVMutex); -} - -static inline IMG_VOID LinuxLockMutex(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - mutex_lock(psPVRSRVMutex); -} - -static inline PVRSRV_ERROR LinuxLockMutexInterruptible(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - if(mutex_lock_interruptible(psPVRSRVMutex) == -EINTR) { - return PVRSRV_ERROR_MUTEX_INTERRUPTIBLE_ERROR; - } else { - return PVRSRV_OK; - } -} - -static inline IMG_INT32 LinuxTryLockMutex(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - return mutex_trylock(psPVRSRVMutex); -} - -static inline IMG_VOID LinuxUnLockMutex(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - mutex_unlock(psPVRSRVMutex); -} - -static inline IMG_BOOL LinuxIsLockedMutex(PVRSRV_LINUX_MUTEX *psPVRSRVMutex) { - return (mutex_is_locked(psPVRSRVMutex)) ? IMG_TRUE : IMG_FALSE; -} - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.c deleted file mode 100644 index a012cf5..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.c +++ /dev/null @@ -1,136 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#include - -#include "img_defs.h" -#include "pvr_debug.h" -#include "mutils.h" - -#if defined(SUPPORT_LINUX_X86_PAT) -#define PAT_LINUX_X86_WC 1 - -#define PAT_X86_ENTRY_BITS 8 - -#define PAT_X86_BIT_PWT 1U -#define PAT_X86_BIT_PCD 2U -#define PAT_X86_BIT_PAT 4U -#define PAT_X86_BIT_MASK (PAT_X86_BIT_PAT | PAT_X86_BIT_PCD | PAT_X86_BIT_PWT) - -static IMG_BOOL g_write_combining_available = IMG_FALSE; - -#define PROT_TO_PAT_INDEX(v, B) ((v & _PAGE_ ## B) ? PAT_X86_BIT_ ## B : 0) - -static inline IMG_UINT -pvr_pat_index(pgprotval_t prot_val) -{ - IMG_UINT ret = 0; - pgprotval_t val = prot_val & _PAGE_CACHE_MASK; - - ret |= PROT_TO_PAT_INDEX(val, PAT); - ret |= PROT_TO_PAT_INDEX(val, PCD); - ret |= PROT_TO_PAT_INDEX(val, PWT); - - return ret; -} - -static inline IMG_UINT -pvr_pat_entry(u64 pat, IMG_UINT index) -{ - return (IMG_UINT)(pat >> (index * PAT_X86_ENTRY_BITS)) & PAT_X86_BIT_MASK; -} - -static IMG_VOID -PVRLinuxX86PATProbe(IMG_VOID) -{ - - if (cpu_has_pat) - { - u64 pat; - IMG_UINT pat_index; - IMG_UINT pat_entry; - - PVR_TRACE(("%s: PAT available", __FUNCTION__)); - - rdmsrl(MSR_IA32_CR_PAT, pat); - PVR_TRACE(("%s: Top 32 bits of PAT: 0x%.8x", __FUNCTION__, (IMG_UINT)(pat >> 32))); - PVR_TRACE(("%s: Bottom 32 bits of PAT: 0x%.8x", __FUNCTION__, (IMG_UINT)(pat))); - - pat_index = pvr_pat_index(_PAGE_CACHE_WC); - PVR_TRACE(("%s: PAT index for write combining: %u", __FUNCTION__, pat_index)); - - pat_entry = pvr_pat_entry(pat, pat_index); - PVR_TRACE(("%s: PAT entry for write combining: 0x%.2x (should be 0x%.2x)", __FUNCTION__, pat_entry, PAT_LINUX_X86_WC)); - -#if defined(SUPPORT_LINUX_X86_WRITECOMBINE) - g_write_combining_available = (IMG_BOOL)(pat_entry == PAT_LINUX_X86_WC); -#endif - } -#if defined(DEBUG) -#if defined(SUPPORT_LINUX_X86_WRITECOMBINE) - if (g_write_combining_available) - { - PVR_TRACE(("%s: Write combining available via PAT", __FUNCTION__)); - } - else - { - PVR_TRACE(("%s: Write combining not available", __FUNCTION__)); - } -#else - PVR_TRACE(("%s: Write combining disabled in driver build", __FUNCTION__)); -#endif -#endif -} - -pgprot_t -pvr_pgprot_writecombine(pgprot_t prot) -{ - - - return (g_write_combining_available) ? - __pgprot((pgprot_val(prot) & ~_PAGE_CACHE_MASK) | _PAGE_CACHE_WC) : pgprot_noncached(prot); -} -#endif - -IMG_VOID -PVRLinuxMUtilsInit(IMG_VOID) -{ -#if defined(SUPPORT_LINUX_X86_PAT) - PVRLinuxX86PATProbe(); -#endif -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.h deleted file mode 100644 index b2a8ba0..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/mutils.h +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __IMG_LINUX_MUTILS_H__ -#define __IMG_LINUX_MUTILS_H__ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#if !(defined(__i386__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))) -#if defined(SUPPORT_LINUX_X86_PAT) -#undef SUPPORT_LINUX_X86_PAT -#endif -#endif - -#if defined(SUPPORT_LINUX_X86_PAT) - pgprot_t pvr_pgprot_writecombine(pgprot_t prot); - #define PGPROT_WC(pv) pvr_pgprot_writecombine(pv) -#else - #if defined(__arm__) || defined(__sh__) - #define PGPROT_WC(pv) pgprot_writecombine(pv) - #else - #if defined(__i386__) || defined(__mips__) - #define PGPROT_WC(pv) pgprot_noncached(pv) - #else - #define PGPROT_WC(pv) pgprot_noncached(pv) - #error Unsupported architecture! - #endif - #endif -#endif - -#define PGPROT_UC(pv) pgprot_noncached(pv) - -#if defined(__i386__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - #define IOREMAP(pa, bytes) ioremap_cache(pa, bytes) -#else - #if defined(__arm__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) - #define IOREMAP(pa, bytes) ioremap_cached(pa, bytes) - #else - #define IOREMAP(pa, bytes) ioremap(pa, bytes) - #endif -#endif - -#if defined(SUPPORT_LINUX_X86_PAT) - #if defined(SUPPORT_LINUX_X86_WRITECOMBINE) - #define IOREMAP_WC(pa, bytes) ioremap_wc(pa, bytes) - #else - #define IOREMAP_WC(pa, bytes) ioremap_nocache(pa, bytes) - #endif -#else - #if defined(__arm__) - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - #define IOREMAP_WC(pa, bytes) ioremap_wc(pa, bytes) - #else - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) - #define IOREMAP_WC(pa, bytes) ioremap_nocache(pa, bytes) - #else - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)) - #define IOREMAP_WC(pa, bytes) __ioremap(pa, bytes, L_PTE_BUFFERABLE) - #else - #define IOREMAP_WC(pa, bytes) __ioremap(pa, bytes, , L_PTE_BUFFERABLE, 1) - #endif - #endif - #endif - #else - #define IOREMAP_WC(pa, bytes) ioremap_nocache(pa, bytes) - #endif -#endif - -#define IOREMAP_UC(pa, bytes) ioremap_nocache(pa, bytes) - -IMG_VOID PVRLinuxMUtilsInit(IMG_VOID); - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osfunc.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osfunc.c deleted file mode 100644 index 7d4f21b..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osfunc.c +++ /dev/null @@ -1,3115 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(PVR_LINUX_MISR_USING_WORKQUEUE) || \ - defined(PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE) || \ - defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || \ - defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) || \ - defined(PVR_LINUX_USING_WORKQUEUES) -#include -#endif - -#include "img_types.h" -#include "services_headers.h" -#include "mm.h" -#include "pvrmmap.h" -#include "mmap.h" -#include "env_data.h" -#include "proc.h" -#include "mutex.h" -#include "event.h" -#include "linkage.h" - -#define PVRSRV_MODNAME "PowerVR" - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) -#define ON_EACH_CPU(func, info, wait) on_each_cpu(func, info, wait) -#else -#define ON_EACH_CPU(func, info, wait) on_each_cpu(func, info, 0, wait) -#endif - -#if defined(PVR_LINUX_USING_WORKQUEUES) && !defined(CONFIG_PREEMPT) -#error "A preemptible Linux kernel is required when using workqueues" -#endif - -#if defined(EMULATOR) -#define EVENT_OBJECT_TIMEOUT_MS (2000) -#else -#define EVENT_OBJECT_TIMEOUT_MS (100) -#endif - -#if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID *ppvCpuVAddr, IMG_HANDLE *phBlockAlloc) -#else -PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID *ppvCpuVAddr, IMG_HANDLE *phBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line) -#endif -{ - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(phBlockAlloc); - - if (ui32Size > PAGE_SIZE) - { - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - *ppvCpuVAddr = _VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED, pszFilename, ui32Line); -#else - *ppvCpuVAddr = VMallocWrapper(ui32Size, PVRSRV_HAP_CACHED); -#endif - if (*ppvCpuVAddr) - { - return PVRSRV_OK; - } - } - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - *ppvCpuVAddr = _KMallocWrapper(ui32Size, GFP_KERNEL | __GFP_NOWARN, pszFilename, ui32Line); -#else - *ppvCpuVAddr = KMallocWrapper(ui32Size, GFP_KERNEL | __GFP_NOWARN); -#endif - if (!*ppvCpuVAddr) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - return PVRSRV_OK; -} - -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) - -static inline int is_vmalloc_addr(const void *pvCpuVAddr) -{ - unsigned long lAddr = (unsigned long)pvCpuVAddr; - return lAddr >= VMALLOC_START && lAddr < VMALLOC_END; -} - -#endif - -#if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) -PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc) -#else -PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line) -#endif -{ - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(ui32Size); - PVR_UNREFERENCED_PARAMETER(hBlockAlloc); - - if (is_vmalloc_addr(pvCpuVAddr)) - { -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - _VFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); -#else - VFreeWrapper(pvCpuVAddr); -#endif - } - else - { -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - _KFreeWrapper(pvCpuVAddr, pszFilename, ui32Line); -#else - KFreeWrapper(pvCpuVAddr); -#endif - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR -OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PageSize, - IMG_VOID **ppvCpuVAddr, - IMG_HANDLE *phOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea; - - PVR_UNREFERENCED_PARAMETER(ui32PageSize); - -#if 0 - - if(ui32AllocFlags & PVRSRV_HAP_SINGLE_PROCESS) - { - ui32AllocFlags &= ~PVRSRV_HAP_SINGLE_PROCESS; - ui32AllocFlags |= PVRSRV_HAP_MULTI_PROCESS; - } -#endif - - switch(ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - { - psLinuxMemArea = NewVMallocLinuxMemArea(ui32Size, ui32AllocFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - break; - } - case PVRSRV_HAP_SINGLE_PROCESS: - { - - - psLinuxMemArea = NewAllocPagesLinuxMemArea(ui32Size, ui32AllocFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - - case PVRSRV_HAP_MULTI_PROCESS: - { - -#if defined(VIVT_CACHE) || defined(__sh__) - - ui32AllocFlags &= ~PVRSRV_HAP_CACHED; -#endif - psLinuxMemArea = NewVMallocLinuxMemArea(ui32Size, ui32AllocFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - default: - PVR_DPF((PVR_DBG_ERROR, "OSAllocPages: invalid flags 0x%x\n", ui32AllocFlags)); - *ppvCpuVAddr = NULL; - *phOSMemHandle = (IMG_HANDLE)0; - return PVRSRV_ERROR_INVALID_PARAMS; - } - - *ppvCpuVAddr = LinuxMemAreaToCpuVAddr(psLinuxMemArea); - *phOSMemHandle = psLinuxMemArea; - - LinuxMemAreaRegister(psLinuxMemArea); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR -OSFreePages(IMG_UINT32 ui32AllocFlags, IMG_UINT32 ui32Bytes, IMG_VOID *pvCpuVAddr, IMG_HANDLE hOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea; - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - switch(ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - break; - case PVRSRV_HAP_SINGLE_PROCESS: - case PVRSRV_HAP_MULTI_PROCESS: - eError = PVRMMapRemoveRegisteredArea(psLinuxMemArea); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, - "OSFreePages(ui32AllocFlags=0x%08X, ui32Bytes=%d, " - "pvCpuVAddr=%p, hOSMemHandle=%p) FAILED!", - ui32AllocFlags, ui32Bytes, pvCpuVAddr, hOSMemHandle)); - return eError; - } - break; - default: - PVR_DPF((PVR_DBG_ERROR,"%s: invalid flags 0x%x\n", - __FUNCTION__, ui32AllocFlags)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - LinuxMemAreaDeepFree(psLinuxMemArea); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR -OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32ByteOffset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandleRet) -{ - LinuxMemArea *psParentLinuxMemArea, *psLinuxMemArea; - PVRSRV_ERROR eError; - - psParentLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - psLinuxMemArea = NewSubLinuxMemArea(psParentLinuxMemArea, ui32ByteOffset, ui32Bytes); - if(!psLinuxMemArea) - { - *phOSMemHandleRet = NULL; - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - *phOSMemHandleRet = psLinuxMemArea; - - - if(ui32Flags & PVRSRV_HAP_KERNEL_ONLY) - { - return PVRSRV_OK; - } - - eError = PVRMMapRegisterArea(psLinuxMemArea); - if(eError != PVRSRV_OK) - { - goto failed_register_area; - } - - return PVRSRV_OK; - -failed_register_area: - *phOSMemHandleRet = NULL; - LinuxMemAreaDeepFree(psLinuxMemArea); - return eError; -} - -PVRSRV_ERROR -OSReleaseSubMemHandle(IMG_VOID *hOSMemHandle, IMG_UINT32 ui32Flags) -{ - LinuxMemArea *psLinuxMemArea; - PVRSRV_ERROR eError; - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_SUB_ALLOC); - - if((ui32Flags & PVRSRV_HAP_KERNEL_ONLY) == 0) - { - eError = PVRMMapRemoveRegisteredArea(psLinuxMemArea); - if(eError != PVRSRV_OK) - { - return eError; - } - } - LinuxMemAreaDeepFree(psLinuxMemArea); - - return PVRSRV_OK; -} - - -IMG_CPU_PHYADDR -OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_UINT32 ui32ByteOffset) -{ - PVR_ASSERT(hOSMemHandle); - - return LinuxMemAreaToCpuPAddr(hOSMemHandle, ui32ByteOffset); -} - - - -IMG_VOID OSMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_UINT32 ui32Size) -{ -#if defined(USE_UNOPTIMISED_MEMCPY) - IMG_UINT8 *Src,*Dst; - IMG_INT i; - - Src=(IMG_UINT8 *)pvSrc; - Dst=(IMG_UINT8 *)pvDst; - for(i=0;iui32Lock; - - if(*pui32Access) - { - if(psResource->ui32ID == ui32ID) - { - psResource->ui32ID = 0; - *pui32Access = 0; - } - else - { - PVR_DPF((PVR_DBG_MESSAGE,"OSBreakResourceLock: Resource is not locked for this process.")); - } - } - else - { - PVR_DPF((PVR_DBG_MESSAGE,"OSBreakResourceLock: Resource is not locked")); - } -} - - -PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource) -{ - psResource->ui32ID = 0; - psResource->ui32Lock = 0; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSDestroyResource (PVRSRV_RESOURCE *psResource) -{ - OSBreakResourceLock (psResource, psResource->ui32ID); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSInitEnvData(IMG_PVOID *ppvEnvSpecificData) -{ - ENV_DATA *psEnvData; - PVRSRV_ERROR eError; - - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(ENV_DATA), (IMG_VOID **)&psEnvData, IMG_NULL, - "Environment Data"); - if (eError != PVRSRV_OK) - { - return eError; - } - - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, PVRSRV_MAX_BRIDGE_IN_SIZE + PVRSRV_MAX_BRIDGE_OUT_SIZE, - &psEnvData->pvBridgeData, IMG_NULL, - "Bridge Data"); - if (eError != PVRSRV_OK) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(ENV_DATA), psEnvData, IMG_NULL); - - return eError; - } - - - - psEnvData->bMISRInstalled = IMG_FALSE; - psEnvData->bLISRInstalled = IMG_FALSE; - - - *ppvEnvSpecificData = psEnvData; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSDeInitEnvData(IMG_PVOID pvEnvSpecificData) -{ - ENV_DATA *psEnvData = (ENV_DATA*)pvEnvSpecificData; - - PVR_ASSERT(!psEnvData->bMISRInstalled); - PVR_ASSERT(!psEnvData->bLISRInstalled); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, PVRSRV_MAX_BRIDGE_IN_SIZE + PVRSRV_MAX_BRIDGE_OUT_SIZE, psEnvData->pvBridgeData, IMG_NULL); - psEnvData->pvBridgeData = IMG_NULL; - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(ENV_DATA), pvEnvSpecificData, IMG_NULL); - - - return PVRSRV_OK; -} - - - -IMG_VOID OSReleaseThreadQuanta(IMG_VOID) -{ - schedule(); -} - - - -IMG_UINT32 OSClockus(IMG_VOID) -{ - IMG_UINT32 time, j = jiffies; - - time = j * (1000000 / HZ); - - return time; -} - - -IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus) -{ - udelay(ui32Timeus); -} - - -IMG_VOID OSSleepms(IMG_UINT32 ui32Timems) -{ - msleep(ui32Timems); -} - - - -IMG_HANDLE OSFuncHighResTimerCreate(IMG_VOID) -{ - - return (IMG_HANDLE) 1; -} - - -IMG_UINT32 OSFuncHighResTimerGetus(IMG_HANDLE hTimer) -{ - return (IMG_UINT32) jiffies_to_usecs(jiffies); -} - - -IMG_VOID OSFuncHighResTimerDestroy(IMG_HANDLE hTimer) -{ - PVR_UNREFERENCED_PARAMETER(hTimer); -} - -IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID) -{ - if (in_interrupt()) - { - return KERNEL_ID; - } - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) - return (IMG_UINT32)current->pgrp; -#else -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - return (IMG_UINT32)task_tgid_nr(current); -#else - return (IMG_UINT32)current->tgid; -#endif -#endif -} - - -IMG_UINT32 OSGetPageSize(IMG_VOID) -{ -#if defined(__sh__) - IMG_UINT32 ui32ReturnValue = PAGE_SIZE; - - return (ui32ReturnValue); -#else - return PAGE_SIZE; -#endif -} - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)) -static irqreturn_t DeviceISRWrapper(int irq, void *dev_id -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) - , struct pt_regs *regs -#endif - ) -{ - PVRSRV_DEVICE_NODE *psDeviceNode; - IMG_BOOL bStatus = IMG_FALSE; - - PVR_UNREFERENCED_PARAMETER(irq); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) - PVR_UNREFERENCED_PARAMETER(regs); -#endif - psDeviceNode = (PVRSRV_DEVICE_NODE*)dev_id; - if(!psDeviceNode) - { - PVR_DPF((PVR_DBG_ERROR, "DeviceISRWrapper: invalid params\n")); - goto out; - } - - bStatus = PVRSRVDeviceLISR(psDeviceNode); - - if (bStatus) - { - OSScheduleMISR((IMG_VOID *)psDeviceNode->psSysData); - } - -out: -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) - return bStatus ? IRQ_HANDLED : IRQ_NONE; -#endif -} - - - -static irqreturn_t SystemISRWrapper(int irq, void *dev_id -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) - , struct pt_regs *regs -#endif - ) -{ - SYS_DATA *psSysData; - IMG_BOOL bStatus = IMG_FALSE; - - PVR_UNREFERENCED_PARAMETER(irq); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) - PVR_UNREFERENCED_PARAMETER(regs); -#endif - psSysData = (SYS_DATA *)dev_id; - if(!psSysData) - { - PVR_DPF((PVR_DBG_ERROR, "SystemISRWrapper: invalid params\n")); - goto out; - } - - bStatus = PVRSRVSystemLISR(psSysData); - - if (bStatus) - { - OSScheduleMISR((IMG_VOID *)psSysData); - } - -out: -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) - return bStatus ? IRQ_HANDLED : IRQ_NONE; -#endif -} -PVRSRV_ERROR OSInstallDeviceLISR(IMG_VOID *pvSysData, - IMG_UINT32 ui32Irq, - IMG_CHAR *pszISRName, - IMG_VOID *pvDeviceNode) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (psEnvData->bLISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallDeviceLISR: An ISR has already been installed: IRQ %d cookie %p", psEnvData->ui32IRQ, psEnvData->pvISRCookie)); - return PVRSRV_ERROR_ISR_ALREADY_INSTALLED; - } - - PVR_TRACE(("Installing device LISR %s on IRQ %d with cookie %p", pszISRName, ui32Irq, pvDeviceNode)); - - if(request_irq(ui32Irq, DeviceISRWrapper, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) - SA_SHIRQ -#else - IRQF_SHARED -#endif - , pszISRName, pvDeviceNode)) - { - PVR_DPF((PVR_DBG_ERROR,"OSInstallDeviceLISR: Couldn't install device LISR on IRQ %d", ui32Irq)); - - return PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR; - } - - psEnvData->ui32IRQ = ui32Irq; - psEnvData->pvISRCookie = pvDeviceNode; - psEnvData->bLISRInstalled = IMG_TRUE; - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSUninstallDeviceLISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (!psEnvData->bLISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSUninstallDeviceLISR: No LISR has been installed")); - return PVRSRV_ERROR_ISR_NOT_INSTALLED; - } - - PVR_TRACE(("Uninstalling device LISR on IRQ %d with cookie %p", psEnvData->ui32IRQ, psEnvData->pvISRCookie)); - - free_irq(psEnvData->ui32IRQ, psEnvData->pvISRCookie); - - psEnvData->bLISRInstalled = IMG_FALSE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSInstallSystemLISR(IMG_VOID *pvSysData, IMG_UINT32 ui32Irq) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (psEnvData->bLISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallSystemLISR: An LISR has already been installed: IRQ %d cookie %p", psEnvData->ui32IRQ, psEnvData->pvISRCookie)); - return PVRSRV_ERROR_ISR_ALREADY_INSTALLED; - } - - PVR_TRACE(("Installing system LISR on IRQ %d with cookie %p", ui32Irq, pvSysData)); - - if(request_irq(ui32Irq, SystemISRWrapper, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) - SA_SHIRQ -#else - IRQF_SHARED -#endif - , PVRSRV_MODNAME, pvSysData)) - { - PVR_DPF((PVR_DBG_ERROR,"OSInstallSystemLISR: Couldn't install system LISR on IRQ %d", ui32Irq)); - - return PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR; - } - - psEnvData->ui32IRQ = ui32Irq; - psEnvData->pvISRCookie = pvSysData; - psEnvData->bLISRInstalled = IMG_TRUE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSUninstallSystemLISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (!psEnvData->bLISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSUninstallSystemLISR: No LISR has been installed")); - return PVRSRV_ERROR_ISR_NOT_INSTALLED; - } - - PVR_TRACE(("Uninstalling system LISR on IRQ %d with cookie %p", psEnvData->ui32IRQ, psEnvData->pvISRCookie)); - - free_irq(psEnvData->ui32IRQ, psEnvData->pvISRCookie); - - psEnvData->bLISRInstalled = IMG_FALSE; - - return PVRSRV_OK; -} - -#if defined(PVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE) -static void MISRWrapper( -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) - void *data -#else - struct work_struct *data -#endif -) -{ - ENV_DATA *psEnvData = container_of(data, ENV_DATA, sMISRWork); - SYS_DATA *psSysData = (SYS_DATA *)psEnvData->pvMISRData; - - PVRSRVMISR(psSysData); -} - - -PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallMISR: An MISR has already been installed")); - return PVRSRV_ERROR_ISR_ALREADY_INSTALLED; - } - - PVR_TRACE(("Installing MISR with cookie %p", pvSysData)); - - psEnvData->psWorkQueue = create_singlethread_workqueue("pvr_workqueue"); - - if (psEnvData->psWorkQueue == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallMISR: create_singlethreaded_workqueue failed")); - return PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD; - } - - INIT_WORK(&psEnvData->sMISRWork, MISRWrapper -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) - , (void *)&psEnvData->sMISRWork -#endif - ); - - psEnvData->pvMISRData = pvSysData; - psEnvData->bMISRInstalled = IMG_TRUE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (!psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSUninstallMISR: No MISR has been installed")); - return PVRSRV_ERROR_ISR_NOT_INSTALLED; - } - - PVR_TRACE(("Uninstalling MISR")); - - destroy_workqueue(psEnvData->psWorkQueue); - - psEnvData->bMISRInstalled = IMG_FALSE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA*)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - queue_work(psEnvData->psWorkQueue, &psEnvData->sMISRWork); - } - - return PVRSRV_OK; -} -#else -#if defined(PVR_LINUX_MISR_USING_WORKQUEUE) -static void MISRWrapper( -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) - void *data -#else - struct work_struct *data -#endif -) -{ - ENV_DATA *psEnvData = container_of(data, ENV_DATA, sMISRWork); - SYS_DATA *psSysData = (SYS_DATA *)psEnvData->pvMISRData; - - PVRSRVMISR(psSysData); -} - - -PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallMISR: An MISR has already been installed")); - return PVRSRV_ERROR_ISR_ALREADY_INSTALLED; - } - - PVR_TRACE(("Installing MISR with cookie %p", pvSysData)); - - INIT_WORK(&psEnvData->sMISRWork, MISRWrapper -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) - , (void *)&psEnvData->sMISRWork -#endif - ); - - psEnvData->pvMISRData = pvSysData; - psEnvData->bMISRInstalled = IMG_TRUE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (!psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSUninstallMISR: No MISR has been installed")); - return PVRSRV_ERROR_ISR_NOT_INSTALLED; - } - - PVR_TRACE(("Uninstalling MISR")); - - flush_scheduled_work(); - - psEnvData->bMISRInstalled = IMG_FALSE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA*)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - schedule_work(&psEnvData->sMISRWork); - } - - return PVRSRV_OK; -} - -#else - - -static void MISRWrapper(unsigned long data) -{ - SYS_DATA *psSysData; - - psSysData = (SYS_DATA *)data; - - PVRSRVMISR(psSysData); -} - - -PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSInstallMISR: An MISR has already been installed")); - return PVRSRV_ERROR_ISR_ALREADY_INSTALLED; - } - - PVR_TRACE(("Installing MISR with cookie %p", pvSysData)); - - tasklet_init(&psEnvData->sMISRTasklet, MISRWrapper, (unsigned long)pvSysData); - - psEnvData->bMISRInstalled = IMG_TRUE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA *)psSysData->pvEnvSpecificData; - - if (!psEnvData->bMISRInstalled) - { - PVR_DPF((PVR_DBG_ERROR, "OSUninstallMISR: No MISR has been installed")); - return PVRSRV_ERROR_ISR_NOT_INSTALLED; - } - - PVR_TRACE(("Uninstalling MISR")); - - tasklet_kill(&psEnvData->sMISRTasklet); - - psEnvData->bMISRInstalled = IMG_FALSE; - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData) -{ - SYS_DATA *psSysData = (SYS_DATA*)pvSysData; - ENV_DATA *psEnvData = (ENV_DATA*)psSysData->pvEnvSpecificData; - - if (psEnvData->bMISRInstalled) - { - tasklet_schedule(&psEnvData->sMISRTasklet); - } - - return PVRSRV_OK; -} - -#endif -#endif - -#endif - -IMG_VOID OSPanic(IMG_VOID) -{ - BUG(); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) -#define OS_TAS(p) xchg((p), 1) -#else -#define OS_TAS(p) tas(p) -#endif -PVRSRV_ERROR OSLockResource ( PVRSRV_RESOURCE *psResource, - IMG_UINT32 ui32ID) - -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if(!OS_TAS(&psResource->ui32Lock)) - psResource->ui32ID = ui32ID; - else - eError = PVRSRV_ERROR_UNABLE_TO_LOCK_RESOURCE; - - return eError; -} - - -PVRSRV_ERROR OSUnlockResource (PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID) -{ - volatile IMG_UINT32 *pui32Access = (volatile IMG_UINT32 *)&psResource->ui32Lock; - PVRSRV_ERROR eError = PVRSRV_OK; - - if(*pui32Access) - { - if(psResource->ui32ID == ui32ID) - { - psResource->ui32ID = 0; - smp_mb(); - *pui32Access = 0; - } - else - { - PVR_DPF((PVR_DBG_ERROR,"OSUnlockResource: Resource %p is not locked with expected value.", psResource)); - PVR_DPF((PVR_DBG_MESSAGE,"Should be %x is actually %x", ui32ID, psResource->ui32ID)); - eError = PVRSRV_ERROR_INVALID_LOCK_ID; - } - } - else - { - PVR_DPF((PVR_DBG_ERROR,"OSUnlockResource: Resource %p is not locked", psResource)); - eError = PVRSRV_ERROR_RESOURCE_NOT_LOCKED; - } - - return eError; -} - - -IMG_BOOL OSIsResourceLocked (PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID) -{ - volatile IMG_UINT32 *pui32Access = (volatile IMG_UINT32 *)&psResource->ui32Lock; - - return (*(volatile IMG_UINT32 *)pui32Access == 1) && (psResource->ui32ID == ui32ID) - ? IMG_TRUE - : IMG_FALSE; -} - - -#if !defined(SYS_CUSTOM_POWERLOCK_WRAP) -PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock) -{ - PVR_UNREFERENCED_PARAMETER(bTryLock); - - return PVRSRV_OK; -} - -IMG_VOID OSPowerLockUnwrap (IMG_VOID) -{ -} -#endif - - -IMG_CPU_PHYADDR OSMapLinToCPUPhys(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvLinAddr) -{ - IMG_CPU_PHYADDR CpuPAddr; - LinuxMemArea *psLinuxMemArea; - IMG_UINTPTR_T uiByteOffset; - IMG_UINT32 ui32ByteOffset; - - PVR_ASSERT(hOSMemHandle != IMG_NULL); - - - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - uiByteOffset = (IMG_UINTPTR_T)pvLinAddr - (IMG_UINTPTR_T)LinuxMemAreaToCpuVAddr(psLinuxMemArea); - ui32ByteOffset = (IMG_UINT32)uiByteOffset; - - CpuPAddr = LinuxMemAreaToCpuPAddr(hOSMemHandle, ui32ByteOffset); - - return CpuPAddr; -} - - -IMG_VOID * -OSMapPhysToLin(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_HANDLE *phOSMemHandle) -{ - if(ui32MappingFlags & PVRSRV_HAP_KERNEL_ONLY) - { - - if(phOSMemHandle == IMG_NULL) - { - IMG_VOID *pvIORemapCookie; - pvIORemapCookie = IORemapWrapper(BasePAddr, ui32Bytes, ui32MappingFlags); - if(pvIORemapCookie == IMG_NULL) - { - return IMG_NULL; - } - return pvIORemapCookie; - } - else - { - LinuxMemArea *psLinuxMemArea = NewIORemapLinuxMemArea(BasePAddr, ui32Bytes, ui32MappingFlags); - - if(psLinuxMemArea == IMG_NULL) - { - return IMG_NULL; - } - - *phOSMemHandle = (IMG_HANDLE)psLinuxMemArea; - return LinuxMemAreaToCpuVAddr(psLinuxMemArea); - } - } - - PVR_DPF((PVR_DBG_ERROR, - "OSMapPhysToLin should only be used with PVRSRV_HAP_KERNEL_ONLY " - " (Use OSReservePhys otherwise)")); - - return IMG_NULL; -} - -IMG_BOOL -OSUnMapPhysToLin(IMG_VOID *pvLinAddr, IMG_UINT32 ui32Bytes, IMG_UINT32 ui32MappingFlags, IMG_HANDLE hOSMemHandle) -{ - PVR_TRACE(("%s: unmapping %d bytes from %p", __FUNCTION__, ui32Bytes, pvLinAddr)); - - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - - if(ui32MappingFlags & PVRSRV_HAP_KERNEL_ONLY) - { - if (hOSMemHandle == IMG_NULL) - { - IOUnmapWrapper(pvLinAddr); - } - else - { - LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - PVR_ASSERT(LinuxMemAreaToCpuVAddr(psLinuxMemArea) == pvLinAddr); - - FreeIORemapLinuxMemArea(psLinuxMemArea); - } - - return IMG_TRUE; - } - - PVR_DPF((PVR_DBG_ERROR, - "OSUnMapPhysToLin should only be used with PVRSRV_HAP_KERNEL_ONLY " - " (Use OSUnReservePhys otherwise)")); - return IMG_FALSE; -} - -static PVRSRV_ERROR -RegisterExternalMem(IMG_SYS_PHYADDR *pBasePAddr, - IMG_VOID *pvCPUVAddr, - IMG_UINT32 ui32Bytes, - IMG_BOOL bPhysContig, - IMG_UINT32 ui32MappingFlags, - IMG_HANDLE *phOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea; - - switch(ui32MappingFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - { - psLinuxMemArea = NewExternalKVLinuxMemArea(pBasePAddr, pvCPUVAddr, ui32Bytes, bPhysContig, ui32MappingFlags); - - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - break; - } - case PVRSRV_HAP_SINGLE_PROCESS: - { - psLinuxMemArea = NewExternalKVLinuxMemArea(pBasePAddr, pvCPUVAddr, ui32Bytes, bPhysContig, ui32MappingFlags); - - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - case PVRSRV_HAP_MULTI_PROCESS: - { - -#if defined(VIVT_CACHE) || defined(__sh__) - - ui32MappingFlags &= ~PVRSRV_HAP_CACHED; -#endif - psLinuxMemArea = NewExternalKVLinuxMemArea(pBasePAddr, pvCPUVAddr, ui32Bytes, bPhysContig, ui32MappingFlags); - - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - default: - PVR_DPF((PVR_DBG_ERROR,"OSRegisterMem : invalid flags 0x%x\n", ui32MappingFlags)); - *phOSMemHandle = (IMG_HANDLE)0; - return PVRSRV_ERROR_INVALID_FLAGS; - } - - *phOSMemHandle = (IMG_HANDLE)psLinuxMemArea; - - LinuxMemAreaRegister(psLinuxMemArea); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR -OSRegisterMem(IMG_CPU_PHYADDR BasePAddr, - IMG_VOID *pvCPUVAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_HANDLE *phOSMemHandle) -{ - IMG_SYS_PHYADDR SysPAddr = SysCpuPAddrToSysPAddr(BasePAddr); - - return RegisterExternalMem(&SysPAddr, pvCPUVAddr, ui32Bytes, IMG_TRUE, ui32MappingFlags, phOSMemHandle); -} - - -PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, IMG_VOID *pvCPUVAddr, IMG_UINT32 ui32Bytes, IMG_UINT32 ui32MappingFlags, IMG_HANDLE *phOSMemHandle) -{ - return RegisterExternalMem(pBasePAddr, pvCPUVAddr, ui32Bytes, IMG_FALSE, ui32MappingFlags, phOSMemHandle); -} - - -PVRSRV_ERROR -OSUnRegisterMem (IMG_VOID *pvCpuVAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_HANDLE hOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - - switch(ui32MappingFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - break; - case PVRSRV_HAP_SINGLE_PROCESS: - case PVRSRV_HAP_MULTI_PROCESS: - { - eError = PVRMMapRemoveRegisteredArea(psLinuxMemArea); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "%s(%p, %d, 0x%08X, %p) FAILED!", - __FUNCTION__, pvCpuVAddr, ui32Bytes, - ui32MappingFlags, hOSMemHandle)); - return eError; - } - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, "OSUnRegisterMem : invalid flags 0x%x", ui32MappingFlags)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - } - - LinuxMemAreaDeepFree(psLinuxMemArea); - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, IMG_UINT32 ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) -{ - return OSUnRegisterMem(pvCpuVAddr, ui32Bytes, ui32Flags, hOSMemHandle); -} - -PVRSRV_ERROR -OSReservePhys(IMG_CPU_PHYADDR BasePAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_VOID **ppvCpuVAddr, - IMG_HANDLE *phOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea; - -#if 0 - - if(ui32MappingFlags & PVRSRV_HAP_SINGLE_PROCESS) - { - ui32MappingFlags &= ~PVRSRV_HAP_SINGLE_PROCESS; - ui32MappingFlags |= PVRSRV_HAP_MULTI_PROCESS; - } -#endif - - switch(ui32MappingFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - { - - psLinuxMemArea = NewIORemapLinuxMemArea(BasePAddr, ui32Bytes, ui32MappingFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - break; - } - case PVRSRV_HAP_SINGLE_PROCESS: - { - - psLinuxMemArea = NewIOLinuxMemArea(BasePAddr, ui32Bytes, ui32MappingFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - case PVRSRV_HAP_MULTI_PROCESS: - { - -#if defined(VIVT_CACHE) || defined(__sh__) - - ui32MappingFlags &= ~PVRSRV_HAP_CACHED; -#endif - psLinuxMemArea = NewIORemapLinuxMemArea(BasePAddr, ui32Bytes, ui32MappingFlags); - if(!psLinuxMemArea) - { - return PVRSRV_ERROR_BAD_MAPPING; - } - PVRMMapRegisterArea(psLinuxMemArea); - break; - } - default: - PVR_DPF((PVR_DBG_ERROR,"OSMapPhysToLin : invalid flags 0x%x\n", ui32MappingFlags)); - *ppvCpuVAddr = NULL; - *phOSMemHandle = (IMG_HANDLE)0; - return PVRSRV_ERROR_INVALID_FLAGS; - } - - *phOSMemHandle = (IMG_HANDLE)psLinuxMemArea; - *ppvCpuVAddr = LinuxMemAreaToCpuVAddr(psLinuxMemArea); - - LinuxMemAreaRegister(psLinuxMemArea); - - return PVRSRV_OK; -} - -PVRSRV_ERROR -OSUnReservePhys(IMG_VOID *pvCpuVAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32MappingFlags, - IMG_HANDLE hOSMemHandle) -{ - LinuxMemArea *psLinuxMemArea; - PVRSRV_ERROR eError; - - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - - psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - - switch(ui32MappingFlags & PVRSRV_HAP_MAPTYPE_MASK) - { - case PVRSRV_HAP_KERNEL_ONLY: - break; - case PVRSRV_HAP_SINGLE_PROCESS: - case PVRSRV_HAP_MULTI_PROCESS: - { - eError = PVRMMapRemoveRegisteredArea(psLinuxMemArea); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "%s(%p, %d, 0x%08X, %p) FAILED!", - __FUNCTION__, pvCpuVAddr, ui32Bytes, - ui32MappingFlags, hOSMemHandle)); - return eError; - } - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, "OSUnMapPhysToLin : invalid flags 0x%x", ui32MappingFlags)); - return PVRSRV_ERROR_INVALID_PARAMS; - } - } - - LinuxMemAreaDeepFree(psLinuxMemArea); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSBaseAllocContigMemory(IMG_UINT32 ui32Size, IMG_CPU_VIRTADDR *pvLinAddr, IMG_CPU_PHYADDR *psPhysAddr) -{ -#if !defined(NO_HARDWARE) - PVR_UNREFERENCED_PARAMETER(ui32Size); - PVR_UNREFERENCED_PARAMETER(pvLinAddr); - PVR_UNREFERENCED_PARAMETER(psPhysAddr); - PVR_DPF((PVR_DBG_ERROR, "%s: Not available", __FUNCTION__)); - - return PVRSRV_ERROR_OUT_OF_MEMORY; -#else - IMG_VOID *pvKernLinAddr; - -#if defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - pvKernLinAddr = _KMallocWrapper(ui32Size, GFP_KERNEL, __FILE__, __LINE__); -#else - pvKernLinAddr = KMallocWrapper(ui32Size, GFP_KERNEL); -#endif - if (!pvKernLinAddr) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - - *pvLinAddr = pvKernLinAddr; - - psPhysAddr->uiAddr = virt_to_phys(pvKernLinAddr); - - return PVRSRV_OK; -#endif -} - - -PVRSRV_ERROR OSBaseFreeContigMemory(IMG_UINT32 ui32Size, IMG_CPU_VIRTADDR pvLinAddr, IMG_CPU_PHYADDR psPhysAddr) -{ -#if !defined(NO_HARDWARE) - PVR_UNREFERENCED_PARAMETER(ui32Size); - PVR_UNREFERENCED_PARAMETER(pvLinAddr); - PVR_UNREFERENCED_PARAMETER(psPhysAddr.uiAddr); - - PVR_DPF((PVR_DBG_WARNING, "%s: Not available", __FUNCTION__)); -#else - PVR_UNREFERENCED_PARAMETER(ui32Size); - PVR_UNREFERENCED_PARAMETER(psPhysAddr.uiAddr); - - KFreeWrapper(pvLinAddr); -#endif - return PVRSRV_OK; -} - -IMG_UINT32 OSReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset) -{ -#if !defined(NO_HARDWARE) - return (IMG_UINT32) readl((IMG_PBYTE)pvLinRegBaseAddr+ui32Offset); -#else - return *(IMG_UINT32 *)((IMG_PBYTE)pvLinRegBaseAddr+ui32Offset); -#endif -} - -IMG_VOID OSWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value) -{ -#if !defined(NO_HARDWARE) - writel(ui32Value, (IMG_PBYTE)pvLinRegBaseAddr+ui32Offset); -#else - *(IMG_UINT32 *)((IMG_PBYTE)pvLinRegBaseAddr+ui32Offset) = ui32Value; -#endif -} - -#if defined(CONFIG_PCI) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) - -PVRSRV_PCI_DEV_HANDLE OSPCISetDev(IMG_VOID *pvPCICookie, HOST_PCI_INIT_FLAGS eFlags) -{ - int err; - IMG_UINT32 i; - PVR_PCI_DEV *psPVRPCI; - - PVR_TRACE(("OSPCISetDev")); - - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(*psPVRPCI), (IMG_VOID **)&psPVRPCI, IMG_NULL, - "PCI Device") != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCISetDev: Couldn't allocate PVR PCI structure")); - return IMG_NULL; - } - - psPVRPCI->psPCIDev = (struct pci_dev *)pvPCICookie; - psPVRPCI->ePCIFlags = eFlags; - - err = pci_enable_device(psPVRPCI->psPCIDev); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCISetDev: Couldn't enable device (%d)", err)); - return IMG_NULL; - } - - if (psPVRPCI->ePCIFlags & HOST_PCI_INIT_FLAG_BUS_MASTER) - { - pci_set_master(psPVRPCI->psPCIDev); - } - - if (psPVRPCI->ePCIFlags & HOST_PCI_INIT_FLAG_MSI) - { -#if defined(CONFIG_PCI_MSI) - err = pci_enable_msi(psPVRPCI->psPCIDev); - if (err != 0) - { - PVR_DPF((PVR_DBG_WARNING, "OSPCISetDev: Couldn't enable MSI (%d)", err)); - psPVRPCI->ePCIFlags &= ~HOST_PCI_INIT_FLAG_MSI; - } -#else - PVR_DPF((PVR_DBG_WARNING, "OSPCISetDev: MSI support not enabled in the kernel")); -#endif - } - - - for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) - { - psPVRPCI->abPCIResourceInUse[i] = IMG_FALSE; - } - - return (PVRSRV_PCI_DEV_HANDLE)psPVRPCI; -} - -PVRSRV_PCI_DEV_HANDLE OSPCIAcquireDev(IMG_UINT16 ui16VendorID, IMG_UINT16 ui16DeviceID, HOST_PCI_INIT_FLAGS eFlags) -{ - struct pci_dev *psPCIDev; - - psPCIDev = pci_get_device(ui16VendorID, ui16DeviceID, NULL); - if (psPCIDev == NULL) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIAcquireDev: Couldn't acquire device")); - return IMG_NULL; - } - - return OSPCISetDev((IMG_VOID *)psPCIDev, eFlags); -} - -PVRSRV_ERROR OSPCIIRQ(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 *pui32IRQ) -{ - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)hPVRPCI; - - *pui32IRQ = psPVRPCI->psPCIDev->irq; - - return PVRSRV_OK; -} - -enum HOST_PCI_ADDR_RANGE_FUNC -{ - HOST_PCI_ADDR_RANGE_FUNC_LEN, - HOST_PCI_ADDR_RANGE_FUNC_START, - HOST_PCI_ADDR_RANGE_FUNC_END, - HOST_PCI_ADDR_RANGE_FUNC_REQUEST, - HOST_PCI_ADDR_RANGE_FUNC_RELEASE -}; - -static IMG_UINT32 OSPCIAddrRangeFunc(enum HOST_PCI_ADDR_RANGE_FUNC eFunc, - PVRSRV_PCI_DEV_HANDLE hPVRPCI, - IMG_UINT32 ui32Index) -{ - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)hPVRPCI; - - if (ui32Index >= DEVICE_COUNT_RESOURCE) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIAddrRangeFunc: Index out of range")); - return 0; - - } - - switch (eFunc) - { - case HOST_PCI_ADDR_RANGE_FUNC_LEN: - return pci_resource_len(psPVRPCI->psPCIDev, ui32Index); - case HOST_PCI_ADDR_RANGE_FUNC_START: - return pci_resource_start(psPVRPCI->psPCIDev, ui32Index); - case HOST_PCI_ADDR_RANGE_FUNC_END: - return pci_resource_end(psPVRPCI->psPCIDev, ui32Index); - case HOST_PCI_ADDR_RANGE_FUNC_REQUEST: - { - int err; - - err = pci_request_region(psPVRPCI->psPCIDev, (IMG_INT)ui32Index, PVRSRV_MODNAME); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIAddrRangeFunc: pci_request_region_failed (%d)", err)); - return 0; - } - psPVRPCI->abPCIResourceInUse[ui32Index] = IMG_TRUE; - return 1; - } - case HOST_PCI_ADDR_RANGE_FUNC_RELEASE: - if (psPVRPCI->abPCIResourceInUse[ui32Index]) - { - pci_release_region(psPVRPCI->psPCIDev, (IMG_INT)ui32Index); - psPVRPCI->abPCIResourceInUse[ui32Index] = IMG_FALSE; - } - return 1; - default: - PVR_DPF((PVR_DBG_ERROR, "OSPCIAddrRangeFunc: Unknown function")); - break; - } - - return 0; -} - -IMG_UINT32 OSPCIAddrRangeLen(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index) -{ - return OSPCIAddrRangeFunc(HOST_PCI_ADDR_RANGE_FUNC_LEN, hPVRPCI, ui32Index); -} - -IMG_UINT32 OSPCIAddrRangeStart(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index) -{ - return OSPCIAddrRangeFunc(HOST_PCI_ADDR_RANGE_FUNC_START, hPVRPCI, ui32Index); -} - -IMG_UINT32 OSPCIAddrRangeEnd(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index) -{ - return OSPCIAddrRangeFunc(HOST_PCI_ADDR_RANGE_FUNC_END, hPVRPCI, ui32Index); -} - -PVRSRV_ERROR OSPCIRequestAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, - IMG_UINT32 ui32Index) -{ - return OSPCIAddrRangeFunc(HOST_PCI_ADDR_RANGE_FUNC_REQUEST, hPVRPCI, ui32Index) == 0 ? PVRSRV_ERROR_PCI_CALL_FAILED : PVRSRV_OK; -} - -PVRSRV_ERROR OSPCIReleaseAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index) -{ - return OSPCIAddrRangeFunc(HOST_PCI_ADDR_RANGE_FUNC_RELEASE, hPVRPCI, ui32Index) == 0 ? PVRSRV_ERROR_PCI_CALL_FAILED : PVRSRV_OK; -} - -PVRSRV_ERROR OSPCIReleaseDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI) -{ - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)hPVRPCI; - int i; - - PVR_TRACE(("OSPCIReleaseDev")); - - - for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) - { - if (psPVRPCI->abPCIResourceInUse[i]) - { - PVR_TRACE(("OSPCIReleaseDev: Releasing Address range %d", i)); - pci_release_region(psPVRPCI->psPCIDev, i); - psPVRPCI->abPCIResourceInUse[i] = IMG_FALSE; - } - } - -#if defined(CONFIG_PCI_MSI) - if (psPVRPCI->ePCIFlags & HOST_PCI_INIT_FLAG_MSI) - { - pci_disable_msi(psPVRPCI->psPCIDev); - } -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) - if (psPVRPCI->ePCIFlags & HOST_PCI_INIT_FLAG_BUS_MASTER) - { - pci_clear_master(psPVRPCI->psPCIDev); - } -#endif - pci_disable_device(psPVRPCI->psPCIDev); - - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(*psPVRPCI), (IMG_VOID *)psPVRPCI, IMG_NULL); - - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSPCISuspendDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI) -{ - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)hPVRPCI; - int i; - int err; - - PVR_TRACE(("OSPCISuspendDev")); - - - for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) - { - if (psPVRPCI->abPCIResourceInUse[i]) - { - pci_release_region(psPVRPCI->psPCIDev, i); - } - } - - err = pci_save_state(psPVRPCI->psPCIDev); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCISuspendDev: pci_save_state_failed (%d)", err)); - return PVRSRV_ERROR_PCI_CALL_FAILED; - } - - pci_disable_device(psPVRPCI->psPCIDev); - - err = pci_set_power_state(psPVRPCI->psPCIDev, pci_choose_state(psPVRPCI->psPCIDev, PMSG_SUSPEND)); - switch(err) - { - case 0: - break; - case -EIO: - PVR_DPF((PVR_DBG_WARNING, "OSPCISuspendDev: device doesn't support PCI PM")); - break; - case -EINVAL: - PVR_DPF((PVR_DBG_ERROR, "OSPCISuspendDev: can't enter requested power state")); - break; - default: - PVR_DPF((PVR_DBG_ERROR, "OSPCISuspendDev: pci_set_power_state failed (%d)", err)); - break; - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSPCIResumeDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI) -{ - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)hPVRPCI; - int err; - int i; - - PVR_TRACE(("OSPCIResumeDev")); - - err = pci_set_power_state(psPVRPCI->psPCIDev, pci_choose_state(psPVRPCI->psPCIDev, PMSG_ON)); - switch(err) - { - case 0: - break; - case -EIO: - PVR_DPF((PVR_DBG_WARNING, "OSPCIResumeDev: device doesn't support PCI PM")); - break; - case -EINVAL: - PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: can't enter requested power state")); - return PVRSRV_ERROR_UNKNOWN_POWER_STATE; - default: - PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: pci_set_power_state failed (%d)", err)); - return PVRSRV_ERROR_UNKNOWN_POWER_STATE; - } - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) - pci_restore_state(psPVRPCI->psPCIDev); -#else - err = pci_restore_state(psPVRPCI->psPCIDev); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: pci_restore_state failed (%d)", err)); - return PVRSRV_ERROR_PCI_CALL_FAILED; - } -#endif - - err = pci_enable_device(psPVRPCI->psPCIDev); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: Couldn't enable device (%d)", err)); - return PVRSRV_ERROR_PCI_CALL_FAILED; - } - - if (psPVRPCI->ePCIFlags & HOST_PCI_INIT_FLAG_BUS_MASTER) - pci_set_master(psPVRPCI->psPCIDev); - - - for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) - { - if (psPVRPCI->abPCIResourceInUse[i]) - { - err = pci_request_region(psPVRPCI->psPCIDev, i, PVRSRV_MODNAME); - if (err != 0) - { - PVR_DPF((PVR_DBG_ERROR, "OSPCIResumeDev: pci_request_region_failed (region %d, error %d)", i, err)); - } - } - - } - - return PVRSRV_OK; -} - -#endif - -#define OS_MAX_TIMERS 8 - -typedef struct TIMER_CALLBACK_DATA_TAG -{ - IMG_BOOL bInUse; - PFN_TIMER_FUNC pfnTimerFunc; - IMG_VOID *pvData; - struct timer_list sTimer; - IMG_UINT32 ui32Delay; - IMG_BOOL bActive; -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - struct work_struct sWork; -#endif -}TIMER_CALLBACK_DATA; - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) -static struct workqueue_struct *psTimerWorkQueue; -#endif - -static TIMER_CALLBACK_DATA sTimers[OS_MAX_TIMERS]; - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) -DEFINE_MUTEX(sTimerStructLock); -#else - -static spinlock_t sTimerStructLock = __SPIN_LOCK_UNLOCKED(sTimerStructLock); -#endif - -static void OSTimerCallbackBody(TIMER_CALLBACK_DATA *psTimerCBData) -{ - if (!psTimerCBData->bActive) - return; - - - psTimerCBData->pfnTimerFunc(psTimerCBData->pvData); - - - mod_timer(&psTimerCBData->sTimer, psTimerCBData->ui32Delay + jiffies); -} - - -static IMG_VOID OSTimerCallbackWrapper(IMG_UINT32 ui32Data) -{ - TIMER_CALLBACK_DATA *psTimerCBData = (TIMER_CALLBACK_DATA*)ui32Data; - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - int res; - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) - res = queue_work(psTimerWorkQueue, &psTimerCBData->sWork); -#else - res = schedule_work(&psTimerCBData->sWork); -#endif - if (res == 0) - { - PVR_DPF((PVR_DBG_WARNING, "OSTimerCallbackWrapper: work already queued")); - } -#else - OSTimerCallbackBody(psTimerCBData); -#endif -} - - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) -static void OSTimerWorkQueueCallBack(struct work_struct *psWork) -{ - TIMER_CALLBACK_DATA *psTimerCBData = container_of(psWork, TIMER_CALLBACK_DATA, sWork); - - OSTimerCallbackBody(psTimerCBData); -} -#endif - -IMG_HANDLE OSAddTimer(PFN_TIMER_FUNC pfnTimerFunc, IMG_VOID *pvData, IMG_UINT32 ui32MsTimeout) -{ - TIMER_CALLBACK_DATA *psTimerCBData; - IMG_UINT32 ui32i; -#if !(defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE)) - unsigned long ulLockFlags; -#endif - - - if(!pfnTimerFunc) - { - PVR_DPF((PVR_DBG_ERROR, "OSAddTimer: passed invalid callback")); - return IMG_NULL; - } - - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - mutex_lock(&sTimerStructLock); -#else - spin_lock_irqsave(&sTimerStructLock, ulLockFlags); -#endif - for (ui32i = 0; ui32i < OS_MAX_TIMERS; ui32i++) - { - psTimerCBData = &sTimers[ui32i]; - if (!psTimerCBData->bInUse) - { - psTimerCBData->bInUse = IMG_TRUE; - break; - } - } -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - mutex_unlock(&sTimerStructLock); -#else - spin_unlock_irqrestore(&sTimerStructLock, ulLockFlags); -#endif - if (ui32i >= OS_MAX_TIMERS) - { - PVR_DPF((PVR_DBG_ERROR, "OSAddTimer: all timers are in use")); - return IMG_NULL; - } - - psTimerCBData->pfnTimerFunc = pfnTimerFunc; - psTimerCBData->pvData = pvData; - psTimerCBData->bActive = IMG_FALSE; - - - - - psTimerCBData->ui32Delay = ((HZ * ui32MsTimeout) < 1000) - ? 1 - : ((HZ * ui32MsTimeout) / 1000); - - init_timer(&psTimerCBData->sTimer); - - - - psTimerCBData->sTimer.function = (IMG_VOID *)OSTimerCallbackWrapper; - psTimerCBData->sTimer.data = (IMG_UINT32)psTimerCBData; - - return (IMG_HANDLE)(ui32i + 1); -} - - -static inline TIMER_CALLBACK_DATA *GetTimerStructure(IMG_HANDLE hTimer) -{ - IMG_UINT32 ui32i = ((IMG_UINT32)hTimer) - 1; - - PVR_ASSERT(ui32i < OS_MAX_TIMERS); - - return &sTimers[ui32i]; -} - -PVRSRV_ERROR OSRemoveTimer (IMG_HANDLE hTimer) -{ - TIMER_CALLBACK_DATA *psTimerCBData = GetTimerStructure(hTimer); - - PVR_ASSERT(psTimerCBData->bInUse); - PVR_ASSERT(!psTimerCBData->bActive); - - - psTimerCBData->bInUse = IMG_FALSE; - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSEnableTimer (IMG_HANDLE hTimer) -{ - TIMER_CALLBACK_DATA *psTimerCBData = GetTimerStructure(hTimer); - - PVR_ASSERT(psTimerCBData->bInUse); - PVR_ASSERT(!psTimerCBData->bActive); - - - psTimerCBData->bActive = IMG_TRUE; - - - psTimerCBData->sTimer.expires = psTimerCBData->ui32Delay + jiffies; - - - add_timer(&psTimerCBData->sTimer); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR OSDisableTimer (IMG_HANDLE hTimer) -{ - TIMER_CALLBACK_DATA *psTimerCBData = GetTimerStructure(hTimer); - - PVR_ASSERT(psTimerCBData->bInUse); - PVR_ASSERT(psTimerCBData->bActive); - - - psTimerCBData->bActive = IMG_FALSE; - smp_mb(); - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) - flush_workqueue(psTimerWorkQueue); -#endif -#if defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - flush_scheduled_work(); -#endif - - - del_timer_sync(&psTimerCBData->sTimer); - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) - - flush_workqueue(psTimerWorkQueue); -#endif -#if defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - flush_scheduled_work(); -#endif - - return PVRSRV_OK; -} - - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT_KM *psEventObject) -#else -PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, PVRSRV_EVENTOBJECT *psEventObject) -#endif -{ - - PVRSRV_ERROR eError = PVRSRV_OK; - - if(psEventObject) - { - if(pszName) - { - - strncpy(psEventObject->szName, pszName, EVENTOBJNAME_MAXLENGTH); - } - else - { - - static IMG_UINT16 ui16NameIndex = 0; -#if defined (SUPPORT_SID_INTERFACE) - snprintf(psEventObject->szName, EVENTOBJNAME_MAXLENGTH, "PVRSRV_EVENTOBJECT_KM_%d", ui16NameIndex++); -#else - snprintf(psEventObject->szName, EVENTOBJNAME_MAXLENGTH, "PVRSRV_EVENTOBJECT_%d", ui16NameIndex++); -#endif - } - - if(LinuxEventObjectListCreate(&psEventObject->hOSEventKM) != PVRSRV_OK) - { - eError = PVRSRV_ERROR_OUT_OF_MEMORY; - } - - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreateKM: psEventObject is not a valid pointer")); - eError = PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT; - } - - return eError; - -} - - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT_KM *psEventObject) -#else -PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT *psEventObject) -#endif -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if(psEventObject) - { - if(psEventObject->hOSEventKM) - { - LinuxEventObjectListDestroy(psEventObject->hOSEventKM); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: hOSEventKM is not a valid pointer")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: psEventObject is not a valid pointer")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - return eError; -} - -PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM) -{ - PVRSRV_ERROR eError; - - if(hOSEventKM) - { - eError = LinuxEventObjectWait(hOSEventKM, EVENT_OBJECT_TIMEOUT_MS); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectWaitKM: hOSEventKM is not a valid handle")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - return eError; -} - -PVRSRV_ERROR OSEventObjectOpenKM( -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_EVENTOBJECT_KM *psEventObject, -#else - PVRSRV_EVENTOBJECT *psEventObject, -#endif - IMG_HANDLE *phOSEvent) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if(psEventObject) - { - if(LinuxEventObjectAdd(psEventObject->hOSEventKM, phOSEvent) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectAdd: failed")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectCreateKM: psEventObject is not a valid pointer")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - return eError; -} - -PVRSRV_ERROR OSEventObjectCloseKM( -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_EVENTOBJECT_KM *psEventObject, -#else - PVRSRV_EVENTOBJECT *psEventObject, -#endif - IMG_HANDLE hOSEventKM) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - if(psEventObject) - { - if(LinuxEventObjectDelete(psEventObject->hOSEventKM, hOSEventKM) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "LinuxEventObjectDelete: failed")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectDestroyKM: psEventObject is not a valid pointer")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - return eError; - -} - -PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM) -{ - PVRSRV_ERROR eError; - - if(hOSEventKM) - { - eError = LinuxEventObjectSignal(hOSEventKM); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "OSEventObjectSignalKM: hOSEventKM is not a valid handle")); - eError = PVRSRV_ERROR_INVALID_PARAMS; - } - - return eError; -} - -IMG_BOOL OSProcHasPrivSrvInit(IMG_VOID) -{ - /* Return true here so that we can run X as a non-root user. */ - return IMG_TRUE; -} - -PVRSRV_ERROR OSCopyToUser(IMG_PVOID pvProcess, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Bytes) -{ - PVR_UNREFERENCED_PARAMETER(pvProcess); - - if (copy_to_user(pvDest, pvSrc, ui32Bytes) == 0) - return PVRSRV_OK; - else - return PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY; -} - -PVRSRV_ERROR OSCopyFromUser( IMG_PVOID pvProcess, - IMG_VOID *pvDest, - IMG_VOID *pvSrc, - IMG_UINT32 ui32Bytes) -{ - PVR_UNREFERENCED_PARAMETER(pvProcess); - - if (copy_from_user(pvDest, pvSrc, ui32Bytes) == 0) - return PVRSRV_OK; - else - return PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY; -} - -IMG_BOOL OSAccessOK(IMG_VERIFY_TEST eVerification, IMG_VOID *pvUserPtr, IMG_UINT32 ui32Bytes) -{ - if (eVerification == PVR_VERIFY_READ) - { - return access_ok(VERIFY_READ, pvUserPtr, ui32Bytes); - } - else - { - PVR_ASSERT(eVerification == PVR_VERIFY_WRITE); - return access_ok(VERIFY_WRITE, pvUserPtr, ui32Bytes); - } -} - -typedef enum _eWrapMemType_ -{ - WRAP_TYPE_NULL = 0, - WRAP_TYPE_GET_USER_PAGES, - WRAP_TYPE_FIND_VMA -} eWrapMemType; - -typedef struct _sWrapMemInfo_ -{ - eWrapMemType eType; - IMG_INT iNumPages; - IMG_INT iNumPagesMapped; - struct page **ppsPages; - IMG_SYS_PHYADDR *psPhysAddr; - IMG_INT iPageOffset; -#if defined(DEBUG) - IMG_UINT32 ulStartAddr; - IMG_UINT32 ulBeyondEndAddr; - struct vm_area_struct *psVMArea; -#endif -} sWrapMemInfo; - - -static IMG_BOOL CPUVAddrToPFN(struct vm_area_struct *psVMArea, IMG_UINT32 ulCPUVAddr, IMG_UINT32 *pulPFN, struct page **ppsPage) -{ -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,10)) - pgd_t *psPGD; - pud_t *psPUD; - pmd_t *psPMD; - pte_t *psPTE; - struct mm_struct *psMM = psVMArea->vm_mm; - spinlock_t *psPTLock; - IMG_BOOL bRet = IMG_FALSE; - - *pulPFN = 0; - *ppsPage = NULL; - - psPGD = pgd_offset(psMM, ulCPUVAddr); - if (pgd_none(*psPGD) || pgd_bad(*psPGD)) - return bRet; - - psPUD = pud_offset(psPGD, ulCPUVAddr); - if (pud_none(*psPUD) || pud_bad(*psPUD)) - return bRet; - - psPMD = pmd_offset(psPUD, ulCPUVAddr); - if (pmd_none(*psPMD) || pmd_bad(*psPMD)) - return bRet; - - psPTE = (pte_t *)pte_offset_map_lock(psMM, psPMD, ulCPUVAddr, &psPTLock); - - if ((pte_none(*psPTE) == 0) && (pte_present(*psPTE) != 0) && (pte_write(*psPTE) != 0)) - { - *pulPFN = pte_pfn(*psPTE); - bRet = IMG_TRUE; - - if (pfn_valid(*pulPFN)) - { - *ppsPage = pfn_to_page(*pulPFN); - - get_page(*ppsPage); - } - } - - pte_unmap_unlock(psPTE, psPTLock); - - return bRet; -#else - return IMG_FALSE; -#endif -} - -PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem) -{ - sWrapMemInfo *psInfo = (sWrapMemInfo *)hOSWrapMem; - IMG_INT i; - - if (psInfo == IMG_NULL) - { - PVR_DPF((PVR_DBG_WARNING, - "OSReleasePhysPageAddr: called with null wrap handle")); - return PVRSRV_OK; - } - - switch (psInfo->eType) - { - case WRAP_TYPE_NULL: - { - PVR_DPF((PVR_DBG_WARNING, - "OSReleasePhysPageAddr: called with wrap type WRAP_TYPE_NULL")); - break; - } - case WRAP_TYPE_GET_USER_PAGES: - { - for (i = 0; i < psInfo->iNumPagesMapped; i++) - { - struct page *psPage = psInfo->ppsPages[i]; - - PVR_ASSERT(psPage != NULL); - - - if (psInfo->iNumPagesMapped == psInfo->iNumPages) - { - if (!PageReserved(psPage)) - { - SetPageDirty(psPage); - } - } - page_cache_release(psPage); - } - break; - } - case WRAP_TYPE_FIND_VMA: - { - for (i = 0; i < psInfo->iNumPages; i++) - { - if (psInfo->ppsPages[i] != IMG_NULL) - { - put_page(psInfo->ppsPages[i]); - } - } - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR, - "OSReleasePhysPageAddr: Unknown wrap type (%d)", psInfo->eType)); - return PVRSRV_ERROR_INVALID_WRAP_TYPE; - } - } - - if (psInfo->ppsPages != IMG_NULL) - { - kfree(psInfo->ppsPages); - } - - if (psInfo->psPhysAddr != IMG_NULL) - { - kfree(psInfo->psPhysAddr); - } - - kfree(psInfo); - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID *pvCPUVAddr, - IMG_UINT32 ui32Bytes, - IMG_SYS_PHYADDR *psSysPAddr, - IMG_HANDLE *phOSWrapMem) -{ - IMG_UINT32 ulStartAddrOrig = (IMG_UINT32) pvCPUVAddr; - IMG_UINT32 ulAddrRangeOrig = (IMG_UINT32) ui32Bytes; - IMG_UINT32 ulBeyondEndAddrOrig = ulStartAddrOrig + ulAddrRangeOrig; - IMG_UINT32 ulStartAddr; - IMG_UINT32 ulAddrRange; - IMG_UINT32 ulBeyondEndAddr; - IMG_UINT32 ulAddr; - IMG_INT i; - struct vm_area_struct *psVMArea; - sWrapMemInfo *psInfo = NULL; - IMG_BOOL bHavePageStructs = IMG_FALSE; - IMG_BOOL bHaveNoPageStructs = IMG_FALSE; - IMG_BOOL bPFNMismatch = IMG_FALSE; - IMG_BOOL bMMapSemHeld = IMG_FALSE; - PVRSRV_ERROR eError = PVRSRV_ERROR_OUT_OF_MEMORY; - - - ulStartAddr = ulStartAddrOrig & PAGE_MASK; - ulBeyondEndAddr = PAGE_ALIGN(ulBeyondEndAddrOrig); - ulAddrRange = ulBeyondEndAddr - ulStartAddr; - - - if (ulBeyondEndAddr <= ulStartAddr) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Invalid address range (start %x, length %x)", - ulStartAddrOrig, ulAddrRangeOrig)); - goto error; - } - - - psInfo = kmalloc(sizeof(*psInfo), GFP_KERNEL); - if (psInfo == NULL) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Couldn't allocate information structure")); - goto error; - } - memset(psInfo, 0, sizeof(*psInfo)); - -#if defined(DEBUG) - psInfo->ulStartAddr = ulStartAddrOrig; - psInfo->ulBeyondEndAddr = ulBeyondEndAddrOrig; -#endif - - psInfo->iNumPages = (IMG_INT)(ulAddrRange >> PAGE_SHIFT); - psInfo->iPageOffset = (IMG_INT)(ulStartAddrOrig & ~PAGE_MASK); - - - psInfo->psPhysAddr = kmalloc((size_t)psInfo->iNumPages * sizeof(*psInfo->psPhysAddr), GFP_KERNEL); - if (psInfo->psPhysAddr == NULL) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Couldn't allocate page array")); - goto error; - } - memset(psInfo->psPhysAddr, 0, (size_t)psInfo->iNumPages * sizeof(*psInfo->psPhysAddr)); - - - psInfo->ppsPages = kmalloc((size_t)psInfo->iNumPages * sizeof(*psInfo->ppsPages), GFP_KERNEL); - if (psInfo->ppsPages == NULL) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Couldn't allocate page array")); - goto error; - } - memset(psInfo->ppsPages, 0, (size_t)psInfo->iNumPages * sizeof(*psInfo->ppsPages)); - - - eError = PVRSRV_ERROR_BAD_MAPPING; - - - psInfo->eType = WRAP_TYPE_GET_USER_PAGES; - - - down_read(¤t->mm->mmap_sem); - bMMapSemHeld = IMG_TRUE; - - - psInfo->iNumPagesMapped = get_user_pages(current, current->mm, ulStartAddr, psInfo->iNumPages, 1, 0, psInfo->ppsPages, NULL); - - if (psInfo->iNumPagesMapped >= 0) - { - - if (psInfo->iNumPagesMapped != psInfo->iNumPages) - { - PVR_TRACE(("OSAcquirePhysPageAddr: Couldn't map all the pages needed (wanted: %d, got %d)", psInfo->iNumPages, psInfo->iNumPagesMapped)); - - goto error; - } - - - for (i = 0; i < psInfo->iNumPages; i++) - { - IMG_CPU_PHYADDR CPUPhysAddr; - IMG_UINT32 ulPFN; - - ulPFN = page_to_pfn(psInfo->ppsPages[i]); - CPUPhysAddr.uiAddr = ulPFN << PAGE_SHIFT; - if ((CPUPhysAddr.uiAddr >> PAGE_SHIFT) != ulPFN) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Page frame number out of range (%x)", ulPFN)); - - goto error; - } - psInfo->psPhysAddr[i] = SysCpuPAddrToSysPAddr(CPUPhysAddr); - psSysPAddr[i] = psInfo->psPhysAddr[i]; - - } - - goto exit; - } - - PVR_DPF((PVR_DBG_MESSAGE, "OSAcquirePhysPageAddr: get_user_pages failed (%d), using CPU page table", psInfo->iNumPagesMapped)); - - - psInfo->eType = WRAP_TYPE_NULL; - psInfo->iNumPagesMapped = 0; - memset(psInfo->ppsPages, 0, (size_t)psInfo->iNumPages * sizeof(*psInfo->ppsPages)); - - - - psInfo->eType = WRAP_TYPE_FIND_VMA; - - psVMArea = find_vma(current->mm, ulStartAddrOrig); - if (psVMArea == NULL) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Couldn't find memory region containing start address %x", ulStartAddrOrig)); - - goto error; - } -#if defined(DEBUG) - psInfo->psVMArea = psVMArea; -#endif - - - if (ulStartAddrOrig < psVMArea->vm_start) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Start address %x is outside of the region returned by find_vma", ulStartAddrOrig)); - goto error; - } - - - if (ulBeyondEndAddrOrig > psVMArea->vm_end) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: End address %x is outside of the region returned by find_vma", ulBeyondEndAddrOrig)); - goto error; - } - - - if ((psVMArea->vm_flags & (VM_IO | VM_RESERVED)) != (VM_IO | VM_RESERVED)) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Memory region does not represent memory mapped I/O (VMA flags: 0x%lx)", psVMArea->vm_flags)); - goto error; - } - - - if ((psVMArea->vm_flags & (VM_READ | VM_WRITE)) != (VM_READ | VM_WRITE)) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: No read/write access to memory region (VMA flags: 0x%lx)", psVMArea->vm_flags)); - goto error; - } - - for (ulAddr = ulStartAddrOrig, i = 0; ulAddr < ulBeyondEndAddrOrig; ulAddr += PAGE_SIZE, i++) - { - IMG_CPU_PHYADDR CPUPhysAddr; - IMG_UINT32 ulPFN = 0; - - PVR_ASSERT(i < psInfo->iNumPages); - - if (!CPUVAddrToPFN(psVMArea, ulAddr, &ulPFN, &psInfo->ppsPages[i])) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Invalid CPU virtual address")); - - goto error; - } - if (psInfo->ppsPages[i] == NULL) - { - - bHaveNoPageStructs = IMG_TRUE; - -#if defined(VM_PFNMAP) - if ((psVMArea->vm_flags & VM_PFNMAP) != 0) - { - IMG_UINT32 ulPFNRaw = ((ulAddr - psVMArea->vm_start) >> PAGE_SHIFT) + psVMArea->vm_pgoff; - - if (ulPFNRaw != ulPFN) - { - bPFNMismatch = IMG_TRUE; - } - } -#endif - } - else - { - bHavePageStructs = IMG_TRUE; - - psInfo->iNumPagesMapped++; - - PVR_ASSERT(ulPFN == page_to_pfn(psInfo->ppsPages[i])); - } - - CPUPhysAddr.uiAddr = ulPFN << PAGE_SHIFT; - if ((CPUPhysAddr.uiAddr >> PAGE_SHIFT) != ulPFN) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Page frame number out of range (%x)", ulPFN)); - - goto error; - } - - psInfo->psPhysAddr[i] = SysCpuPAddrToSysPAddr(CPUPhysAddr); - psSysPAddr[i] = psInfo->psPhysAddr[i]; - } - PVR_ASSERT(i == psInfo->iNumPages); - -#if defined(VM_MIXEDMAP) - if ((psVMArea->vm_flags & VM_MIXEDMAP) != 0) - { - goto exit; - } -#endif - - if (bHavePageStructs && bHaveNoPageStructs) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Region is VM_MIXEDMAP, but isn't marked as such")); - goto error; - } - - if (!bHaveNoPageStructs) - { - - goto exit; - } - -#if defined(VM_PFNMAP) - if ((psVMArea->vm_flags & VM_PFNMAP) == 0) -#endif - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: Region is VM_PFNMAP, but isn't marked as such")); - goto error; - } - - if (bPFNMismatch) - { - PVR_DPF((PVR_DBG_ERROR, - "OSAcquirePhysPageAddr: PFN calculation mismatch for VM_PFNMAP region")); - goto error; - } - -exit: - PVR_ASSERT(bMMapSemHeld); - up_read(¤t->mm->mmap_sem); - - - *phOSWrapMem = (IMG_HANDLE)psInfo; - - if (bHaveNoPageStructs) - { - PVR_DPF((PVR_DBG_WARNING, - "OSAcquirePhysPageAddr: Region contains pages which can't be locked down (no page structures)")); - } - - PVR_ASSERT(psInfo->eType != 0); - -#if 0 - - - OSCleanCPUCacheRangeKM(pvCPUVAddr, (IMG_VOID *)((IMG_CHAR *)pvCPUVAddr + ui32Bytes)); -#endif - - return PVRSRV_OK; - -error: - if (bMMapSemHeld) - { - up_read(¤t->mm->mmap_sem); - } - OSReleasePhysPageAddr((IMG_HANDLE)psInfo); - - PVR_ASSERT(eError != PVRSRV_OK); - - return eError; -} - -typedef void (*InnerCacheOp_t)(const void *pvStart, const void *pvEnd); -typedef void (*OuterCacheOp_t)(unsigned long ulStart, unsigned long ulEnd); - -#if defined(CONFIG_OUTER_CACHE) - -typedef unsigned long (*MemAreaToPhys_t)(LinuxMemArea *psLinuxMemArea, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32PageNumOffset, - IMG_UINT32 ui32PageNum); - -static unsigned long VMallocAreaToPhys(LinuxMemArea *psLinuxMemArea, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32PageNumOffset, - IMG_UINT32 ui32PageNum) -{ - return vmalloc_to_pfn(pvRangeAddrStart + ui32PageNum * PAGE_SIZE) << PAGE_SHIFT; -} - -static unsigned long ExternalKVAreaToPhys(LinuxMemArea *psLinuxMemArea, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32PageNumOffset, - IMG_UINT32 ui32PageNum) -{ - IMG_SYS_PHYADDR SysPAddr; - IMG_CPU_PHYADDR CpuPAddr; - SysPAddr = psLinuxMemArea->uData.sExternalKV.uPhysAddr.pSysPhysAddr[ui32PageNumOffset + ui32PageNum]; - CpuPAddr = SysSysPAddrToCpuPAddr(SysPAddr); - return CpuPAddr.uiAddr; -} - -static unsigned long AllocPagesAreaToPhys(LinuxMemArea *psLinuxMemArea, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32PageNumOffset, - IMG_UINT32 ui32PageNum) -{ - struct page *pPage; - pPage = psLinuxMemArea->uData.sPageList.pvPageList[ui32PageNumOffset + ui32PageNum]; - return page_to_pfn(pPage) << PAGE_SHIFT; -} - -#endif - -#ifndef __mips__ -static -IMG_VOID *FindMMapBaseVAddr(struct list_head *psMMapOffsetStructList, - IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) -{ - PKV_OFFSET_STRUCT psOffsetStruct; - IMG_VOID *pvMinVAddr; - - - list_for_each_entry(psOffsetStruct, psMMapOffsetStructList, sAreaItem) - { - if(OSGetCurrentProcessIDKM() != psOffsetStruct->ui32PID) - continue; - - pvMinVAddr = (IMG_VOID *)psOffsetStruct->ui32UserVAddr; - - - if(pvRangeAddrStart >= pvMinVAddr && - ui32Length <= psOffsetStruct->ui32RealByteSize) - return pvMinVAddr; - } - - return IMG_NULL; -} - -static -IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length, - InnerCacheOp_t pfnInnerCacheOp, - OuterCacheOp_t pfnOuterCacheOp) -{ - LinuxMemArea *psLinuxMemArea = (LinuxMemArea *)hOSMemHandle; - IMG_UINT32 ui32AreaLength, ui32AreaOffset = 0; - struct list_head *psMMapOffsetStructList; - IMG_VOID *pvMinVAddr; - -#if defined(CONFIG_OUTER_CACHE) - MemAreaToPhys_t pfnMemAreaToPhys = IMG_NULL; - IMG_UINT32 ui32PageNumOffset = 0; -#endif - - PVR_ASSERT(psLinuxMemArea != IMG_NULL); - - ui32AreaLength = psLinuxMemArea->ui32ByteSize; - psMMapOffsetStructList = &psLinuxMemArea->sMMapOffsetStructList; - - PVR_ASSERT(ui32Length <= ui32AreaLength); - - if(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_SUB_ALLOC) - { - ui32AreaOffset = psLinuxMemArea->uData.sSubAlloc.ui32ByteOffset; - psLinuxMemArea = psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea; - } - - - PVR_ASSERT(psLinuxMemArea->eAreaType != LINUX_MEM_AREA_SUB_ALLOC); - - switch(psLinuxMemArea->eAreaType) - { - case LINUX_MEM_AREA_VMALLOC: - { - if(is_vmalloc_addr(pvRangeAddrStart)) - { - pvMinVAddr = psLinuxMemArea->uData.sVmalloc.pvVmallocAddress + ui32AreaOffset; - - - if(pvRangeAddrStart < pvMinVAddr) - goto err_blocked; - - pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); - } - else - { - - - - pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList, - pvRangeAddrStart, ui32Length); - if(!pvMinVAddr) - goto err_blocked; - - pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); - -#if defined(CONFIG_OUTER_CACHE) - - pvRangeAddrStart = psLinuxMemArea->uData.sVmalloc.pvVmallocAddress + - (ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr); - } - - pfnMemAreaToPhys = VMallocAreaToPhys; -#else - } -#endif - break; - } - - case LINUX_MEM_AREA_EXTERNAL_KV: - { - - if (psLinuxMemArea->uData.sExternalKV.bPhysContig == IMG_TRUE) - { - PVR_DPF((PVR_DBG_WARNING, "%s: Attempt to flush contiguous external memory", __func__)); - - goto err_blocked; - } - - - if (psLinuxMemArea->uData.sExternalKV.pvExternalKV != IMG_NULL) - { - PVR_DPF((PVR_DBG_WARNING, "%s: Attempt to flush external memory with a kernel virtual address", __func__)); - - goto err_blocked; - } - - - - pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList, - pvRangeAddrStart, ui32Length); - if(!pvMinVAddr) - goto err_blocked; - - pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); - -#if defined(CONFIG_OUTER_CACHE) - ui32PageNumOffset = ((ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr)) >> PAGE_SHIFT; - pfnMemAreaToPhys = ExternalKVAreaToPhys; -#endif - break; - } - - case LINUX_MEM_AREA_ALLOC_PAGES: - { - pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList, - pvRangeAddrStart, ui32Length); - if(!pvMinVAddr) - goto err_blocked; - - pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); - -#if defined(CONFIG_OUTER_CACHE) - ui32PageNumOffset = ((ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr)) >> PAGE_SHIFT; - pfnMemAreaToPhys = AllocPagesAreaToPhys; -#endif - break; - } - - default: - PVR_DBG_BREAK; - } - -#if defined(CONFIG_OUTER_CACHE) - PVR_ASSERT(pfnMemAreaToPhys != IMG_NULL); - - - { - unsigned long ulStart, ulEnd, ulLength, ulStartOffset, ulEndOffset; - IMG_UINT32 i, ui32NumPages; - - - ulLength = (unsigned long)ui32Length; - ulStartOffset = ((unsigned long)pvRangeAddrStart) & (PAGE_SIZE - 1); - ulEndOffset = ((unsigned long)pvRangeAddrStart + ulLength) & (PAGE_SIZE - 1); - - - ui32NumPages = (ulStartOffset + ulLength + PAGE_SIZE - 1) >> PAGE_SHIFT; - - for(i = 0; i < ui32NumPages; i++) - { - ulStart = pfnMemAreaToPhys(psLinuxMemArea, pvRangeAddrStart, - ui32PageNumOffset, i); - ulEnd = ulStart + PAGE_SIZE; - - if(i == ui32NumPages - 1 && ulEndOffset != 0) - ulEnd = ulStart + ulEndOffset; - - if(i == 0) - ulStart += ulStartOffset; - - pfnOuterCacheOp(ulStart, ulEnd); - } - } -#endif - - return IMG_TRUE; - -err_blocked: - PVR_DPF((PVR_DBG_WARNING, "%s: Blocked cache op on virtual range " - "%p-%p (type %d)", __func__, - pvRangeAddrStart, pvRangeAddrStart + ui32Length, - psLinuxMemArea->eAreaType)); - return IMG_FALSE; -} - -#endif - -#if defined(__i386__) - -#define ROUND_UP(x,a) (((x) + (a) - 1) & ~((a) - 1)) - -static void per_cpu_cache_flush(void *arg) -{ - PVR_UNREFERENCED_PARAMETER(arg); - wbinvd(); -} - -static void x86_flush_cache_range(const void *pvStart, const void *pvEnd) -{ - IMG_BYTE *pbStart = (IMG_BYTE *)pvStart; - IMG_BYTE *pbEnd = (IMG_BYTE *)pvEnd; - IMG_BYTE *pbBase; - - pbEnd = (IMG_BYTE *)ROUND_UP((IMG_UINTPTR_T)pbEnd, - boot_cpu_data.x86_clflush_size); - - mb(); - for(pbBase = pbStart; pbBase < pbEnd; pbBase += boot_cpu_data.x86_clflush_size) - clflush(pbBase); - mb(); -} - -IMG_VOID OSCleanCPUCacheKM(IMG_VOID) -{ - - ON_EACH_CPU(per_cpu_cache_flush, NULL, 1); -} - -IMG_VOID OSFlushCPUCacheKM(IMG_VOID) -{ - ON_EACH_CPU(per_cpu_cache_flush, NULL, 1); -} - -IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - x86_flush_cache_range, IMG_NULL); -} - -IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - x86_flush_cache_range, IMG_NULL); -} - -IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - x86_flush_cache_range, IMG_NULL); -} - -#else - -#if defined(__arm__) - -static void per_cpu_cache_flush(void *arg) -{ - PVR_UNREFERENCED_PARAMETER(arg); - flush_cache_all(); -} - -IMG_VOID OSCleanCPUCacheKM(IMG_VOID) -{ - - ON_EACH_CPU(per_cpu_cache_flush, NULL, 1); -#if defined(CONFIG_OUTER_CACHE) && !defined(PVR_NO_FULL_CACHE_OPS) - outer_clean_all(); -#endif -} - -IMG_VOID OSFlushCPUCacheKM(IMG_VOID) -{ - ON_EACH_CPU(per_cpu_cache_flush, NULL, 1); -#if defined(CONFIG_OUTER_CACHE) && !defined(PVR_NO_FULL_CACHE_OPS) - outer_flush_all(); -#endif -} - -static inline size_t pvr_dmac_range_len(const void *pvStart, const void *pvEnd) -{ - return (size_t)((char *)pvEnd - (char *)pvStart); -} - -static void pvr_dmac_inv_range(const void *pvStart, const void *pvEnd) -{ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) - dmac_inv_range(pvStart, pvEnd); -#else - dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_FROM_DEVICE); -#endif -} - -static void pvr_dmac_clean_range(const void *pvStart, const void *pvEnd) -{ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) - dmac_clean_range(pvStart, pvEnd); -#else - dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_TO_DEVICE); -#endif -} - -IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - dmac_flush_range, outer_flush_range); -} - -IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - pvr_dmac_clean_range, outer_clean_range); -} - -IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - pvr_dmac_inv_range, outer_inv_range); -} - -#else - -#if defined(__mips__) -IMG_VOID OSCleanCPUCacheKM(IMG_VOID) -{ - - dma_cache_wback(0, 0x100000); -} - -IMG_VOID OSFlushCPUCacheKM(IMG_VOID) -{ - - dma_cache_wback_inv(0, 0x100000); -} - -IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - if (ui32Length) - dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); - return IMG_TRUE; -} - -IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - if (ui32Length) - dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); - return IMG_TRUE; -} - -IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - if (ui32Length) - dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); - return IMG_TRUE; -} - -#else - -#error "Implement CPU cache flush/clean/invalidate primitives for this CPU!" - -#endif - -#endif - -#endif - -PVRSRV_ERROR PVROSFuncInit(IMG_VOID) -{ -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) - { - psTimerWorkQueue = create_workqueue("pvr_timer"); - if (psTimerWorkQueue == NULL) - { - PVR_DPF((PVR_DBG_ERROR, "%s: couldn't create timer workqueue", __FUNCTION__)); - return PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD; - - } - } -#endif - -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) || defined(PVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE) - { - IMG_UINT32 ui32i; - - for (ui32i = 0; ui32i < OS_MAX_TIMERS; ui32i++) - { - TIMER_CALLBACK_DATA *psTimerCBData = &sTimers[ui32i]; - - INIT_WORK(&psTimerCBData->sWork, OSTimerWorkQueueCallBack); - } - } -#endif - return PVRSRV_OK; -} - -IMG_VOID PVROSFuncDeInit(IMG_VOID) -{ -#if defined(PVR_LINUX_TIMERS_USING_WORKQUEUES) - if (psTimerWorkQueue != NULL) - { - destroy_workqueue(psTimerWorkQueue); - } -#endif -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osperproc.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osperproc.c deleted file mode 100644 index 6b57dfc..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/osperproc.c +++ /dev/null @@ -1,113 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "osperproc.h" - -#include "env_perproc.h" -#include "proc.h" - -extern IMG_UINT32 gui32ReleasePID; - -PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData) -{ - PVRSRV_ERROR eError; - IMG_HANDLE hBlockAlloc; - PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; - - eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_ENV_PER_PROCESS_DATA), - phOsPrivateData, - &hBlockAlloc, - "Environment per Process Data"); - - if (eError != PVRSRV_OK) - { - *phOsPrivateData = IMG_NULL; - - PVR_DPF((PVR_DBG_ERROR, "%s: OSAllocMem failed (%d)", __FUNCTION__, eError)); - return eError; - } - - psEnvPerProc = (PVRSRV_ENV_PER_PROCESS_DATA *)*phOsPrivateData; - OSMemSet(psEnvPerProc, 0, sizeof(*psEnvPerProc)); - - psEnvPerProc->hBlockAlloc = hBlockAlloc; - - - LinuxMMapPerProcessConnect(psEnvPerProc); - -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - - INIT_LIST_HEAD(&psEnvPerProc->sDRMAuthListHead); -#endif - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSPerProcessPrivateDataDeInit(IMG_HANDLE hOsPrivateData) -{ - PVRSRV_ERROR eError; - PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; - - if (hOsPrivateData == IMG_NULL) - { - return PVRSRV_OK; - } - - psEnvPerProc = (PVRSRV_ENV_PER_PROCESS_DATA *)hOsPrivateData; - - - LinuxMMapPerProcessDisconnect(psEnvPerProc); - - - RemovePerProcessProcDir(psEnvPerProc); - - eError = OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, - sizeof(PVRSRV_ENV_PER_PROCESS_DATA), - hOsPrivateData, - psEnvPerProc->hBlockAlloc); - - - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "%s: OSFreeMem failed (%d)", __FUNCTION__, eError)); - } - - return PVRSRV_OK; -} - -PVRSRV_ERROR OSPerProcessSetHandleOptions(PVRSRV_HANDLE_BASE *psHandleBase) -{ - return LinuxMMapPerProcessHandleOptions(psHandleBase); -} - -IMG_HANDLE LinuxTerminatingProcessPrivateData(IMG_VOID) -{ - if(!gui32ReleasePID) - return NULL; - return PVRSRVPerProcessPrivateData(gui32ReleasePID); -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pdump.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pdump.c deleted file mode 100644 index 13d9b0d..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pdump.c +++ /dev/null @@ -1,628 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined (SUPPORT_SGX) || defined (SUPPORT_VGX) -#if defined (PDUMP) - -#include -#include -#if defined (SUPPORT_SGX) -#include "sgxdefs.h" -#endif -#include "services_headers.h" - -#include "pvrversion.h" -#include "pvr_debug.h" - -#include "dbgdrvif.h" -#if defined (SUPPORT_SGX) -#include "sgxmmu.h" -#endif -#include "mm.h" -#include "pdump_km.h" -#include "pdump_int.h" - -#include -#include - -static IMG_BOOL PDumpWriteString2 (IMG_CHAR * pszString, IMG_UINT32 ui32Flags); -static IMG_BOOL PDumpWriteILock (PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32Count, IMG_UINT32 ui32Flags); -static IMG_VOID DbgSetFrame (PDBG_STREAM psStream, IMG_UINT32 ui32Frame); -static IMG_VOID DbgSetMarker (PDBG_STREAM psStream, IMG_UINT32 ui32Marker); - -#define PDUMP_DATAMASTER_PIXEL (1) -#define PDUMP_DATAMASTER_EDM (3) - -#define MAX_FILE_SIZE 0x40000000 - -static atomic_t gsPDumpSuspended = ATOMIC_INIT(0); - -static PDBGKM_SERVICE_TABLE gpfnDbgDrv = IMG_NULL; - - - -IMG_CHAR *pszStreamName[PDUMP_NUM_STREAMS] = { "ParamStream2", - "ScriptStream2", - "DriverInfoStream"}; -typedef struct PDBG_PDUMP_STATE_TAG -{ - PDBG_STREAM psStream[PDUMP_NUM_STREAMS]; - IMG_UINT32 ui32ParamFileNum; - - IMG_CHAR *pszMsg; - IMG_CHAR *pszScript; - IMG_CHAR *pszFile; - -} PDBG_PDUMP_STATE; - -static PDBG_PDUMP_STATE gsDBGPdumpState = {{IMG_NULL}, 0, IMG_NULL, IMG_NULL, IMG_NULL}; - -#define SZ_MSG_SIZE_MAX PVRSRV_PDUMP_MAX_COMMENT_SIZE-1 -#define SZ_SCRIPT_SIZE_MAX PVRSRV_PDUMP_MAX_COMMENT_SIZE-1 -#define SZ_FILENAME_SIZE_MAX PVRSRV_PDUMP_MAX_COMMENT_SIZE-1 - - - - -IMG_VOID DBGDrvGetServiceTable(IMG_VOID **fn_table); - -static inline IMG_BOOL PDumpSuspended(IMG_VOID) -{ - return (atomic_read(&gsPDumpSuspended) != 0) ? IMG_TRUE : IMG_FALSE; -} - -PVRSRV_ERROR PDumpOSGetScriptString(IMG_HANDLE *phScript, - IMG_UINT32 *pui32MaxLen) -{ - *phScript = (IMG_HANDLE)gsDBGPdumpState.pszScript; - *pui32MaxLen = SZ_SCRIPT_SIZE_MAX; - if ((!*phScript) || PDumpSuspended()) - { - return PVRSRV_ERROR_PDUMP_NOT_ACTIVE; - } - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpOSGetMessageString(IMG_CHAR **ppszMsg, - IMG_UINT32 *pui32MaxLen) -{ - *ppszMsg = gsDBGPdumpState.pszMsg; - *pui32MaxLen = SZ_MSG_SIZE_MAX; - if ((!*ppszMsg) || PDumpSuspended()) - { - return PVRSRV_ERROR_PDUMP_NOT_ACTIVE; - } - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpOSGetFilenameString(IMG_CHAR **ppszFile, - IMG_UINT32 *pui32MaxLen) -{ - *ppszFile = gsDBGPdumpState.pszFile; - *pui32MaxLen = SZ_FILENAME_SIZE_MAX; - if ((!*ppszFile) || PDumpSuspended()) - { - return PVRSRV_ERROR_PDUMP_NOT_ACTIVE; - } - return PVRSRV_OK; -} - -IMG_BOOL PDumpOSWriteString2(IMG_HANDLE hScript, IMG_UINT32 ui32Flags) -{ - return PDumpWriteString2(hScript, ui32Flags); -} - -PVRSRV_ERROR PDumpOSBufprintf(IMG_HANDLE hBuf, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR* pszFormat, ...) -{ - IMG_CHAR* pszBuf = hBuf; - IMG_INT32 n; - va_list vaArgs; - - va_start(vaArgs, pszFormat); - - n = vsnprintf(pszBuf, ui32ScriptSizeMax, pszFormat, vaArgs); - - va_end(vaArgs); - - if (n>=(IMG_INT32)ui32ScriptSizeMax || n==-1) - { - PVR_DPF((PVR_DBG_ERROR, "Buffer overflow detected, pdump output may be incomplete.")); - - return PVRSRV_ERROR_PDUMP_BUF_OVERFLOW; - } - -#if defined(PDUMP_DEBUG_OUTFILES) - g_ui32EveryLineCounter++; -#endif - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpOSVSprintf(IMG_CHAR *pszComment, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR* pszFormat, PDUMP_va_list vaArgs) -{ - IMG_INT32 n; - - n = vsnprintf(pszComment, ui32ScriptSizeMax, pszFormat, vaArgs); - - if (n>=(IMG_INT32)ui32ScriptSizeMax || n==-1) - { - PVR_DPF((PVR_DBG_ERROR, "Buffer overflow detected, pdump output may be incomplete.")); - - return PVRSRV_ERROR_PDUMP_BUF_OVERFLOW; - } - - return PVRSRV_OK; -} - -IMG_VOID PDumpOSDebugPrintf(IMG_CHAR* pszFormat, ...) -{ - PVR_UNREFERENCED_PARAMETER(pszFormat); - - -} - -PVRSRV_ERROR PDumpOSSprintf(IMG_CHAR *pszComment, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR *pszFormat, ...) -{ - IMG_INT32 n; - va_list vaArgs; - - va_start(vaArgs, pszFormat); - - n = vsnprintf(pszComment, ui32ScriptSizeMax, pszFormat, vaArgs); - - va_end(vaArgs); - - if (n>=(IMG_INT32)ui32ScriptSizeMax || n==-1) - { - PVR_DPF((PVR_DBG_ERROR, "Buffer overflow detected, pdump output may be incomplete.")); - - return PVRSRV_ERROR_PDUMP_BUF_OVERFLOW; - } - - return PVRSRV_OK; -} - -IMG_UINT32 PDumpOSBuflen(IMG_HANDLE hBuffer, IMG_UINT32 ui32BufferSizeMax) -{ - IMG_CHAR* pszBuf = hBuffer; - IMG_UINT32 ui32Count = 0; - - while ((pszBuf[ui32Count]!=0) && (ui32Count= 1) && (pszBuf[ui32Count-1] != '\n') && (ui32Count= 2) && (pszBuf[ui32Count-2] != '\r') && (ui32CountpfnGetStreamOffset(psStream); -} - -IMG_UINT32 PDumpOSGetParamFileNum(IMG_VOID) -{ - return gsDBGPdumpState.ui32ParamFileNum; -} - -IMG_BOOL PDumpOSWriteString(IMG_HANDLE hStream, - IMG_UINT8 *psui8Data, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32Flags) -{ - PDBG_STREAM psStream = (PDBG_STREAM)hStream; - return PDumpWriteILock(psStream, - psui8Data, - ui32Size, - ui32Flags); -} - -IMG_VOID PDumpOSCheckForSplitting(IMG_HANDLE hStream, IMG_UINT32 ui32Size, IMG_UINT32 ui32Flags) -{ - - PVR_UNREFERENCED_PARAMETER(hStream); - PVR_UNREFERENCED_PARAMETER(ui32Size); - PVR_UNREFERENCED_PARAMETER(ui32Flags); -} - -IMG_BOOL PDumpOSJTInitialised(IMG_VOID) -{ - if(gpfnDbgDrv) - { - return IMG_TRUE; - } - return IMG_FALSE; -} - -inline IMG_BOOL PDumpOSIsSuspended(IMG_VOID) -{ - return (atomic_read(&gsPDumpSuspended) != 0) ? IMG_TRUE : IMG_FALSE; -} - -IMG_VOID PDumpOSCPUVAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_UINT8 *pui8LinAddr, - IMG_UINT32 ui32PageSize, - IMG_DEV_PHYADDR *psDevPAddr) -{ - IMG_CPU_PHYADDR sCpuPAddr; - - PVR_UNREFERENCED_PARAMETER(pui8LinAddr); - PVR_UNREFERENCED_PARAMETER(ui32PageSize); - - - - PVR_ASSERT (hOSMemHandle != IMG_NULL); - - sCpuPAddr = OSMemHandleToCpuPAddr(hOSMemHandle, ui32Offset); - PVR_ASSERT((sCpuPAddr.uiAddr & (ui32PageSize - 1)) == 0); - - - *psDevPAddr = SysCpuPAddrToDevPAddr(eDeviceType, sCpuPAddr); -} - -IMG_VOID PDumpOSCPUVAddrToPhysPages(IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_PUINT8 pui8LinAddr, - IMG_UINT32 ui32DataPageMask, - IMG_UINT32 *pui32PageOffset) -{ - if(hOSMemHandle) - { - - IMG_CPU_PHYADDR sCpuPAddr; - - PVR_UNREFERENCED_PARAMETER(pui8LinAddr); - - sCpuPAddr = OSMemHandleToCpuPAddr(hOSMemHandle, ui32Offset); - *pui32PageOffset = sCpuPAddr.uiAddr & ui32DataPageMask; - } - else - { - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(ui32Offset); - - *pui32PageOffset = ((IMG_UINT32)pui8LinAddr & ui32DataPageMask); - } -} - -IMG_UINT32 PDumpOSDebugDriverWrite( PDBG_STREAM psStream, - PDUMP_DDWMODE eDbgDrvWriteMode, - IMG_UINT8 *pui8Data, - IMG_UINT32 ui32BCount, - IMG_UINT32 ui32Level, - IMG_UINT32 ui32DbgDrvFlags) -{ - switch(eDbgDrvWriteMode) - { - case PDUMP_WRITE_MODE_CONTINUOUS: - PVR_UNREFERENCED_PARAMETER(ui32DbgDrvFlags); - return gpfnDbgDrv->pfnDBGDrivWrite2(psStream, pui8Data, ui32BCount, ui32Level); - case PDUMP_WRITE_MODE_LASTFRAME: - return gpfnDbgDrv->pfnWriteLF(psStream, pui8Data, ui32BCount, ui32Level, ui32DbgDrvFlags); - case PDUMP_WRITE_MODE_BINCM: - PVR_UNREFERENCED_PARAMETER(ui32DbgDrvFlags); - return gpfnDbgDrv->pfnWriteBINCM(psStream, pui8Data, ui32BCount, ui32Level); - case PDUMP_WRITE_MODE_PERSISTENT: - PVR_UNREFERENCED_PARAMETER(ui32DbgDrvFlags); - return gpfnDbgDrv->pfnWritePersist(psStream, pui8Data, ui32BCount, ui32Level); - default: - PVR_UNREFERENCED_PARAMETER(ui32DbgDrvFlags); - break; - } - return 0xFFFFFFFFU; -} - -IMG_VOID PDumpOSReleaseExecution(IMG_VOID) -{ - OSReleaseThreadQuanta(); -} - -IMG_VOID PDumpInit(IMG_VOID) -{ - IMG_UINT32 i; - DBGKM_CONNECT_NOTIFIER sConnectNotifier; - - - if (!gpfnDbgDrv) - { - DBGDrvGetServiceTable((IMG_VOID **)&gpfnDbgDrv); - - - - if (gpfnDbgDrv == IMG_NULL) - { - return; - } - - - sConnectNotifier.pfnConnectNotifier = &PDumpConnectionNotify; - gpfnDbgDrv->pfnSetConnectNotifier(sConnectNotifier); - - if(!gsDBGPdumpState.pszFile) - { - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_FILENAME_SIZE_MAX, (IMG_PVOID *)&gsDBGPdumpState.pszFile, 0, - "Filename string") != PVRSRV_OK) - { - goto init_failed; - } - } - - if(!gsDBGPdumpState.pszMsg) - { - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_MSG_SIZE_MAX, (IMG_PVOID *)&gsDBGPdumpState.pszMsg, 0, - "Message string") != PVRSRV_OK) - { - goto init_failed; - } - } - - if(!gsDBGPdumpState.pszScript) - { - if(OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_SCRIPT_SIZE_MAX, (IMG_PVOID *)&gsDBGPdumpState.pszScript, 0, - "Script string") != PVRSRV_OK) - { - goto init_failed; - } - } - - for(i=0; i < PDUMP_NUM_STREAMS; i++) - { - gsDBGPdumpState.psStream[i] = gpfnDbgDrv->pfnCreateStream(pszStreamName[i], - DEBUG_CAPMODE_FRAMED, - DEBUG_OUTMODE_STREAMENABLE, - 0, - 10); - - gpfnDbgDrv->pfnSetCaptureMode(gsDBGPdumpState.psStream[i],DEBUG_CAPMODE_FRAMED,0xFFFFFFFF, 0xFFFFFFFF, 1); - gpfnDbgDrv->pfnSetFrame(gsDBGPdumpState.psStream[i],0); - } - - PDUMPCOMMENT("Driver Product Name: %s", VS_PRODUCT_NAME); - PDUMPCOMMENT("Driver Product Version: %s (%s)", PVRVERSION_STRING, PVRVERSION_FAMILY); - PDUMPCOMMENT("Start of Init Phase"); - } - - return; - -init_failed: - - if(gsDBGPdumpState.pszFile) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_FILENAME_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszFile, 0); - gsDBGPdumpState.pszFile = IMG_NULL; - } - - if(gsDBGPdumpState.pszScript) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_SCRIPT_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszScript, 0); - gsDBGPdumpState.pszScript = IMG_NULL; - } - - if(gsDBGPdumpState.pszMsg) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_MSG_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszMsg, 0); - gsDBGPdumpState.pszMsg = IMG_NULL; - } - - - sConnectNotifier.pfnConnectNotifier = 0; - gpfnDbgDrv->pfnSetConnectNotifier(sConnectNotifier); - - gpfnDbgDrv = IMG_NULL; -} - - -IMG_VOID PDumpDeInit(IMG_VOID) -{ - IMG_UINT32 i; - DBGKM_CONNECT_NOTIFIER sConnectNotifier; - - for(i=0; i < PDUMP_NUM_STREAMS; i++) - { - gpfnDbgDrv->pfnDestroyStream(gsDBGPdumpState.psStream[i]); - } - - if(gsDBGPdumpState.pszFile) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_FILENAME_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszFile, 0); - gsDBGPdumpState.pszFile = IMG_NULL; - } - - if(gsDBGPdumpState.pszScript) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_SCRIPT_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszScript, 0); - gsDBGPdumpState.pszScript = IMG_NULL; - } - - if(gsDBGPdumpState.pszMsg) - { - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, SZ_MSG_SIZE_MAX, (IMG_PVOID) gsDBGPdumpState.pszMsg, 0); - gsDBGPdumpState.pszMsg = IMG_NULL; - } - - - sConnectNotifier.pfnConnectNotifier = 0; - gpfnDbgDrv->pfnSetConnectNotifier(sConnectNotifier); - - gpfnDbgDrv = IMG_NULL; -} - -PVRSRV_ERROR PDumpStartInitPhaseKM(IMG_VOID) -{ - IMG_UINT32 i; - - if (gpfnDbgDrv) - { - PDUMPCOMMENT("Start Init Phase"); - for(i=0; i < PDUMP_NUM_STREAMS; i++) - { - gpfnDbgDrv->pfnStartInitPhase(gsDBGPdumpState.psStream[i]); - } - } - return PVRSRV_OK; -} - -PVRSRV_ERROR PDumpStopInitPhaseKM(IMG_VOID) -{ - IMG_UINT32 i; - - if (gpfnDbgDrv) - { - PDUMPCOMMENT("Stop Init Phase"); - - for(i=0; i < PDUMP_NUM_STREAMS; i++) - { - gpfnDbgDrv->pfnStopInitPhase(gsDBGPdumpState.psStream[i]); - } - } - return PVRSRV_OK; -} - -IMG_BOOL PDumpIsLastCaptureFrameKM(IMG_VOID) -{ - return gpfnDbgDrv->pfnIsLastCaptureFrame(gsDBGPdumpState.psStream[PDUMP_STREAM_SCRIPT2]); -} - - -IMG_BOOL PDumpOSIsCaptureFrameKM(IMG_VOID) -{ - if (PDumpSuspended()) - { - return IMG_FALSE; - } - return gpfnDbgDrv->pfnIsCaptureFrame(gsDBGPdumpState.psStream[PDUMP_STREAM_SCRIPT2], IMG_FALSE); -} - -PVRSRV_ERROR PDumpOSSetFrameKM(IMG_UINT32 ui32Frame) -{ - IMG_UINT32 ui32Stream; - - for (ui32Stream = 0; ui32Stream < PDUMP_NUM_STREAMS; ui32Stream++) - { - if (gsDBGPdumpState.psStream[ui32Stream]) - { - DbgSetFrame(gsDBGPdumpState.psStream[ui32Stream], ui32Frame); - } - } - - return PVRSRV_OK; -} - - -static IMG_BOOL PDumpWriteString2(IMG_CHAR * pszString, IMG_UINT32 ui32Flags) -{ - return PDumpWriteILock(gsDBGPdumpState.psStream[PDUMP_STREAM_SCRIPT2], (IMG_UINT8 *) pszString, strlen(pszString), ui32Flags); -} - - -static IMG_BOOL PDumpWriteILock(PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32Count, IMG_UINT32 ui32Flags) -{ - IMG_UINT32 ui32Written = 0; - if ((psStream == IMG_NULL) || PDumpSuspended() || ((ui32Flags & PDUMP_FLAGS_NEVER) != 0)) - { - PVR_DPF((PVR_DBG_MESSAGE, "PDumpWriteILock: Failed to write 0x%x bytes to stream 0x%x", ui32Count, (IMG_UINT32)psStream)); - return IMG_TRUE; - } - - - - - if (psStream == gsDBGPdumpState.psStream[PDUMP_STREAM_PARAM2]) - { - IMG_UINT32 ui32ParamOutPos = gpfnDbgDrv->pfnGetStreamOffset(gsDBGPdumpState.psStream[PDUMP_STREAM_PARAM2]); - - if (ui32ParamOutPos + ui32Count > MAX_FILE_SIZE) - { - if ((gsDBGPdumpState.psStream[PDUMP_STREAM_SCRIPT2] && PDumpWriteString2("\r\n-- Splitting pdump output file\r\n\r\n", ui32Flags))) - { - DbgSetMarker(gsDBGPdumpState.psStream[PDUMP_STREAM_PARAM2], ui32ParamOutPos); - gsDBGPdumpState.ui32ParamFileNum++; - } - } - } - - ui32Written = DbgWrite(psStream, pui8Data, ui32Count, ui32Flags); - - if (ui32Written == 0xFFFFFFFF) - { - return IMG_FALSE; - } - - return IMG_TRUE; -} - -static IMG_VOID DbgSetFrame(PDBG_STREAM psStream, IMG_UINT32 ui32Frame) -{ - gpfnDbgDrv->pfnSetFrame(psStream, ui32Frame); -} - -static IMG_VOID DbgSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker) -{ - gpfnDbgDrv->pfnSetMarker(psStream, ui32Marker); -} - -IMG_VOID PDumpSuspendKM(IMG_VOID) -{ - atomic_inc(&gsPDumpSuspended); -} - -IMG_VOID PDumpResumeKM(IMG_VOID) -{ - atomic_dec(&gsPDumpSuspended); -} - -#endif -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/private_data.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/private_data.h deleted file mode 100644 index b8751d3..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/private_data.h +++ /dev/null @@ -1,69 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __INCLUDED_PRIVATE_DATA_H_ -#define __INCLUDED_PRIVATE_DATA_H_ - -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) -#include -#include -#endif - -typedef struct -{ - - IMG_UINT32 ui32OpenPID; - - -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hKernelMemInfo; -#else - IMG_HANDLE hKernelMemInfo; -#endif - -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - - struct list_head sDRMAuthListItem; - - struct drm_file *psDRMFile; -#endif - -#if defined(SUPPORT_MEMINFO_IDS) - - IMG_UINT64 ui64Stamp; -#endif - - - IMG_HANDLE hBlockAlloc; - -#if defined(SUPPORT_DRI_DRM_EXT) - IMG_PVOID pPriv; -#endif -} -PVRSRV_FILE_PRIVATE_DATA; - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.c deleted file mode 100644 index 1df8aff..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.c +++ /dev/null @@ -1,835 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#include -#include - -#include "services_headers.h" - -#include "queue.h" -#include "resman.h" -#include "pvrmmap.h" -#include "pvr_debug.h" -#include "pvrversion.h" -#include "proc.h" -#include "perproc.h" -#include "env_perproc.h" -#include "linkage.h" - -#include "lists.h" - -static struct proc_dir_entry * dir; - -static const IMG_CHAR PVRProcDirRoot[] = "pvr"; - -static IMG_INT pvr_proc_open(struct inode *inode,struct file *file); -static void *pvr_proc_seq_start (struct seq_file *m, loff_t *pos); -static void pvr_proc_seq_stop (struct seq_file *m, void *v); -static void *pvr_proc_seq_next (struct seq_file *m, void *v, loff_t *pos); -static int pvr_proc_seq_show (struct seq_file *m, void *v); -static ssize_t pvr_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos); - -static struct file_operations pvr_proc_operations = -{ - .open = pvr_proc_open, - .read = seq_read, - .write = pvr_proc_write, - .llseek = seq_lseek, - .release = seq_release, -}; - -static struct seq_operations pvr_proc_seq_operations = -{ - .start = pvr_proc_seq_start, - .next = pvr_proc_seq_next, - .stop = pvr_proc_seq_stop, - .show = pvr_proc_seq_show, -}; - -static struct proc_dir_entry* g_pProcQueue; -static struct proc_dir_entry* g_pProcVersion; -static struct proc_dir_entry* g_pProcSysNodes; - -#ifdef DEBUG -static struct proc_dir_entry* g_pProcDebugLevel; -#endif - -#ifdef PVR_MANUAL_POWER_CONTROL -static struct proc_dir_entry* g_pProcPowerLevel; -#endif - - -static void ProcSeqShowVersion(struct seq_file *sfile,void* el); - -static void ProcSeqShowSysNodes(struct seq_file *sfile,void* el); -static void* ProcSeqOff2ElementSysNodes(struct seq_file * sfile, loff_t off); - -off_t printAppend(IMG_CHAR * buffer, size_t size, off_t off, const IMG_CHAR * format, ...) -{ - IMG_INT n; - size_t space = size - (size_t)off; - va_list ap; - - va_start (ap, format); - - n = vsnprintf (buffer+off, space, format, ap); - - va_end (ap); - - if (n >= (IMG_INT)space || n < 0) - { - - buffer[size - 1] = 0; - return (off_t)(size - 1); - } - else - { - return (off + (off_t)n); - } -} - - -void* ProcSeq1ElementOff2Element(struct seq_file *sfile, loff_t off) -{ - PVR_UNREFERENCED_PARAMETER(sfile); - - if(!off) - return (void*)2; - return NULL; -} - - -void* ProcSeq1ElementHeaderOff2Element(struct seq_file *sfile, loff_t off) -{ - PVR_UNREFERENCED_PARAMETER(sfile); - - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - - if(off == 1) - return (void*)2; - - return NULL; -} - - -static IMG_INT pvr_proc_open(struct inode *inode,struct file *file) -{ - IMG_INT ret = seq_open(file, &pvr_proc_seq_operations); - - struct seq_file *seq = (struct seq_file*)file->private_data; - struct proc_dir_entry* pvr_proc_entry = PDE(inode); - - - seq->private = pvr_proc_entry->data; - return ret; -} - -static ssize_t pvr_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - struct inode *inode = file->f_path.dentry->d_inode; - struct proc_dir_entry * dp; - - PVR_UNREFERENCED_PARAMETER(ppos); - dp = PDE(inode); - - if (!dp->write_proc) - return -EIO; - - return dp->write_proc(file, buffer, count, dp->data); -} - - -static void *pvr_proc_seq_start (struct seq_file *proc_seq_file, loff_t *pos) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)proc_seq_file->private; - if(handlers->startstop != NULL) - handlers->startstop(proc_seq_file, IMG_TRUE); - return handlers->off2element(proc_seq_file, *pos); -} - -static void pvr_proc_seq_stop (struct seq_file *proc_seq_file, void *v) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)proc_seq_file->private; - PVR_UNREFERENCED_PARAMETER(v); - - if(handlers->startstop != NULL) - handlers->startstop(proc_seq_file, IMG_FALSE); -} - -static void *pvr_proc_seq_next (struct seq_file *proc_seq_file, void *v, loff_t *pos) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)proc_seq_file->private; - (*pos)++; - if( handlers->next != NULL) - return handlers->next( proc_seq_file, v, *pos ); - return handlers->off2element(proc_seq_file, *pos); -} - -static int pvr_proc_seq_show (struct seq_file *proc_seq_file, void *v) -{ - PVR_PROC_SEQ_HANDLERS *handlers = (PVR_PROC_SEQ_HANDLERS*)proc_seq_file->private; - handlers->show( proc_seq_file,v ); - return 0; -} - - - -static struct proc_dir_entry* CreateProcEntryInDirSeq( - struct proc_dir_entry *pdir, - const IMG_CHAR * name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler, - write_proc_t whandler - ) -{ - - struct proc_dir_entry * file; - mode_t mode; - - if (!dir) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntryInDirSeq: cannot make proc entry /proc/%s/%s: no parent", PVRProcDirRoot, name)); - return NULL; - } - - mode = S_IFREG; - - if (show_handler) - { - mode |= S_IRUGO; - } - - if (whandler) - { - mode |= S_IWUSR; - } - - file=create_proc_entry(name, mode, pdir); - - if (file) - { - PVR_PROC_SEQ_HANDLERS *seq_handlers; - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) - file->owner = THIS_MODULE; -#endif - - file->proc_fops = &pvr_proc_operations; - file->write_proc = whandler; - - - file->data = kmalloc(sizeof(PVR_PROC_SEQ_HANDLERS), GFP_KERNEL); - if(file->data) - { - seq_handlers = (PVR_PROC_SEQ_HANDLERS*)file->data; - seq_handlers->next = next_handler; - seq_handlers->show = show_handler; - seq_handlers->off2element = off2element_handler; - seq_handlers->startstop = startstop_handler; - seq_handlers->data = data; - - return file; - } - } - - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntryInDirSeq: cannot make proc entry /proc/%s/%s: no memory", PVRProcDirRoot, name)); - return NULL; -} - - -struct proc_dir_entry* CreateProcReadEntrySeq ( - const IMG_CHAR * name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler - ) -{ - return CreateProcEntrySeq(name, - data, - next_handler, - show_handler, - off2element_handler, - startstop_handler, - NULL); -} - -struct proc_dir_entry* CreateProcEntrySeq ( - const IMG_CHAR * name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler, - write_proc_t whandler - ) -{ - return CreateProcEntryInDirSeq( - dir, - name, - data, - next_handler, - show_handler, - off2element_handler, - startstop_handler, - whandler - ); -} - - - -struct proc_dir_entry* CreatePerProcessProcEntrySeq ( - const IMG_CHAR * name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler, - write_proc_t whandler - ) -{ - PVRSRV_ENV_PER_PROCESS_DATA *psPerProc; - IMG_UINT32 ui32PID; - - if (!dir) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntrySeq: /proc/%s doesn't exist", PVRProcDirRoot)); - return NULL; - } - - ui32PID = OSGetCurrentProcessIDKM(); - - psPerProc = PVRSRVPerProcessPrivateData(ui32PID); - if (!psPerProc) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntrySeq: no per process data")); - - return NULL; - } - - if (!psPerProc->psProcDir) - { - IMG_CHAR dirname[16]; - IMG_INT ret; - - ret = snprintf(dirname, sizeof(dirname), "%u", ui32PID); - - if (ret <=0 || ret >= (IMG_INT)sizeof(dirname)) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: couldn't generate per process proc directory name \"%u\"", ui32PID)); - return NULL; - } - else - { - psPerProc->psProcDir = proc_mkdir(dirname, dir); - if (!psPerProc->psProcDir) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: couldn't create per process proc directory /proc/%s/%u", - PVRProcDirRoot, ui32PID)); - return NULL; - } - } - } - - return CreateProcEntryInDirSeq(psPerProc->psProcDir, name, data, next_handler, - show_handler,off2element_handler,startstop_handler,whandler); -} - - -IMG_VOID RemoveProcEntrySeq( struct proc_dir_entry* proc_entry ) -{ - if (dir) - { - void* data = proc_entry->data ; - PVR_DPF((PVR_DBG_MESSAGE, "Removing /proc/%s/%s", PVRProcDirRoot, proc_entry->name)); - - remove_proc_entry(proc_entry->name, dir); - if( data) - kfree( data ); - - } -} - -IMG_VOID RemovePerProcessProcEntrySeq(struct proc_dir_entry* proc_entry) -{ - PVRSRV_ENV_PER_PROCESS_DATA *psPerProc; - - psPerProc = LinuxTerminatingProcessPrivateData(); - if (!psPerProc) - { - psPerProc = PVRSRVFindPerProcessPrivateData(); - if (!psPerProc) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: can't " - "remove %s, no per process data", proc_entry->name)); - return; - } - } - - if (psPerProc->psProcDir) - { - void* data = proc_entry->data ; - PVR_DPF((PVR_DBG_MESSAGE, "Removing proc entry %s from %s", proc_entry->name, psPerProc->psProcDir->name)); - - remove_proc_entry(proc_entry->name, psPerProc->psProcDir); - if(data) - kfree( data ); - } -} - -static IMG_INT pvr_read_proc(IMG_CHAR *page, IMG_CHAR **start, off_t off, - IMG_INT count, IMG_INT *eof, IMG_VOID *data) -{ - - pvr_read_proc_t *pprn = (pvr_read_proc_t *)data; - - off_t len = pprn (page, (size_t)count, off); - - if (len == END_OF_FILE) - { - len = 0; - *eof = 1; - } - else if (!len) - { - *start = (IMG_CHAR *) 0; - } - else - { - *start = (IMG_CHAR *) 1; - } - - return len; -} - - -static IMG_INT CreateProcEntryInDir(struct proc_dir_entry *pdir, const IMG_CHAR * name, read_proc_t rhandler, write_proc_t whandler, IMG_VOID *data) -{ - struct proc_dir_entry * file; - mode_t mode; - - if (!pdir) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntryInDir: parent directory doesn't exist")); - - return -ENOMEM; - } - - mode = S_IFREG; - - if (rhandler) - { - mode |= S_IRUGO; - } - - if (whandler) - { - mode |= S_IWUSR; - } - - file = create_proc_entry(name, mode, pdir); - - if (file) - { -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) - file->owner = THIS_MODULE; -#endif - file->read_proc = rhandler; - file->write_proc = whandler; - file->data = data; - - PVR_DPF((PVR_DBG_MESSAGE, "Created proc entry %s in %s", name, pdir->name)); - - return 0; - } - - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntry: cannot create proc entry %s in %s", name, pdir->name)); - - return -ENOMEM; -} - - -IMG_INT CreateProcEntry(const IMG_CHAR * name, read_proc_t rhandler, write_proc_t whandler, IMG_VOID *data) -{ - return CreateProcEntryInDir(dir, name, rhandler, whandler, data); -} - - -IMG_INT CreatePerProcessProcEntry(const IMG_CHAR * name, read_proc_t rhandler, write_proc_t whandler, IMG_VOID *data) -{ - PVRSRV_ENV_PER_PROCESS_DATA *psPerProc; - IMG_UINT32 ui32PID; - - if (!dir) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: /proc/%s doesn't exist", PVRProcDirRoot)); - - return -ENOMEM; - } - - ui32PID = OSGetCurrentProcessIDKM(); - - psPerProc = PVRSRVPerProcessPrivateData(ui32PID); - if (!psPerProc) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: no per process data")); - - return -ENOMEM; - } - - if (!psPerProc->psProcDir) - { - IMG_CHAR dirname[16]; - IMG_INT ret; - - ret = snprintf(dirname, sizeof(dirname), "%u", ui32PID); - - if (ret <=0 || ret >= (IMG_INT)sizeof(dirname)) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: couldn't generate per process proc directory name \"%u\"", ui32PID)); - - return -ENOMEM; - } - else - { - psPerProc->psProcDir = proc_mkdir(dirname, dir); - if (!psPerProc->psProcDir) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: couldn't create per process proc directory /proc/%s/%u", PVRProcDirRoot, ui32PID)); - - return -ENOMEM; - } - } - } - - return CreateProcEntryInDir(psPerProc->psProcDir, name, rhandler, whandler, data); -} - - -IMG_INT CreateProcReadEntry(const IMG_CHAR * name, pvr_read_proc_t handler) -{ - struct proc_dir_entry * file; - - if (!dir) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcReadEntry: cannot make proc entry /proc/%s/%s: no parent", PVRProcDirRoot, name)); - - return -ENOMEM; - } - - - file = create_proc_read_entry (name, S_IFREG | S_IRUGO, dir, pvr_read_proc, (IMG_VOID *)handler); - - if (file) - { -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) - file->owner = THIS_MODULE; -#endif - return 0; - } - - PVR_DPF((PVR_DBG_ERROR, "CreateProcReadEntry: cannot make proc entry /proc/%s/%s: no memory", PVRProcDirRoot, name)); - - return -ENOMEM; -} - - -IMG_INT CreateProcEntries(IMG_VOID) -{ - dir = proc_mkdir (PVRProcDirRoot, NULL); - - if (!dir) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntries: cannot make /proc/%s directory", PVRProcDirRoot)); - - return -ENOMEM; - } - - g_pProcQueue = CreateProcReadEntrySeq("queue", NULL, NULL, ProcSeqShowQueue, ProcSeqOff2ElementQueue, NULL); - g_pProcVersion = CreateProcReadEntrySeq("version", NULL, NULL, ProcSeqShowVersion, ProcSeq1ElementHeaderOff2Element, NULL); - g_pProcSysNodes = CreateProcReadEntrySeq("nodes", NULL, NULL, ProcSeqShowSysNodes, ProcSeqOff2ElementSysNodes, NULL); - - if(!g_pProcQueue || !g_pProcVersion || !g_pProcSysNodes) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntries: couldn't make /proc/%s files", PVRProcDirRoot)); - - return -ENOMEM; - } - - -#ifdef DEBUG - - g_pProcDebugLevel = CreateProcEntrySeq("debug_level", NULL, NULL, - ProcSeqShowDebugLevel, - ProcSeq1ElementOff2Element, NULL, - (IMG_VOID*)PVRDebugProcSetLevel); - if(!g_pProcDebugLevel) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntries: couldn't make /proc/%s/debug_level", PVRProcDirRoot)); - - return -ENOMEM; - } - -#ifdef PVR_MANUAL_POWER_CONTROL - g_pProcPowerLevel = CreateProcEntrySeq("power_control", NULL, NULL, - ProcSeqShowPowerLevel, - ProcSeq1ElementOff2Element, NULL, - PVRProcSetPowerLevel); - if(!g_pProcPowerLevel) - { - PVR_DPF((PVR_DBG_ERROR, "CreateProcEntries: couldn't make /proc/%s/power_control", PVRProcDirRoot)); - - return -ENOMEM; - } -#endif -#endif - - return 0; -} - - -IMG_VOID RemoveProcEntry(const IMG_CHAR * name) -{ - if (dir) - { - remove_proc_entry(name, dir); - PVR_DPF((PVR_DBG_MESSAGE, "Removing /proc/%s/%s", PVRProcDirRoot, name)); - } -} - - -IMG_VOID RemovePerProcessProcEntry(const IMG_CHAR *name) -{ - PVRSRV_ENV_PER_PROCESS_DATA *psPerProc; - - psPerProc = LinuxTerminatingProcessPrivateData(); - if (!psPerProc) - { - psPerProc = PVRSRVFindPerProcessPrivateData(); - if (!psPerProc) - { - PVR_DPF((PVR_DBG_ERROR, "CreatePerProcessProcEntries: can't " - "remove %s, no per process data", name)); - return; - } - } - - if (psPerProc->psProcDir) - { - remove_proc_entry(name, psPerProc->psProcDir); - - PVR_DPF((PVR_DBG_MESSAGE, "Removing proc entry %s from %s", name, psPerProc->psProcDir->name)); - } -} - - -IMG_VOID RemovePerProcessProcDir(PVRSRV_ENV_PER_PROCESS_DATA *psPerProc) -{ - if (psPerProc->psProcDir) - { - while (psPerProc->psProcDir->subdir) - { - PVR_DPF((PVR_DBG_WARNING, "Belatedly removing /proc/%s/%s/%s", PVRProcDirRoot, psPerProc->psProcDir->name, psPerProc->psProcDir->subdir->name)); - - RemoveProcEntry(psPerProc->psProcDir->subdir->name); - } - RemoveProcEntry(psPerProc->psProcDir->name); - } -} - -IMG_VOID RemoveProcEntries(IMG_VOID) -{ -#ifdef DEBUG - RemoveProcEntrySeq( g_pProcDebugLevel ); -#ifdef PVR_MANUAL_POWER_CONTROL - RemoveProcEntrySeq( g_pProcPowerLevel ); -#endif -#endif - - RemoveProcEntrySeq(g_pProcQueue); - RemoveProcEntrySeq(g_pProcVersion); - RemoveProcEntrySeq(g_pProcSysNodes); - - while (dir->subdir) - { - PVR_DPF((PVR_DBG_WARNING, "Belatedly removing /proc/%s/%s", PVRProcDirRoot, dir->subdir->name)); - - RemoveProcEntry(dir->subdir->name); - } - - remove_proc_entry(PVRProcDirRoot, NULL); -} - -static void ProcSeqShowVersion(struct seq_file *sfile,void* el) -{ - SYS_DATA *psSysData; - IMG_CHAR *pszSystemVersionString = "None"; - - if(el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf(sfile, - "Version %s (%s) %s\n", - PVRVERSION_STRING, - PVR_BUILD_TYPE, PVR_BUILD_DIR); - return; - } - - psSysData = SysAcquireDataNoCheck(); - if(psSysData != IMG_NULL && psSysData->pszVersionString != IMG_NULL) - { - pszSystemVersionString = psSysData->pszVersionString; - } - - seq_printf( sfile, "System Version String: %s\n", pszSystemVersionString); -} - -static const IMG_CHAR *deviceTypeToString(PVRSRV_DEVICE_TYPE deviceType) -{ - switch (deviceType) - { - default: - { - static IMG_CHAR text[10]; - - sprintf(text, "?%x", (IMG_UINT)deviceType); - - return text; - } - } -} - - -static const IMG_CHAR *deviceClassToString(PVRSRV_DEVICE_CLASS deviceClass) -{ - switch (deviceClass) - { - case PVRSRV_DEVICE_CLASS_3D: - { - return "3D"; - } - case PVRSRV_DEVICE_CLASS_DISPLAY: - { - return "display"; - } - case PVRSRV_DEVICE_CLASS_BUFFER: - { - return "buffer"; - } - default: - { - static IMG_CHAR text[10]; - - sprintf(text, "?%x", (IMG_UINT)deviceClass); - return text; - } - } -} - -static IMG_VOID* DecOffPsDev_AnyVaCb(PVRSRV_DEVICE_NODE *psNode, va_list va) -{ - off_t *pOff = va_arg(va, off_t*); - if (--(*pOff)) - { - return IMG_NULL; - } - else - { - return psNode; - } -} - -static void ProcSeqShowSysNodes(struct seq_file *sfile,void* el) -{ - PVRSRV_DEVICE_NODE *psDevNode; - - if(el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf( sfile, - "Registered nodes\n" - "Addr Type Class Index Ref pvDev Size Res\n"); - return; - } - - psDevNode = (PVRSRV_DEVICE_NODE*)el; - - seq_printf( sfile, - "%p %-8s %-8s %4d %2u %p %3u %p\n", - psDevNode, - deviceTypeToString(psDevNode->sDevId.eDeviceType), - deviceClassToString(psDevNode->sDevId.eDeviceClass), - psDevNode->sDevId.eDeviceClass, - psDevNode->ui32RefCount, - psDevNode->pvDevice, - psDevNode->ui32pvDeviceSize, - psDevNode->hResManContext); -} - -static void* ProcSeqOff2ElementSysNodes(struct seq_file * sfile, loff_t off) -{ - SYS_DATA *psSysData; - PVRSRV_DEVICE_NODE*psDevNode = IMG_NULL; - - PVR_UNREFERENCED_PARAMETER(sfile); - - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - psSysData = SysAcquireDataNoCheck(); - if (psSysData != IMG_NULL) - { - - psDevNode = (PVRSRV_DEVICE_NODE*) - List_PVRSRV_DEVICE_NODE_Any_va(psSysData->psDeviceNodeList, - DecOffPsDev_AnyVaCb, - &off); - } - - - return (void*)psDevNode; -} - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.h deleted file mode 100644 index 2066d71..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/proc.h +++ /dev/null @@ -1,108 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __SERVICES_PROC_H__ -#define __SERVICES_PROC_H__ - -#include -#include -#include - -#define END_OF_FILE (off_t) -1 - -typedef off_t (pvr_read_proc_t)(IMG_CHAR *, size_t, off_t); - - -#define PVR_PROC_SEQ_START_TOKEN (void*)1 -typedef void* (pvr_next_proc_seq_t)(struct seq_file *,void*,loff_t); -typedef void* (pvr_off2element_proc_seq_t)(struct seq_file *, loff_t); -typedef void (pvr_show_proc_seq_t)(struct seq_file *,void*); -typedef void (pvr_startstop_proc_seq_t)(struct seq_file *, IMG_BOOL start); - -typedef struct _PVR_PROC_SEQ_HANDLERS_ { - pvr_next_proc_seq_t *next; - pvr_show_proc_seq_t *show; - pvr_off2element_proc_seq_t *off2element; - pvr_startstop_proc_seq_t *startstop; - IMG_VOID *data; -} PVR_PROC_SEQ_HANDLERS; - - -void* ProcSeq1ElementOff2Element(struct seq_file *sfile, loff_t off); - -void* ProcSeq1ElementHeaderOff2Element(struct seq_file *sfile, loff_t off); - -off_t printAppend(IMG_CHAR * buffer, size_t size, off_t off, const IMG_CHAR * format, ...) - __attribute__((format(printf, 4, 5))); - -IMG_INT CreateProcEntries(IMG_VOID); - -IMG_INT CreateProcReadEntry (const IMG_CHAR * name, pvr_read_proc_t handler); - -IMG_INT CreateProcEntry(const IMG_CHAR * name, read_proc_t rhandler, write_proc_t whandler, IMG_VOID *data); - -IMG_INT CreatePerProcessProcEntry(const IMG_CHAR * name, read_proc_t rhandler, write_proc_t whandler, IMG_VOID *data); - -IMG_VOID RemoveProcEntry(const IMG_CHAR * name); - -IMG_VOID RemovePerProcessProcEntry(const IMG_CHAR * name); - -IMG_VOID RemoveProcEntries(IMG_VOID); - -struct proc_dir_entry* CreateProcReadEntrySeq ( - const IMG_CHAR* name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler - ); - -struct proc_dir_entry* CreateProcEntrySeq ( - const IMG_CHAR* name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler, - write_proc_t whandler - ); - -struct proc_dir_entry* CreatePerProcessProcEntrySeq ( - const IMG_CHAR* name, - IMG_VOID* data, - pvr_next_proc_seq_t next_handler, - pvr_show_proc_seq_t show_handler, - pvr_off2element_proc_seq_t off2element_handler, - pvr_startstop_proc_seq_t startstop_handler, - write_proc_t whandler - ); - - -IMG_VOID RemoveProcEntrySeq(struct proc_dir_entry* proc_entry); -IMG_VOID RemovePerProcessProcEntrySeq(struct proc_dir_entry* proc_entry); - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_bridge_k.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_bridge_k.c deleted file mode 100644 index b45fe55..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_bridge_k.c +++ /dev/null @@ -1,432 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "img_defs.h" -#include "services.h" -#include "pvr_bridge.h" -#include "perproc.h" -#include "mutex.h" -#include "syscommon.h" -#include "pvr_debug.h" -#include "proc.h" -#include "private_data.h" -#include "linkage.h" -#include "pvr_bridge_km.h" - -#if defined(SUPPORT_DRI_DRM) -#include -#include "pvr_drm.h" -#if defined(PVR_SECURE_DRM_AUTH_EXPORT) -#include "env_perproc.h" -#endif -#endif - -#if defined(SUPPORT_VGX) -#include "vgx_bridge.h" -#endif - -#if defined(SUPPORT_SGX) -#include "sgx_bridge.h" -#endif - -#include "bridged_pvr_bridge.h" - -#if defined(SUPPORT_DRI_DRM) -#define PRIVATE_DATA(pFile) ((pFile)->driver_priv) -#else -#define PRIVATE_DATA(pFile) ((pFile)->private_data) -#endif - -#if defined(DEBUG_BRIDGE_KM) - -static struct proc_dir_entry *g_ProcBridgeStats =0; -static void* ProcSeqNextBridgeStats(struct seq_file *sfile,void* el,loff_t off); -static void ProcSeqShowBridgeStats(struct seq_file *sfile,void* el); -static void* ProcSeqOff2ElementBridgeStats(struct seq_file * sfile, loff_t off); -static void ProcSeqStartstopBridgeStats(struct seq_file *sfile,IMG_BOOL start); - -#endif - -extern PVRSRV_LINUX_MUTEX gPVRSRVLock; - -#if defined(SUPPORT_MEMINFO_IDS) -static IMG_UINT64 ui64Stamp; -#endif - -PVRSRV_ERROR -LinuxBridgeInit(IMG_VOID) -{ -#if defined(DEBUG_BRIDGE_KM) - { - g_ProcBridgeStats = CreateProcReadEntrySeq( - "bridge_stats", - NULL, - ProcSeqNextBridgeStats, - ProcSeqShowBridgeStats, - ProcSeqOff2ElementBridgeStats, - ProcSeqStartstopBridgeStats - ); - if(!g_ProcBridgeStats) - { - return PVRSRV_ERROR_OUT_OF_MEMORY; - } - } -#endif - return CommonBridgeInit(); -} - -IMG_VOID -LinuxBridgeDeInit(IMG_VOID) -{ -#if defined(DEBUG_BRIDGE_KM) - RemoveProcEntrySeq(g_ProcBridgeStats); -#endif -} - -#if defined(DEBUG_BRIDGE_KM) - -static void ProcSeqStartstopBridgeStats(struct seq_file *sfile,IMG_BOOL start) -{ - if(start) - { - LinuxLockMutex(&gPVRSRVLock); - } - else - { - LinuxUnLockMutex(&gPVRSRVLock); - } -} - - -static void* ProcSeqOff2ElementBridgeStats(struct seq_file *sfile, loff_t off) -{ - if(!off) - { - return PVR_PROC_SEQ_START_TOKEN; - } - - if(off > BRIDGE_DISPATCH_TABLE_ENTRY_COUNT) - { - return (void*)0; - } - - - return (void*)&g_BridgeDispatchTable[off-1]; -} - -static void* ProcSeqNextBridgeStats(struct seq_file *sfile,void* el,loff_t off) -{ - return ProcSeqOff2ElementBridgeStats(sfile,off); -} - - -static void ProcSeqShowBridgeStats(struct seq_file *sfile,void* el) -{ - PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY *psEntry = ( PVRSRV_BRIDGE_DISPATCH_TABLE_ENTRY*)el; - - if(el == PVR_PROC_SEQ_START_TOKEN) - { - seq_printf(sfile, - "Total ioctl call count = %u\n" - "Total number of bytes copied via copy_from_user = %u\n" - "Total number of bytes copied via copy_to_user = %u\n" - "Total number of bytes copied via copy_*_user = %u\n\n" - "%-45s | %-40s | %10s | %20s | %10s\n", - g_BridgeGlobalStats.ui32IOCTLCount, - g_BridgeGlobalStats.ui32TotalCopyFromUserBytes, - g_BridgeGlobalStats.ui32TotalCopyToUserBytes, - g_BridgeGlobalStats.ui32TotalCopyFromUserBytes+g_BridgeGlobalStats.ui32TotalCopyToUserBytes, - "Bridge Name", - "Wrapper Function", - "Call Count", - "copy_from_user Bytes", - "copy_to_user Bytes" - ); - return; - } - - seq_printf(sfile, - "%-45s %-40s %-10u %-20u %-10u\n", - psEntry->pszIOCName, - psEntry->pszFunctionName, - psEntry->ui32CallCount, - psEntry->ui32CopyFromUserTotalBytes, - psEntry->ui32CopyToUserTotalBytes); -} - -#endif - - -#if defined(SUPPORT_DRI_DRM) -int -PVRSRV_BridgeDispatchKM(struct drm_device unref__ *dev, void *arg, struct drm_file *pFile) -#else -long -PVRSRV_BridgeDispatchKM(struct file *pFile, unsigned int unref__ ioctlCmd, unsigned long arg) -#endif -{ - IMG_UINT32 cmd; -#if !defined(SUPPORT_DRI_DRM) - PVRSRV_BRIDGE_PACKAGE *psBridgePackageUM = (PVRSRV_BRIDGE_PACKAGE *)arg; - PVRSRV_BRIDGE_PACKAGE sBridgePackageKM; -#endif - PVRSRV_BRIDGE_PACKAGE *psBridgePackageKM; - IMG_UINT32 ui32PID = OSGetCurrentProcessIDKM(); - PVRSRV_PER_PROCESS_DATA *psPerProc; - IMG_INT err = -EFAULT; - - LinuxLockMutex(&gPVRSRVLock); - -#if defined(SUPPORT_DRI_DRM) - psBridgePackageKM = (PVRSRV_BRIDGE_PACKAGE *)arg; - PVR_ASSERT(psBridgePackageKM != IMG_NULL); -#else - psBridgePackageKM = &sBridgePackageKM; - - if(!OSAccessOK(PVR_VERIFY_WRITE, - psBridgePackageUM, - sizeof(PVRSRV_BRIDGE_PACKAGE))) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Received invalid pointer to function arguments", - __FUNCTION__)); - - goto unlock_and_return; - } - - - if(OSCopyFromUser(IMG_NULL, - psBridgePackageKM, - psBridgePackageUM, - sizeof(PVRSRV_BRIDGE_PACKAGE)) - != PVRSRV_OK) - { - goto unlock_and_return; - } -#endif - - cmd = psBridgePackageKM->ui32BridgeID; - - if(cmd != PVRSRV_BRIDGE_CONNECT_SERVICES) - { - PVRSRV_ERROR eError; - - eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, - (IMG_PVOID *)&psPerProc, - psBridgePackageKM->hKernelServices, - PVRSRV_HANDLE_TYPE_PERPROC_DATA); - if(eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Invalid kernel services handle (%d)", - __FUNCTION__, eError)); - goto unlock_and_return; - } - - if(psPerProc->ui32PID != ui32PID) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Process %d tried to access data " - "belonging to process %d", __FUNCTION__, ui32PID, - psPerProc->ui32PID)); - goto unlock_and_return; - } - } - else - { - - psPerProc = PVRSRVPerProcessData(ui32PID); - if(psPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "PVRSRV_BridgeDispatchKM: " - "Couldn't create per-process data area")); - goto unlock_and_return; - } - } - - psBridgePackageKM->ui32BridgeID = PVRSRV_GET_BRIDGE_ID(psBridgePackageKM->ui32BridgeID); - - switch(cmd) - { - case PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2: - { - PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - - if(psPrivateData->hKernelMemInfo) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Can only export one MemInfo " - "per file descriptor", __FUNCTION__)); - err = -EINVAL; - goto unlock_and_return; - } - break; - } - - case PVRSRV_BRIDGE_MAP_DEV_MEMORY_2: - { - PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *psMapDevMemIN = - (PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *)psBridgePackageKM->pvParamIn; - PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - - if(!psPrivateData->hKernelMemInfo) - { - PVR_DPF((PVR_DBG_ERROR, "%s: File descriptor has no " - "associated MemInfo handle", __FUNCTION__)); - err = -EINVAL; - goto unlock_and_return; - } - - if (put_user(psPrivateData->hKernelMemInfo, &psMapDevMemIN->hKernelMemInfo) != 0) - { - err = -EFAULT; - goto unlock_and_return; - } - break; - } - - default: - { - PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - - if(psPrivateData->hKernelMemInfo) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Import/Export handle tried " - "to use privileged service", __FUNCTION__)); - goto unlock_and_return; - } - break; - } - } - -#if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) - switch(cmd) - { - case PVRSRV_BRIDGE_MAP_DEV_MEMORY: - case PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY: - { - PVRSRV_FILE_PRIVATE_DATA *psPrivateData; - int authenticated = pFile->authenticated; - PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; - - if (authenticated) - { - break; - } - - - psEnvPerProc = (PVRSRV_ENV_PER_PROCESS_DATA *)PVRSRVProcessPrivateData(psPerProc); - if (psEnvPerProc == IMG_NULL) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Process private data not allocated", __FUNCTION__)); - err = -EFAULT; - goto unlock_and_return; - } - - list_for_each_entry(psPrivateData, &psEnvPerProc->sDRMAuthListHead, sDRMAuthListItem) - { - struct drm_file *psDRMFile = psPrivateData->psDRMFile; - - if (pFile->master == psDRMFile->master) - { - authenticated |= psDRMFile->authenticated; - if (authenticated) - { - break; - } - } - } - - if (!authenticated) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Not authenticated for mapping device or device class memory", __FUNCTION__)); - err = -EPERM; - goto unlock_and_return; - } - break; - } - default: - break; - } -#endif - - err = BridgedDispatchKM(psPerProc, psBridgePackageKM); - if(err != PVRSRV_OK) - goto unlock_and_return; - - switch(cmd) - { - case PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2: - { - PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *psExportDeviceMemOUT = - (PVRSRV_BRIDGE_OUT_EXPORTDEVICEMEM *)psBridgePackageKM->pvParamOut; - PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - - psPrivateData->hKernelMemInfo = psExportDeviceMemOUT->hMemInfo; -#if defined(SUPPORT_MEMINFO_IDS) - psPrivateData->ui64Stamp = ++ui64Stamp; - - psExportDeviceMemOUT->ui64Stamp = psPrivateData->ui64Stamp; - if (put_user(psPrivateData->ui64Stamp, &psExportDeviceMemOUT->ui64Stamp) != 0) - { - err = -EFAULT; - goto unlock_and_return; - } -#endif - break; - } - -#if defined(SUPPORT_MEMINFO_IDS) - case PVRSRV_BRIDGE_MAP_DEV_MEMORY: - { - PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *psMapDeviceMemoryOUT = - (PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *)psBridgePackageKM->pvParamOut; - PVRSRV_FILE_PRIVATE_DATA *psPrivateData = PRIVATE_DATA(pFile); - if (put_user(psPrivateData->ui64Stamp, &psMapDeviceMemoryOUT->sDstClientMemInfo.ui64Stamp) != 0) - { - err = -EFAULT; - goto unlock_and_return; - } - break; - } - - case PVRSRV_BRIDGE_MAP_DEVICECLASS_MEMORY: - { - PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *psDeviceClassMemoryOUT = - (PVRSRV_BRIDGE_OUT_MAP_DEVICECLASS_MEMORY *)psBridgePackageKM->pvParamOut; - if (put_user(++ui64Stamp, &psDeviceClassMemoryOUT->sClientMemInfo.ui64Stamp) != 0) - { - err = -EFAULT; - goto unlock_and_return; - } - break; - } -#endif - - default: - break; - } - -unlock_and_return: - LinuxUnLockMutex(&gPVRSRVLock); - return err; -} diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_debug.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_debug.c deleted file mode 100644 index b2b0273..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_debug.c +++ /dev/null @@ -1,424 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include "img_types.h" -#include "servicesext.h" -#include "pvr_debug.h" -#include "srvkm.h" -#include "proc.h" -#include "mutex.h" -#include "linkage.h" - -static IMG_BOOL VBAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, - const IMG_CHAR* pszFormat, va_list VArgs) - IMG_FORMAT_PRINTF(3, 0); - - -#if defined(PVRSRV_NEED_PVR_DPF) - -#define PVR_MAX_FILEPATH_LEN 256 - -static IMG_BOOL BAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, - const IMG_CHAR *pszFormat, ...) - IMG_FORMAT_PRINTF(3, 4); - -IMG_UINT32 gPVRDebugLevel = - (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING); - -#endif - -#define PVR_MAX_MSG_LEN PVR_MAX_DEBUG_MESSAGE_LEN - -static IMG_CHAR gszBufferNonIRQ[PVR_MAX_MSG_LEN + 1]; - -static IMG_CHAR gszBufferIRQ[PVR_MAX_MSG_LEN + 1]; - -static PVRSRV_LINUX_MUTEX gsDebugMutexNonIRQ; - - -static spinlock_t gsDebugLockIRQ = __SPIN_LOCK_UNLOCKED(gsDebugLockIRQ); - -#if !defined (USE_SPIN_LOCK) -#define USE_SPIN_LOCK (in_interrupt() || !preemptible()) -#endif - -static inline void GetBufferLock(unsigned long *pulLockFlags) -{ - if (USE_SPIN_LOCK) - { - spin_lock_irqsave(&gsDebugLockIRQ, *pulLockFlags); - } - else - { - LinuxLockMutex(&gsDebugMutexNonIRQ); - } -} - -static inline void ReleaseBufferLock(unsigned long ulLockFlags) -{ - if (USE_SPIN_LOCK) - { - spin_unlock_irqrestore(&gsDebugLockIRQ, ulLockFlags); - } - else - { - LinuxUnLockMutex(&gsDebugMutexNonIRQ); - } -} - -static inline void SelectBuffer(IMG_CHAR **ppszBuf, IMG_UINT32 *pui32BufSiz) -{ - if (USE_SPIN_LOCK) - { - *ppszBuf = gszBufferIRQ; - *pui32BufSiz = sizeof(gszBufferIRQ); - } - else - { - *ppszBuf = gszBufferNonIRQ; - *pui32BufSiz = sizeof(gszBufferNonIRQ); - } -} - -static IMG_BOOL VBAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, const IMG_CHAR* pszFormat, va_list VArgs) -{ - IMG_UINT32 ui32Used; - IMG_UINT32 ui32Space; - IMG_INT32 i32Len; - - ui32Used = strlen(pszBuf); - BUG_ON(ui32Used >= ui32BufSiz); - ui32Space = ui32BufSiz - ui32Used; - - i32Len = vsnprintf(&pszBuf[ui32Used], ui32Space, pszFormat, VArgs); - pszBuf[ui32BufSiz - 1] = 0; - - - return (i32Len < 0 || i32Len >= (IMG_INT32)ui32Space) ? IMG_TRUE : IMG_FALSE; -} - -IMG_VOID PVRDPFInit(IMG_VOID) -{ - LinuxInitMutex(&gsDebugMutexNonIRQ); -} - -IMG_VOID PVRSRVReleasePrintf(const IMG_CHAR *pszFormat, ...) -{ - va_list vaArgs; - unsigned long ulLockFlags = 0; - IMG_CHAR *pszBuf; - IMG_UINT32 ui32BufSiz; - - SelectBuffer(&pszBuf, &ui32BufSiz); - - va_start(vaArgs, pszFormat); - - GetBufferLock(&ulLockFlags); - strncpy (pszBuf, "PVR_K: ", (ui32BufSiz -1)); - - if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) - { - printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); - } - else - { - printk(KERN_INFO "%s\n", pszBuf); - } - - ReleaseBufferLock(ulLockFlags); - va_end(vaArgs); - -} - -#if defined(PVRSRV_NEED_PVR_ASSERT) - -IMG_VOID PVRSRVDebugAssertFail(const IMG_CHAR* pszFile, IMG_UINT32 uLine) -{ - PVRSRVDebugPrintf(DBGPRIV_FATAL, pszFile, uLine, "Debug assertion failed!"); - BUG(); -} - -#endif - -#if defined(PVRSRV_NEED_PVR_TRACE) - -IMG_VOID PVRSRVTrace(const IMG_CHAR* pszFormat, ...) -{ - va_list VArgs; - unsigned long ulLockFlags = 0; - IMG_CHAR *pszBuf; - IMG_UINT32 ui32BufSiz; - - SelectBuffer(&pszBuf, &ui32BufSiz); - - va_start(VArgs, pszFormat); - - GetBufferLock(&ulLockFlags); - - strncpy(pszBuf, "PVR: ", (ui32BufSiz -1)); - - if (VBAppend(pszBuf, ui32BufSiz, pszFormat, VArgs)) - { - printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); - } - else - { - printk(KERN_INFO "%s\n", pszBuf); - } - - ReleaseBufferLock(ulLockFlags); - - va_end(VArgs); -} - -#endif - -#if defined(PVRSRV_NEED_PVR_DPF) - -static IMG_BOOL BAppend(IMG_CHAR *pszBuf, IMG_UINT32 ui32BufSiz, const IMG_CHAR *pszFormat, ...) -{ - va_list VArgs; - IMG_BOOL bTrunc; - - va_start (VArgs, pszFormat); - - bTrunc = VBAppend(pszBuf, ui32BufSiz, pszFormat, VArgs); - - va_end (VArgs); - - return bTrunc; -} - -IMG_VOID PVRSRVDebugPrintf ( - IMG_UINT32 ui32DebugLevel, - const IMG_CHAR* pszFullFileName, - IMG_UINT32 ui32Line, - const IMG_CHAR* pszFormat, - ... - ) -{ - IMG_BOOL bTrace; - const IMG_CHAR *pszFileName = pszFullFileName; - IMG_CHAR *pszLeafName; - - - bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; - - if (gPVRDebugLevel & ui32DebugLevel) - { - va_list vaArgs; - unsigned long ulLockFlags = 0; - IMG_CHAR *pszBuf; - IMG_UINT32 ui32BufSiz; - - SelectBuffer(&pszBuf, &ui32BufSiz); - - va_start(vaArgs, pszFormat); - - GetBufferLock(&ulLockFlags); - - - if (bTrace == IMG_FALSE) - { - switch(ui32DebugLevel) - { - case DBGPRIV_FATAL: - { - strncpy (pszBuf, "PVR_K:(Fatal): ", (ui32BufSiz -1)); - break; - } - case DBGPRIV_ERROR: - { - strncpy (pszBuf, "PVR_K:(Error): ", (ui32BufSiz -1)); - break; - } - case DBGPRIV_WARNING: - { - strncpy (pszBuf, "PVR_K:(Warning): ", (ui32BufSiz -1)); - break; - } - case DBGPRIV_MESSAGE: - { - strncpy (pszBuf, "PVR_K:(Message): ", (ui32BufSiz -1)); - break; - } - case DBGPRIV_VERBOSE: - { - strncpy (pszBuf, "PVR_K:(Verbose): ", (ui32BufSiz -1)); - break; - } - default: - { - strncpy (pszBuf, "PVR_K:(Unknown message level)", (ui32BufSiz -1)); - break; - } - } - } - else - { - strncpy (pszBuf, "PVR_K: ", (ui32BufSiz -1)); - } - - if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) - { - printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); - } - else - { - - if (bTrace == IMG_FALSE) - { -#ifdef DEBUG_LOG_PATH_TRUNCATE - - static IMG_CHAR szFileNameRewrite[PVR_MAX_FILEPATH_LEN]; - - IMG_CHAR* pszTruncIter; - IMG_CHAR* pszTruncBackInter; - - - if (strlen(pszFullFileName) > strlen(DEBUG_LOG_PATH_TRUNCATE)+1) - pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; - - - strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); - - if(strlen(szFileNameRewrite) == PVR_MAX_FILEPATH_LEN-1) { - IMG_CHAR szTruncateMassage[] = "FILENAME TRUNCATED"; - strcpy(szFileNameRewrite + (PVR_MAX_FILEPATH_LEN - 1 - strlen(szTruncateMassage)), szTruncateMassage); - } - - pszTruncIter = szFileNameRewrite; - while(*pszTruncIter++ != 0) - { - IMG_CHAR* pszNextStartPoint; - - if( - !( ( *pszTruncIter == '/' && (pszTruncIter-4 >= szFileNameRewrite) ) && - ( *(pszTruncIter-1) == '.') && - ( *(pszTruncIter-2) == '.') && - ( *(pszTruncIter-3) == '/') ) - ) continue; - - - pszTruncBackInter = pszTruncIter - 3; - while(*(--pszTruncBackInter) != '/') - { - if(pszTruncBackInter <= szFileNameRewrite) break; - } - pszNextStartPoint = pszTruncBackInter; - - - while(*pszTruncIter != 0) - { - *pszTruncBackInter++ = *pszTruncIter++; - } - *pszTruncBackInter = 0; - - - pszTruncIter = pszNextStartPoint; - } - - pszFileName = szFileNameRewrite; - - if(*pszFileName == '/') pszFileName++; -#endif - -#if !defined(__sh__) - pszLeafName = (IMG_CHAR *)strrchr (pszFileName, '\\'); - - if (pszLeafName) - { - pszFileName = pszLeafName; - } -#endif - - if (BAppend(pszBuf, ui32BufSiz, " [%u, %s]", ui32Line, pszFileName)) - { - printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); - } - else - { - printk(KERN_INFO "%s\n", pszBuf); - } - } - else - { - printk(KERN_INFO "%s\n", pszBuf); - } - } - - ReleaseBufferLock(ulLockFlags); - - va_end (vaArgs); - } -} - -#endif - -#if defined(DEBUG) - -IMG_INT PVRDebugProcSetLevel(struct file *file, const IMG_CHAR *buffer, IMG_UINT32 count, IMG_VOID *data) -{ -#define _PROC_SET_BUFFER_SZ 2 - IMG_CHAR data_buffer[_PROC_SET_BUFFER_SZ]; - - if (count != _PROC_SET_BUFFER_SZ) - { - return -EINVAL; - } - else - { - if (copy_from_user(data_buffer, buffer, count)) - return -EINVAL; - if (data_buffer[count - 1] != '\n') - return -EINVAL; - gPVRDebugLevel = data_buffer[0] - '0'; - } - return (count); -} - -void ProcSeqShowDebugLevel(struct seq_file *sfile,void* el) -{ - seq_printf(sfile, "%u\n", gPVRDebugLevel); -} - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.c b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.c deleted file mode 100644 index 4291bd1..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.c +++ /dev/null @@ -1,479 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(SUPPORT_DRI_DRM) - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) -#ifndef AUTOCONF_INCLUDED -#include -#endif -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "img_defs.h" -#include "services.h" -#include "kerneldisplay.h" -#include "kernelbuffer.h" -#include "syscommon.h" -#include "pvrmmap.h" -#include "mm.h" -#include "mmap.h" -#include "mutex.h" -#include "pvr_debug.h" -#include "srvkm.h" -#include "perproc.h" -#include "handle.h" -#include "pvr_bridge_km.h" -#include "pvr_bridge.h" -#include "proc.h" -#include "pvrmodule.h" -#include "pvrversion.h" -#include "lock.h" -#include "linkage.h" -#include "pvr_drm.h" - -#if defined(PVR_DRI_DRM_NOT_PCI) -#include "pvr_drm_mod.h" -#endif - -#define PVR_DRM_NAME PVRSRV_MODNAME -#define PVR_DRM_DESC "Imagination Technologies PVR DRM" - -DECLARE_WAIT_QUEUE_HEAD(sWaitForInit); - -IMG_BOOL bInitComplete; -IMG_BOOL bInitFailed; - -#if !defined(PVR_DRI_DRM_NOT_PCI) -#if defined(PVR_DRI_DRM_PLATFORM_DEV) -struct platform_device *gpsPVRLDMDev; -#else -struct pci_dev *gpsPVRLDMDev; -#endif -#endif - -struct drm_device *gpsPVRDRMDev; - -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) -#error "Linux kernel version 2.6.25 or later required for PVR DRM support" -#endif - -#define PVR_DRM_FILE struct drm_file * - -#if !defined(SUPPORT_DRI_DRM_EXT) -#if defined(PVR_DRI_DRM_PLATFORM_DEV) -#if defined(PVR_LDM_PLATFORM_PRE_REGISTERED) -static struct platform_device_id asPlatIdList[] = { - {SYS_SGX_DEV_NAME, 0}, - {} -}; -#endif -#else -static struct pci_device_id asPciIdList[] = { -#if defined(PVR_DRI_DRM_NOT_PCI) - {1, 1, 1, 1, 0, 0, 0}, -#else - {SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, -#if defined(SYS_SGX_DEV1_DEVICE_ID) - {SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, -#endif -#endif - {0} -}; -#endif -#endif - -DRI_DRM_STATIC int -PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags) -{ - int iRes = 0; - - PVR_TRACE(("PVRSRVDrmLoad")); - - gpsPVRDRMDev = dev; -#if !defined(PVR_DRI_DRM_NOT_PCI) -#if defined(PVR_DRI_DRM_PLATFORM_DEV) - gpsPVRLDMDev = dev->platformdev; -#else - gpsPVRLDMDev = dev->pdev; -#endif -#endif - -#if defined(PDUMP) - iRes = dbgdrv_init(); - if (iRes != 0) - { - goto exit; - } -#endif - - iRes = PVRCore_Init(); - if (iRes != 0) - { - goto exit_dbgdrv_cleanup; - } - -#if defined(DISPLAY_CONTROLLER) - iRes = PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Init)(dev); - if (iRes != 0) - { - goto exit_pvrcore_cleanup; - } -#endif - goto exit; - -#if defined(DISPLAY_CONTROLLER) -exit_pvrcore_cleanup: - PVRCore_Cleanup(); -#endif -exit_dbgdrv_cleanup: -#if defined(PDUMP) - dbgdrv_cleanup(); -#endif -exit: - if (iRes != 0) - { - bInitFailed = IMG_TRUE; - } - bInitComplete = IMG_TRUE; - - wake_up_interruptible(&sWaitForInit); - - return iRes; -} - -DRI_DRM_STATIC int -PVRSRVDrmUnload(struct drm_device *dev) -{ - PVR_TRACE(("PVRSRVDrmUnload")); - -#if defined(DISPLAY_CONTROLLER) - PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Cleanup)(dev); -#endif - - PVRCore_Cleanup(); - -#if defined(PDUMP) - dbgdrv_cleanup(); -#endif - - return 0; -} - -DRI_DRM_STATIC int -PVRSRVDrmOpen(struct drm_device *dev, struct drm_file *file) -{ - while (!bInitComplete) - { - DEFINE_WAIT(sWait); - - prepare_to_wait(&sWaitForInit, &sWait, TASK_INTERRUPTIBLE); - - if (!bInitComplete) - { - PVR_TRACE(("%s: Waiting for module initialisation to complete", __FUNCTION__)); - - schedule(); - } - - finish_wait(&sWaitForInit, &sWait); - - if (signal_pending(current)) - { - return -ERESTARTSYS; - } - } - - if (bInitFailed) - { - PVR_DPF((PVR_DBG_ERROR, "%s: Module initialisation failed", __FUNCTION__)); - return -EINVAL; - } - - return PVRSRVOpen(dev, file); -} - -#if defined(SUPPORT_DRI_DRM_EXT) && !defined(PVR_LINUX_USING_WORKQUEUES) -DRI_DRM_STATIC void -PVRSRVDrmPostClose(struct drm_device *dev, struct drm_file *file) -{ - PVRSRVRelease(file->driver_priv); - - file->driver_priv = NULL; -} -#else -DRI_DRM_STATIC int -PVRSRVDrmRelease(struct inode *inode, struct file *filp) -{ - struct drm_file *file_priv = filp->private_data; - void *psDriverPriv = file_priv->driver_priv; - int ret; - - ret = drm_release(inode, filp); - - if (ret != 0) - { - - PVR_DPF((PVR_DBG_ERROR, "%s : drm_release failed: %d", - __FUNCTION__, ret)); - } - - PVRSRVRelease(psDriverPriv); - - return 0; -} -#endif - -DRI_DRM_STATIC int -PVRDRMIsMaster(struct drm_device *dev, void *arg, struct drm_file *pFile) -{ - return 0; -} - -#if defined(SUPPORT_DRI_DRM_EXT) -int -PVRDRM_Dummy_ioctl(struct drm_device *dev, void *arg, struct drm_file *pFile) -{ - return 0; -} -#endif - -DRI_DRM_STATIC int -PVRDRMUnprivCmd(struct drm_device *dev, void *arg, struct drm_file *pFile) -{ - int ret = 0; - - LinuxLockMutex(&gPVRSRVLock); - - if (arg == NULL) - { - ret = -EFAULT; - } - else - { - IMG_UINT32 *pui32Args = (IMG_UINT32 *)arg; - IMG_UINT32 ui32Cmd = pui32Args[0]; - IMG_UINT32 *pui32OutArg = (IMG_UINT32 *)arg; - - switch (ui32Cmd) - { - case PVR_DRM_UNPRIV_INIT_SUCCESFUL: - *pui32OutArg = PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL) ? 1 : 0; - break; - - default: - ret = -EFAULT; - } - - } - - LinuxUnLockMutex(&gPVRSRVLock); - - return ret; -} - -#if defined(DISPLAY_CONTROLLER) && defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) -static int -PVRDRM_Display_ioctl(struct drm_device *dev, void *arg, struct drm_file *pFile) -{ - int res; - - LinuxLockMutex(&gPVRSRVLock); - - res = PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Ioctl)(dev, arg, pFile); - - LinuxUnLockMutex(&gPVRSRVLock); - - return res; -} -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) -#define PVR_DRM_FOPS_IOCTL .unlocked_ioctl -#define PVR_DRM_UNLOCKED DRM_UNLOCKED -#else -#define PVR_DRM_FOPS_IOCTL .ioctl -#define PVR_DRM_UNLOCKED 0 -#endif - -#if !defined(SUPPORT_DRI_DRM_EXT) - -#if defined(DRM_IOCTL_DEF) -#define PVR_DRM_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(DRM_##ioctl, _func, _flags) -#else -#define PVR_DRM_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) -#endif - -struct drm_ioctl_desc sPVRDrmIoctls[] = { - PVR_DRM_IOCTL_DEF(PVR_SRVKM, PVRSRV_BridgeDispatchKM, PVR_DRM_UNLOCKED), - PVR_DRM_IOCTL_DEF(PVR_IS_MASTER, PVRDRMIsMaster, DRM_MASTER | PVR_DRM_UNLOCKED), - PVR_DRM_IOCTL_DEF(PVR_UNPRIV, PVRDRMUnprivCmd, PVR_DRM_UNLOCKED), -#if defined(PDUMP) - PVR_DRM_IOCTL_DEF(PVR_DBGDRV, dbgdrv_ioctl, PVR_DRM_UNLOCKED), -#endif -#if defined(DISPLAY_CONTROLLER) && defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) - PVR_DRM_IOCTL_DEF(PVR_DISP, PVRDRM_Display_ioctl, DRM_MASTER | PVR_DRM_UNLOCKED) -#endif -}; - -static int pvr_max_ioctl = DRM_ARRAY_SIZE(sPVRDrmIoctls); - -#if defined(PVR_DRI_DRM_PLATFORM_DEV) && !defined(SUPPORT_DRI_DRM_EXT) -static int PVRSRVDrmProbe(struct platform_device *pDevice); -static int PVRSRVDrmRemove(struct platform_device *pDevice); -#endif - -static struct drm_driver sPVRDrmDriver = -{ -#if defined(PVR_DRI_DRM_PLATFORM_DEV) - .driver_features = DRIVER_USE_PLATFORM_DEVICE, -#else - .driver_features = 0, -#endif - .dev_priv_size = 0, - .load = PVRSRVDrmLoad, - .unload = PVRSRVDrmUnload, - .open = PVRSRVDrmOpen, -#if !defined(PVR_DRI_DRM_PLATFORM_DEV) - .suspend = PVRSRVDriverSuspend, - .resume = PVRSRVDriverResume, -#endif -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) - .get_map_ofs = drm_core_get_map_ofs, - .get_reg_ofs = drm_core_get_reg_ofs, -#endif - .ioctls = sPVRDrmIoctls, - .fops = - { - .owner = THIS_MODULE, - .open = drm_open, - .release = PVRSRVDrmRelease, - PVR_DRM_FOPS_IOCTL = drm_ioctl, - .mmap = PVRMMap, - .poll = drm_poll, - .fasync = drm_fasync, - }, -#if defined(PVR_DRI_DRM_PLATFORM_DEV) - .platform_driver = - { - .id_table = asPlatIdList, - .driver = - { - .name = PVR_DRM_NAME, - }, - .probe = PVRSRVDrmProbe, - .remove = PVRSRVDrmRemove, - .suspend = PVRSRVDriverSuspend, - .resume = PVRSRVDriverResume, - .shutdown = PVRSRVDriverShutdown, - }, -#else - .pci_driver = - { - .name = PVR_DRM_NAME, - .id_table = asPciIdList, - }, -#endif - .name = PVR_DRM_NAME, - .desc = PVR_DRM_DESC, - .date = PVR_BUILD_DATE, - .major = PVRVERSION_MAJ, - .minor = PVRVERSION_MIN, - .patchlevel = PVRVERSION_BUILD, -}; - -#if defined(PVR_DRI_DRM_PLATFORM_DEV) && !defined(SUPPORT_DRI_DRM_EXT) -static int -PVRSRVDrmProbe(struct platform_device *pDevice) -{ - PVR_TRACE(("PVRSRVDrmProbe")); - - return drm_get_platform_dev(pDevice, &sPVRDrmDriver); -} - -static int -PVRSRVDrmRemove(struct platform_device *pDevice) -{ - PVR_TRACE(("PVRSRVDrmRemove")); - - drm_put_dev(gpsPVRDRMDev); - - return 0; -} - -#endif -static int __init PVRSRVDrmInit(void) -{ - int iRes; - sPVRDrmDriver.num_ioctls = pvr_max_ioctl; - - - PVRDPFInit(); - -#if defined(PVR_DRI_DRM_NOT_PCI) - iRes = drm_pvr_dev_add(); - if (iRes != 0) - { - return iRes; - } -#endif - - iRes = drm_init(&sPVRDrmDriver); -#if defined(PVR_DRI_DRM_NOT_PCI) - if (iRes != 0) - { - drm_pvr_dev_remove(); - } -#endif - return iRes; -} - -static void __exit PVRSRVDrmExit(void) -{ - drm_exit(&sPVRDrmDriver); - -#if defined(PVR_DRI_DRM_NOT_PCI) - drm_pvr_dev_remove(); -#endif -} - -module_init(PVRSRVDrmInit); -module_exit(PVRSRVDrmExit); -#endif -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.h b/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.h deleted file mode 100644 index 9bd5540..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/env/linux/pvr_drm.h +++ /dev/null @@ -1,107 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__PVR_DRM_H__) -#define __PVR_DRM_H__ - -#include "pvr_drm_shared.h" - -#if defined(SUPPORT_DRI_DRM) -#define PVR_DRM_MAKENAME_HELPER(x, y) x ## y -#define PVR_DRM_MAKENAME(x, y) PVR_DRM_MAKENAME_HELPER(x, y) - -#if defined(PVR_DRI_DRM_PLATFORM_DEV) -#define LDM_DEV struct platform_device -#endif - -int PVRCore_Init(void); -void PVRCore_Cleanup(void); -int PVRSRVOpen(struct drm_device *dev, struct drm_file *pFile); -void PVRSRVRelease(void *pvPrivData); - -#if defined(PVR_DRI_DRM_PLATFORM_DEV) -void PVRSRVDriverShutdown(LDM_DEV *pDevice); -int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state); -int PVRSRVDriverResume(LDM_DEV *pDevice); -#else -int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state); -int PVRSRVDriverResume(struct drm_device *pDevice); -#endif - -int PVRSRV_BridgeDispatchKM(struct drm_device *dev, void *arg, struct drm_file *pFile); - -#if defined(SUPPORT_DRI_DRM_EXT) -#define DRI_DRM_STATIC -int PVRSRVDrmLoad(struct drm_device *dev, unsigned long flags); -int PVRSRVDrmUnload(struct drm_device *dev); -int PVRSRVDrmOpen(struct drm_device *dev, struct drm_file *file); -#if defined(PVR_LINUX_USING_WORKQUEUES) -DRI_DRM_STATIC int PVRSRVDrmRelease(struct inode *inode, struct file *filp); -#else -void PVRSRVDrmPostClose(struct drm_device *dev, struct drm_file *file); -#endif -int PVRDRMIsMaster(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int PVRDRMUnprivCmd(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int PVRDRM_Dummy_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -#else -#define DRI_DRM_STATIC static -#endif - -#if defined(DISPLAY_CONTROLLER) -extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Init)(struct drm_device *); -extern void PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Cleanup)(struct drm_device *); -extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Suspend)(struct drm_device *); -extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Resume)(struct drm_device *); -#if defined(PVR_DISPLAY_CONTROLLER_DRM_IOCTL) -extern int PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Ioctl)(struct drm_device *dev, void *arg, struct drm_file *pFile); -#endif -#endif - -#if defined(PDUMP) -int dbgdrv_init(void); -void dbgdrv_cleanup(void); -IMG_INT dbgdrv_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -#endif - -#if !defined(SUPPORT_DRI_DRM_EXT) -#define DRM_PVR_SRVKM PVR_DRM_SRVKM_CMD -#define DRM_PVR_IS_MASTER PVR_DRM_IS_MASTER_CMD -#define DRM_PVR_UNPRIV PVR_DRM_UNPRIV_CMD -#define DRM_PVR_DBGDRV PVR_DRM_DBGDRV_CMD -#define DRM_PVR_DISP PVR_DRM_DISP_CMD - -#define DRM_IOCTL_PVR_SRVKM _IO(0, DRM_PVR_SRVKM) -#define DRM_IOCTL_PVR_IS_MASTER _IO(0, DRM_PVR_IS_MASTER) -#define DRM_IOCTL_PVR_UNPRIV _IO(0, DRM_PVR_UNPRIV) -#define DRM_IOCTL_PVR_DBGDRV _IO(0, DRM_PVR_DBGDRV) -#define DRM_IOCTL_PVR_DISP _IO(0, DRM_PVR_DISP) -#endif - -#endif - -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/mnemedefs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/mnemedefs.h deleted file mode 100644 index 905081d..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/mnemedefs.h +++ /dev/null @@ -1,94 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _MNEMEDEFS_KM_H_ -#define _MNEMEDEFS_KM_H_ - -#define MNE_CR_CTRL 0x0D00 -#define MNE_CR_CTRL_BYP_CC_N_MASK 0x00010000U -#define MNE_CR_CTRL_BYP_CC_N_SHIFT 16 -#define MNE_CR_CTRL_BYP_CC_N_SIGNED 0 -#define MNE_CR_CTRL_BYP_CC_MASK 0x00008000U -#define MNE_CR_CTRL_BYP_CC_SHIFT 15 -#define MNE_CR_CTRL_BYP_CC_SIGNED 0 -#define MNE_CR_CTRL_USE_INVAL_REQ_MASK 0x00007800U -#define MNE_CR_CTRL_USE_INVAL_REQ_SHIFT 11 -#define MNE_CR_CTRL_USE_INVAL_REQ_SIGNED 0 -#define MNE_CR_CTRL_BYPASS_ALL_MASK 0x00000400U -#define MNE_CR_CTRL_BYPASS_ALL_SHIFT 10 -#define MNE_CR_CTRL_BYPASS_ALL_SIGNED 0 -#define MNE_CR_CTRL_BYPASS_MASK 0x000003E0U -#define MNE_CR_CTRL_BYPASS_SHIFT 5 -#define MNE_CR_CTRL_BYPASS_SIGNED 0 -#define MNE_CR_CTRL_PAUSE_MASK 0x00000010U -#define MNE_CR_CTRL_PAUSE_SHIFT 4 -#define MNE_CR_CTRL_PAUSE_SIGNED 0 -#define MNE_CR_USE_INVAL 0x0D04 -#define MNE_CR_USE_INVAL_ADDR_MASK 0xFFFFFFFFU -#define MNE_CR_USE_INVAL_ADDR_SHIFT 0 -#define MNE_CR_USE_INVAL_ADDR_SIGNED 0 -#define MNE_CR_STAT 0x0D08 -#define MNE_CR_STAT_PAUSED_MASK 0x00000400U -#define MNE_CR_STAT_PAUSED_SHIFT 10 -#define MNE_CR_STAT_PAUSED_SIGNED 0 -#define MNE_CR_STAT_READS_MASK 0x000003FFU -#define MNE_CR_STAT_READS_SHIFT 0 -#define MNE_CR_STAT_READS_SIGNED 0 -#define MNE_CR_STAT_STATS 0x0D0C -#define MNE_CR_STAT_STATS_RST_MASK 0x000FFFF0U -#define MNE_CR_STAT_STATS_RST_SHIFT 4 -#define MNE_CR_STAT_STATS_RST_SIGNED 0 -#define MNE_CR_STAT_STATS_SEL_MASK 0x0000000FU -#define MNE_CR_STAT_STATS_SEL_SHIFT 0 -#define MNE_CR_STAT_STATS_SEL_SIGNED 0 -#define MNE_CR_STAT_STATS_OUT 0x0D10 -#define MNE_CR_STAT_STATS_OUT_VALUE_MASK 0xFFFFFFFFU -#define MNE_CR_STAT_STATS_OUT_VALUE_SHIFT 0 -#define MNE_CR_STAT_STATS_OUT_VALUE_SIGNED 0 -#define MNE_CR_EVENT_STATUS 0x0D14 -#define MNE_CR_EVENT_STATUS_INVAL_MASK 0x00000001U -#define MNE_CR_EVENT_STATUS_INVAL_SHIFT 0 -#define MNE_CR_EVENT_STATUS_INVAL_SIGNED 0 -#define MNE_CR_EVENT_CLEAR 0x0D18 -#define MNE_CR_EVENT_CLEAR_INVAL_MASK 0x00000001U -#define MNE_CR_EVENT_CLEAR_INVAL_SHIFT 0 -#define MNE_CR_EVENT_CLEAR_INVAL_SIGNED 0 -#define MNE_CR_CTRL_INVAL 0x0D20 -#define MNE_CR_CTRL_INVAL_PREQ_PDS_MASK 0x00000008U -#define MNE_CR_CTRL_INVAL_PREQ_PDS_SHIFT 3 -#define MNE_CR_CTRL_INVAL_PREQ_PDS_SIGNED 0 -#define MNE_CR_CTRL_INVAL_PREQ_USEC_MASK 0x00000004U -#define MNE_CR_CTRL_INVAL_PREQ_USEC_SHIFT 2 -#define MNE_CR_CTRL_INVAL_PREQ_USEC_SIGNED 0 -#define MNE_CR_CTRL_INVAL_PREQ_CACHE_MASK 0x00000002U -#define MNE_CR_CTRL_INVAL_PREQ_CACHE_SHIFT 1 -#define MNE_CR_CTRL_INVAL_PREQ_CACHE_SIGNED 0 -#define MNE_CR_CTRL_INVAL_ALL_MASK 0x00000001U -#define MNE_CR_CTRL_INVAL_ALL_SHIFT 0 -#define MNE_CR_CTRL_INVAL_ALL_SIGNED 0 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx535defs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx535defs.h deleted file mode 100644 index 66f2166..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx535defs.h +++ /dev/null @@ -1,650 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGX535DEFS_KM_H_ -#define _SGX535DEFS_KM_H_ - -#define EUR_CR_CLKGATECTL 0x0000 -#define EUR_CR_CLKGATECTL_2D_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL_2D_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL_TA_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL_TA_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL_USE_CLKG_MASK 0x00300000U -#define EUR_CR_CLKGATECTL_USE_CLKG_SHIFT 20 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 -#define EUR_CR_CLKGATESTATUS 0x0004 -#define EUR_CR_CLKGATESTATUS_2D_CLKS_MASK 0x00000001 -#define EUR_CR_CLKGATESTATUS_2D_CLKS_SHIFT 0 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000010U -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 4 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000100U -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 8 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_MASK 0x00001000U -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SHIFT 12 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00010000U -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 16 -#define EUR_CR_CLKGATESTATUS_USE_CLKS_MASK 0x00100000U -#define EUR_CR_CLKGATESTATUS_USE_CLKS_SHIFT 20 -#define EUR_CR_CLKGATECTLOVR 0x0008 -#define EUR_CR_CLKGATECTLOVR_2D_CLKO_MASK 0x00000003U -#define EUR_CR_CLKGATECTLOVR_2D_CLKO_SHIFT 0 -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000030U -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 4 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000300U -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 8 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_MASK 0x00003000U -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SHIFT 12 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00030000U -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 16 -#define EUR_CR_CLKGATECTLOVR_USE_CLKO_MASK 0x00300000U -#define EUR_CR_CLKGATECTLOVR_USE_CLKO_SHIFT 20 -#define EUR_CR_CORE_ID 0x0010 -#define EUR_CR_CORE_ID_CONFIG_MASK 0x0000FFFFU -#define EUR_CR_CORE_ID_CONFIG_SHIFT 0 -#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_CORE_ID_ID_SHIFT 16 -#define EUR_CR_CORE_REVISION 0x0014 -#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_DESIGNER_REV_FIELD1 0x0018 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD2 0x001C -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 -#define EUR_CR_SOFT_RESET 0x0080 -#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U -#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 -#define EUR_CR_SOFT_RESET_TWOD_RESET_MASK 0x00000002U -#define EUR_CR_SOFT_RESET_TWOD_RESET_SHIFT 1 -#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U -#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 -#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00000008U -#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 3 -#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00000010U -#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 4 -#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000020U -#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 5 -#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000040U -#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE2_BIF_REQUESTER_FAULT_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE2_BIF_REQUESTER_FAULT_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR2_BIF_REQUESTER_FAULT_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR2_BIF_REQUESTER_FAULT_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS2 0x0118U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_STATUS2_BIF_REQUESTER_FAULT_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS2_BIF_REQUESTER_FAULT_SHIFT 4 -#define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS 0x012CU -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_STATUS_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_STATUS_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE 0x0130 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR 0x0134 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_PDS_EXEC_BASE 0x0AB8 -#define EUR_CR_PDS_EXEC_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_PDS_EXEC_BASE_ADDR_SHIFT 20 -#define EUR_CR_EVENT_KICKER 0x0AC4 -#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 -#define EUR_CR_EVENT_KICK 0x0AC8 -#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 -#define EUR_CR_EVENT_TIMER 0x0ACC -#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U -#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 -#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU -#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 -#define EUR_CR_PDS_INV0 0x0AD0 -#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV0_DSC_SHIFT 0 -#define EUR_CR_PDS_INV1 0x0AD4 -#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV1_DSC_SHIFT 0 -#define EUR_CR_PDS_INV2 0x0AD8 -#define EUR_CR_PDS_INV2_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV2_DSC_SHIFT 0 -#define EUR_CR_PDS_INV3 0x0ADC -#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV3_DSC_SHIFT 0 -#define EUR_CR_PDS_INV_CSC 0x0AE0 -#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U -#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 -#define EUR_CR_PDS_PC_BASE 0x0B2C -#define EUR_CR_PDS_PC_BASE_ADDRESS_MASK 0x3FFFFFFFU -#define EUR_CR_PDS_PC_BASE_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_CTRL 0x0C00 -#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_BIF_CTRL_FLUSH_MASK 0x00000004U -#define EUR_CR_BIF_CTRL_FLUSH_SHIFT 2 -#define EUR_CR_BIF_CTRL_INVALDC_MASK 0x00000008U -#define EUR_CR_BIF_CTRL_INVALDC_SHIFT 3 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_MASK 0x00000100U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_SHIFT 8 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_MASK 0x00000400U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SHIFT 10 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TWOD_MASK 0x00000800U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TWOD_SHIFT 11 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 13 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00004000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK 0x00010000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_SHIFT 16 -#define EUR_CR_BIF_INT_STAT 0x0C04 -#define EUR_CR_BIF_INT_STAT_FAULT_MASK 0x00003FFFU -#define EUR_CR_BIF_INT_STAT_FAULT_SHIFT 0 -#define EUR_CR_BIF_INT_STAT_PF_N_RW_MASK 0x00004000U -#define EUR_CR_BIF_INT_STAT_PF_N_RW_SHIFT 14 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00008000U -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 15 -#define EUR_CR_BIF_FAULT 0x0C08 -#define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 -#define EUR_CR_BIF_TILE0 0x0C0C -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE0_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE1 0x0C10 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE1_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE2 0x0C14 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE2_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE3 0x0C18 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE3_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE4 0x0C1C -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE4_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE5 0x0C20 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE5_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE6 0x0C24 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE6_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE7 0x0C28 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE7_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE8 0x0C2C -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE8_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE9 0x0C30 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE9_CFG_SHIFT 24 -#define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE8 0x0C54 -#define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE9 0x0C58 -#define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE10 0x0C5C -#define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE11 0x0C60 -#define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE12 0x0C64 -#define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE13 0x0C68 -#define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE14 0x0C6C -#define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE15 0x0C70 -#define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_SHIFT 12 -#define EUR_CR_BIF_BANK_SET 0x0C74 -#define EUR_CR_BIF_BANK_SET_SELECT_MASK 0x000003FFU -#define EUR_CR_BIF_BANK_SET_SELECT_SHIFT 0 -#define EUR_CR_BIF_BANK0 0x0C78 -#define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK0_INDEX_HOST_MASK 0x00000F00U -#define EUR_CR_BIF_BANK0_INDEX_HOST_SHIFT 8 -#define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK0_INDEX_2D_MASK 0x000F0000U -#define EUR_CR_BIF_BANK0_INDEX_2D_SHIFT 16 -#define EUR_CR_BIF_BANK1 0x0C7C -#define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK1_INDEX_HOST_MASK 0x00000F00U -#define EUR_CR_BIF_BANK1_INDEX_HOST_SHIFT 8 -#define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK1_INDEX_2D_MASK 0x000F0000U -#define EUR_CR_BIF_BANK1_INDEX_2D_SHIFT 16 -#define EUR_CR_BIF_ADT_TTE 0x0C80 -#define EUR_CR_BIF_ADT_TTE_VALUE_MASK 0x000000FFU -#define EUR_CR_BIF_ADT_TTE_VALUE_SHIFT 0 -#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 -#define EUR_CR_BIF_TWOD_REQ_BASE 0x0C88 -#define EUR_CR_BIF_TWOD_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_TWOD_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1 0x0C94 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_MMU_MASK 0x00000007U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_MMU_SHIFT 0 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_CACHE_MASK 0x00000038U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_CACHE_SHIFT 3 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_VDM_MASK 0x000001C0U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_VDM_SHIFT 6 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TE_MASK 0x00000E00U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TE_SHIFT 9 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TWOD_MASK 0x00007000U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TWOD_SHIFT 12 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_PBE_MASK 0x00038000U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_PBE_SHIFT 15 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2 0x0C98 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_HOST_MASK 0x00000007U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_HOST_SHIFT 0 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_USE_MASK 0x00000038U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_USE_SHIFT 3 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_ISP_MASK 0x000001C0U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_ISP_SHIFT 6 -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_TSPP_MASK 0x00000E00U -#define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_TSPP_SHIFT 9 -#define EUR_CR_BIF_MEM_ARB_CONFIG 0x0CA0 -#define EUR_CR_BIF_MEM_ARB_CONFIG_PAGE_SIZE_MASK 0x0000000FU -#define EUR_CR_BIF_MEM_ARB_CONFIG_PAGE_SIZE_SHIFT 0 -#define EUR_CR_BIF_MEM_ARB_CONFIG_BEST_CNT_MASK 0x00000FF0U -#define EUR_CR_BIF_MEM_ARB_CONFIG_BEST_CNT_SHIFT 4 -#define EUR_CR_BIF_MEM_ARB_CONFIG_TTE_THRESH_MASK 0x00FFF000U -#define EUR_CR_BIF_MEM_ARB_CONFIG_TTE_THRESH_SHIFT 12 -#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 -#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_BANK_STATUS 0x0CB4 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 -#define EUR_CR_2D_BLIT_STATUS 0x0E04 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 -#define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U -#define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 -#define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 -#define EUR_CR_2D_SOCIF 0x0E18 -#define EUR_CR_2D_SOCIF_FREESPACE_MASK 0x000000FFU -#define EUR_CR_2D_SOCIF_FREESPACE_SHIFT 0 -#define EUR_CR_2D_ALPHA 0x0E1C -#define EUR_CR_2D_ALPHA_COMPONENT_ONE_MASK 0x0000FF00U -#define EUR_CR_2D_ALPHA_COMPONENT_ONE_SHIFT 8 -#define EUR_CR_2D_ALPHA_COMPONENT_ZERO_MASK 0x000000FFU -#define EUR_CR_2D_ALPHA_COMPONENT_ZERO_SHIFT 0 -#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) -#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_DM_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 -#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx540defs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx540defs.h deleted file mode 100644 index c09aa26..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx540defs.h +++ /dev/null @@ -1,547 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGX540DEFS_KM_H_ -#define _SGX540DEFS_KM_H_ - -#define EUR_CR_CLKGATECTL 0x0000 -#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL_TE_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL_TE_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL_MTE_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL_MTE_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL_VDM_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL_VDM_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL_PDS_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL_PDS_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL_TA_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL_TA_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_MASK 0x10000000U -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SHIFT 28 -#define EUR_CR_CLKGATECTL2 0x0004 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL2_CACHEL2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL2_CACHEL2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL2_MADD0_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL2_MADD0_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL2_MADD1_CLKG_MASK 0x00300000U -#define EUR_CR_CLKGATECTL2_MADD1_CLKG_SHIFT 20 -#define EUR_CR_CLKGATESTATUS 0x0008 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000001U -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 0 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_MASK 0x00000002U -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SHIFT 1 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000004U -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 2 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_MASK 0x00000008U -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SHIFT 3 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_MASK 0x00000010U -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SHIFT 4 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00000020U -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 5 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_MASK 0x00000040U -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SHIFT 6 -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_MASK 0x00000080U -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SHIFT 7 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_MASK 0x00000100U -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SHIFT 8 -#define EUR_CR_CLKGATESTATUS_CACHEL2_CLKS_MASK 0x00000200U -#define EUR_CR_CLKGATESTATUS_CACHEL2_CLKS_SHIFT 9 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_MASK 0x00000400U -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SHIFT 10 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_MASK 0x00000800U -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SHIFT 11 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_MASK 0x00001000U -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SHIFT 12 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_MASK 0x00002000U -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SHIFT 13 -#define EUR_CR_CLKGATESTATUS_MADD0_CLKS_MASK 0x00004000U -#define EUR_CR_CLKGATESTATUS_MADD0_CLKS_SHIFT 14 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_MASK 0x00008000U -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SHIFT 15 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_MASK 0x00010000U -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SHIFT 16 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_MASK 0x00020000U -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SHIFT 17 -#define EUR_CR_CLKGATESTATUS_MADD1_CLKS_MASK 0x00040000U -#define EUR_CR_CLKGATESTATUS_MADD1_CLKS_SHIFT 18 -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_MASK 0x00080000U -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SHIFT 19 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_MASK 0x00100000U -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SHIFT 20 -#define EUR_CR_CLKGATECTLOVR 0x000C -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000003U -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 0 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_MASK 0x0000000CU -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SHIFT 2 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000030U -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 4 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_MASK 0x000000C0U -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SHIFT 6 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_MASK 0x00000300U -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SHIFT 8 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00000C00U -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 10 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_MASK 0x00003000U -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SHIFT 12 -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_MASK 0x0000C000U -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SHIFT 14 -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_MASK 0x00030000U -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SHIFT 16 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_MASK 0x000C0000U -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SHIFT 18 -#define EUR_CR_POWER 0x001C -#define EUR_CR_POWER_PIPE_DISABLE_MASK 0x00000001U -#define EUR_CR_POWER_PIPE_DISABLE_SHIFT 0 -#define EUR_CR_CORE_ID 0x0020 -#define EUR_CR_CORE_ID_CONFIG_MASK 0x0000FFFFU -#define EUR_CR_CORE_ID_CONFIG_SHIFT 0 -#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_CORE_ID_ID_SHIFT 16 -#define EUR_CR_CORE_REVISION 0x0024 -#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_DESIGNER_REV_FIELD1 0x0028 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD2 0x002C -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 -#define EUR_CR_SOFT_RESET 0x0080 -#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U -#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 -#define EUR_CR_SOFT_RESET_VDM_RESET_MASK 0x00000002U -#define EUR_CR_SOFT_RESET_VDM_RESET_SHIFT 1 -#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U -#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 -#define EUR_CR_SOFT_RESET_TE_RESET_MASK 0x00000008U -#define EUR_CR_SOFT_RESET_TE_RESET_SHIFT 3 -#define EUR_CR_SOFT_RESET_MTE_RESET_MASK 0x00000010U -#define EUR_CR_SOFT_RESET_MTE_RESET_SHIFT 4 -#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000020U -#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 5 -#define EUR_CR_SOFT_RESET_ISP2_RESET_MASK 0x00000040U -#define EUR_CR_SOFT_RESET_ISP2_RESET_SHIFT 6 -#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000080U -#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 7 -#define EUR_CR_SOFT_RESET_PDS_RESET_MASK 0x00000100U -#define EUR_CR_SOFT_RESET_PDS_RESET_SHIFT 8 -#define EUR_CR_SOFT_RESET_PBE_RESET_MASK 0x00000200U -#define EUR_CR_SOFT_RESET_PBE_RESET_SHIFT 9 -#define EUR_CR_SOFT_RESET_CACHEL2_RESET_MASK 0x00000400U -#define EUR_CR_SOFT_RESET_CACHEL2_RESET_SHIFT 10 -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK 0x00000800U -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SHIFT 11 -#define EUR_CR_SOFT_RESET_MADD_RESET_MASK 0x00001000U -#define EUR_CR_SOFT_RESET_MADD_RESET_SHIFT 12 -#define EUR_CR_SOFT_RESET_ITR_RESET_MASK 0x00002000U -#define EUR_CR_SOFT_RESET_ITR_RESET_SHIFT 13 -#define EUR_CR_SOFT_RESET_TEX_RESET_MASK 0x00004000U -#define EUR_CR_SOFT_RESET_TEX_RESET_SHIFT 14 -#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00008000U -#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 15 -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK 0x00010000U -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SHIFT 16 -#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00020000U -#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 17 -#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS2 0x0118 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS 0x012CU -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_STATUS_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_STATUS_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE 0x0130 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR 0x0134 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_MASK 0x08000000U -#define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_SHIFT 27 -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_HALT_MASK 0x00020000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_HALT_SHIFT 17 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_TIMER 0x0144 -#define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU -#define EUR_CR_TIMER_VALUE_SHIFT 0 -#define EUR_CR_EVENT_KICK1 0x0AB0 -#define EUR_CR_EVENT_KICK1_NOW_MASK 0x000000FFU -#define EUR_CR_EVENT_KICK1_NOW_SHIFT 0 -#define EUR_CR_PDS_EXEC_BASE 0x0AB8 -#define EUR_CR_PDS_EXEC_BASE_ADDR_MASK 0x0FF00000U -#define EUR_CR_PDS_EXEC_BASE_ADDR_SHIFT 20 -#define EUR_CR_EVENT_KICK2 0x0AC0 -#define EUR_CR_EVENT_KICK2_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK2_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICKER 0x0AC4 -#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0x0FFFFFF0U -#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 -#define EUR_CR_EVENT_KICK 0x0AC8 -#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 -#define EUR_CR_EVENT_TIMER 0x0ACC -#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U -#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 -#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU -#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 -#define EUR_CR_PDS_INV0 0x0AD0 -#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV0_DSC_SHIFT 0 -#define EUR_CR_PDS_INV1 0x0AD4 -#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV1_DSC_SHIFT 0 -#define EUR_CR_EVENT_KICK3 0x0AD8 -#define EUR_CR_EVENT_KICK3_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK3_NOW_SHIFT 0 -#define EUR_CR_PDS_INV3 0x0ADC -#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV3_DSC_SHIFT 0 -#define EUR_CR_PDS_INV_CSC 0x0AE0 -#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U -#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 -#define EUR_CR_PDS_PC_BASE 0x0B2C -#define EUR_CR_PDS_PC_BASE_ADDRESS_MASK 0x00FFFFFFU -#define EUR_CR_PDS_PC_BASE_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_CTRL 0x0C00 -#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_BIF_CTRL_FLUSH_MASK 0x00000004U -#define EUR_CR_BIF_CTRL_FLUSH_SHIFT 2 -#define EUR_CR_BIF_CTRL_INVALDC_MASK 0x00000008U -#define EUR_CR_BIF_CTRL_INVALDC_SHIFT 3 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_MASK 0x00000100U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_SHIFT 8 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_MASK 0x00000400U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SHIFT 10 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 13 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00004000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 -#define EUR_CR_BIF_INT_STAT 0x0C04 -#define EUR_CR_BIF_INT_STAT_FAULT_MASK 0x00003FFFU -#define EUR_CR_BIF_INT_STAT_FAULT_SHIFT 0 -#define EUR_CR_BIF_INT_STAT_PF_N_RW_MASK 0x00004000U -#define EUR_CR_BIF_INT_STAT_PF_N_RW_SHIFT 14 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00008000U -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 15 -#define EUR_CR_BIF_FAULT 0x0C08 -#define EUR_CR_BIF_FAULT_SB_MASK 0x000001F0U -#define EUR_CR_BIF_FAULT_SB_SHIFT 4 -#define EUR_CR_BIF_FAULT_ADDR_MASK 0x0FFFF000U -#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 -#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0x0FF00000U -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 -#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0x0FF00000U -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0x0FF00000U -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_2D_BLIT_STATUS 0x0E04 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 -#define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U -#define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 -#define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 -#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) -#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x00FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_DM_MASK 0x03000000U -#define EUR_CR_USE_CODE_BASE_DM_SHIFT 24 -#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 -#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx543_v1.164defs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx543_v1.164defs.h deleted file mode 100644 index 23bd4d4..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx543_v1.164defs.h +++ /dev/null @@ -1,1284 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGX543DEFS_KM_H_ -#define _SGX543DEFS_KM_H_ - -#define EUR_CR_CLKGATECTL 0x0000 -#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL_ISP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL_TSP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TE_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL_TE_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL_TE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_MTE_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL_MTE_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL_MTE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL_DPM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_VDM_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL_VDM_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL_VDM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_PDS_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL_PDS_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL_PDS_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TA_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL_TA_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL_TA_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_MASK 0x00300000U -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SHIFT 20 -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SIGNED 0 -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_MASK 0x10000000U -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SHIFT 28 -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2 0x0004 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_MASK 0x00C00000U -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SHIFT 22 -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_MASK 0x03000000U -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SHIFT 24 -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_MASK 0x0C000000U -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SHIFT 26 -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATESTATUS 0x0008 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000001U -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 0 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_MASK 0x00000002U -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SHIFT 1 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000004U -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 2 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_MASK 0x00000008U -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SHIFT 3 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_MASK 0x00000010U -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SHIFT 4 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00000020U -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 5 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_MASK 0x00000040U -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SHIFT 6 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_MASK 0x00000080U -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SHIFT 7 -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_MASK 0x00000100U -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SHIFT 8 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_MASK 0x00000200U -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SHIFT 9 -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_MASK 0x00000400U -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SHIFT 10 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_MASK 0x00000800U -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SHIFT 11 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_MASK 0x00001000U -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SHIFT 12 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_MASK 0x00002000U -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SHIFT 13 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_MASK 0x00008000U -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SHIFT 15 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_MASK 0x00010000U -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SHIFT 16 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_MASK 0x00020000U -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SHIFT 17 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_MASK 0x00080000U -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SHIFT 19 -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_MASK 0x00100000U -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SHIFT 20 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_MASK 0x00200000U -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SHIFT 21 -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_MASK 0x00400000U -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SHIFT 22 -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_MASK 0x00800000U -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SHIFT 23 -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_MASK 0x01000000U -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SHIFT 24 -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR 0x000C -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000003U -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 0 -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_MASK 0x0000000CU -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SHIFT 2 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000030U -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 4 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_MASK 0x000000C0U -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SHIFT 6 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_MASK 0x00000300U -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SHIFT 8 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00000C00U -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 10 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_MASK 0x00003000U -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SHIFT 12 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_MASK 0x0000C000U -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SHIFT 14 -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_MASK 0x00030000U -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SHIFT 16 -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_MASK 0x000C0000U -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SHIFT 18 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_MASK 0x00300000U -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SHIFT 20 -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SIGNED 0 -#define EUR_CR_POWER 0x001C -#define EUR_CR_POWER_PIPE_DISABLE_MASK 0x00000001U -#define EUR_CR_POWER_PIPE_DISABLE_SHIFT 0 -#define EUR_CR_POWER_PIPE_DISABLE_SIGNED 0 -#define EUR_CR_CORE_ID 0x0020 -#define EUR_CR_CORE_ID_CONFIG_MULTI_MASK 0x00000001U -#define EUR_CR_CORE_ID_CONFIG_MULTI_SHIFT 0 -#define EUR_CR_CORE_ID_CONFIG_MULTI_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_BASE_MASK 0x00000002U -#define EUR_CR_CORE_ID_CONFIG_BASE_SHIFT 1 -#define EUR_CR_CORE_ID_CONFIG_BASE_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_MASK 0x000000FCU -#define EUR_CR_CORE_ID_CONFIG_SHIFT 2 -#define EUR_CR_CORE_ID_CONFIG_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_CORES_MASK 0x00000F00U -#define EUR_CR_CORE_ID_CONFIG_CORES_SHIFT 8 -#define EUR_CR_CORE_ID_CONFIG_CORES_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_SLC_MASK 0x0000F000U -#define EUR_CR_CORE_ID_CONFIG_SLC_SHIFT 12 -#define EUR_CR_CORE_ID_CONFIG_SLC_SIGNED 0 -#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_CORE_ID_ID_SHIFT 16 -#define EUR_CR_CORE_ID_ID_SIGNED 0 -#define EUR_CR_CORE_REVISION 0x0024 -#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_CORE_REVISION_MAINTENANCE_SIGNED 0 -#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_CORE_REVISION_MINOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_CORE_REVISION_MAJOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_CORE_REVISION_DESIGNER_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD1 0x0028 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD2 0x002C -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SIGNED 0 -#define EUR_CR_SOFT_RESET 0x0080 -#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U -#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 -#define EUR_CR_SOFT_RESET_BIF_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_VDM_RESET_MASK 0x00000002U -#define EUR_CR_SOFT_RESET_VDM_RESET_SHIFT 1 -#define EUR_CR_SOFT_RESET_VDM_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U -#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 -#define EUR_CR_SOFT_RESET_DPM_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TE_RESET_MASK 0x00000008U -#define EUR_CR_SOFT_RESET_TE_RESET_SHIFT 3 -#define EUR_CR_SOFT_RESET_TE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_MTE_RESET_MASK 0x00000010U -#define EUR_CR_SOFT_RESET_MTE_RESET_SHIFT 4 -#define EUR_CR_SOFT_RESET_MTE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000020U -#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 5 -#define EUR_CR_SOFT_RESET_ISP_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ISP2_RESET_MASK 0x00000040U -#define EUR_CR_SOFT_RESET_ISP2_RESET_SHIFT 6 -#define EUR_CR_SOFT_RESET_ISP2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000080U -#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 7 -#define EUR_CR_SOFT_RESET_TSP_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_PDS_RESET_MASK 0x00000100U -#define EUR_CR_SOFT_RESET_PDS_RESET_SHIFT 8 -#define EUR_CR_SOFT_RESET_PDS_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_PBE_RESET_MASK 0x00000200U -#define EUR_CR_SOFT_RESET_PBE_RESET_SHIFT 9 -#define EUR_CR_SOFT_RESET_PBE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_MASK 0x00000400U -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SHIFT 10 -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK 0x00000800U -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SHIFT 11 -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ITR_RESET_MASK 0x00002000U -#define EUR_CR_SOFT_RESET_ITR_RESET_SHIFT 13 -#define EUR_CR_SOFT_RESET_ITR_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TEX_RESET_MASK 0x00004000U -#define EUR_CR_SOFT_RESET_TEX_RESET_SHIFT 14 -#define EUR_CR_SOFT_RESET_TEX_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00008000U -#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 15 -#define EUR_CR_SOFT_RESET_USE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK 0x00010000U -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SHIFT 16 -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00020000U -#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 17 -#define EUR_CR_SOFT_RESET_TA_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_MASK 0x00040000U -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SHIFT 18 -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_MASK 0x00080000U -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SHIFT 19 -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2 0x0118 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS 0x012C -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 -#define EUR_CR_EVENT_STATUS_TIMER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_STATUS_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_STATUS_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE 0x0130 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR 0x0134 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_TIMER 0x0144 -#define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU -#define EUR_CR_TIMER_VALUE_SHIFT 0 -#define EUR_CR_TIMER_VALUE_SIGNED 0 -#define EUR_CR_EVENT_KICK1 0x0AB0 -#define EUR_CR_EVENT_KICK1_NOW_MASK 0x000000FFU -#define EUR_CR_EVENT_KICK1_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK1_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICK2 0x0AC0 -#define EUR_CR_EVENT_KICK2_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK2_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK2_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICKER 0x0AC4 -#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 -#define EUR_CR_EVENT_KICKER_ADDRESS_SIGNED 0 -#define EUR_CR_EVENT_KICK 0x0AC8 -#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK_NOW_SIGNED 0 -#define EUR_CR_EVENT_TIMER 0x0ACC -#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U -#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 -#define EUR_CR_EVENT_TIMER_ENABLE_SIGNED 0 -#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU -#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 -#define EUR_CR_EVENT_TIMER_VALUE_SIGNED 0 -#define EUR_CR_PDS_INV0 0x0AD0 -#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV0_DSC_SHIFT 0 -#define EUR_CR_PDS_INV0_DSC_SIGNED 0 -#define EUR_CR_PDS_INV1 0x0AD4 -#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV1_DSC_SHIFT 0 -#define EUR_CR_PDS_INV1_DSC_SIGNED 0 -#define EUR_CR_EVENT_KICK3 0x0AD8 -#define EUR_CR_EVENT_KICK3_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK3_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK3_NOW_SIGNED 0 -#define EUR_CR_PDS_INV3 0x0ADC -#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV3_DSC_SHIFT 0 -#define EUR_CR_PDS_INV3_DSC_SIGNED 0 -#define EUR_CR_PDS_INV_CSC 0x0AE0 -#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U -#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 -#define EUR_CR_PDS_INV_CSC_KICK_SIGNED 0 -#define EUR_CR_BIF_CTRL 0x0C00 -#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_BIF_CTRL_NOREORDER_SIGNED 0 -#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_BIF_CTRL_PAUSE_SIGNED 0 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_MASK 0x00000400U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SHIFT 10 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 13 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00004000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_MASK 0x00010000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SHIFT 16 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_MASK 0x00020000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SHIFT 17 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_MASK 0x00040000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SHIFT 18 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_MASK 0x00080000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SHIFT 19 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SIGNED 0 -#define EUR_CR_BIF_INT_STAT 0x0C04 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK 0x00003FFFU -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SHIFT 0 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_MASK 0x00070000U -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SHIFT 16 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00080000U -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 19 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SIGNED 0 -#define EUR_CR_BIF_FAULT 0x0C08 -#define EUR_CR_BIF_FAULT_CID_MASK 0x0000000FU -#define EUR_CR_BIF_FAULT_CID_SHIFT 0 -#define EUR_CR_BIF_FAULT_CID_SIGNED 0 -#define EUR_CR_BIF_FAULT_SB_MASK 0x000001F0U -#define EUR_CR_BIF_FAULT_SB_SHIFT 4 -#define EUR_CR_BIF_FAULT_SB_SIGNED 0 -#define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 -#define EUR_CR_BIF_FAULT_ADDR_SIGNED 0 -#define EUR_CR_BIF_TILE0 0x0C0C -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE0_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE0_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE1 0x0C10 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE1_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE1_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE2 0x0C14 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE2_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE2_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE3 0x0C18 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE3_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE3_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE4 0x0C1C -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE4_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE4_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE5 0x0C20 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE5_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE5_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE6 0x0C24 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE6_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE6_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE7 0x0C28 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE7_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE7_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE8 0x0C2C -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE8_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE8_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE9 0x0C30 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE9_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE9_CFG_SIGNED 0 -#define EUR_CR_BIF_CTRL_INVAL 0x0C34 -#define EUR_CR_BIF_CTRL_INVAL_PTE_MASK 0x00000004U -#define EUR_CR_BIF_CTRL_INVAL_PTE_SHIFT 2 -#define EUR_CR_BIF_CTRL_INVAL_PTE_SIGNED 0 -#define EUR_CR_BIF_CTRL_INVAL_ALL_MASK 0x00000008U -#define EUR_CR_BIF_CTRL_INVAL_ALL_SHIFT 3 -#define EUR_CR_BIF_CTRL_INVAL_ALL_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_SET 0x0C74 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_MASK 0x00000001U -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SHIFT 0 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_MASK 0x0000000CU -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SHIFT 2 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_MASK 0x00000010U -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SHIFT 4 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_MASK 0x000000C0U -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SHIFT 6 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_MASK 0x00000100U -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SHIFT 8 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_MASK 0x00000200U -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SHIFT 9 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SIGNED 0 -#define EUR_CR_BIF_BANK0 0x0C78 -#define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK0_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK0_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK0_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_PTLA_MASK 0x000F0000U -#define EUR_CR_BIF_BANK0_INDEX_PTLA_SHIFT 16 -#define EUR_CR_BIF_BANK0_INDEX_PTLA_SIGNED 0 -#define EUR_CR_BIF_BANK1 0x0C7C -#define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK1_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK1_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK1_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SIGNED 0 -#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SIGNED 0 -#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS 0x0CB4 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL 0x0CD0 -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_MASK 0x00000008U -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SHIFT 3 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 -#define EUR_CR_2D_BLIT_STATUS 0x0E04 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SIGNED 0 -#define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U -#define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 -#define EUR_CR_2D_BLIT_STATUS_BUSY_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SIGNED 0 -#define EUR_CR_BREAKPOINT0_START 0x0F44 -#define EUR_CR_BREAKPOINT0_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT0_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT0_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT0_END 0x0F48 -#define EUR_CR_BREAKPOINT0_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT0_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT0_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT0 0x0F4C -#define EUR_CR_BREAKPOINT0_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT0_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT0_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_START 0x0F50 -#define EUR_CR_BREAKPOINT1_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT1_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT1_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT1_END 0x0F54 -#define EUR_CR_BREAKPOINT1_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT1_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT1_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT1 0x0F58 -#define EUR_CR_BREAKPOINT1_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT1_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT1_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_START 0x0F5C -#define EUR_CR_BREAKPOINT2_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT2_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT2_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT2_END 0x0F60 -#define EUR_CR_BREAKPOINT2_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT2_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT2_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT2 0x0F64 -#define EUR_CR_BREAKPOINT2_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT2_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT2_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_START 0x0F68 -#define EUR_CR_BREAKPOINT3_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT3_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT3_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT3_END 0x0F6C -#define EUR_CR_BREAKPOINT3_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT3_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT3_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT3 0x0F70 -#define EUR_CR_BREAKPOINT3_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT3_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT3_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT_READ 0x0F74 -#define EUR_CR_BREAKPOINT_READ_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT_READ_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT_READ_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP 0x0F78 -#define EUR_CR_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 -#define EUR_CR_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U -#define EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 -#define EUR_CR_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 -#define EUR_CR_BREAKPOINT 0x0F7C -#define EUR_CR_BREAKPOINT_MODULE_ID_MASK 0x000003C0U -#define EUR_CR_BREAKPOINT_MODULE_ID_SHIFT 6 -#define EUR_CR_BREAKPOINT_MODULE_ID_SIGNED 0 -#define EUR_CR_BREAKPOINT_ID_MASK 0x00000030U -#define EUR_CR_BREAKPOINT_ID_SHIFT 4 -#define EUR_CR_BREAKPOINT_ID_SIGNED 0 -#define EUR_CR_BREAKPOINT_UNTRAPPED_MASK 0x00000008U -#define EUR_CR_BREAKPOINT_UNTRAPPED_SHIFT 3 -#define EUR_CR_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAPPED_MASK 0x00000004U -#define EUR_CR_BREAKPOINT_TRAPPED_SHIFT 2 -#define EUR_CR_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO0 0x0F80 -#define EUR_CR_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1 0x0F84 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U -#define EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U -#define EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U -#define EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U -#define EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U -#define EUR_CR_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 -#define EUR_CR_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_0 0x0A0C -#define EUR_CR_USE_CODE_BASE_ADDR_00_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_00_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_00_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_00_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_1 0x0A10 -#define EUR_CR_USE_CODE_BASE_ADDR_01_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_01_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_01_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_01_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_2 0x0A14 -#define EUR_CR_USE_CODE_BASE_ADDR_02_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_02_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_02_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_02_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_3 0x0A18 -#define EUR_CR_USE_CODE_BASE_ADDR_03_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_03_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_03_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_03_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_4 0x0A1C -#define EUR_CR_USE_CODE_BASE_ADDR_04_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_04_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_04_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_04_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_5 0x0A20 -#define EUR_CR_USE_CODE_BASE_ADDR_05_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_05_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_05_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_05_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_6 0x0A24 -#define EUR_CR_USE_CODE_BASE_ADDR_06_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_06_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_06_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_06_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_7 0x0A28 -#define EUR_CR_USE_CODE_BASE_ADDR_07_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_07_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_07_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_07_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_8 0x0A2C -#define EUR_CR_USE_CODE_BASE_ADDR_08_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_08_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_08_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_08_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_9 0x0A30 -#define EUR_CR_USE_CODE_BASE_ADDR_09_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_09_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_09_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_09_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_10 0x0A34 -#define EUR_CR_USE_CODE_BASE_ADDR_10_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_10_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_10_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_10_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_11 0x0A38 -#define EUR_CR_USE_CODE_BASE_ADDR_11_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_11_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_11_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_11_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_12 0x0A3C -#define EUR_CR_USE_CODE_BASE_ADDR_12_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_12_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_12_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_12_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_13 0x0A40 -#define EUR_CR_USE_CODE_BASE_ADDR_13_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_13_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_13_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_13_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_14 0x0A44 -#define EUR_CR_USE_CODE_BASE_ADDR_14_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_14_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_14_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_14_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_15 0x0A48 -#define EUR_CR_USE_CODE_BASE_ADDR_15_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_15_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_15_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_15_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_15_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_15_SIGNED 0 -#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) -#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 -#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx544defs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx544defs.h deleted file mode 100644 index c18b8ad..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx544defs.h +++ /dev/null @@ -1,1367 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGX544DEFS_KM_H_ -#define _SGX544DEFS_KM_H_ - -#define EUR_CR_CLKGATECTL 0x0000 -#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL_ISP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL_TSP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TE_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL_TE_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL_TE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_MTE_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL_MTE_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL_MTE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL_DPM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_VDM_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL_VDM_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL_VDM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_PDS_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL_PDS_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL_PDS_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL_IDXFIFO_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TA_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL_TA_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL_TA_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_MASK 0x00300000U -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SHIFT 20 -#define EUR_CR_CLKGATECTL_BIF_CORE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SIGNED 0 -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_MASK 0x10000000U -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SHIFT 28 -#define EUR_CR_CLKGATECTL_SYSTEM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2 0x0004 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL2_TCU_L2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_MASK 0x00C00000U -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SHIFT 22 -#define EUR_CR_CLKGATECTL2_DCU_L2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_MASK 0x03000000U -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SHIFT 24 -#define EUR_CR_CLKGATECTL2_DCU1_L0L1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_MASK 0x0C000000U -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SHIFT 26 -#define EUR_CR_CLKGATECTL2_DCU0_L0L1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATESTATUS 0x0008 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000001U -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 0 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_MASK 0x00000002U -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SHIFT 1 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000004U -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 2 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_MASK 0x00000008U -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SHIFT 3 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_MASK 0x00000010U -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SHIFT 4 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00000020U -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 5 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_MASK 0x00000040U -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SHIFT 6 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_MASK 0x00000080U -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SHIFT 7 -#define EUR_CR_CLKGATESTATUS_PDS_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_MASK 0x00000100U -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SHIFT 8 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_MASK 0x00000200U -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SHIFT 9 -#define EUR_CR_CLKGATESTATUS_TCU_L2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_MASK 0x00000400U -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SHIFT 10 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_MASK 0x00000800U -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SHIFT 11 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_MASK 0x00001000U -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SHIFT 12 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_MASK 0x00002000U -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SHIFT 13 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_MASK 0x00008000U -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SHIFT 15 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_MASK 0x00010000U -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SHIFT 16 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_MASK 0x00020000U -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SHIFT 17 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_MASK 0x00080000U -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SHIFT 19 -#define EUR_CR_CLKGATESTATUS_IDXFIFO_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_MASK 0x00100000U -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SHIFT 20 -#define EUR_CR_CLKGATESTATUS_TA_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_MASK 0x00200000U -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SHIFT 21 -#define EUR_CR_CLKGATESTATUS_DCU_L2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_MASK 0x00400000U -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SHIFT 22 -#define EUR_CR_CLKGATESTATUS_DCU0_L0L1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_MASK 0x00800000U -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SHIFT 23 -#define EUR_CR_CLKGATESTATUS_DCU1_L0L1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_MASK 0x01000000U -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SHIFT 24 -#define EUR_CR_CLKGATESTATUS_BIF_CORE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR 0x000C -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000003U -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 0 -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_MASK 0x0000000CU -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SHIFT 2 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000030U -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 4 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_MASK 0x000000C0U -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SHIFT 6 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_MASK 0x00000300U -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SHIFT 8 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00000C00U -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 10 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_MASK 0x00003000U -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SHIFT 12 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_MASK 0x0000C000U -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SHIFT 14 -#define EUR_CR_CLKGATECTLOVR_PDS_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_MASK 0x00030000U -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SHIFT 16 -#define EUR_CR_CLKGATECTLOVR_IDXFIFO_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_MASK 0x000C0000U -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SHIFT 18 -#define EUR_CR_CLKGATECTLOVR_TA_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_MASK 0x00300000U -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SHIFT 20 -#define EUR_CR_CLKGATECTLOVR_BIF_CORE_CLKO_SIGNED 0 -#define EUR_CR_POWER 0x001C -#define EUR_CR_POWER_PIPE_DISABLE_MASK 0x00000001U -#define EUR_CR_POWER_PIPE_DISABLE_SHIFT 0 -#define EUR_CR_POWER_PIPE_DISABLE_SIGNED 0 -#define EUR_CR_CORE_ID 0x0020 -#define EUR_CR_CORE_ID_CONFIG_MULTI_MASK 0x00000001U -#define EUR_CR_CORE_ID_CONFIG_MULTI_SHIFT 0 -#define EUR_CR_CORE_ID_CONFIG_MULTI_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_BASE_MASK 0x00000002U -#define EUR_CR_CORE_ID_CONFIG_BASE_SHIFT 1 -#define EUR_CR_CORE_ID_CONFIG_BASE_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_MASK 0x000000FCU -#define EUR_CR_CORE_ID_CONFIG_SHIFT 2 -#define EUR_CR_CORE_ID_CONFIG_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_CORES_MASK 0x00000F00U -#define EUR_CR_CORE_ID_CONFIG_CORES_SHIFT 8 -#define EUR_CR_CORE_ID_CONFIG_CORES_SIGNED 0 -#define EUR_CR_CORE_ID_CONFIG_SLC_MASK 0x0000F000U -#define EUR_CR_CORE_ID_CONFIG_SLC_SHIFT 12 -#define EUR_CR_CORE_ID_CONFIG_SLC_SIGNED 0 -#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_CORE_ID_ID_SHIFT 16 -#define EUR_CR_CORE_ID_ID_SIGNED 0 -#define EUR_CR_CORE_REVISION 0x0024 -#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_CORE_REVISION_MAINTENANCE_SIGNED 0 -#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_CORE_REVISION_MINOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_CORE_REVISION_MAJOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_CORE_REVISION_DESIGNER_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD1 0x0028 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD2 0x002C -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SIGNED 0 -#define EUR_CR_SOFT_RESET 0x0080 -#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U -#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 -#define EUR_CR_SOFT_RESET_BIF_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_VDM_RESET_MASK 0x00000002U -#define EUR_CR_SOFT_RESET_VDM_RESET_SHIFT 1 -#define EUR_CR_SOFT_RESET_VDM_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U -#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 -#define EUR_CR_SOFT_RESET_DPM_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TE_RESET_MASK 0x00000008U -#define EUR_CR_SOFT_RESET_TE_RESET_SHIFT 3 -#define EUR_CR_SOFT_RESET_TE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_MTE_RESET_MASK 0x00000010U -#define EUR_CR_SOFT_RESET_MTE_RESET_SHIFT 4 -#define EUR_CR_SOFT_RESET_MTE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000020U -#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 5 -#define EUR_CR_SOFT_RESET_ISP_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ISP2_RESET_MASK 0x00000040U -#define EUR_CR_SOFT_RESET_ISP2_RESET_SHIFT 6 -#define EUR_CR_SOFT_RESET_ISP2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000080U -#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 7 -#define EUR_CR_SOFT_RESET_TSP_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_PDS_RESET_MASK 0x00000100U -#define EUR_CR_SOFT_RESET_PDS_RESET_SHIFT 8 -#define EUR_CR_SOFT_RESET_PDS_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_PBE_RESET_MASK 0x00000200U -#define EUR_CR_SOFT_RESET_PBE_RESET_SHIFT 9 -#define EUR_CR_SOFT_RESET_PBE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_MASK 0x00000400U -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SHIFT 10 -#define EUR_CR_SOFT_RESET_TCU_L2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_MASK 0x00000800U -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SHIFT 11 -#define EUR_CR_SOFT_RESET_UCACHEL2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ITR_RESET_MASK 0x00002000U -#define EUR_CR_SOFT_RESET_ITR_RESET_SHIFT 13 -#define EUR_CR_SOFT_RESET_ITR_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TEX_RESET_MASK 0x00004000U -#define EUR_CR_SOFT_RESET_TEX_RESET_SHIFT 14 -#define EUR_CR_SOFT_RESET_TEX_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00008000U -#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 15 -#define EUR_CR_SOFT_RESET_USE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_MASK 0x00010000U -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SHIFT 16 -#define EUR_CR_SOFT_RESET_IDXFIFO_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00020000U -#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 17 -#define EUR_CR_SOFT_RESET_TA_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_MASK 0x00040000U -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SHIFT 18 -#define EUR_CR_SOFT_RESET_DCU_L2_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_MASK 0x00080000U -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SHIFT 19 -#define EUR_CR_SOFT_RESET_DCU_L0L1_RESET_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2 0x0118 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SHIFT 11 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SHIFT 10 -#define EUR_CR_EVENT_STATUS2_DATA_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SHIFT 9 -#define EUR_CR_EVENT_STATUS2_MTE_CONTEXT_DRAINED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SHIFT 8 -#define EUR_CR_EVENT_STATUS2_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SHIFT 7 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SHIFT 6 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SHIFT 5 -#define EUR_CR_EVENT_STATUS2_TE_RGNHDR_INIT_COMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 4 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 3 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 2 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS 0x012C -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 -#define EUR_CR_EVENT_STATUS_TIMER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_STATUS_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_STATUS_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_STATUS_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_STATUS_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE 0x0130 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_ENABLE_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR 0x0134 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_CLEAR_TCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SHIFT 21 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_TIMER 0x0144 -#define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU -#define EUR_CR_TIMER_VALUE_SHIFT 0 -#define EUR_CR_TIMER_VALUE_SIGNED 0 -#define EUR_CR_EVENT_KICK1 0x0AB0 -#define EUR_CR_EVENT_KICK1_NOW_MASK 0x000000FFU -#define EUR_CR_EVENT_KICK1_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK1_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICK2 0x0AC0 -#define EUR_CR_EVENT_KICK2_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK2_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK2_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICKER 0x0AC4 -#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 -#define EUR_CR_EVENT_KICKER_ADDRESS_SIGNED 0 -#define EUR_CR_EVENT_KICK 0x0AC8 -#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK_NOW_SIGNED 0 -#define EUR_CR_EVENT_TIMER 0x0ACC -#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U -#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 -#define EUR_CR_EVENT_TIMER_ENABLE_SIGNED 0 -#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU -#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 -#define EUR_CR_EVENT_TIMER_VALUE_SIGNED 0 -#define EUR_CR_PDS_INV0 0x0AD0 -#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV0_DSC_SHIFT 0 -#define EUR_CR_PDS_INV0_DSC_SIGNED 0 -#define EUR_CR_PDS_INV1 0x0AD4 -#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV1_DSC_SHIFT 0 -#define EUR_CR_PDS_INV1_DSC_SIGNED 0 -#define EUR_CR_EVENT_KICK3 0x0AD8 -#define EUR_CR_EVENT_KICK3_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK3_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK3_NOW_SIGNED 0 -#define EUR_CR_PDS_INV3 0x0ADC -#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV3_DSC_SHIFT 0 -#define EUR_CR_PDS_INV3_DSC_SIGNED 0 -#define EUR_CR_PDS_INV_CSC 0x0AE0 -#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U -#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 -#define EUR_CR_PDS_INV_CSC_KICK_SIGNED 0 -#define EUR_CR_BIF_CTRL 0x0C00 -#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_BIF_CTRL_NOREORDER_SIGNED 0 -#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_BIF_CTRL_PAUSE_SIGNED 0 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_MASK 0x00000400U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SHIFT 10 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TA_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 13 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00004000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_MASK 0x00010000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SHIFT 16 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PTLA_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_MASK 0x00020000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SHIFT 17 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_MASK 0x00040000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SHIFT 18 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_MASK 0x00080000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SHIFT 19 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SIGNED 0 -#define EUR_CR_BIF_INT_STAT 0x0C04 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK 0x00003FFFU -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SHIFT 0 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_MASK 0x00070000U -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SHIFT 16 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00080000U -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 19 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SIGNED 0 -#define EUR_CR_BIF_FAULT 0x0C08 -#define EUR_CR_BIF_FAULT_CID_MASK 0x0000000FU -#define EUR_CR_BIF_FAULT_CID_SHIFT 0 -#define EUR_CR_BIF_FAULT_CID_SIGNED 0 -#define EUR_CR_BIF_FAULT_SB_MASK 0x000001F0U -#define EUR_CR_BIF_FAULT_SB_SHIFT 4 -#define EUR_CR_BIF_FAULT_SB_SIGNED 0 -#define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 -#define EUR_CR_BIF_FAULT_ADDR_SIGNED 0 -#define EUR_CR_BIF_TILE0 0x0C0C -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE0_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE0_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE1 0x0C10 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE1_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE1_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE2 0x0C14 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE2_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE2_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE3 0x0C18 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE3_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE3_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE4 0x0C1C -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE4_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE4_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE5 0x0C20 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE5_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE5_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE6 0x0C24 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE6_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE6_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE7 0x0C28 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE7_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE7_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE8 0x0C2C -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE8_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE8_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE9 0x0C30 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE9_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE9_CFG_SIGNED 0 -#define EUR_CR_BIF_CTRL_INVAL 0x0C34 -#define EUR_CR_BIF_CTRL_INVAL_PTE_MASK 0x00000004U -#define EUR_CR_BIF_CTRL_INVAL_PTE_SHIFT 2 -#define EUR_CR_BIF_CTRL_INVAL_PTE_SIGNED 0 -#define EUR_CR_BIF_CTRL_INVAL_ALL_MASK 0x00000008U -#define EUR_CR_BIF_CTRL_INVAL_ALL_SHIFT 3 -#define EUR_CR_BIF_CTRL_INVAL_ALL_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_SET 0x0C74 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_MASK 0x00000001U -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SHIFT 0 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_MASK 0x0000000CU -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SHIFT 2 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_MASK 0x00000010U -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SHIFT 4 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_MASK 0x000000C0U -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SHIFT 6 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_MASK 0x00000100U -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SHIFT 8 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_MASK 0x00000200U -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SHIFT 9 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SIGNED 0 -#define EUR_CR_BIF_BANK0 0x0C78 -#define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK0_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK0_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK0_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_PTLA_MASK 0x000F0000U -#define EUR_CR_BIF_BANK0_INDEX_PTLA_SHIFT 16 -#define EUR_CR_BIF_BANK0_INDEX_PTLA_SIGNED 0 -#define EUR_CR_BIF_BANK1 0x0C7C -#define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK1_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK1_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK1_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SIGNED 0 -#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SIGNED 0 -#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS 0x0CB4 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL 0x0CD0 -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 -#define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 -#define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_MASK 0x00000008U -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SHIFT 3 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 -#define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 -#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_MASK 0x00000020U -#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SHIFT 5 -#define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SIGNED 0 -#define EUR_CR_2D_BLIT_STATUS 0x0E04 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 -#define EUR_CR_2D_BLIT_STATUS_COMPLETE_SIGNED 0 -#define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U -#define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 -#define EUR_CR_2D_BLIT_STATUS_BUSY_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SIGNED 0 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 -#define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SIGNED 0 -#define EUR_CR_BREAKPOINT0_START 0x0F44 -#define EUR_CR_BREAKPOINT0_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT0_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT0_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT0_END 0x0F48 -#define EUR_CR_BREAKPOINT0_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT0_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT0_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT0 0x0F4C -#define EUR_CR_BREAKPOINT0_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT0_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT0_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT0_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT0_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT0_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_START 0x0F50 -#define EUR_CR_BREAKPOINT1_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT1_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT1_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT1_END 0x0F54 -#define EUR_CR_BREAKPOINT1_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT1_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT1_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT1 0x0F58 -#define EUR_CR_BREAKPOINT1_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT1_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT1_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT1_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT1_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT1_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_START 0x0F5C -#define EUR_CR_BREAKPOINT2_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT2_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT2_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT2_END 0x0F60 -#define EUR_CR_BREAKPOINT2_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT2_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT2_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT2 0x0F64 -#define EUR_CR_BREAKPOINT2_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT2_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT2_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT2_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT2_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT2_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_START 0x0F68 -#define EUR_CR_BREAKPOINT3_START_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT3_START_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT3_START_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT3_END 0x0F6C -#define EUR_CR_BREAKPOINT3_END_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT3_END_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT3_END_ADDRESS_SIGNED 0 -#define EUR_CR_BREAKPOINT3 0x0F70 -#define EUR_CR_BREAKPOINT3_MASK_DM_MASK 0x00000038U -#define EUR_CR_BREAKPOINT3_MASK_DM_SHIFT 3 -#define EUR_CR_BREAKPOINT3_MASK_DM_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_MASK 0x00000004U -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SHIFT 2 -#define EUR_CR_BREAKPOINT3_CTRL_TRAPENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_MASK 0x00000002U -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SHIFT 1 -#define EUR_CR_BREAKPOINT3_CTRL_WENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_MASK 0x00000001U -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SHIFT 0 -#define EUR_CR_BREAKPOINT3_CTRL_RENABLE_SIGNED 0 -#define EUR_CR_BREAKPOINT_READ 0x0F74 -#define EUR_CR_BREAKPOINT_READ_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_BREAKPOINT_READ_ADDRESS_SHIFT 4 -#define EUR_CR_BREAKPOINT_READ_ADDRESS_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP 0x0F78 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT 0x0F7C -#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_MASK 0x000003C0U -#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_SHIFT 6 -#define EUR_CR_PARTITION_BREAKPOINT_MODULE_ID_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_ID_MASK 0x00000030U -#define EUR_CR_PARTITION_BREAKPOINT_ID_SHIFT 4 -#define EUR_CR_PARTITION_BREAKPOINT_ID_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_MASK 0x00000008U -#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_SHIFT 3 -#define EUR_CR_PARTITION_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_MASK 0x00000004U -#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_SHIFT 2 -#define EUR_CR_PARTITION_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0 0x0F80 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1 0x0F84 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 -#define EUR_CR_PARTITION_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_0 0x0A0C -#define EUR_CR_USE_CODE_BASE_ADDR_00_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_00_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_00_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_00_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_1 0x0A10 -#define EUR_CR_USE_CODE_BASE_ADDR_01_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_01_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_01_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_01_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_2 0x0A14 -#define EUR_CR_USE_CODE_BASE_ADDR_02_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_02_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_02_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_02_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_3 0x0A18 -#define EUR_CR_USE_CODE_BASE_ADDR_03_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_03_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_03_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_03_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_4 0x0A1C -#define EUR_CR_USE_CODE_BASE_ADDR_04_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_04_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_04_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_04_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_5 0x0A20 -#define EUR_CR_USE_CODE_BASE_ADDR_05_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_05_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_05_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_05_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_6 0x0A24 -#define EUR_CR_USE_CODE_BASE_ADDR_06_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_06_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_06_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_06_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_7 0x0A28 -#define EUR_CR_USE_CODE_BASE_ADDR_07_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_07_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_07_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_07_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_8 0x0A2C -#define EUR_CR_USE_CODE_BASE_ADDR_08_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_08_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_08_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_08_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_9 0x0A30 -#define EUR_CR_USE_CODE_BASE_ADDR_09_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_09_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_09_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_09_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_10 0x0A34 -#define EUR_CR_USE_CODE_BASE_ADDR_10_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_10_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_10_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_10_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_11 0x0A38 -#define EUR_CR_USE_CODE_BASE_ADDR_11_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_11_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_11_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_11_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_12 0x0A3C -#define EUR_CR_USE_CODE_BASE_ADDR_12_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_12_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_12_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_12_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_13 0x0A40 -#define EUR_CR_USE_CODE_BASE_ADDR_13_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_13_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_13_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_13_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_14 0x0A44 -#define EUR_CR_USE_CODE_BASE_ADDR_14_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_14_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_14_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_14_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_15 0x0A48 -#define EUR_CR_USE_CODE_BASE_ADDR_15_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_15_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_15_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_15_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_15_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_15_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP 0x0F88 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT 0x0F8C -#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_MASK 0x000003C0U -#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_SHIFT 6 -#define EUR_CR_PIPE0_BREAKPOINT_MODULE_ID_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_ID_MASK 0x00000030U -#define EUR_CR_PIPE0_BREAKPOINT_ID_SHIFT 4 -#define EUR_CR_PIPE0_BREAKPOINT_ID_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_MASK 0x00000008U -#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_SHIFT 3 -#define EUR_CR_PIPE0_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_MASK 0x00000004U -#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_SHIFT 2 -#define EUR_CR_PIPE0_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0 0x0F90 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1 0x0F94 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 -#define EUR_CR_PIPE0_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP 0x0F98 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT 0x0F9C -#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_MASK 0x000003C0U -#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_SHIFT 6 -#define EUR_CR_PIPE1_BREAKPOINT_MODULE_ID_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_ID_MASK 0x00000030U -#define EUR_CR_PIPE1_BREAKPOINT_ID_SHIFT 4 -#define EUR_CR_PIPE1_BREAKPOINT_ID_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_MASK 0x00000008U -#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_SHIFT 3 -#define EUR_CR_PIPE1_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_MASK 0x00000004U -#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_SHIFT 2 -#define EUR_CR_PIPE1_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0 0x0FA0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1 0x0FA4 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 -#define EUR_CR_PIPE1_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 -#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) -#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x03FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_MASK 0x0C000000U -#define EUR_CR_USE_CODE_BASE_DM_SHIFT 26 -#define EUR_CR_USE_CODE_BASE_DM_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 -#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx545defs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx545defs.h deleted file mode 100644 index 4dc7f3c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgx545defs.h +++ /dev/null @@ -1,1180 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGX545DEFS_KM_H_ -#define _SGX545DEFS_KM_H_ - -#define EUR_CR_CLKGATECTL 0x0000 -#define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL_ISP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL_ISP2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL_TSP_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL_TSP_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_TE_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL_TE_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL_TE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_MTE_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL_MTE_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL_MTE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_DPM_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL_DPM_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL_DPM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_VDM_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL_VDM_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL_VDM_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_PDS0_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL_PDS0_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL_PDS0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 -#define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SIGNED 0 -#define EUR_CR_CLKGATECTL2 0x0004 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_MASK 0x00000003U -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SHIFT 0 -#define EUR_CR_CLKGATECTL2_PBE_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_CACHEL2_CLKG_MASK 0x0000000CU -#define EUR_CR_CLKGATECTL2_CACHEL2_CLKG_SHIFT 2 -#define EUR_CR_CLKGATECTL2_CACHEL2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_MASK 0x00000030U -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SHIFT 4 -#define EUR_CR_CLKGATECTL2_UCACHEL2_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_MASK 0x000000C0U -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SHIFT 6 -#define EUR_CR_CLKGATECTL2_USE0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_MASK 0x00000300U -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SHIFT 8 -#define EUR_CR_CLKGATECTL2_ITR0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_MASK 0x00000C00U -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SHIFT 10 -#define EUR_CR_CLKGATECTL2_TEX0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_MADD0_CLKG_MASK 0x00003000U -#define EUR_CR_CLKGATECTL2_MADD0_CLKG_SHIFT 12 -#define EUR_CR_CLKGATECTL2_MADD0_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_MASK 0x0000C000U -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SHIFT 14 -#define EUR_CR_CLKGATECTL2_USE1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_MASK 0x00030000U -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SHIFT 16 -#define EUR_CR_CLKGATECTL2_ITR1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_MASK 0x000C0000U -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SHIFT 18 -#define EUR_CR_CLKGATECTL2_TEX1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_MADD1_CLKG_MASK 0x00300000U -#define EUR_CR_CLKGATECTL2_MADD1_CLKG_SHIFT 20 -#define EUR_CR_CLKGATECTL2_MADD1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATECTL2_PDS1_CLKG_MASK 0x00C00000U -#define EUR_CR_CLKGATECTL2_PDS1_CLKG_SHIFT 22 -#define EUR_CR_CLKGATECTL2_PDS1_CLKG_SIGNED 0 -#define EUR_CR_CLKGATESTATUS 0x0008 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000001U -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 0 -#define EUR_CR_CLKGATESTATUS_ISP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_MASK 0x00000002U -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SHIFT 1 -#define EUR_CR_CLKGATESTATUS_ISP2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000004U -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SHIFT 2 -#define EUR_CR_CLKGATESTATUS_TSP_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_MASK 0x00000008U -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SHIFT 3 -#define EUR_CR_CLKGATESTATUS_TE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_MASK 0x00000010U -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SHIFT 4 -#define EUR_CR_CLKGATESTATUS_MTE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_MASK 0x00000020U -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SHIFT 5 -#define EUR_CR_CLKGATESTATUS_DPM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_MASK 0x00000040U -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SHIFT 6 -#define EUR_CR_CLKGATESTATUS_VDM_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PDS0_CLKS_MASK 0x00000080U -#define EUR_CR_CLKGATESTATUS_PDS0_CLKS_SHIFT 7 -#define EUR_CR_CLKGATESTATUS_PDS0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_MASK 0x00000100U -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SHIFT 8 -#define EUR_CR_CLKGATESTATUS_PBE_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_CACHEL2_CLKS_MASK 0x00000200U -#define EUR_CR_CLKGATESTATUS_CACHEL2_CLKS_SHIFT 9 -#define EUR_CR_CLKGATESTATUS_CACHEL2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_MASK 0x00000400U -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SHIFT 10 -#define EUR_CR_CLKGATESTATUS_UCACHEL2_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_MASK 0x00000800U -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SHIFT 11 -#define EUR_CR_CLKGATESTATUS_USE0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_MASK 0x00001000U -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SHIFT 12 -#define EUR_CR_CLKGATESTATUS_ITR0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_MASK 0x00002000U -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SHIFT 13 -#define EUR_CR_CLKGATESTATUS_TEX0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_MADD0_CLKS_MASK 0x00004000U -#define EUR_CR_CLKGATESTATUS_MADD0_CLKS_SHIFT 14 -#define EUR_CR_CLKGATESTATUS_MADD0_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_MASK 0x00008000U -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SHIFT 15 -#define EUR_CR_CLKGATESTATUS_USE1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_MASK 0x00010000U -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SHIFT 16 -#define EUR_CR_CLKGATESTATUS_ITR1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_MASK 0x00020000U -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SHIFT 17 -#define EUR_CR_CLKGATESTATUS_TEX1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_MADD1_CLKS_MASK 0x00040000U -#define EUR_CR_CLKGATESTATUS_MADD1_CLKS_SHIFT 18 -#define EUR_CR_CLKGATESTATUS_MADD1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATESTATUS_PDS1_CLKS_MASK 0x00080000U -#define EUR_CR_CLKGATESTATUS_PDS1_CLKS_SHIFT 19 -#define EUR_CR_CLKGATESTATUS_PDS1_CLKS_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR 0x000C -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000003U -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 0 -#define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_MASK 0x0000000CU -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SHIFT 2 -#define EUR_CR_CLKGATECTLOVR_ISP2_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000030U -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SHIFT 4 -#define EUR_CR_CLKGATECTLOVR_TSP_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_MASK 0x000000C0U -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SHIFT 6 -#define EUR_CR_CLKGATECTLOVR_TE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_MASK 0x00000300U -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SHIFT 8 -#define EUR_CR_CLKGATECTLOVR_MTE_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_MASK 0x00000C00U -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SHIFT 10 -#define EUR_CR_CLKGATECTLOVR_DPM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_MASK 0x00003000U -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SHIFT 12 -#define EUR_CR_CLKGATECTLOVR_VDM_CLKO_SIGNED 0 -#define EUR_CR_CLKGATECTLOVR_PDS0_CLKO_MASK 0x0000C000U -#define EUR_CR_CLKGATECTLOVR_PDS0_CLKO_SHIFT 14 -#define EUR_CR_CLKGATECTLOVR_PDS0_CLKO_SIGNED 0 -#define EUR_CR_CORE_ID 0x001C -#define EUR_CR_CORE_ID_CONFIG_MASK 0x0000FFFFU -#define EUR_CR_CORE_ID_CONFIG_SHIFT 0 -#define EUR_CR_CORE_ID_CONFIG_SIGNED 0 -#define EUR_CR_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_CORE_ID_ID_SHIFT 16 -#define EUR_CR_CORE_ID_ID_SIGNED 0 -#define EUR_CR_CORE_REVISION 0x0020 -#define EUR_CR_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_CORE_REVISION_MAINTENANCE_SIGNED 0 -#define EUR_CR_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_CORE_REVISION_MINOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_CORE_REVISION_MAJOR_SIGNED 0 -#define EUR_CR_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_CORE_REVISION_DESIGNER_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD1 0x0024 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD1_DESIGNER_REV_FIELD1_SIGNED 0 -#define EUR_CR_DESIGNER_REV_FIELD2 0x002C -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_MASK 0xFFFFFFFFU -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SHIFT 0 -#define EUR_CR_DESIGNER_REV_FIELD2_DESIGNER_REV_FIELD2_SIGNED 0 -#define EUR_CR_SOFT_RESET 0x0080 -#define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U -#define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 -#define EUR_CR_SOFT_RESET_BIF_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000002U -#define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 1 -#define EUR_CR_SOFT_RESET_DPM_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00000004U -#define EUR_CR_SOFT_RESET_TA_RESET_SHIFT 2 -#define EUR_CR_SOFT_RESET_TA_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_USE_RESET_MASK 0x00000008U -#define EUR_CR_SOFT_RESET_USE_RESET_SHIFT 3 -#define EUR_CR_SOFT_RESET_USE_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_ISP_RESET_MASK 0x00000010U -#define EUR_CR_SOFT_RESET_ISP_RESET_SHIFT 4 -#define EUR_CR_SOFT_RESET_ISP_RESET_SIGNED 0 -#define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000020U -#define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 5 -#define EUR_CR_SOFT_RESET_TSP_RESET_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2 0x0110 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_CONTEXT_LOAD_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_CONTEXT_LOAD_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_CONTEXT_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_TASK_KICKED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_TASK_KICKED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE2_VDM_TASK_KICKED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_MEM_CLEARED_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_MEM_CLEARED_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_MEM_CLEARED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_FLUSHED_INV_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_FLUSHED_INV_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE2_OTPM_FLUSHED_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_FLUSHED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_FLUSHED_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_LOADED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_LOADED_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE2_GSG_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2 0x0114 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_CONTEXT_LOAD_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_CONTEXT_LOAD_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_CONTEXT_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_TASK_KICKED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_TASK_KICKED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR2_VDM_TASK_KICKED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_MEM_CLEARED_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_MEM_CLEARED_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_MEM_CLEARED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_FLUSHED_INV_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_FLUSHED_INV_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR2_OTPM_FLUSHED_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_FLUSHED_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_FLUSHED_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_LOADED_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_LOADED_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR2_GSG_LOADED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2 0x0118 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SHIFT 15 -#define EUR_CR_EVENT_STATUS2_MTE_STATE_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_VDM_CONTEXT_LOAD_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS2_VDM_CONTEXT_LOAD_SHIFT 14 -#define EUR_CR_EVENT_STATUS2_VDM_CONTEXT_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_VDM_TASK_KICKED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS2_VDM_TASK_KICKED_SHIFT 13 -#define EUR_CR_EVENT_STATUS2_VDM_TASK_KICKED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_OTPM_MEM_CLEARED_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS2_OTPM_MEM_CLEARED_SHIFT 12 -#define EUR_CR_EVENT_STATUS2_OTPM_MEM_CLEARED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_OTPM_FLUSHED_INV_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS2_OTPM_FLUSHED_INV_SHIFT 11 -#define EUR_CR_EVENT_STATUS2_OTPM_FLUSHED_INV_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SHIFT 10 -#define EUR_CR_EVENT_STATUS2_DCU_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_GSG_FLUSHED_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS2_GSG_FLUSHED_SHIFT 9 -#define EUR_CR_EVENT_STATUS2_GSG_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_GSG_LOADED_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS2_GSG_LOADED_SHIFT 8 -#define EUR_CR_EVENT_STATUS2_GSG_LOADED_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 7 -#define EUR_CR_EVENT_STATUS2_TRIG_TA_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 6 -#define EUR_CR_EVENT_STATUS2_TRIG_3D_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 5 -#define EUR_CR_EVENT_STATUS2_TRIG_DL_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_SHIFT 3 -#define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_SHIFT 2 -#define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 -#define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 -#define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS 0x012C -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 -#define EUR_CR_EVENT_STATUS_TIMER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_STATUS_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_STATUS_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_STATUS_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_STATUS_ISP2_ZLS_CSW_FINISHED_MASK 0x00200000U -#define EUR_CR_EVENT_STATUS_ISP2_ZLS_CSW_FINISHED_SHIFT 21 -#define EUR_CR_EVENT_STATUS_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_STATUS_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_STATUS_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_STATUS_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_STATUS_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_STATUS_ISP_VISIBILITY_FAIL_SIGNED 0 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_STATUS_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_STATUS_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_STATUS_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_STATUS_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_STATUS_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_STATUS_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_STATUS_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_STATUS_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_STATUS_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_STATUS_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_STATUS_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_STATUS_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_STATUS_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE 0x0130 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_ENABLE_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_ENABLE_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_ISP2_ZLS_CSW_FINISHED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP2_ZLS_CSW_FINISHED_SHIFT 21 -#define EUR_CR_EVENT_HOST_ENABLE_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_ENABLE_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_ENABLE_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_ENABLE_ISP_VISIBILITY_FAIL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_ENABLE_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_ENABLE_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_ENABLE_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_ENABLE_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_ENABLE_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_ENABLE_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR 0x0134 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_MASK 0x80000000U -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SHIFT 31 -#define EUR_CR_EVENT_HOST_CLEAR_MASTER_INTERRUPT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_MASK 0x20000000U -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 -#define EUR_CR_EVENT_HOST_CLEAR_TIMER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 -#define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SHIFT 26 -#define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SHIFT 25 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_MASK 0x01000000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SHIFT 24 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_TA_MEM_FREE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_MASK 0x00800000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SHIFT 23 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_END_TILE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_MASK 0x00400000U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SHIFT 22 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_INITEND_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_ISP2_ZLS_CSW_FINISHED_MASK 0x00200000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP2_ZLS_CSW_FINISHED_SHIFT 21 -#define EUR_CR_EVENT_HOST_CLEAR_ISP2_ZLS_CSW_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_MASK 0x00100000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SHIFT 20 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_INV_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_MASK 0x00080000U -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SHIFT 19 -#define EUR_CR_EVENT_HOST_CLEAR_OTPM_FLUSHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_MASK 0x00040000U -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SHIFT 18 -#define EUR_CR_EVENT_HOST_CLEAR_PIXELBE_END_RENDER_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_MASK 0x00010000U -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_SHIFT 16 -#define EUR_CR_EVENT_HOST_CLEAR_ISP_VISIBILITY_FAIL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_MASK 0x00008000U -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SHIFT 15 -#define EUR_CR_EVENT_HOST_CLEAR_BREAKPOINT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_MASK 0x00004000U -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SHIFT 14 -#define EUR_CR_EVENT_HOST_CLEAR_SW_EVENT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_MASK 0x00002000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SHIFT 13 -#define EUR_CR_EVENT_HOST_CLEAR_TA_FINISHED_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_MASK 0x00001000U -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SHIFT 12 -#define EUR_CR_EVENT_HOST_CLEAR_TA_TERMINATE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_MASK 0x00000800U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SHIFT 11 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_MASK 0x00000400U -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SHIFT 10 -#define EUR_CR_EVENT_HOST_CLEAR_TPC_FLUSH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_MASK 0x00000200U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SHIFT 9 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_MASK 0x00000100U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SHIFT 8 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_MASK 0x00000080U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SHIFT 7 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_CONTROL_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_MASK 0x00000040U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SHIFT 6 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_CLEAR_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_MASK 0x00000020U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SHIFT 5 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_LOAD_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_MASK 0x00000010U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SHIFT 4 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_STATE_STORE_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_MASK 0x00000008U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SHIFT 3 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_REACHED_MEM_THRESH_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_MASK 0x00000004U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SHIFT 2 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_GBL_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_MASK 0x00000002U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SIGNED 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 -#define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SIGNED 0 -#define EUR_CR_TIMER 0x0144 -#define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU -#define EUR_CR_TIMER_VALUE_SHIFT 0 -#define EUR_CR_TIMER_VALUE_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_0 0x0A0C -#define EUR_CR_USE_CODE_BASE_ADDR_00_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_00_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_00_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_00_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_00_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_1 0x0A10 -#define EUR_CR_USE_CODE_BASE_ADDR_01_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_01_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_01_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_01_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_01_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_2 0x0A14 -#define EUR_CR_USE_CODE_BASE_ADDR_02_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_02_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_02_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_02_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_02_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_3 0x0A18 -#define EUR_CR_USE_CODE_BASE_ADDR_03_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_03_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_03_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_03_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_03_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_4 0x0A1C -#define EUR_CR_USE_CODE_BASE_ADDR_04_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_04_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_04_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_04_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_04_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_5 0x0A20 -#define EUR_CR_USE_CODE_BASE_ADDR_05_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_05_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_05_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_05_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_05_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_6 0x0A24 -#define EUR_CR_USE_CODE_BASE_ADDR_06_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_06_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_06_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_06_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_06_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_7 0x0A28 -#define EUR_CR_USE_CODE_BASE_ADDR_07_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_07_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_07_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_07_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_07_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_8 0x0A2C -#define EUR_CR_USE_CODE_BASE_ADDR_08_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_08_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_08_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_08_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_08_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_9 0x0A30 -#define EUR_CR_USE_CODE_BASE_ADDR_09_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_09_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_09_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_09_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_09_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_10 0x0A34 -#define EUR_CR_USE_CODE_BASE_ADDR_10_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_10_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_10_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_10_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_10_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_11 0x0A38 -#define EUR_CR_USE_CODE_BASE_ADDR_11_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_11_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_11_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_11_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_11_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_12 0x0A3C -#define EUR_CR_USE_CODE_BASE_ADDR_12_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_12_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_12_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_12_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_12_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_13 0x0A40 -#define EUR_CR_USE_CODE_BASE_ADDR_13_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_13_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_13_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_13_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_13_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_14 0x0A44 -#define EUR_CR_USE_CODE_BASE_ADDR_14_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_14_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_14_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_14_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_14_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_15 0x0A48 -#define EUR_CR_USE_CODE_BASE_ADDR_15_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_15_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_15_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_15_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_15_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_15_SIGNED 0 -#define EUR_CR_PDS_EXEC_BASE 0x0AB8 -#define EUR_CR_PDS_EXEC_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_PDS_EXEC_BASE_ADDR_SHIFT 20 -#define EUR_CR_PDS_EXEC_BASE_ADDR_SIGNED 0 -#define EUR_CR_EVENT_KICKER 0x0AC4 -#define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 -#define EUR_CR_EVENT_KICKER_ADDRESS_SIGNED 0 -#define EUR_CR_EVENT_KICK 0x0AC8 -#define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK_NOW_SIGNED 0 -#define EUR_CR_EVENT_TIMER 0x0ACC -#define EUR_CR_EVENT_TIMER_ENABLE_MASK 0x01000000U -#define EUR_CR_EVENT_TIMER_ENABLE_SHIFT 24 -#define EUR_CR_EVENT_TIMER_ENABLE_SIGNED 0 -#define EUR_CR_EVENT_TIMER_VALUE_MASK 0x00FFFFFFU -#define EUR_CR_EVENT_TIMER_VALUE_SHIFT 0 -#define EUR_CR_EVENT_TIMER_VALUE_SIGNED 0 -#define EUR_CR_PDS_INV0 0x0AD0 -#define EUR_CR_PDS_INV0_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV0_DSC_SHIFT 0 -#define EUR_CR_PDS_INV0_DSC_SIGNED 0 -#define EUR_CR_PDS_INV1 0x0AD4 -#define EUR_CR_PDS_INV1_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV1_DSC_SHIFT 0 -#define EUR_CR_PDS_INV1_DSC_SIGNED 0 -#define EUR_CR_PDS_INV3 0x0AD8 -#define EUR_CR_PDS_INV3_DSC_MASK 0x00000001U -#define EUR_CR_PDS_INV3_DSC_SHIFT 0 -#define EUR_CR_PDS_INV3_DSC_SIGNED 0 -#define EUR_CR_PDS_INV_CSC 0x0AE0 -#define EUR_CR_PDS_INV_CSC_KICK_MASK 0x00000001U -#define EUR_CR_PDS_INV_CSC_KICK_SHIFT 0 -#define EUR_CR_PDS_INV_CSC_KICK_SIGNED 0 -#define EUR_CR_EVENT_KICK1 0x0AE4 -#define EUR_CR_EVENT_KICK1_NOW_MASK 0x000000FFU -#define EUR_CR_EVENT_KICK1_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK1_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICK2 0x0AE8 -#define EUR_CR_EVENT_KICK2_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK2_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK2_NOW_SIGNED 0 -#define EUR_CR_EVENT_KICK3 0x0AEC -#define EUR_CR_EVENT_KICK3_NOW_MASK 0x00000001U -#define EUR_CR_EVENT_KICK3_NOW_SHIFT 0 -#define EUR_CR_EVENT_KICK3_NOW_SIGNED 0 -#define EUR_CR_BIF_CTRL 0x0C00 -#define EUR_CR_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_BIF_CTRL_NOREORDER_SIGNED 0 -#define EUR_CR_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_BIF_CTRL_PAUSE_SIGNED 0 -#define EUR_CR_BIF_CTRL_FLUSH_MASK 0x00000004U -#define EUR_CR_BIF_CTRL_FLUSH_SHIFT 2 -#define EUR_CR_BIF_CTRL_FLUSH_SIGNED 0 -#define EUR_CR_BIF_CTRL_INVALDC_MASK 0x00000008U -#define EUR_CR_BIF_CTRL_INVALDC_SHIFT 3 -#define EUR_CR_BIF_CTRL_INVALDC_SIGNED 0 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_BIF_CTRL_CLEAR_FAULT_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_MASK 0x00000100U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_SHIFT 8 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_CACHE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_MASK 0x00000200U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_MASK 0x00000400U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SHIFT 10 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00000800U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 11 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00001000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SHIFT 12 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_MASK 0x00002000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 13 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00004000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 14 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SIGNED 0 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK 0x00008000U -#define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_SHIFT 15 -#define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_SIGNED 0 -#define EUR_CR_BIF_INT_STAT 0x0C04 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_MASK 0x0000FFFFU -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SHIFT 0 -#define EUR_CR_BIF_INT_STAT_FAULT_REQ_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_MASK 0x00070000U -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SHIFT 16 -#define EUR_CR_BIF_INT_STAT_FAULT_TYPE_SIGNED 0 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00080000U -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 19 -#define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SIGNED 0 -#define EUR_CR_BIF_FAULT 0x0C08 -#define EUR_CR_BIF_FAULT_CID_MASK 0x0000000FU -#define EUR_CR_BIF_FAULT_CID_SHIFT 0 -#define EUR_CR_BIF_FAULT_CID_SIGNED 0 -#define EUR_CR_BIF_FAULT_SB_MASK 0x000001F0U -#define EUR_CR_BIF_FAULT_SB_SHIFT 4 -#define EUR_CR_BIF_FAULT_SB_SIGNED 0 -#define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U -#define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 -#define EUR_CR_BIF_FAULT_ADDR_SIGNED 0 -#define EUR_CR_BIF_TILE0 0x0C0C -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE0_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE0_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE0_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE0_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE1 0x0C10 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE1_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE1_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE1_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE1_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE2 0x0C14 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE2_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE2_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE2_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE2_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE3 0x0C18 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE3_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE3_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE3_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE3_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE4 0x0C1C -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE4_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE4_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE4_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE4_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE5 0x0C20 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE5_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE5_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE5_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE5_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE6 0x0C24 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE6_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE6_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE6_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE6_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE7 0x0C28 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE7_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE7_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE7_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE7_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE8 0x0C2C -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE8_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE8_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE8_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE8_CFG_SIGNED 0 -#define EUR_CR_BIF_TILE9 0x0C30 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 -#define EUR_CR_BIF_TILE9_MIN_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 -#define EUR_CR_BIF_TILE9_MAX_ADDRESS_SIGNED 0 -#define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U -#define EUR_CR_BIF_TILE9_CFG_SHIFT 24 -#define EUR_CR_BIF_TILE9_CFG_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE8 0x0C54 -#define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE9 0x0C58 -#define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE10 0x0C5C -#define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE11 0x0C60 -#define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE12 0x0C64 -#define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE13 0x0C68 -#define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE14 0x0C6C -#define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE15 0x0C70 -#define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_SET 0x0C74 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_MASK 0x00000001U -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SHIFT 0 -#define EUR_CR_BIF_BANK_SET_SELECT_2D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_MASK 0x0000000CU -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SHIFT 2 -#define EUR_CR_BIF_BANK_SET_SELECT_3D_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_MASK 0x00000010U -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SHIFT 4 -#define EUR_CR_BIF_BANK_SET_SELECT_HOST_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_MASK 0x000000C0U -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SHIFT 6 -#define EUR_CR_BIF_BANK_SET_SELECT_TA_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_MASK 0x00000100U -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SHIFT 8 -#define EUR_CR_BIF_BANK_SET_SELECT_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_MASK 0x00000200U -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SHIFT 9 -#define EUR_CR_BIF_BANK_SET_SELECT_DPM_LSS_SIGNED 0 -#define EUR_CR_BIF_BANK0 0x0C78 -#define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK0_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK0_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_HOST_MASK 0x00000F00U -#define EUR_CR_BIF_BANK0_INDEX_HOST_SHIFT 8 -#define EUR_CR_BIF_BANK0_INDEX_HOST_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK0_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_BANK0_INDEX_2D_MASK 0x000F0000U -#define EUR_CR_BIF_BANK0_INDEX_2D_SHIFT 16 -#define EUR_CR_BIF_BANK0_INDEX_2D_SIGNED 0 -#define EUR_CR_BIF_BANK1 0x0C7C -#define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU -#define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 -#define EUR_CR_BIF_BANK1_INDEX_EDM_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U -#define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 -#define EUR_CR_BIF_BANK1_INDEX_TA_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_HOST_MASK 0x00000F00U -#define EUR_CR_BIF_BANK1_INDEX_HOST_SHIFT 8 -#define EUR_CR_BIF_BANK1_INDEX_HOST_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U -#define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 -#define EUR_CR_BIF_BANK1_INDEX_3D_SIGNED 0 -#define EUR_CR_BIF_BANK1_INDEX_2D_MASK 0x000F0000U -#define EUR_CR_BIF_BANK1_INDEX_2D_SHIFT 16 -#define EUR_CR_BIF_BANK1_INDEX_2D_SIGNED 0 -#define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFFF00U -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 8 -#define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SIGNED 0 -#define EUR_CR_BIF_TA_REQ_BASE 0x0C90 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_TA_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000007FFU -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 -#define EUR_CR_BIF_MEM_REQ_STAT_READS_SIGNED 0 -#define EUR_CR_BIF_3D_REQ_BASE 0x0CAC -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_3D_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 -#define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS 0x0CB4 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 -#define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 -#define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 -#define EUR_CR_BIF_36BIT_ADDRESSING 0x0CCC -#define EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_MASK 0x00000001U -#define EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_SHIFT 0 -#define EUR_CR_BIF_36BIT_ADDRESSING_ENABLE_SIGNED 0 -#define EUR_CR_BIF_TILE0_ADDR_EXT 0x0CD0 -#define EUR_CR_BIF_TILE0_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE0_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE0_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE0_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE0_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE0_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE1_ADDR_EXT 0x0CD4 -#define EUR_CR_BIF_TILE1_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE1_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE1_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE1_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE1_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE1_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE2_ADDR_EXT 0x0CD8 -#define EUR_CR_BIF_TILE2_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE2_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE2_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE2_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE2_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE2_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE3_ADDR_EXT 0x0CDC -#define EUR_CR_BIF_TILE3_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE3_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE3_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE3_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE3_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE3_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE4_ADDR_EXT 0x0CE0 -#define EUR_CR_BIF_TILE4_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE4_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE4_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE4_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE4_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE4_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE5_ADDR_EXT 0x0CE4 -#define EUR_CR_BIF_TILE5_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE5_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE5_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE5_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE5_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE5_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE6_ADDR_EXT 0x0CE8 -#define EUR_CR_BIF_TILE6_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE6_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE6_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE6_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE6_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE6_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE7_ADDR_EXT 0x0CEC -#define EUR_CR_BIF_TILE7_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE7_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE7_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE7_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE7_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE7_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE8_ADDR_EXT 0x0CF0 -#define EUR_CR_BIF_TILE8_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE8_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE8_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE8_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE8_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE8_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_TILE9_ADDR_EXT 0x0CF4 -#define EUR_CR_BIF_TILE9_ADDR_EXT_MIN_MASK 0x000000FFU -#define EUR_CR_BIF_TILE9_ADDR_EXT_MIN_SHIFT 0 -#define EUR_CR_BIF_TILE9_ADDR_EXT_MIN_SIGNED 0 -#define EUR_CR_BIF_TILE9_ADDR_EXT_MAX_MASK 0x0000FF00U -#define EUR_CR_BIF_TILE9_ADDR_EXT_MAX_SHIFT 8 -#define EUR_CR_BIF_TILE9_ADDR_EXT_MAX_SIGNED 0 -#define EUR_CR_BIF_CTRL_RDATA 0x0CF8 -#define EUR_CR_BIF_CTRL_RDATA_LIMIT_MASK 0x000003FFU -#define EUR_CR_BIF_CTRL_RDATA_LIMIT_SHIFT 0 -#define EUR_CR_BIF_CTRL_RDATA_LIMIT_SIGNED 0 -#define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) -#define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x01FFFFFFU -#define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 -#define EUR_CR_USE_CODE_BASE_ADDR_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_DM_MASK 0x06000000U -#define EUR_CR_USE_CODE_BASE_DM_SHIFT 25 -#define EUR_CR_USE_CODE_BASE_DM_SIGNED 0 -#define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 -#define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxdefs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxdefs.h deleted file mode 100644 index b3a2583..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxdefs.h +++ /dev/null @@ -1,90 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGXDEFS_H_ -#define _SGXDEFS_H_ - -#include "sgxerrata.h" -#include "sgxfeaturedefs.h" - -#if defined(SGX520) -#include "sgx520defs.h" -#else -#if defined(SGX530) -#include "sgx530defs.h" -#else -#if defined(SGX535) -#include "sgx535defs.h" -#else -#if defined(SGX535_V1_1) -#include "sgx535defs.h" -#else -#if defined(SGX540) -#include "sgx540defs.h" -#else -#if defined(SGX543) -#if defined(FIX_HW_BRN_29954) -#include "sgx543_v1.164defs.h" -#else -#include "sgx543defs.h" -#endif -#else -#if defined(SGX544) -#include "sgx544defs.h" -#else -#if defined(SGX545) -#include "sgx545defs.h" -#else -#if defined(SGX531) -#include "sgx531defs.h" -#else -#if defined(SGX554) -#include "sgx554defs.h" -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif - -#if defined(SGX_FEATURE_MP) -#if defined(SGX554) -#include "sgxmpplusdefs.h" -#else -#include "sgxmpdefs.h" -#endif -#else -#if defined(SGX_FEATURE_SYSTEM_CACHE) -#include "mnemedefs.h" -#endif -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxerrata.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxerrata.h deleted file mode 100644 index 1efaa8a..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxerrata.h +++ /dev/null @@ -1,693 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGXERRATA_KM_H_ -#define _SGXERRATA_KM_H_ - -#if defined(SGX520) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 100 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 111 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX520 Core Revision unspecified" - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX530) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 110 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 111 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 1111 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 120 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 121 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 125 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == 130 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_28889 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX530 Core Revision unspecified" - #endif - #endif - #endif - #endif - #endif - #endif -#endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX531) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 101 - #define FIX_HW_BRN_26620 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == 110 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX531 Core Revision unspecified" - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if (defined(SGX535) || defined(SGX535_V1_1)) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 112 - #define FIX_HW_BRN_23281 - #define FIX_HW_BRN_23410 - #define FIX_HW_BRN_22693 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_22997 - #define FIX_HW_BRN_23030 - #else - #if SGX_CORE_REV == 113 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_23281 - #define FIX_HW_BRN_23944 - #define FIX_HW_BRN_23410 - #else - #if SGX_CORE_REV == 121 - #define FIX_HW_BRN_22934 - #define FIX_HW_BRN_23944 - #define FIX_HW_BRN_23410 - #else - #if SGX_CORE_REV == 126 - #define FIX_HW_BRN_22934 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX535 Core Revision unspecified" - - #endif - #endif - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX540) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 101 - #define FIX_HW_BRN_25499 - #define FIX_HW_BRN_25503 - #define FIX_HW_BRN_26620 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == 110 - #define FIX_HW_BRN_25503 - #define FIX_HW_BRN_26620 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == 120 - #define FIX_HW_BRN_26620 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == 121 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == 130 - #define FIX_HW_BRN_34028 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX540 Core Revision unspecified" - #endif - #endif - #endif - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX541) && !defined(SGX_CORE_DEFINED) - #if defined(SGX_FEATURE_MP) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 100 - #define FIX_HW_BRN_27270 - #define FIX_HW_BRN_28011 - #define FIX_HW_BRN_27510 - - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX541 Core Revision unspecified" - #endif - #endif - - #define SGX_CORE_DEFINED - #else - #error "sgxerrata.h: SGX541 only supports MP configs (SGX_FEATURE_MP)" - #endif -#endif - -#if defined(SGX543) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 113 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_29997 - #define FIX_HW_BRN_30954 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_32044 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 122 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_29997 - #define FIX_HW_BRN_30954 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - - #else - #if SGX_CORE_REV == 1221 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_31671 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - - #else - #if SGX_CORE_REV == 140 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_30954 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #define FIX_HW_BRN_33920 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - - #else - #if SGX_CORE_REV == 1401 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_30954 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #define FIX_HW_BRN_33920 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - - #else - #if SGX_CORE_REV == 141 - #define FIX_HW_BRN_29954 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31671 - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - - #else - #if SGX_CORE_REV == 142 - #define FIX_HW_BRN_29954 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31671 - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - - #else - #if SGX_CORE_REV == 211 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - - #else - #if SGX_CORE_REV == 2111 - #define FIX_HW_BRN_30982 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - - #else - #if SGX_CORE_REV == 213 - #define FIX_HW_BRN_31272 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31671 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - - #else - #if SGX_CORE_REV == 216 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #if SGX_CORE_REV == 302 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #if SGX_CORE_REV == 303 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #error "sgxerrata.h: SGX543 Core Revision unspecified" - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX544) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 100 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #else - #if SGX_CORE_REV == 102 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_31272 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 103 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_31272 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 104 - #define FIX_HW_BRN_29954 - #define FIX_HW_BRN_31093 - #define FIX_HW_BRN_31195 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31278 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31542 - #define FIX_HW_BRN_31620 - #define FIX_HW_BRN_31671 - #define FIX_HW_BRN_31780 - #define FIX_HW_BRN_32044 - #define FIX_HW_BRN_32085 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 105 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 106 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 110 - #define FIX_HW_BRN_31272 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 112 - #define FIX_HW_BRN_31272 - #define FIX_HW_BRN_33920 - #else - #if SGX_CORE_REV == 114 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #if SGX_CORE_REV == 115 - #if defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_31425 - #endif - #define FIX_HW_BRN_31780 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #error "sgxerrata.h: SGX544 Core Revision unspecified" - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX545) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 100 - #define FIX_HW_BRN_26620 - #define FIX_HW_BRN_27266 - #define FIX_HW_BRN_27456 - #define FIX_HW_BRN_29702 - #define FIX_HW_BRN_29823 - #else - #if SGX_CORE_REV == 109 - #define FIX_HW_BRN_29702 - #define FIX_HW_BRN_29823 - #define FIX_HW_BRN_31939 - #else - #if SGX_CORE_REV == 1012 - #define FIX_HW_BRN_31939 - #else - #if SGX_CORE_REV == 1013 - #define FIX_HW_BRN_31939 - #else - #if SGX_CORE_REV == 10131 - #else - #if SGX_CORE_REV == 1014 - #else - #if SGX_CORE_REV == 10141 - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - - #else - #error "sgxerrata.h: SGX545 Core Revision unspecified" - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if defined(SGX554) && !defined(SGX_CORE_DEFINED) - - #define SGX_CORE_REV_HEAD 0 - #if defined(USE_SGX_CORE_REV_HEAD) - - #define SGX_CORE_REV SGX_CORE_REV_HEAD - #endif - - #if SGX_CORE_REV == 1251 - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - - #else - #if SGX_CORE_REV == SGX_CORE_REV_HEAD - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && defined(SGX_FEATURE_MP) - #define FIX_HW_BRN_33657 - #endif - #else - #error "sgxerrata.h: SGX554 Core Revision unspecified" - #endif - #endif - - #define SGX_CORE_DEFINED -#endif - -#if !defined(SGX_CORE_DEFINED) -#if defined (__GNUC__) - #warning "sgxerrata.h: SGX Core Version unspecified" -#else - #pragma message("sgxerrata.h: SGX Core Version unspecified") -#endif -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h deleted file mode 100644 index 7365457..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxfeaturedefs.h +++ /dev/null @@ -1,240 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if defined(SGX520) - #define SGX_CORE_FRIENDLY_NAME "SGX520" - #define SGX_CORE_ID SGX_CORE_ID_520 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (28) - #define SGX_FEATURE_AUTOCLOCKGATING -#else -#if defined(SGX530) - #define SGX_CORE_FRIENDLY_NAME "SGX530" - #define SGX_CORE_ID SGX_CORE_ID_530 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (28) - #define SGX_FEATURE_AUTOCLOCKGATING -#else -#if defined(SGX531) - #define SGX_CORE_FRIENDLY_NAME "SGX531" - #define SGX_CORE_ID SGX_CORE_ID_531 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (28) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_MULTI_EVENT_KICK -#else -#if defined(SGX535) - #define SGX_CORE_FRIENDLY_NAME "SGX535" - #define SGX_CORE_ID SGX_CORE_ID_535 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (16) - #define SGX_FEATURE_2D_HARDWARE - #define SGX_FEATURE_AUTOCLOCKGATING - #define SUPPORT_SGX_GENERAL_MAPPING_HEAP - #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE -#else -#if defined(SGX540) - #define SGX_CORE_FRIENDLY_NAME "SGX540" - #define SGX_CORE_ID SGX_CORE_ID_540 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (28) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_MULTI_EVENT_KICK -#else -#if defined(SGX543) - #define SGX_CORE_FRIENDLY_NAME "SGX543" - #define SGX_CORE_ID SGX_CORE_ID_543 - #define SGX_FEATURE_USE_NO_INSTRUCTION_PAIRING - #define SGX_FEATURE_USE_UNLIMITED_PHASES - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_DATA_BREAKPOINTS - #define SGX_FEATURE_PERPIPE_BKPT_REGS - #define SGX_FEATURE_PERPIPE_BKPT_REGS_NUMPIPES (2) - #define SGX_FEATURE_2D_HARDWARE - #define SGX_FEATURE_PTLA - #define SGX_FEATURE_EXTENDED_PERF_COUNTERS - #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) - #if defined(SGX_FEATURE_MP) - #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH - #endif - #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH - #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH - #endif -#else -#if defined(SGX544) - #define SGX_CORE_FRIENDLY_NAME "SGX544" - #define SGX_CORE_ID SGX_CORE_ID_544 - #define SGX_FEATURE_USE_NO_INSTRUCTION_PAIRING - #define SGX_FEATURE_USE_UNLIMITED_PHASES - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_EXTENDED_PERF_COUNTERS - #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) - #if defined(SGX_FEATURE_MP) - #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH - #endif - #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH - #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH - #endif -#else -#if defined(SGX545) - #define SGX_CORE_FRIENDLY_NAME "SGX545" - #define SGX_CORE_ID SGX_CORE_ID_545 - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - /* XXX IMG suggest to disable for known lockup issue */ - /* #define SGX_FEATURE_AUTOCLOCKGATING */ - #define SGX_FEATURE_USE_NO_INSTRUCTION_PAIRING - #define SGX_FEATURE_USE_UNLIMITED_PHASES - #define SGX_FEATURE_VOLUME_TEXTURES - #define SGX_FEATURE_HOST_ALLOC_FROM_DPM - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (16) - #define SGX_FEATURE_NUM_USE_PIPES (4) - #define SGX_FEATURE_TEXTURESTRIDE_EXTENSION - #define SGX_FEATURE_PDS_DATA_INTERLEAVE_2DWORDS - #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_ZLS_EXTERNALZ - #define SGX_FEATURE_NUM_PDS_PIPES (2) - #define SGX_FEATURE_NATIVE_BACKWARD_BLIT - #define SGX_FEATURE_MAX_TA_RENDER_TARGETS (512) - #define SGX_FEATURE_SECONDARY_REQUIRES_USE_KICK - #define SGX_FEATURE_WRITEBACK_DCU - - - #define SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS - #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) - #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH - #endif -#else -#if defined(SGX554) - #define SGX_CORE_FRIENDLY_NAME "SGX554" - #define SGX_CORE_ID SGX_CORE_ID_554 - #define SGX_FEATURE_USE_NO_INSTRUCTION_PAIRING - #define SGX_FEATURE_USE_UNLIMITED_PHASES - #define SGX_FEATURE_ADDRESS_SPACE_SIZE (32) - #define SGX_FEATURE_MULTIPLE_MEM_CONTEXTS - #define SGX_FEATURE_BIF_NUM_DIRLISTS (8) - #define SGX_FEATURE_AUTOCLOCKGATING - #define SGX_FEATURE_MONOLITHIC_UKERNEL - #define SGX_FEATURE_MULTI_EVENT_KICK - #define SGX_FEATURE_2D_HARDWARE - #define SGX_FEATURE_PTLA - #define SGX_FEATURE_EXTENDED_PERF_COUNTERS - #define SGX_FEATURE_EDM_VERTEX_PDSADDR_FULL_RANGE - #if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) - #if defined(SGX_FEATURE_MP) - #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH - #endif - #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH - #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH - #endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif -#endif - -#if defined(SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH) \ - || defined(SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH) -#define SGX_FEATURE_VDM_CONTEXT_SWITCH -#endif - -#if defined(FIX_HW_BRN_22693) -#undef SGX_FEATURE_AUTOCLOCKGATING -#endif - -#if defined(FIX_HW_BRN_27266) -#undef SGX_FEATURE_36BIT_MMU -#endif - -#if defined(FIX_HW_BRN_27456) -#undef SGX_FEATURE_BIF_WIDE_TILING_AND_4K_ADDRESS -#endif - -#if defined(FIX_HW_BRN_22934) \ - || defined(FIX_HW_BRN_25499) -#undef SGX_FEATURE_MULTI_EVENT_KICK -#endif - -#if defined(SGX_FEATURE_SYSTEM_CACHE) - #if defined(SGX_FEATURE_36BIT_MMU) - #error SGX_FEATURE_SYSTEM_CACHE is incompatible with SGX_FEATURE_36BIT_MMU - #endif - #if defined(FIX_HW_BRN_26620) && !defined(SGX_FEATURE_MULTI_EVENT_KICK) - #define SGX_BYPASS_SYSTEM_CACHE - #endif -#endif - -#if defined(FIX_HW_BRN_29954) -#undef SGX_FEATURE_PERPIPE_BKPT_REGS -#endif - -#if defined(FIX_HW_BRN_31620) -#undef SGX_FEATURE_MULTIPLE_MEM_CONTEXTS -#undef SGX_FEATURE_BIF_NUM_DIRLISTS -#endif - -#if defined(SGX_FEATURE_MP) -#if defined(SGX_FEATURE_MP_CORE_COUNT_TA) && defined(SGX_FEATURE_MP_CORE_COUNT_3D) -#if (SGX_FEATURE_MP_CORE_COUNT_TA > SGX_FEATURE_MP_CORE_COUNT_3D) -#error Number of TA cores larger than number of 3D cores not supported in current driver -#endif -#else -#if defined(SGX_FEATURE_MP_CORE_COUNT) -#define SGX_FEATURE_MP_CORE_COUNT_TA (SGX_FEATURE_MP_CORE_COUNT) -#define SGX_FEATURE_MP_CORE_COUNT_3D (SGX_FEATURE_MP_CORE_COUNT) -#else -#error Either SGX_FEATURE_MP_CORE_COUNT or \ -both SGX_FEATURE_MP_CORE_COUNT_TA and SGX_FEATURE_MP_CORE_COUNT_3D \ -must be defined when SGX_FEATURE_MP is defined -#endif -#endif -#else -#define SGX_FEATURE_MP_CORE_COUNT (1) -#define SGX_FEATURE_MP_CORE_COUNT_TA (1) -#define SGX_FEATURE_MP_CORE_COUNT_3D (1) -#endif - -#if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) && !defined(SUPPORT_SGX_PRIORITY_SCHEDULING) -#define SUPPORT_SGX_PRIORITY_SCHEDULING -#endif - -#include "img_types.h" - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxmmu.h b/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxmmu.h deleted file mode 100644 index 1b265f1..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/hwdefs/sgxmmu.h +++ /dev/null @@ -1,72 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SGXMMU_KM_H__) -#define __SGXMMU_KM_H__ - -#define SGX_MMU_PAGE_SHIFT (12) -#define SGX_MMU_PAGE_SIZE (1U< - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SGXMPDEFS_H_ -#define _SGXMPDEFS_H_ - -#define EUR_CR_MASTER_BIF_CTRL 0x4C00 -#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_MASK 0x00000001U -#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_SHIFT 0 -#define EUR_CR_MASTER_BIF_CTRL_NOREORDER_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_PAUSE_MASK 0x00000002U -#define EUR_CR_MASTER_BIF_CTRL_PAUSE_SHIFT 1 -#define EUR_CR_MASTER_BIF_CTRL_PAUSE_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_MASK 0x00000010U -#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_SHIFT 4 -#define EUR_CR_MASTER_BIF_CTRL_CLEAR_FAULT_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_MASK 0x00010000U -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_SHIFT 16 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_PTLA_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_MASK 0x00020000U -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SHIFT 17 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_VDM_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_MASK 0x00040000U -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SHIFT 18 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_IPF_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_MASK 0x00080000U -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SHIFT 19 -#define EUR_CR_MASTER_BIF_CTRL_MMU_BYPASS_MASTER_DPM_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_INVAL 0x4C34 -#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_MASK 0x00000004U -#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_SHIFT 2 -#define EUR_CR_MASTER_BIF_CTRL_INVAL_PTE_SIGNED 0 -#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_MASK 0x00000008U -#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_SHIFT 3 -#define EUR_CR_MASTER_BIF_CTRL_INVAL_ALL_SIGNED 0 -#define EUR_CR_MASTER_BIF_MMU_CTRL 0x4CD0 -#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U -#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 -#define EUR_CR_MASTER_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 -#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U -#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 -#define EUR_CR_MASTER_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 -#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U -#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 -#define EUR_CR_MASTER_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL 0x4D00 -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_MASK 0x00800000U -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_SHIFT 23 -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_REORDERING_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_MASK 0x00400000U -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_SHIFT 22 -#define EUR_CR_MASTER_SLC_CTRL_DISABLE_BURST_EXP_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_MASK 0x00200000U -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_SHIFT 21 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ3_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_MASK 0x00100000U -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_SHIFT 20 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ2_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_MASK 0x00080000U -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_SHIFT 19 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ1_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_MASK 0x00040000U -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_SHIFT 18 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_REQ0_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_MASK 0x00010000U -#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_SHIFT 16 -#define EUR_CR_MASTER_SLC_CTRL_DM_REF_SET_ALL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_MASK 0x0000F000U -#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SHIFT 12 -#define EUR_CR_MASTER_SLC_CTRL_ARB_PAGE_SIZE_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_MASK 0x00000E00U -#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SHIFT 9 -#define EUR_CR_MASTER_SLC_CTRL_ADDR_DECODE_MODE_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_PAUSE_MASK 0x00000100U -#define EUR_CR_MASTER_SLC_CTRL_PAUSE_SHIFT 8 -#define EUR_CR_MASTER_SLC_CTRL_PAUSE_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS 0x4D04 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_MASK 0x08000000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_SHIFT 27 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_N_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_MASK 0x04000000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_SHIFT 26 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_BYP_CC_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_MASK 0x02000000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_SHIFT 25 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE4_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_MASK 0x01000000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_SHIFT 24 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE3_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_MASK 0x00800000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_SHIFT 23 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE2_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_MASK 0x00400000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_SHIFT 22 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE1_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_MASK 0x00200000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_SHIFT 21 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_CORE0_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_MASK 0x00100000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_SHIFT 20 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PTLA_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_MASK 0x00080000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_SHIFT 19 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ISP2_RCIF_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_MASK 0x00040000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_SHIFT 18 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_ZLS_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_MASK 0x00020000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_SHIFT 17 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PBE_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_MASK 0x00010000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_SHIFT 16 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_VDM_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_MASK 0x00008000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_SHIFT 15 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_MASK 0x00004000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_SHIFT 14 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_PDS_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_MASK 0x00002000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_SHIFT 13 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USEC_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_MASK 0x00001000U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_SHIFT 12 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE3_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_MASK 0x00000800U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_SHIFT 11 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE2_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_MASK 0x00000400U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_SHIFT 10 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE1_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_MASK 0x00000200U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_SHIFT 9 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_USE0_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_MASK 0x00000100U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_SHIFT 8 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_IPF_OBJ_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_MASK 0x00000080U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_SHIFT 7 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TPF_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_MASK 0x00000040U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_SHIFT 6 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_TA_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_MASK 0x00000020U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_SHIFT 5 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_CACHE_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_MASK 0x00000010U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_SHIFT 4 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_REQ_MMU_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_MASK 0x00000008U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_SHIFT 3 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_EVENT_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_MASK 0x00000004U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_SHIFT 2 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_PIXEL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_MASK 0x00000002U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_SHIFT 1 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_DM_VERTEX_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_MASK 0x00000001U -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_SHIFT 0 -#define EUR_CR_MASTER_SLC_CTRL_BYPASS_ALL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL 0x4D08 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_MASK 0xFFFFFFFFU -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_SHIFT 0 -#define EUR_CR_MASTER_SLC_CTRL_USSE_INVAL_ADDR_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_INVAL 0x4D28 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_MASK 0x00000008U -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_SHIFT 3 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_EVENT_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_MASK 0x00000004U -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_SHIFT 2 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_PIXEL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_MASK 0x00000002U -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_SHIFT 1 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_DM_VERTEX_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_MASK 0x00000001U -#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_SHIFT 0 -#define EUR_CR_MASTER_SLC_CTRL_INVAL_ALL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH 0x4D2C -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_MASK 0x00000080U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_SHIFT 7 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_EVENT_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_MASK 0x00000040U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_SHIFT 6 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_PIXEL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_MASK 0x00000020U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_SHIFT 5 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_DM_VERTEX_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_MASK 0x00000010U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_SHIFT 4 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_ALL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV 0x4D34 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_MASK 0x00000080U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_SHIFT 7 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_EVENT_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_MASK 0x00000040U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_SHIFT 6 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_PIXEL_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_MASK 0x00000020U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_SHIFT 5 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_DM_VERTEX_SIGNED 0 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_MASK 0x00000010U -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_SHIFT 4 -#define EUR_CR_MASTER_SLC_CTRL_FLUSH_INV_ALL_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_READ 0x4F18 -#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_SHIFT 4 -#define EUR_CR_MASTER_BREAKPOINT_READ_ADDRESS_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP 0x4F1C -#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_MASK 0x00000002U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_SHIFT 1 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_CONTINUE_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_MASK 0x00000001U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_SHIFT 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_WRNOTIFY_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT 0x4F20 -#define EUR_CR_MASTER_BREAKPOINT_ID_MASK 0x00000030U -#define EUR_CR_MASTER_BREAKPOINT_ID_SHIFT 4 -#define EUR_CR_MASTER_BREAKPOINT_ID_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_MASK 0x00000008U -#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_SHIFT 3 -#define EUR_CR_MASTER_BREAKPOINT_UNTRAPPED_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_MASK 0x00000004U -#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_SHIFT 2 -#define EUR_CR_MASTER_BREAKPOINT_TRAPPED_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0 0x4F24 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_MASK 0xFFFFFFF0U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_SHIFT 4 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO0_ADDRESS_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1 0x4F28 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_MASK 0x00007C00U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_SHIFT 10 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_SIZE_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_MASK 0x00000300U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_SHIFT 8 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_NUMBER_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_MASK 0x000000F8U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_SHIFT 3 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_TAG_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_MASK 0x00000006U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SHIFT 1 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_DATA_MASTER_SIGNED 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_MASK 0x00000001U -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_SHIFT 0 -#define EUR_CR_MASTER_BREAKPOINT_TRAP_INFO1_RNW_SIGNED 0 -#define EUR_CR_MASTER_CORE 0x4000 -#define EUR_CR_MASTER_CORE_ENABLE_MASK 0x00000003U -#define EUR_CR_MASTER_CORE_ENABLE_SHIFT 0 -#define EUR_CR_MASTER_CORE_ENABLE_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID 0x4010 -#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_MASK 0x00000001U -#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_SHIFT 0 -#define EUR_CR_MASTER_CORE_ID_CONFIG_MULTI_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_MASK 0x00000002U -#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_SHIFT 1 -#define EUR_CR_MASTER_CORE_ID_CONFIG_BASE_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID_CONFIG_MASK 0x000000FCU -#define EUR_CR_MASTER_CORE_ID_CONFIG_SHIFT 2 -#define EUR_CR_MASTER_CORE_ID_CONFIG_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_MASK 0x00000F00U -#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_SHIFT 8 -#define EUR_CR_MASTER_CORE_ID_CONFIG_CORES_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_MASK 0x0000F000U -#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_SHIFT 12 -#define EUR_CR_MASTER_CORE_ID_CONFIG_SLC_SIGNED 0 -#define EUR_CR_MASTER_CORE_ID_ID_MASK 0xFFFF0000U -#define EUR_CR_MASTER_CORE_ID_ID_SHIFT 16 -#define EUR_CR_MASTER_CORE_ID_ID_SIGNED 0 -#define EUR_CR_MASTER_CORE_REVISION 0x4014 -#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_MASK 0x000000FFU -#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_SHIFT 0 -#define EUR_CR_MASTER_CORE_REVISION_MAINTENANCE_SIGNED 0 -#define EUR_CR_MASTER_CORE_REVISION_MINOR_MASK 0x0000FF00U -#define EUR_CR_MASTER_CORE_REVISION_MINOR_SHIFT 8 -#define EUR_CR_MASTER_CORE_REVISION_MINOR_SIGNED 0 -#define EUR_CR_MASTER_CORE_REVISION_MAJOR_MASK 0x00FF0000U -#define EUR_CR_MASTER_CORE_REVISION_MAJOR_SHIFT 16 -#define EUR_CR_MASTER_CORE_REVISION_MAJOR_SIGNED 0 -#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_MASK 0xFF000000U -#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_SHIFT 24 -#define EUR_CR_MASTER_CORE_REVISION_DESIGNER_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET 0x4080 -#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_MASK(i) (0x00000001U << (0 + ((i) * 1))) -#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_SHIFT(i) (0 + ((i) * 1)) -#define EUR_CR_MASTER_SOFT_RESET_CORE_RESET_REGNUM(i) 0x4080 -#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_MASK 0x00000010U -#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_SHIFT 4 -#define EUR_CR_MASTER_SOFT_RESET_IPF_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_MASK 0x00000020U -#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_SHIFT 5 -#define EUR_CR_MASTER_SOFT_RESET_DPM_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_MASK 0x00000040U -#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_SHIFT 6 -#define EUR_CR_MASTER_SOFT_RESET_VDM_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_MASK 0x00000080U -#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_SHIFT 7 -#define EUR_CR_MASTER_SOFT_RESET_SLC_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_MASK 0x00000100U -#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_SHIFT 8 -#define EUR_CR_MASTER_SOFT_RESET_BIF_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_MASK 0x00000200U -#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_SHIFT 9 -#define EUR_CR_MASTER_SOFT_RESET_MCI_RESET_SIGNED 0 -#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_MASK 0x00000400U -#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_SHIFT 10 -#define EUR_CR_MASTER_SOFT_RESET_PTLA_RESET_SIGNED 0 - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/buffer_manager.h b/drivers/staging/cdv/pvr/services4/srvkm/include/buffer_manager.h deleted file mode 100644 index bba12a7..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/buffer_manager.h +++ /dev/null @@ -1,219 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _BUFFER_MANAGER_H_ -#define _BUFFER_MANAGER_H_ - -#include "img_types.h" -#include "ra.h" -#include "perproc.h" - -#if defined(__cplusplus) -extern "C"{ -#endif - -typedef struct _BM_HEAP_ BM_HEAP; - -struct _BM_MAPPING_ -{ - enum - { - hm_wrapped = 1, - hm_wrapped_scatter, - hm_wrapped_virtaddr, - hm_wrapped_scatter_virtaddr, - hm_env, - hm_contiguous - } eCpuMemoryOrigin; - - BM_HEAP *pBMHeap; - RA_ARENA *pArena; - - IMG_CPU_VIRTADDR CpuVAddr; - IMG_CPU_PHYADDR CpuPAddr; - IMG_DEV_VIRTADDR DevVAddr; - IMG_SYS_PHYADDR *psSysAddr; - IMG_SIZE_T uSize; - IMG_HANDLE hOSMemHandle; - IMG_UINT32 ui32Flags; -}; - -typedef struct _BM_BUF_ -{ - IMG_CPU_VIRTADDR *CpuVAddr; - IMG_VOID *hOSMemHandle; - IMG_CPU_PHYADDR CpuPAddr; - IMG_DEV_VIRTADDR DevVAddr; - - BM_MAPPING *pMapping; - IMG_UINT32 ui32RefCount; - IMG_UINT32 ui32ExportCount; -} BM_BUF; - -struct _BM_HEAP_ -{ - IMG_UINT32 ui32Attribs; - BM_CONTEXT *pBMContext; - RA_ARENA *pImportArena; - RA_ARENA *pLocalDevMemArena; - RA_ARENA *pVMArena; - DEV_ARENA_DESCRIPTOR sDevArena; - MMU_HEAP *pMMUHeap; - PDUMP_MMU_ATTRIB *psMMUAttrib; - - struct _BM_HEAP_ *psNext; - struct _BM_HEAP_ **ppsThis; -}; - -struct _BM_CONTEXT_ -{ - MMU_CONTEXT *psMMUContext; - - - BM_HEAP *psBMHeap; - - - BM_HEAP *psBMSharedHeap; - - PVRSRV_DEVICE_NODE *psDeviceNode; - - - HASH_TABLE *pBufferHash; - - - IMG_HANDLE hResItem; - - IMG_UINT32 ui32RefCount; - - - - struct _BM_CONTEXT_ *psNext; - struct _BM_CONTEXT_ **ppsThis; -}; - - - -typedef IMG_VOID *BM_HANDLE; - -#define BP_POOL_MASK 0x7 - -#define BP_CONTIGUOUS (1 << 3) -#define BP_PARAMBUFFER (1 << 4) - -#define BM_MAX_DEVMEM_ARENAS 2 - -IMG_HANDLE -BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_DEV_PHYADDR *psPDDevPAddr, - PVRSRV_PER_PROCESS_DATA *psPerProc, - IMG_BOOL *pbCreated); - - -PVRSRV_ERROR -BM_DestroyContext (IMG_HANDLE hBMContext, - IMG_BOOL *pbCreated); - - -IMG_HANDLE -BM_CreateHeap (IMG_HANDLE hBMContext, - DEVICE_MEMORY_HEAP_INFO *psDevMemHeapInfo); - -IMG_VOID -BM_DestroyHeap (IMG_HANDLE hDevMemHeap); - - -IMG_BOOL -BM_Reinitialise (PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_BOOL -BM_Alloc (IMG_HANDLE hDevMemHeap, - IMG_DEV_VIRTADDR *psDevVAddr, - IMG_SIZE_T uSize, - IMG_UINT32 *pui32Flags, - IMG_UINT32 uDevVAddrAlignment, - BM_HANDLE *phBuf); - -IMG_BOOL -BM_Wrap ( IMG_HANDLE hDevMemHeap, - IMG_SIZE_T ui32Size, - IMG_SIZE_T ui32Offset, - IMG_BOOL bPhysContig, - IMG_SYS_PHYADDR *psSysAddr, - IMG_VOID *pvCPUVAddr, - IMG_UINT32 *pui32Flags, - BM_HANDLE *phBuf); - -IMG_VOID -BM_Free (BM_HANDLE hBuf, - IMG_UINT32 ui32Flags); - - -IMG_CPU_VIRTADDR -BM_HandleToCpuVaddr (BM_HANDLE hBuf); - -IMG_DEV_VIRTADDR -BM_HandleToDevVaddr (BM_HANDLE hBuf); - -IMG_SYS_PHYADDR -BM_HandleToSysPaddr (BM_HANDLE hBuf); - -IMG_HANDLE -BM_HandleToOSMemHandle (BM_HANDLE hBuf); - -IMG_VOID BM_GetPhysPageAddr(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_DEV_VIRTADDR sDevVPageAddr, - IMG_DEV_PHYADDR *psDevPAddr); - -MMU_CONTEXT* BM_GetMMUContext(IMG_HANDLE hDevMemHeap); - -MMU_CONTEXT* BM_GetMMUContextFromMemContext(IMG_HANDLE hDevMemContext); - -IMG_HANDLE BM_GetMMUHeap(IMG_HANDLE hDevMemHeap); - -PVRSRV_DEVICE_NODE* BM_GetDeviceNode(IMG_HANDLE hDevMemContext); - - -IMG_HANDLE BM_GetMappingHandle(PVRSRV_KERNEL_MEM_INFO *psMemInfo); - -IMG_VOID BM_Export(BM_HANDLE hBuf); - -IMG_VOID BM_FreeExport(BM_HANDLE hBuf, IMG_UINT32 ui32Flags); - -PVRSRV_ERROR BM_XProcWorkaroundSetShareIndex(IMG_UINT32 ui32Index); -PVRSRV_ERROR BM_XProcWorkaroundUnsetShareIndex(IMG_UINT32 ui32Index); -PVRSRV_ERROR BM_XProcWorkaroundFindNewBufferAndSetShareIndex(IMG_UINT32 *pui32Index); - -PVRSRV_ERROR BM_XProcWorkaroundShareInit(void); -void BM_XProcWorkaroundShareDestroy(void); - -IMG_UINT32 BM_XProcWorkaroundGetRefCount(IMG_UINT32 ui32Index); - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/device.h b/drivers/staging/cdv/pvr/services4/srvkm/include/device.h deleted file mode 100644 index 9df2c73..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/device.h +++ /dev/null @@ -1,323 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __DEVICE_H__ -#define __DEVICE_H__ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include "ra.h" -#include "resman.h" - -typedef struct _BM_CONTEXT_ BM_CONTEXT; - -typedef struct _MMU_HEAP_ MMU_HEAP; -typedef struct _MMU_CONTEXT_ MMU_CONTEXT; - -#define PVRSRV_BACKINGSTORE_SYSMEM_CONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+0)) -#define PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+1)) -#define PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+2)) -#define PVRSRV_BACKINGSTORE_LOCALMEM_NONCONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+3)) - -typedef IMG_UINT32 DEVICE_MEMORY_HEAP_TYPE; -#define DEVICE_MEMORY_HEAP_PERCONTEXT 0 -#define DEVICE_MEMORY_HEAP_KERNEL 1 -#define DEVICE_MEMORY_HEAP_SHARED 2 -#define DEVICE_MEMORY_HEAP_SHARED_EXPORTED 3 - -#define PVRSRV_DEVICE_NODE_FLAGS_PORT80DISPLAY 1 -#define PVRSRV_DEVICE_NODE_FLAGS_MMU_OPT_INV 2 - -typedef struct _DEVICE_MEMORY_HEAP_INFO_ -{ - - IMG_UINT32 ui32HeapID; - - - IMG_CHAR *pszName; - - - IMG_CHAR *pszBSName; - - - IMG_DEV_VIRTADDR sDevVAddrBase; - - - IMG_UINT32 ui32HeapSize; - - - IMG_UINT32 ui32Attribs; - - - DEVICE_MEMORY_HEAP_TYPE DevMemHeapType; - - - IMG_HANDLE hDevMemHeap; - - - RA_ARENA *psLocalDevMemArena; - - - IMG_UINT32 ui32DataPageSize; - - IMG_UINT32 ui32XTileStride; - -} DEVICE_MEMORY_HEAP_INFO; - -typedef struct _DEVICE_MEMORY_INFO_ -{ - - IMG_UINT32 ui32AddressSpaceSizeLog2; - - - - - IMG_UINT32 ui32Flags; - - - IMG_UINT32 ui32HeapCount; - - - IMG_UINT32 ui32SyncHeapID; - - - IMG_UINT32 ui32MappingHeapID; - - - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - - - BM_CONTEXT *pBMKernelContext; - - - BM_CONTEXT *pBMContext; - -} DEVICE_MEMORY_INFO; - - -typedef struct DEV_ARENA_DESCRIPTOR_TAG -{ - IMG_UINT32 ui32HeapID; - - IMG_CHAR *pszName; - - IMG_DEV_VIRTADDR BaseDevVAddr; - - IMG_UINT32 ui32Size; - - DEVICE_MEMORY_HEAP_TYPE DevMemHeapType; - - - IMG_UINT32 ui32DataPageSize; - - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeapInfo; - -} DEV_ARENA_DESCRIPTOR; - - -typedef struct _PDUMP_MMU_ATTRIB_ -{ - PVRSRV_DEVICE_IDENTIFIER sDevId; - - IMG_CHAR *pszPDRegRegion; - - - IMG_UINT32 ui32DataPageMask; - - - IMG_UINT32 ui32PTEValid; - IMG_UINT32 ui32PTSize; - IMG_UINT32 ui32PTEAlignShift; - - - IMG_UINT32 ui32PDEMask; - IMG_UINT32 ui32PDEAlignShift; - -} PDUMP_MMU_ATTRIB; - -typedef struct _SYS_DATA_TAG_ *PSYS_DATA; - -typedef struct _PVRSRV_DEVICE_NODE_ -{ - PVRSRV_DEVICE_IDENTIFIER sDevId; - IMG_UINT32 ui32RefCount; - - - - - PVRSRV_ERROR (*pfnInitDevice) (IMG_VOID*); - - PVRSRV_ERROR (*pfnDeInitDevice) (IMG_VOID*); - - - PVRSRV_ERROR (*pfnInitDeviceCompatCheck) (struct _PVRSRV_DEVICE_NODE_*); - - - PVRSRV_ERROR (*pfnMMUInitialise)(struct _PVRSRV_DEVICE_NODE_*, MMU_CONTEXT**, IMG_DEV_PHYADDR*); - IMG_VOID (*pfnMMUFinalise)(MMU_CONTEXT*); - IMG_VOID (*pfnMMUInsertHeap)(MMU_CONTEXT*, MMU_HEAP*); - MMU_HEAP* (*pfnMMUCreate)(MMU_CONTEXT*,DEV_ARENA_DESCRIPTOR*,RA_ARENA**,PDUMP_MMU_ATTRIB **ppsMMUAttrib); - IMG_VOID (*pfnMMUDelete)(MMU_HEAP*); - IMG_BOOL (*pfnMMUAlloc)(MMU_HEAP*pMMU, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - IMG_UINT32 uFlags, - IMG_UINT32 uDevVAddrAlignment, - IMG_DEV_VIRTADDR *pDevVAddr); - IMG_VOID (*pfnMMUFree)(MMU_HEAP*,IMG_DEV_VIRTADDR,IMG_UINT32); - IMG_VOID (*pfnMMUEnable)(MMU_HEAP*); - IMG_VOID (*pfnMMUDisable)(MMU_HEAP*); - IMG_VOID (*pfnMMUMapPages)(MMU_HEAP *pMMU, - IMG_DEV_VIRTADDR devVAddr, - IMG_SYS_PHYADDR SysPAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); - IMG_VOID (*pfnMMUMapShadow)(MMU_HEAP *pMMU, - IMG_DEV_VIRTADDR MapBaseDevVAddr, - IMG_SIZE_T uSize, - IMG_CPU_VIRTADDR CpuVAddr, - IMG_HANDLE hOSMemHandle, - IMG_DEV_VIRTADDR *pDevVAddr, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); - IMG_VOID (*pfnMMUUnmapPages)(MMU_HEAP *pMMU, - IMG_DEV_VIRTADDR dev_vaddr, - IMG_UINT32 ui32PageCount, - IMG_HANDLE hUniqueTag); - - IMG_VOID (*pfnMMUMapScatter)(MMU_HEAP *pMMU, - IMG_DEV_VIRTADDR DevVAddr, - IMG_SYS_PHYADDR *psSysAddr, - IMG_SIZE_T uSize, - IMG_UINT32 ui32MemFlags, - IMG_HANDLE hUniqueTag); -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - IMG_BOOL (*pfnMMUIsHeapShared)(MMU_HEAP *); -#endif - IMG_DEV_PHYADDR (*pfnMMUGetPhysPageAddr)(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr); - IMG_DEV_PHYADDR (*pfnMMUGetPDDevPAddr)(MMU_CONTEXT *pMMUContext); - IMG_VOID (*pfnMMUGetCacheFlushRange)(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask); - IMG_VOID (*pfnMMUGetPDPhysAddr)(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); - - - PVRSRV_ERROR (*pfnAllocMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32TilingStride, - IMG_UINT32 *pui32RangeIndex); - PVRSRV_ERROR (*pfnFreeMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode, - IMG_UINT32 ui32RangeIndex); - - - IMG_BOOL (*pfnDeviceISR)(IMG_VOID*); - - IMG_VOID *pvISRData; - - IMG_UINT32 ui32SOCInterruptBit; - - IMG_VOID (*pfnDeviceMISR)(IMG_VOID*); - - - IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); - - IMG_BOOL bReProcessDeviceCommandComplete; - - IMG_VOID (*pfnCacheInvalidate)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); - - - DEVICE_MEMORY_INFO sDevMemoryInfo; - - - IMG_VOID *pvDevice; - IMG_UINT32 ui32pvDeviceSize; - - - PRESMAN_CONTEXT hResManContext; - - - PSYS_DATA psSysData; - - - RA_ARENA *psLocalDevMemArena; - - IMG_UINT32 ui32Flags; - - struct _PVRSRV_DEVICE_NODE_ *psNext; - struct _PVRSRV_DEVICE_NODE_ **ppsThis; - -#if defined(PDUMP) - - PVRSRV_ERROR (*pfnPDumpInitDevice)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); - - IMG_UINT32 (*pfnMMUGetContextID)(IMG_HANDLE hDevMemContext); -#endif -} PVRSRV_DEVICE_NODE; - -PVRSRV_ERROR IMG_CALLCONV PVRSRVRegisterDevice(PSYS_DATA psSysData, - PVRSRV_ERROR (*pfnRegisterDevice)(PVRSRV_DEVICE_NODE*), - IMG_UINT32 ui32SOCInterruptBit, - IMG_UINT32 *pui32DeviceIndex ); - -PVRSRV_ERROR IMG_CALLCONV PVRSRVInitialiseDevice(IMG_UINT32 ui32DevIndex); -PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccesful); - -PVRSRV_ERROR IMG_CALLCONV PVRSRVDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode); - -PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex); - -#if !defined(USE_CODE) - -IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PollForValueKM(volatile IMG_UINT32* pui32LinMemAddr, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Timeoutus, - IMG_UINT32 ui32PollPeriodus, - IMG_BOOL bAllowPreemption); - -#endif - - -#if defined (USING_ISR_INTERRUPTS) -PVRSRV_ERROR IMG_CALLCONV PollForInterruptKM(IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Waitus, - IMG_UINT32 ui32Tries); -#endif - -PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData); -IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData); -IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode); -IMG_BOOL IMG_CALLCONV PVRSRVSystemLISR(IMG_VOID *pvSysData); -IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData); - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/handle.h b/drivers/staging/cdv/pvr/services4/srvkm/include/handle.h deleted file mode 100644 index 536fa56..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/handle.h +++ /dev/null @@ -1,404 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __HANDLE_H__ -#define __HANDLE_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "img_types.h" -#include "hash.h" -#include "resman.h" - -typedef enum -{ - PVRSRV_HANDLE_TYPE_NONE = 0, - PVRSRV_HANDLE_TYPE_PERPROC_DATA, - PVRSRV_HANDLE_TYPE_DEV_NODE, - PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT, - PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP, - PVRSRV_HANDLE_TYPE_MEM_INFO, - PVRSRV_HANDLE_TYPE_SYNC_INFO, - PVRSRV_HANDLE_TYPE_DISP_INFO, - PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN, - PVRSRV_HANDLE_TYPE_BUF_INFO, - PVRSRV_HANDLE_TYPE_DISP_BUFFER, - PVRSRV_HANDLE_TYPE_BUF_BUFFER, - PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT, - PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT, - PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT, - PVRSRV_HANDLE_TYPE_SHARED_PB_DESC, - PVRSRV_HANDLE_TYPE_MEM_INFO_REF, - PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO, - PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT, - PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT, - PVRSRV_HANDLE_TYPE_MMAP_INFO, - PVRSRV_HANDLE_TYPE_SOC_TIMER, - PVRSRV_HANDLE_TYPE_SYNC_INFO_MOD_OBJ, - PVRSRV_HANDLE_TYPE_RESITEM_INFO -} PVRSRV_HANDLE_TYPE; - -typedef enum -{ - - PVRSRV_HANDLE_ALLOC_FLAG_NONE = 0, - - PVRSRV_HANDLE_ALLOC_FLAG_SHARED = 0x01, - - PVRSRV_HANDLE_ALLOC_FLAG_MULTI = 0x02, - - PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE = 0x04 -} PVRSRV_HANDLE_ALLOC_FLAG; - -struct _PVRSRV_HANDLE_BASE_; -typedef struct _PVRSRV_HANDLE_BASE_ PVRSRV_HANDLE_BASE; - -#if defined (PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) -extern PVRSRV_HANDLE_BASE *gpsKernelHandleBase; - -#define KERNEL_HANDLE_BASE (gpsKernelHandleBase) - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag); - -PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent); - -PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_SID hHandle); - -PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType, IMG_SID hAncestor); - -PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phParent, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType); -#else -PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag); - -PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent); - -PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle); - -PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor); - -PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); - -PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType); -#endif - -PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize); - -PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase); - -IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase); - -PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle); - -IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase); - -PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase); - -PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase); - -PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase); - -PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase); - -PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID); - -PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID); - -#else - -#define KERNEL_HANDLE_BASE IMG_NULL - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVAllocHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) -{ - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(eFlag); - PVR_UNREFERENCED_PARAMETER(psBase); - - *phHandle = pvData; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVAllocSubHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) -{ - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(eFlag); - PVR_UNREFERENCED_PARAMETER(hParent); - PVR_UNREFERENCED_PARAMETER(psBase); - - *phHandle = pvData; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVFindHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) -{ - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(psBase); - - *phHandle = pvData; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVLookupHandleAnyType) -#endif -static INLINE -PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - *peType = PVRSRV_HANDLE_TYPE_NONE; - - *ppvData = hHandle; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVLookupHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - PVR_UNREFERENCED_PARAMETER(eType); - - *ppvData = hHandle; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVLookupSubHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(hAncestor); - - *ppvData = hHandle; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVGetParentHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(hHandle); - - *phParent = IMG_NULL; - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVLookupAndReleaseHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -{ - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(psBase); - - *ppvData = hHandle; - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVReleaseHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) -{ - PVR_UNREFERENCED_PARAMETER(hHandle); - PVR_UNREFERENCED_PARAMETER(eType); - PVR_UNREFERENCED_PARAMETER(psBase); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVNewHandleBatch) -#endif -static INLINE -PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - PVR_UNREFERENCED_PARAMETER(ui32BatchSize); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVCommitHandleBatch) -#endif -static INLINE -PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVReleaseHandleBatch) -#endif -static INLINE -IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVSetMaxHandle) -#endif -static INLINE -PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - PVR_UNREFERENCED_PARAMETER(ui32MaxHandle); - - return PVRSRV_ERROR_NOT_SUPPORTED; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVGetMaxHandle) -#endif -static INLINE -IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - return 0; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVEnableHandlePurging) -#endif -static INLINE -PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVPurgeHandles) -#endif -static INLINE -PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVAllocHandleBase) -#endif -static INLINE -PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase) -{ - *ppsBase = IMG_NULL; - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVFreeHandleBase) -#endif -static INLINE -PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase) -{ - PVR_UNREFERENCED_PARAMETER(psBase); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVHandleInit) -#endif -static INLINE -PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) -{ - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVHandleDeInit) -#endif -static INLINE -PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID) -{ - return PVRSRV_OK; -} - -#endif - -#define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \ - (IMG_VOID)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag) - -#define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent) \ - (IMG_VOID)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, eFlag, hParent) - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/hash.h b/drivers/staging/cdv/pvr/services4/srvkm/include/hash.h deleted file mode 100644 index 3662089..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/hash.h +++ /dev/null @@ -1,80 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _HASH_H_ -#define _HASH_H_ - -#include "img_types.h" -#include "osfunc.h" - -#if defined (__cplusplus) -extern "C" { -#endif - -typedef IMG_UINT32 HASH_FUNC(IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen); -typedef IMG_BOOL HASH_KEY_COMP(IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2); - -typedef struct _HASH_TABLE_ HASH_TABLE; - -typedef PVRSRV_ERROR (*HASH_pfnCallback) ( - IMG_UINTPTR_T k, - IMG_UINTPTR_T v -); - -IMG_UINT32 HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen); - -IMG_BOOL HASH_Key_Comp_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2); - -HASH_TABLE * HASH_Create_Extended (IMG_UINT32 uInitialLen, IMG_SIZE_T uKeySize, HASH_FUNC *pfnHashFunc, HASH_KEY_COMP *pfnKeyComp); - -HASH_TABLE * HASH_Create (IMG_UINT32 uInitialLen); - -IMG_VOID HASH_Delete (HASH_TABLE *pHash); - -IMG_BOOL HASH_Insert_Extended (HASH_TABLE *pHash, IMG_VOID *pKey, IMG_UINTPTR_T v); - -IMG_BOOL HASH_Insert (HASH_TABLE *pHash, IMG_UINTPTR_T k, IMG_UINTPTR_T v); - -IMG_UINTPTR_T HASH_Remove_Extended(HASH_TABLE *pHash, IMG_VOID *pKey); - -IMG_UINTPTR_T HASH_Remove (HASH_TABLE *pHash, IMG_UINTPTR_T k); - -IMG_UINTPTR_T HASH_Retrieve_Extended (HASH_TABLE *pHash, IMG_VOID *pKey); - -IMG_UINTPTR_T HASH_Retrieve (HASH_TABLE *pHash, IMG_UINTPTR_T k); - -PVRSRV_ERROR HASH_Iterate(HASH_TABLE *pHash, HASH_pfnCallback pfnCallback); - -#ifdef HASH_TRACE -IMG_VOID HASH_Dump (HASH_TABLE *pHash); -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/lists.h b/drivers/staging/cdv/pvr/services4/srvkm/include/lists.h deleted file mode 100644 index a02307a..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/lists.h +++ /dev/null @@ -1,244 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __LISTS_UTILS__ -#define __LISTS_UTILS__ - -#include -#include "img_types.h" - -#define DECLARE_LIST_FOR_EACH(TYPE) \ -IMG_VOID List_##TYPE##_ForEach(TYPE *psHead, IMG_VOID(*pfnCallBack)(TYPE* psNode)) - -#define IMPLEMENT_LIST_FOR_EACH(TYPE) \ -IMG_VOID List_##TYPE##_ForEach(TYPE *psHead, IMG_VOID(*pfnCallBack)(TYPE* psNode))\ -{\ - while(psHead)\ - {\ - pfnCallBack(psHead);\ - psHead = psHead->psNext;\ - }\ -} - - -#define DECLARE_LIST_FOR_EACH_VA(TYPE) \ -IMG_VOID List_##TYPE##_ForEach_va(TYPE *psHead, IMG_VOID(*pfnCallBack)(TYPE* psNode, va_list va), ...) - -#define IMPLEMENT_LIST_FOR_EACH_VA(TYPE) \ -IMG_VOID List_##TYPE##_ForEach_va(TYPE *psHead, IMG_VOID(*pfnCallBack)(TYPE* psNode, va_list va), ...) \ -{\ - va_list ap;\ - while(psHead)\ - {\ - va_start(ap, pfnCallBack);\ - pfnCallBack(psHead, ap);\ - psHead = psHead->psNext;\ - va_end(ap);\ - }\ -} - - -#define DECLARE_LIST_ANY(TYPE) \ -IMG_VOID* List_##TYPE##_Any(TYPE *psHead, IMG_VOID* (*pfnCallBack)(TYPE* psNode)) - -#define IMPLEMENT_LIST_ANY(TYPE) \ -IMG_VOID* List_##TYPE##_Any(TYPE *psHead, IMG_VOID* (*pfnCallBack)(TYPE* psNode))\ -{ \ - IMG_VOID *pResult;\ - TYPE *psNextNode;\ - pResult = IMG_NULL;\ - psNextNode = psHead;\ - while(psHead && !pResult)\ - {\ - psNextNode = psNextNode->psNext;\ - pResult = pfnCallBack(psHead);\ - psHead = psNextNode;\ - }\ - return pResult;\ -} - - -#define DECLARE_LIST_ANY_VA(TYPE) \ -IMG_VOID* List_##TYPE##_Any_va(TYPE *psHead, IMG_VOID*(*pfnCallBack)(TYPE* psNode, va_list va), ...) - -#define IMPLEMENT_LIST_ANY_VA(TYPE) \ -IMG_VOID* List_##TYPE##_Any_va(TYPE *psHead, IMG_VOID*(*pfnCallBack)(TYPE* psNode, va_list va), ...)\ -{\ - va_list ap;\ - TYPE *psNextNode;\ - IMG_VOID* pResult = IMG_NULL;\ - while(psHead && !pResult)\ - {\ - psNextNode = psHead->psNext;\ - va_start(ap, pfnCallBack);\ - pResult = pfnCallBack(psHead, ap);\ - va_end(ap);\ - psHead = psNextNode;\ - }\ - return pResult;\ -} - -#define DECLARE_LIST_ANY_2(TYPE, RTYPE, CONTINUE) \ -RTYPE List_##TYPE##_##RTYPE##_Any(TYPE *psHead, RTYPE (*pfnCallBack)(TYPE* psNode)) - -#define IMPLEMENT_LIST_ANY_2(TYPE, RTYPE, CONTINUE) \ -RTYPE List_##TYPE##_##RTYPE##_Any(TYPE *psHead, RTYPE (*pfnCallBack)(TYPE* psNode))\ -{ \ - RTYPE result;\ - TYPE *psNextNode;\ - result = CONTINUE;\ - psNextNode = psHead;\ - while(psHead && result == CONTINUE)\ - {\ - psNextNode = psNextNode->psNext;\ - result = pfnCallBack(psHead);\ - psHead = psNextNode;\ - }\ - return result;\ -} - - -#define DECLARE_LIST_ANY_VA_2(TYPE, RTYPE, CONTINUE) \ -RTYPE List_##TYPE##_##RTYPE##_Any_va(TYPE *psHead, RTYPE(*pfnCallBack)(TYPE* psNode, va_list va), ...) - -#define IMPLEMENT_LIST_ANY_VA_2(TYPE, RTYPE, CONTINUE) \ -RTYPE List_##TYPE##_##RTYPE##_Any_va(TYPE *psHead, RTYPE(*pfnCallBack)(TYPE* psNode, va_list va), ...)\ -{\ - va_list ap;\ - TYPE *psNextNode;\ - RTYPE result = CONTINUE;\ - while(psHead && result == CONTINUE)\ - {\ - psNextNode = psHead->psNext;\ - va_start(ap, pfnCallBack);\ - result = pfnCallBack(psHead, ap);\ - va_end(ap);\ - psHead = psNextNode;\ - }\ - return result;\ -} - - -#define DECLARE_LIST_REMOVE(TYPE) \ -IMG_VOID List_##TYPE##_Remove(TYPE *psNode) - -#define IMPLEMENT_LIST_REMOVE(TYPE) \ -IMG_VOID List_##TYPE##_Remove(TYPE *psNode)\ -{\ - (*psNode->ppsThis)=psNode->psNext;\ - if(psNode->psNext)\ - {\ - psNode->psNext->ppsThis = psNode->ppsThis;\ - }\ -} - -#define DECLARE_LIST_INSERT(TYPE) \ -IMG_VOID List_##TYPE##_Insert(TYPE **ppsHead, TYPE *psNewNode) - -#define IMPLEMENT_LIST_INSERT(TYPE) \ -IMG_VOID List_##TYPE##_Insert(TYPE **ppsHead, TYPE *psNewNode)\ -{\ - psNewNode->ppsThis = ppsHead;\ - psNewNode->psNext = *ppsHead;\ - *ppsHead = psNewNode;\ - if(psNewNode->psNext)\ - {\ - psNewNode->psNext->ppsThis = &(psNewNode->psNext);\ - }\ -} - -#define DECLARE_LIST_REVERSE(TYPE) \ -IMG_VOID List_##TYPE##_Reverse(TYPE **ppsHead) - -#define IMPLEMENT_LIST_REVERSE(TYPE) \ -IMG_VOID List_##TYPE##_Reverse(TYPE **ppsHead)\ -{\ - TYPE *psTmpNode1; \ - TYPE *psTmpNode2; \ - TYPE *psCurNode; \ - psTmpNode1 = IMG_NULL; \ - psCurNode = *ppsHead; \ - while(psCurNode) { \ - psTmpNode2 = psCurNode->psNext; \ - psCurNode->psNext = psTmpNode1; \ - psTmpNode1 = psCurNode; \ - psCurNode = psTmpNode2; \ - if(psCurNode) \ - { \ - psTmpNode1->ppsThis = &(psCurNode->psNext); \ - } \ - else \ - { \ - psTmpNode1->ppsThis = ppsHead; \ - } \ - } \ - *ppsHead = psTmpNode1; \ -} - -#define IS_LAST_ELEMENT(x) ((x)->psNext == IMG_NULL) - -#include "services_headers.h" - -DECLARE_LIST_ANY_VA(BM_HEAP); -DECLARE_LIST_ANY_2(BM_HEAP, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_ANY_VA_2(BM_HEAP, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_FOR_EACH_VA(BM_HEAP); -DECLARE_LIST_REMOVE(BM_HEAP); -DECLARE_LIST_INSERT(BM_HEAP); - -DECLARE_LIST_ANY_VA(BM_CONTEXT); -DECLARE_LIST_ANY_VA_2(BM_CONTEXT, IMG_HANDLE, IMG_NULL); -DECLARE_LIST_ANY_VA_2(BM_CONTEXT, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_FOR_EACH(BM_CONTEXT); -DECLARE_LIST_REMOVE(BM_CONTEXT); -DECLARE_LIST_INSERT(BM_CONTEXT); - -DECLARE_LIST_ANY_2(PVRSRV_DEVICE_NODE, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_ANY_VA(PVRSRV_DEVICE_NODE); -DECLARE_LIST_ANY_VA_2(PVRSRV_DEVICE_NODE, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_FOR_EACH(PVRSRV_DEVICE_NODE); -DECLARE_LIST_FOR_EACH_VA(PVRSRV_DEVICE_NODE); -DECLARE_LIST_INSERT(PVRSRV_DEVICE_NODE); -DECLARE_LIST_REMOVE(PVRSRV_DEVICE_NODE); - -DECLARE_LIST_ANY_VA(PVRSRV_POWER_DEV); -DECLARE_LIST_ANY_VA_2(PVRSRV_POWER_DEV, PVRSRV_ERROR, PVRSRV_OK); -DECLARE_LIST_INSERT(PVRSRV_POWER_DEV); -DECLARE_LIST_REMOVE(PVRSRV_POWER_DEV); - -#undef DECLARE_LIST_ANY_2 -#undef DECLARE_LIST_ANY_VA -#undef DECLARE_LIST_ANY_VA_2 -#undef DECLARE_LIST_FOR_EACH -#undef DECLARE_LIST_FOR_EACH_VA -#undef DECLARE_LIST_INSERT -#undef DECLARE_LIST_REMOVE - -IMG_VOID* MatchDeviceKM_AnyVaCb(PVRSRV_DEVICE_NODE* psDeviceNode, va_list va); -IMG_VOID* MatchPowerDeviceIndex_AnyVaCb(PVRSRV_POWER_DEV *psPowerDev, va_list va); - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/metrics.h b/drivers/staging/cdv/pvr/services4/srvkm/include/metrics.h deleted file mode 100644 index 69e1b3d..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/metrics.h +++ /dev/null @@ -1,130 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _METRICS_ -#define _METRICS_ - - -#if defined (__cplusplus) -extern "C" { -#endif - - -#if defined(DEBUG) || defined(TIMING) - - -typedef struct -{ - IMG_UINT32 ui32Start; - IMG_UINT32 ui32Stop; - IMG_UINT32 ui32Total; - IMG_UINT32 ui32Count; -} Temporal_Data; - -extern Temporal_Data asTimers[]; - -extern IMG_UINT32 PVRSRVTimeNow(IMG_VOID); -extern IMG_VOID PVRSRVSetupMetricTimers(IMG_VOID *pvDevInfo); -extern IMG_VOID PVRSRVOutputMetricTotals(IMG_VOID); - - -#define PVRSRV_TIMER_DUMMY 0 - -#define PVRSRV_TIMER_EXAMPLE_1 1 -#define PVRSRV_TIMER_EXAMPLE_2 2 - - -#define PVRSRV_NUM_TIMERS (PVRSRV_TIMER_EXAMPLE_2 + 1) - -#define PVRSRV_TIME_START(X) { \ - asTimers[X].ui32Count += 1; \ - asTimers[X].ui32Count |= 0x80000000L; \ - asTimers[X].ui32Start = PVRSRVTimeNow(); \ - asTimers[X].ui32Stop = 0; \ - } - -#define PVRSRV_TIME_SUSPEND(X) { \ - asTimers[X].ui32Stop += PVRSRVTimeNow() - asTimers[X].ui32Start; \ - } - -#define PVRSRV_TIME_RESUME(X) { \ - asTimers[X].ui32Start = PVRSRVTimeNow(); \ - } - -#define PVRSRV_TIME_STOP(X) { \ - asTimers[X].ui32Stop += PVRSRVTimeNow() - asTimers[X].ui32Start; \ - asTimers[X].ui32Total += asTimers[X].ui32Stop; \ - asTimers[X].ui32Count &= 0x7FFFFFFFL; \ - } - -#define PVRSRV_TIME_RESET(X) { \ - asTimers[X].ui32Start = 0; \ - asTimers[X].ui32Stop = 0; \ - asTimers[X].ui32Total = 0; \ - asTimers[X].ui32Count = 0; \ - } - - -#if defined(__sh__) - -#define TST_REG ((volatile IMG_UINT8 *) (psDevInfo->pvSOCRegsBaseKM)) - -#define TCOR_2 ((volatile IMG_UINT *) (psDevInfo->pvSOCRegsBaseKM+28)) -#define TCNT_2 ((volatile IMG_UINT *) (psDevInfo->pvSOCRegsBaseKM+32)) -#define TCR_2 ((volatile IMG_UINT16 *)(psDevInfo->pvSOCRegsBaseKM+36)) - -#define TIMER_DIVISOR 4 - -#endif - - - - - -#else - - - -#define PVRSRV_TIME_START(X) -#define PVRSRV_TIME_SUSPEND(X) -#define PVRSRV_TIME_RESUME(X) -#define PVRSRV_TIME_STOP(X) -#define PVRSRV_TIME_RESET(X) - -#define PVRSRVSetupMetricTimers(X) -#define PVRSRVOutputMetricTotals() - - - -#endif - -#if defined(__cplusplus) -} -#endif - - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/osfunc.h b/drivers/staging/cdv/pvr/services4/srvkm/include/osfunc.h deleted file mode 100644 index b76cefd..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/osfunc.h +++ /dev/null @@ -1,606 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifdef DEBUG_RELEASE_BUILD -#pragma optimize( "", off ) -#define DEBUG 1 -#endif - -#ifndef __OSFUNC_H__ -#define __OSFUNC_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#if defined(__linux__) && defined(__KERNEL__) -#include -#include -#include -#if defined(__arm__) -#include -#endif -#endif - - - - #define PVRSRV_PAGEABLE_SELECT PVRSRV_OS_PAGEABLE_HEAP - -#define KERNEL_ID 0xffffffffL -#define POWER_MANAGER_ID 0xfffffffeL -#define ISR_ID 0xfffffffdL -#define TIMER_ID 0xfffffffcL - - -#define HOST_PAGESIZE OSGetPageSize -#define HOST_PAGEMASK (HOST_PAGESIZE()-1) -#define HOST_PAGEALIGN(addr) (((addr) + HOST_PAGEMASK) & ~HOST_PAGEMASK) - -#define PVRSRV_OS_HEAP_MASK 0xf -#define PVRSRV_OS_PAGEABLE_HEAP 0x1 -#define PVRSRV_OS_NON_PAGEABLE_HEAP 0x2 - - -IMG_UINT32 OSClockus(IMG_VOID); -IMG_SIZE_T OSGetPageSize(IMG_VOID); -PVRSRV_ERROR OSInstallDeviceLISR(IMG_VOID *pvSysData, - IMG_UINT32 ui32Irq, - IMG_CHAR *pszISRName, - IMG_VOID *pvDeviceNode); -PVRSRV_ERROR OSUninstallDeviceLISR(IMG_VOID *pvSysData); -PVRSRV_ERROR OSInstallSystemLISR(IMG_VOID *pvSysData, IMG_UINT32 ui32Irq); -PVRSRV_ERROR OSUninstallSystemLISR(IMG_VOID *pvSysData); -PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData); -PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData); -IMG_CPU_PHYADDR OSMapLinToCPUPhys(IMG_HANDLE, IMG_VOID* pvLinAddr); -IMG_VOID OSMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_SIZE_T ui32Size); -IMG_VOID *OSMapPhysToLin(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE *phOSMemHandle); -IMG_BOOL OSUnMapPhysToLin(IMG_VOID *pvLinAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle); - -PVRSRV_ERROR OSReservePhys(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle); -PVRSRV_ERROR OSUnReservePhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle); - -#if defined(__linux__) && defined(__KERNEL__) - -IMG_VOID OSFlushCPUCacheKM(IMG_VOID); - -IMG_VOID OSCleanCPUCacheKM(IMG_VOID); - -IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length); -IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length); -IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length); - -#else - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSFlushCPUCacheKM) -#endif -static INLINE IMG_VOID OSFlushCPUCacheKM(IMG_VOID) {} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSCleanCPUCacheKM) -#endif -static INLINE IMG_VOID OSCleanCPUCacheKM(IMG_VOID) {} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSFlushCPUCacheRangeKM) -#endif -static INLINE IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); - PVR_UNREFERENCED_PARAMETER(ui32Length); - return IMG_FALSE; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSCleanCPUCacheRangeKM) -#endif -static INLINE IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); - PVR_UNREFERENCED_PARAMETER(ui32Length); - return IMG_FALSE; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSInvalidateCPUCacheRangeKM) -#endif -static INLINE IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, - IMG_VOID *pvRangeAddrStart, - IMG_UINT32 ui32Length) -{ - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); - PVR_UNREFERENCED_PARAMETER(ui32Length); - return IMG_FALSE; -} - -#endif - -#if (defined(__linux__) || defined(__QNXNTO__)) -PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, - IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandle); -PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hOSMemHandle); -#else -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSRegisterDiscontigMem) -#endif -static INLINE PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, - IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandle) -{ - PVR_UNREFERENCED_PARAMETER(pBasePAddr); - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(phOSMemHandle); - - return PVRSRV_ERROR_NOT_SUPPORTED; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSUnRegisterDiscontigMem) -#endif -static INLINE PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hOSMemHandle) -{ - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - - return PVRSRV_ERROR_NOT_SUPPORTED; -} -#endif - - -#if (defined(__linux__) || defined(__QNXNTO__)) -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSReserveDiscontigPhys) -#endif -static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle) -{ -#if defined(__linux__) || defined(__QNXNTO__) - *ppvCpuVAddr = IMG_NULL; - return OSRegisterDiscontigMem(pBasePAddr, *ppvCpuVAddr, ui32Bytes, ui32Flags, phOSMemHandle); -#else - extern IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr(IMG_SYS_PHYADDR SysPAddr); - - - return OSReservePhys(SysSysPAddrToCpuPAddr(pBasePAddr[0]), ui32Bytes, ui32Flags, ppvCpuVAddr, phOSMemHandle); -#endif -} - -static INLINE PVRSRV_ERROR OSUnReserveDiscontigPhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) -{ -#if defined(__linux__) || defined(__QNXNTO__) - OSUnRegisterDiscontigMem(pvCpuVAddr, ui32Bytes, ui32Flags, hOSMemHandle); -#endif - - return PVRSRV_OK; -} -#else - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSReserveDiscontigPhys) -#endif -static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle) -{ - PVR_UNREFERENCED_PARAMETER(pBasePAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(ppvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(phOSMemHandle); - - return PVRSRV_ERROR_NOT_SUPPORTED; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSUnReserveDiscontigPhys) -#endif -static INLINE PVRSRV_ERROR OSUnReserveDiscontigPhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) -{ - PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - - return PVRSRV_ERROR_NOT_SUPPORTED; -} -#endif - -PVRSRV_ERROR OSRegisterMem(IMG_CPU_PHYADDR BasePAddr, - IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandle); -PVRSRV_ERROR OSUnRegisterMem(IMG_VOID *pvCpuVAddr, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hOSMemHandle); - - - -#if defined(__linux__) || defined(__QNXNTO__) -PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, - IMG_UINTPTR_T ui32ByteOffset, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandleRet); -PVRSRV_ERROR OSReleaseSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Flags); -#else -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSGetSubMemHandle) -#endif -static INLINE PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, - IMG_UINTPTR_T ui32ByteOffset, - IMG_SIZE_T ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE *phOSMemHandleRet) -{ - PVR_UNREFERENCED_PARAMETER(ui32ByteOffset); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - - *phOSMemHandleRet = hOSMemHandle; - return PVRSRV_OK; -} - -static INLINE PVRSRV_ERROR OSReleaseSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Flags) -{ - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(ui32Flags); - return PVRSRV_OK; -} -#endif - -IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID); -IMG_UINTPTR_T OSGetCurrentThreadID( IMG_VOID ); -IMG_VOID OSMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size); - -PVRSRV_ERROR OSAllocPages_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_UINT32 ui32PageSize, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phPageAlloc); -PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hPageAlloc); - - -#ifdef PVRSRV_LOG_MEMORY_ALLOCS - #define OSAllocMem(flags, size, linAddr, blockAlloc, logStr) \ - (PVR_TRACE(("OSAllocMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): " logStr " (size = 0x%lx)", size)), \ - OSAllocMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__)) - - #define OSAllocPages(flags, size, pageSize, linAddr, pageAlloc) \ - (PVR_TRACE(("OSAllocPages(" #flags ", " #size ", " #pageSize ", " #linAddr ", " #pageAlloc "): (size = 0x%lx)", size)), \ - OSAllocPages_Impl(flags, size, pageSize, linAddr, pageAlloc)) - - #define OSFreeMem(flags, size, linAddr, blockAlloc) \ - (PVR_TRACE(("OSFreeMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): (pointer = 0x%X)", linAddr)), \ - OSFreeMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__)) -#else - #define OSAllocMem(flags, size, linAddr, blockAlloc, logString) \ - OSAllocMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__) - - #define OSAllocPages OSAllocPages_Impl - - #define OSFreeMem(flags, size, linAddr, blockAlloc) \ - OSFreeMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__) -#endif - -#ifdef PVRSRV_DEBUG_OS_MEMORY - - PVRSRV_ERROR OSAllocMem_Debug_Wrapper(IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Size, - IMG_PVOID *ppvCpuVAddr, - IMG_HANDLE *phBlockAlloc, - IMG_CHAR *pszFilename, - IMG_UINT32 ui32Line); - - PVRSRV_ERROR OSFreeMem_Debug_Wrapper(IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Size, - IMG_PVOID pvCpuVAddr, - IMG_HANDLE hBlockAlloc, - IMG_CHAR *pszFilename, - IMG_UINT32 ui32Line); - - - typedef struct - { - IMG_UINT8 sGuardRegionBefore[8]; - IMG_CHAR sFileName[128]; - IMG_UINT32 uLineNo; - IMG_SIZE_T uSize; - IMG_SIZE_T uSizeParityCheck; - enum valid_tag - { isFree = 0x277260FF, - isAllocated = 0x260511AA - } eValid; - } OSMEM_DEBUG_INFO; - - #define TEST_BUFFER_PADDING_STATUS (sizeof(OSMEM_DEBUG_INFO)) - #define TEST_BUFFER_PADDING_AFTER (8) - #define TEST_BUFFER_PADDING (TEST_BUFFER_PADDING_STATUS + TEST_BUFFER_PADDING_AFTER) -#else - #define OSAllocMem_Debug_Wrapper OSAllocMem_Debug_Linux_Memory_Allocations - #define OSFreeMem_Debug_Wrapper OSFreeMem_Debug_Linux_Memory_Allocations -#endif - -#if (defined(__linux__) || defined(__QNXNTO__)) && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) - PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); - PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); - - #define OSAllocMem_Debug_Linux_Memory_Allocations OSAllocMem_Impl - #define OSFreeMem_Debug_Linux_Memory_Allocations OSFreeMem_Impl -#else - PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phBlockAlloc); - PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hBlockAlloc); - - #define OSAllocMem_Debug_Linux_Memory_Allocations(flags, size, addr, blockAlloc, file, line) \ - OSAllocMem_Impl(flags, size, addr, blockAlloc) - #define OSFreeMem_Debug_Linux_Memory_Allocations(flags, size, addr, blockAlloc, file, line) \ - OSFreeMem_Impl(flags, size, addr, blockAlloc) -#endif - - -#if defined(__linux__) || defined(__QNXNTO__) -IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_SIZE_T ui32ByteOffset); -#else -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSMemHandleToCpuPAddr) -#endif -static INLINE IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_HANDLE hOSMemHandle, IMG_SIZE_T ui32ByteOffset) -{ - IMG_CPU_PHYADDR sCpuPAddr; - PVR_UNREFERENCED_PARAMETER(hOSMemHandle); - PVR_UNREFERENCED_PARAMETER(ui32ByteOffset); - sCpuPAddr.uiAddr = 0; - return sCpuPAddr; -} -#endif -PVRSRV_ERROR OSInitEnvData(IMG_PVOID *ppvEnvSpecificData); -PVRSRV_ERROR OSDeInitEnvData(IMG_PVOID pvEnvSpecificData); -IMG_CHAR* OSStringCopy(IMG_CHAR *pszDest, const IMG_CHAR *pszSrc); -IMG_INT32 OSSNPrintf(IMG_CHAR *pStr, IMG_SIZE_T ui32Size, const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(3, 4); -#define OSStringLength(pszString) strlen(pszString) - -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, - PVRSRV_EVENTOBJECT_KM *psEventObject); -PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT_KM *psEventObject); -PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT_KM *psEventObject, - IMG_HANDLE *phOSEvent); -PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT_KM *psEventObject, - IMG_HANDLE hOSEventKM); -#else -PVRSRV_ERROR OSEventObjectCreateKM(const IMG_CHAR *pszName, - PVRSRV_EVENTOBJECT *psEventObject); -PVRSRV_ERROR OSEventObjectDestroyKM(PVRSRV_EVENTOBJECT *psEventObject); -PVRSRV_ERROR OSEventObjectSignalKM(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectWaitKM(IMG_HANDLE hOSEventKM); -PVRSRV_ERROR OSEventObjectOpenKM(PVRSRV_EVENTOBJECT *psEventObject, - IMG_HANDLE *phOSEvent); -PVRSRV_ERROR OSEventObjectCloseKM(PVRSRV_EVENTOBJECT *psEventObject, - IMG_HANDLE hOSEventKM); -#endif - - -PVRSRV_ERROR OSBaseAllocContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr); -PVRSRV_ERROR OSBaseFreeContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr); - -IMG_PVOID MapUserFromKernel(IMG_PVOID pvLinAddrKM,IMG_SIZE_T ui32Size,IMG_HANDLE *phMemBlock); -IMG_PVOID OSMapHWRegsIntoUserSpace(IMG_HANDLE hDevCookie, IMG_SYS_PHYADDR sRegAddr, IMG_UINT32 ulSize, IMG_PVOID *ppvProcess); -IMG_VOID OSUnmapHWRegsFromUserSpace(IMG_HANDLE hDevCookie, IMG_PVOID pvUserAddr, IMG_PVOID pvProcess); - -IMG_VOID UnmapUserFromKernel(IMG_PVOID pvLinAddrUM, IMG_SIZE_T ui32Size, IMG_HANDLE hMemBlock); - -PVRSRV_ERROR OSMapPhysToUserSpace(IMG_HANDLE hDevCookie, - IMG_SYS_PHYADDR sCPUPhysAddr, - IMG_SIZE_T uiSizeInBytes, - IMG_UINT32 ui32CacheFlags, - IMG_PVOID *ppvUserAddr, - IMG_SIZE_T *puiActualSize, - IMG_HANDLE hMappingHandle); - -PVRSRV_ERROR OSUnmapPhysToUserSpace(IMG_HANDLE hDevCookie, - IMG_PVOID pvUserAddr, - IMG_PVOID pvProcess); - -PVRSRV_ERROR OSLockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); -PVRSRV_ERROR OSUnlockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); -IMG_BOOL OSIsResourceLocked(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); -PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource); -PVRSRV_ERROR OSDestroyResource(PVRSRV_RESOURCE *psResource); -IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); - -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) -#define OSPowerLockWrap SysPowerLockWrap -#define OSPowerLockUnwrap SysPowerLockUnwrap -#else -PVRSRV_ERROR OSPowerLockWrap(IMG_BOOL bTryLock); - -IMG_VOID OSPowerLockUnwrap(IMG_VOID); -#endif - - -IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus); - - -IMG_VOID OSSleepms(IMG_UINT32 ui32Timems); - -IMG_HANDLE OSFuncHighResTimerCreate(IMG_VOID); -IMG_UINT32 OSFuncHighResTimerGetus(IMG_HANDLE hTimer); -IMG_VOID OSFuncHighResTimerDestroy(IMG_HANDLE hTimer); -IMG_VOID OSReleaseThreadQuanta(IMG_VOID); -IMG_UINT32 OSPCIReadDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg); -IMG_VOID OSPCIWriteDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Value); - -#ifndef OSReadHWReg -IMG_UINT32 OSReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset); -#endif -#ifndef OSWriteHWReg -IMG_VOID OSWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value); -#endif - -typedef IMG_VOID (*PFN_TIMER_FUNC)(IMG_VOID*); -IMG_HANDLE OSAddTimer(PFN_TIMER_FUNC pfnTimerFunc, IMG_VOID *pvData, IMG_UINT32 ui32MsTimeout); -PVRSRV_ERROR OSRemoveTimer (IMG_HANDLE hTimer); -PVRSRV_ERROR OSEnableTimer (IMG_HANDLE hTimer); -PVRSRV_ERROR OSDisableTimer (IMG_HANDLE hTimer); - -PVRSRV_ERROR OSGetSysMemSize(IMG_SIZE_T *pui32Bytes); - -typedef enum _HOST_PCI_INIT_FLAGS_ -{ - HOST_PCI_INIT_FLAG_BUS_MASTER = 0x00000001, - HOST_PCI_INIT_FLAG_MSI = 0x00000002, - HOST_PCI_INIT_FLAG_FORCE_I32 = 0x7fffffff -} HOST_PCI_INIT_FLAGS; - -struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_; -typedef struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_ *PVRSRV_PCI_DEV_HANDLE; - -PVRSRV_PCI_DEV_HANDLE OSPCIAcquireDev(IMG_UINT16 ui16VendorID, IMG_UINT16 ui16DeviceID, HOST_PCI_INIT_FLAGS eFlags); -PVRSRV_PCI_DEV_HANDLE OSPCISetDev(IMG_VOID *pvPCICookie, HOST_PCI_INIT_FLAGS eFlags); -PVRSRV_ERROR OSPCIReleaseDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); -PVRSRV_ERROR OSPCIIRQ(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 *pui32IRQ); -IMG_UINT32 OSPCIAddrRangeLen(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); -IMG_UINT32 OSPCIAddrRangeStart(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); -IMG_UINT32 OSPCIAddrRangeEnd(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); -PVRSRV_ERROR OSPCIRequestAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); -PVRSRV_ERROR OSPCIReleaseAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); -PVRSRV_ERROR OSPCISuspendDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); -PVRSRV_ERROR OSPCIResumeDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); - -PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData); - -IMG_VOID OSPanic(IMG_VOID); - -IMG_BOOL OSProcHasPrivSrvInit(IMG_VOID); - -typedef enum _img_verify_test -{ - PVR_VERIFY_WRITE = 0, - PVR_VERIFY_READ -} IMG_VERIFY_TEST; - -IMG_BOOL OSAccessOK(IMG_VERIFY_TEST eVerification, IMG_VOID *pvUserPtr, IMG_SIZE_T ui32Bytes); - -PVRSRV_ERROR OSCopyToUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); -PVRSRV_ERROR OSCopyFromUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); - -#if (defined(__linux__) || defined(__QNXNTO__)) -PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr, - IMG_SIZE_T ui32Bytes, - IMG_SYS_PHYADDR *psSysPAddr, - IMG_HANDLE *phOSWrapMem); -PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem); -#else -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSAcquirePhysPageAddr) -#endif -static INLINE PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr, - IMG_SIZE_T ui32Bytes, - IMG_SYS_PHYADDR *psSysPAddr, - IMG_HANDLE *phOSWrapMem) -{ - PVR_UNREFERENCED_PARAMETER(pvCPUVAddr); - PVR_UNREFERENCED_PARAMETER(ui32Bytes); - PVR_UNREFERENCED_PARAMETER(psSysPAddr); - PVR_UNREFERENCED_PARAMETER(phOSWrapMem); - return PVRSRV_OK; -} -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSReleasePhysPageAddr) -#endif -static INLINE PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem) -{ - PVR_UNREFERENCED_PARAMETER(hOSWrapMem); - return PVRSRV_OK; -} -#endif - -#if defined(__linux__) && defined(__KERNEL__) - -#define OS_SUPPORTS_IN_LISR - -static inline IMG_BOOL OSInLISR(IMG_VOID unref__ *pvSysData) -{ - PVR_UNREFERENCED_PARAMETER(pvSysData); - return (in_irq()) ? IMG_TRUE : IMG_FALSE; -} - -static inline IMG_VOID OSWriteMemoryBarrier(IMG_VOID) -{ - wmb(); -} - -static inline IMG_VOID OSMemoryBarrier(IMG_VOID) -{ - mb(); -} - -#else - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSWriteMemoryBarrier) -#endif -static INLINE IMG_VOID OSWriteMemoryBarrier(IMG_VOID) { } - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSMemoryBarrier) -#endif -static INLINE IMG_VOID OSMemoryBarrier(IMG_VOID) { } - -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/osperproc.h b/drivers/staging/cdv/pvr/services4/srvkm/include/osperproc.h deleted file mode 100644 index e5c81da..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/osperproc.h +++ /dev/null @@ -1,76 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __OSPERPROC_H__ -#define __OSPERPROC_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#if defined(__linux__) || defined(__QNXNTO__) -PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData); -PVRSRV_ERROR OSPerProcessPrivateDataDeInit(IMG_HANDLE hOsPrivateData); - -PVRSRV_ERROR OSPerProcessSetHandleOptions(PVRSRV_HANDLE_BASE *psHandleBase); -#else -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSPerProcessPrivateDataInit) -#endif -static INLINE PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData) -{ - PVR_UNREFERENCED_PARAMETER(phOsPrivateData); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSPerProcessPrivateDataDeInit) -#endif -static INLINE PVRSRV_ERROR OSPerProcessPrivateDataDeInit(IMG_HANDLE hOsPrivateData) -{ - PVR_UNREFERENCED_PARAMETER(hOsPrivateData); - - return PVRSRV_OK; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(OSPerProcessSetHandleOptions) -#endif -static INLINE PVRSRV_ERROR OSPerProcessSetHandleOptions(PVRSRV_HANDLE_BASE *psHandleBase) -{ - PVR_UNREFERENCED_PARAMETER(psHandleBase); - - return PVRSRV_OK; -} -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_int.h b/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_int.h deleted file mode 100644 index 9f68549..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_int.h +++ /dev/null @@ -1,67 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __PDUMP_INT_H__ -#define __PDUMP_INT_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#if !defined(_UITRON) -#include "dbgdrvif.h" - -IMG_EXPORT IMG_VOID PDumpConnectionNotify(IMG_VOID); - -#endif - -typedef enum -{ - - PDUMP_WRITE_MODE_CONTINUOUS = 0, - - PDUMP_WRITE_MODE_LASTFRAME, - - PDUMP_WRITE_MODE_BINCM, - - PDUMP_WRITE_MODE_PERSISTENT -} PDUMP_DDWMODE; - - -IMG_UINT32 DbgWrite(PDBG_STREAM psStream, IMG_UINT8 *pui8Data, IMG_UINT32 ui32BCount, IMG_UINT32 ui32Flags); - -IMG_UINT32 PDumpOSDebugDriverWrite( PDBG_STREAM psStream, - PDUMP_DDWMODE eDbgDrvWriteMode, - IMG_UINT8 *pui8Data, - IMG_UINT32 ui32BCount, - IMG_UINT32 ui32Level, - IMG_UINT32 ui32DbgDrvFlags); - -#if defined (__cplusplus) -} -#endif -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_km.h b/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_km.h deleted file mode 100644 index f29fdba..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_km.h +++ /dev/null @@ -1,412 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _PDUMP_KM_H_ -#define _PDUMP_KM_H_ - - -#include "pdump_osfunc.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#include "pdump.h" - -#define PDUMP_PD_UNIQUETAG (IMG_HANDLE)0 -#define PDUMP_PT_UNIQUETAG (IMG_HANDLE)0 - -#define PDUMP_STREAM_PARAM2 0 -#define PDUMP_STREAM_SCRIPT2 1 -#define PDUMP_STREAM_DRIVERINFO 2 -#define PDUMP_NUM_STREAMS 3 - -#if defined(PDUMP_DEBUG_OUTFILES) -extern IMG_UINT32 g_ui32EveryLineCounter; -#endif - -#ifndef PDUMP -#define MAKEUNIQUETAG(hMemInfo) (0) -#endif - -#ifdef PDUMP - -#define MAKEUNIQUETAG(hMemInfo) (((BM_BUF *)(((PVRSRV_KERNEL_MEM_INFO *)(hMemInfo))->sMemBlk.hBuffer))->pMapping) - - IMG_IMPORT PVRSRV_ERROR PDumpMemPolKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Value, - IMG_UINT32 ui32Mask, - PDUMP_POLL_OPERATOR eOperator, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - IMG_IMPORT PVRSRV_ERROR PDumpMemUM(PVRSRV_PER_PROCESS_DATA *psProcData, - IMG_PVOID pvAltLinAddr, - IMG_PVOID pvLinAddr, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - IMG_IMPORT PVRSRV_ERROR PDumpMemKM(IMG_PVOID pvAltLinAddr, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpMemPagesKM(PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_DEV_PHYADDR *pPages, - IMG_UINT32 ui32NumPages, - IMG_DEV_VIRTADDR sDevAddr, - IMG_UINT32 ui32Start, - IMG_UINT32 ui32Length, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - PVRSRV_ERROR PDumpMemPDEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_BOOL bInitialisePages, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2); - - PVRSRV_ERROR PDumpMemPTEntriesKM(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32Bytes, - IMG_UINT32 ui32Flags, - IMG_BOOL bInitialisePages, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2); - IMG_VOID PDumpInitCommon(IMG_VOID); - IMG_VOID PDumpDeInitCommon(IMG_VOID); - IMG_VOID PDumpInit(IMG_VOID); - IMG_VOID PDumpDeInit(IMG_VOID); - IMG_BOOL PDumpIsSuspended(IMG_VOID); - PVRSRV_ERROR PDumpStartInitPhaseKM(IMG_VOID); - PVRSRV_ERROR PDumpStopInitPhaseKM(IMG_VOID); - IMG_IMPORT PVRSRV_ERROR PDumpSetFrameKM(IMG_UINT32 ui32Frame); - IMG_IMPORT PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags); - - - IMG_IMPORT PVRSRV_ERROR PDumpDriverInfoKM(IMG_CHAR *pszString, IMG_UINT32 ui32Flags); - - PVRSRV_ERROR PDumpRegWithFlagsKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Flags); - PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Flags, - PDUMP_POLL_OPERATOR eOperator); - PVRSRV_ERROR PDumpRegPolKM(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegAddr, - IMG_UINT32 ui32RegValue, - IMG_UINT32 ui32Mask, - PDUMP_POLL_OPERATOR eOperator); - - IMG_IMPORT PVRSRV_ERROR PDumpBitmapKM(PVRSRV_DEVICE_NODE *psDeviceNode, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Width, - IMG_UINT32 ui32Height, - IMG_UINT32 ui32StrideInBytes, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_HANDLE hDevMemContext, - IMG_UINT32 ui32Size, - PDUMP_PIXEL_FORMAT ePixelFormat, - PDUMP_MEM_FORMAT eMemFormat, - IMG_UINT32 ui32PDumpFlags); - IMG_IMPORT PVRSRV_ERROR PDumpReadRegKM(IMG_CHAR *pszPDumpRegName, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_UINT32 ui32Address, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PDumpFlags); - - PVRSRV_ERROR PDumpRegKM(IMG_CHAR* pszPDumpRegName, - IMG_UINT32 dwReg, - IMG_UINT32 dwData); - - PVRSRV_ERROR PDumpComment(IMG_CHAR* pszFormat, ...) IMG_FORMAT_PRINTF(1, 2); - PVRSRV_ERROR PDumpCommentWithFlags(IMG_UINT32 ui32Flags, - IMG_CHAR* pszFormat, - ...) IMG_FORMAT_PRINTF(2, 3); - - PVRSRV_ERROR PDumpPDReg(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32dwData, - IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpPDRegWithFlags(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_UINT32 ui32Reg, - IMG_UINT32 ui32Data, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - IMG_BOOL PDumpIsLastCaptureFrameKM(IMG_VOID); - IMG_IMPORT IMG_BOOL PDumpIsCaptureFrameKM(IMG_VOID); - - IMG_VOID PDumpMallocPagesPhys(PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_UINT32 ui32DevVAddr, - IMG_PUINT32 pui32PhysPages, - IMG_UINT32 ui32NumPages, - IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpSetMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_CHAR *pszMemSpace, - IMG_UINT32 *pui32MMUContextID, - IMG_UINT32 ui32MMUType, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hOSMemHandle, - IMG_VOID *pvPDCPUAddr); - PVRSRV_ERROR PDumpClearMMUContext(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_CHAR *pszMemSpace, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32MMUType); - - PVRSRV_ERROR PDumpPDDevPAddrKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 ui32Offset, - IMG_DEV_PHYADDR sPDDevPAddr, - IMG_HANDLE hUniqueTag1, - IMG_HANDLE hUniqueTag2); - - IMG_BOOL PDumpTestNextFrame(IMG_UINT32 ui32CurrentFrame); - - PVRSRV_ERROR PDumpSaveMemKM (PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32DataMaster, - IMG_UINT32 ui32PDumpFlags); - - PVRSRV_ERROR PDumpTASignatureRegisters(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_UINT32 ui32TAKickCount, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters); - - PVRSRV_ERROR PDump3DSignatureRegisters(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters); - - PVRSRV_ERROR PDumpCounterRegisters(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_UINT32 ui32DumpFrameNum, - IMG_BOOL bLastFrame, - IMG_UINT32 *pui32Registers, - IMG_UINT32 ui32NumRegisters); - - PVRSRV_ERROR PDumpRegRead(IMG_CHAR *pszPDumpRegName, - const IMG_UINT32 dwRegOffset, - IMG_UINT32 ui32Flags); - - PVRSRV_ERROR PDumpCycleCountRegRead(PVRSRV_DEVICE_IDENTIFIER *psDevId, - const IMG_UINT32 dwRegOffset, - IMG_BOOL bLastFrame); - - PVRSRV_ERROR PDumpIDLWithFlags(IMG_UINT32 ui32Clocks, IMG_UINT32 ui32Flags); - PVRSRV_ERROR PDumpIDL(IMG_UINT32 ui32Clocks); - - PVRSRV_ERROR PDumpMallocPages(PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_UINT32 ui32DevVAddr, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32PageSize, - IMG_BOOL bShared, - IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpMallocPageTable(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - PVRSRV_ERROR PDumpFreePages(struct _BM_HEAP_ *psBMHeap, - IMG_DEV_VIRTADDR sDevVAddr, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32PageSize, - IMG_HANDLE hUniqueTag, - IMG_BOOL bInterleaved); - PVRSRV_ERROR PDumpFreePageTable(PVRSRV_DEVICE_IDENTIFIER *psDevID, - IMG_HANDLE hOSMemHandle, - IMG_CPU_VIRTADDR pvLinAddr, - IMG_UINT32 ui32NumBytes, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - IMG_IMPORT PVRSRV_ERROR PDumpHWPerfCBKM(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32PDumpFlags); - - PVRSRV_ERROR PDumpSignatureBuffer(PVRSRV_DEVICE_IDENTIFIER *psDevId, - IMG_CHAR *pszFileName, - IMG_CHAR *pszBufferType, - IMG_UINT32 ui32FileOffset, - IMG_DEV_VIRTADDR sDevBaseAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32MMUContextID, - IMG_UINT32 ui32PDumpFlags); - - PVRSRV_ERROR PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo, - IMG_UINT32 ui32ROffOffset, - IMG_UINT32 ui32WPosVal, - IMG_UINT32 ui32PacketSize, - IMG_UINT32 ui32BufferSize, - IMG_UINT32 ui32Flags, - IMG_HANDLE hUniqueTag); - - PVRSRV_ERROR PDumpRegBasedCBP(IMG_CHAR *pszPDumpRegName, - IMG_UINT32 ui32RegOffset, - IMG_UINT32 ui32WPosVal, - IMG_UINT32 ui32PacketSize, - IMG_UINT32 ui32BufferSize, - IMG_UINT32 ui32Flags); - - IMG_VOID PDumpVGXMemToFile(IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 uiAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hUniqueTag); - - IMG_VOID PDumpSuspendKM(IMG_VOID); - IMG_VOID PDumpResumeKM(IMG_VOID); - - - PVRSRV_ERROR PDumpStoreMemToFile(PDUMP_MMU_ATTRIB *psMMUAttrib, - IMG_CHAR *pszFileName, - IMG_UINT32 ui32FileOffset, - PVRSRV_KERNEL_MEM_INFO *psMemInfo, - IMG_UINT32 uiAddr, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32PDumpFlags, - IMG_HANDLE hUniqueTag); - - #define PDUMPMEMPOL PDumpMemPolKM - #define PDUMPMEM PDumpMemKM - #define PDUMPMEMPTENTRIES PDumpMemPTEntriesKM - #define PDUMPPDENTRIES PDumpMemPDEntriesKM - #define PDUMPMEMUM PDumpMemUM - #define PDUMPINIT PDumpInitCommon - #define PDUMPDEINIT PDumpDeInitCommon - #define PDUMPISLASTFRAME PDumpIsLastCaptureFrameKM - #define PDUMPTESTFRAME PDumpIsCaptureFrameKM - #define PDUMPTESTNEXTFRAME PDumpTestNextFrame - #define PDUMPREGWITHFLAGS PDumpRegWithFlagsKM - #define PDUMPREG PDumpRegKM - #define PDUMPCOMMENT PDumpComment - #define PDUMPCOMMENTWITHFLAGS PDumpCommentWithFlags - #define PDUMPREGPOL PDumpRegPolKM - #define PDUMPREGPOLWITHFLAGS PDumpRegPolWithFlagsKM - #define PDUMPMALLOCPAGES PDumpMallocPages - #define PDUMPMALLOCPAGETABLE PDumpMallocPageTable - #define PDUMPSETMMUCONTEXT PDumpSetMMUContext - #define PDUMPCLEARMMUCONTEXT PDumpClearMMUContext - #define PDUMPFREEPAGES PDumpFreePages - #define PDUMPFREEPAGETABLE PDumpFreePageTable - #define PDUMPPDREG PDumpPDReg - #define PDUMPPDREGWITHFLAGS PDumpPDRegWithFlags - #define PDUMPCBP PDumpCBP - #define PDUMPREGBASEDCBP PDumpRegBasedCBP - #define PDUMPMALLOCPAGESPHYS PDumpMallocPagesPhys - #define PDUMPENDINITPHASE PDumpStopInitPhaseKM - #define PDUMPBITMAPKM PDumpBitmapKM - #define PDUMPDRIVERINFO PDumpDriverInfoKM - #define PDUMPIDLWITHFLAGS PDumpIDLWithFlags - #define PDUMPIDL PDumpIDL - #define PDUMPSUSPEND PDumpSuspendKM - #define PDUMPRESUME PDumpResumeKM - -#else - #if (((defined(LINUX) || defined(__QNXNTO__)) || defined(GCC_IA32)) || defined(GCC_ARM)) - #define PDUMPMEMPOL(args...) - #define PDUMPMEM(args...) - #define PDUMPMEMPTENTRIES(args...) - #define PDUMPPDENTRIES(args...) - #define PDUMPMEMUM(args...) - #define PDUMPINIT(args...) - #define PDUMPDEINIT(args...) - #define PDUMPISLASTFRAME(args...) - #define PDUMPTESTFRAME(args...) - #define PDUMPTESTNEXTFRAME(args...) - #define PDUMPREGWITHFLAGS(args...) - #define PDUMPREG(args...) - #define PDUMPCOMMENT(args...) - #define PDUMPREGPOL(args...) - #define PDUMPREGPOLWITHFLAGS(args...) - #define PDUMPMALLOCPAGES(args...) - #define PDUMPMALLOCPAGETABLE(args...) - #define PDUMPSETMMUCONTEXT(args...) - #define PDUMPCLEARMMUCONTEXT(args...) - #define PDUMPFREEPAGES(args...) - #define PDUMPFREEPAGETABLE(args...) - #define PDUMPPDREG(args...) - #define PDUMPPDREGWITHFLAGS(args...) - #define PDUMPSYNC(args...) - #define PDUMPCOPYTOMEM(args...) - #define PDUMPWRITE(args...) - #define PDUMPCBP(args...) - #define PDUMPREGBASEDCBP(args...) - #define PDUMPCOMMENTWITHFLAGS(args...) - #define PDUMPMALLOCPAGESPHYS(args...) - #define PDUMPENDINITPHASE(args...) - #define PDUMPMSVDXREG(args...) - #define PDUMPMSVDXREGWRITE(args...) - #define PDUMPMSVDXREGREAD(args...) - #define PDUMPMSVDXPOLEQ(args...) - #define PDUMPMSVDXPOL(args...) - #define PDUMPBITMAPKM(args...) - #define PDUMPDRIVERINFO(args...) - #define PDUMPIDLWITHFLAGS(args...) - #define PDUMPIDL(args...) - #define PDUMPSUSPEND(args...) - #define PDUMPRESUME(args...) - #define PDUMPMSVDXWRITEREF(args...) - #else - #error Compiler not specified - #endif -#endif - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_osfunc.h b/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_osfunc.h deleted file mode 100644 index f3ed914..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/pdump_osfunc.h +++ /dev/null @@ -1,142 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - - -#define MAX_PDUMP_STRING_LENGTH (256) - - - - - -#define PDUMP_GET_SCRIPT_STRING() \ - IMG_HANDLE hScript; \ - IMG_UINT32 ui32MaxLen; \ - PVRSRV_ERROR eError; \ - eError = PDumpOSGetScriptString(&hScript, &ui32MaxLen);\ - if(eError != PVRSRV_OK) return eError; - -#define PDUMP_GET_MSG_STRING() \ - IMG_CHAR *pszMsg; \ - IMG_UINT32 ui32MaxLen; \ - PVRSRV_ERROR eError; \ - eError = PDumpOSGetMessageString(&pszMsg, &ui32MaxLen);\ - if(eError != PVRSRV_OK) return eError; - -#define PDUMP_GET_FILE_STRING() \ - IMG_CHAR *pszFileName; \ - IMG_UINT32 ui32MaxLen; \ - PVRSRV_ERROR eError; \ - eError = PDumpOSGetFilenameString(&pszFileName, &ui32MaxLen);\ - if(eError != PVRSRV_OK) return eError; - -#define PDUMP_GET_SCRIPT_AND_FILE_STRING() \ - IMG_HANDLE hScript; \ - IMG_CHAR *pszFileName; \ - IMG_UINT32 ui32MaxLenScript; \ - IMG_UINT32 ui32MaxLenFileName; \ - PVRSRV_ERROR eError; \ - eError = PDumpOSGetScriptString(&hScript, &ui32MaxLenScript);\ - if(eError != PVRSRV_OK) return eError; \ - eError = PDumpOSGetFilenameString(&pszFileName, &ui32MaxLenFileName);\ - if(eError != PVRSRV_OK) return eError; - - - PVRSRV_ERROR PDumpOSGetScriptString(IMG_HANDLE *phScript, IMG_UINT32 *pui32MaxLen); - - - PVRSRV_ERROR PDumpOSGetMessageString(IMG_CHAR **ppszMsg, IMG_UINT32 *pui32MaxLen); - - - PVRSRV_ERROR PDumpOSGetFilenameString(IMG_CHAR **ppszFile, IMG_UINT32 *pui32MaxLen); - - - - -#define PDUMP_va_list va_list -#define PDUMP_va_start va_start -#define PDUMP_va_end va_end - - - -IMG_HANDLE PDumpOSGetStream(IMG_UINT32 ePDumpStream); - -IMG_UINT32 PDumpOSGetStreamOffset(IMG_UINT32 ePDumpStream); - -IMG_UINT32 PDumpOSGetParamFileNum(IMG_VOID); - -IMG_VOID PDumpOSCheckForSplitting(IMG_HANDLE hStream, IMG_UINT32 ui32Size, IMG_UINT32 ui32Flags); - -IMG_BOOL PDumpOSIsSuspended(IMG_VOID); - -IMG_BOOL PDumpOSJTInitialised(IMG_VOID); - -IMG_BOOL PDumpOSWriteString(IMG_HANDLE hDbgStream, - IMG_UINT8 *psui8Data, - IMG_UINT32 ui32Size, - IMG_UINT32 ui32Flags); - -IMG_BOOL PDumpOSWriteString2(IMG_HANDLE hScript, IMG_UINT32 ui32Flags); - -PVRSRV_ERROR PDumpOSBufprintf(IMG_HANDLE hBuf, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR* pszFormat, ...) IMG_FORMAT_PRINTF(3, 4); - -IMG_VOID PDumpOSDebugPrintf(IMG_CHAR* pszFormat, ...) IMG_FORMAT_PRINTF(1, 2); - -PVRSRV_ERROR PDumpOSSprintf(IMG_CHAR *pszComment, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(3, 4); - -PVRSRV_ERROR PDumpOSVSprintf(IMG_CHAR *pszMsg, IMG_UINT32 ui32ScriptSizeMax, IMG_CHAR* pszFormat, PDUMP_va_list vaArgs) IMG_FORMAT_PRINTF(3, 0); - -IMG_UINT32 PDumpOSBuflen(IMG_HANDLE hBuffer, IMG_UINT32 ui32BufferSizeMax); - -IMG_VOID PDumpOSVerifyLineEnding(IMG_HANDLE hBuffer, IMG_UINT32 ui32BufferSizeMax); - -IMG_VOID PDumpOSCPUVAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_UINT8 *pui8LinAddr, - IMG_UINT32 ui32PageSize, - IMG_DEV_PHYADDR *psDevPAddr); - -IMG_VOID PDumpOSCPUVAddrToPhysPages(IMG_HANDLE hOSMemHandle, - IMG_UINT32 ui32Offset, - IMG_PUINT8 pui8LinAddr, - IMG_UINT32 ui32DataPageMask, - IMG_UINT32 *pui32PageOffset); - -IMG_VOID PDumpOSReleaseExecution(IMG_VOID); - -IMG_BOOL PDumpOSIsCaptureFrameKM(IMG_VOID); - -PVRSRV_ERROR PDumpOSSetFrameKM(IMG_UINT32 ui32Frame); - -#if defined (__cplusplus) -} -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/perproc.h b/drivers/staging/cdv/pvr/services4/srvkm/include/perproc.h deleted file mode 100644 index 842680c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/perproc.h +++ /dev/null @@ -1,126 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __PERPROC_H__ -#define __PERPROC_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include "img_types.h" -#include "resman.h" - -#include "handle.h" - -typedef struct _PVRSRV_PER_PROCESS_DATA_ -{ - IMG_UINT32 ui32PID; - IMG_HANDLE hBlockAlloc; - PRESMAN_CONTEXT hResManContext; -#if defined (SUPPORT_SID_INTERFACE) - IMG_SID hPerProcData; -#else - IMG_HANDLE hPerProcData; -#endif - PVRSRV_HANDLE_BASE *psHandleBase; -#if defined (SUPPORT_SID_INTERFACE) - - IMG_BOOL bHandlesBatched; -#else -#if defined (PVR_SECURE_HANDLES) - - IMG_BOOL bHandlesBatched; -#endif -#endif - IMG_UINT32 ui32RefCount; - - - IMG_BOOL bInitProcess; -#if defined(PDUMP) - - IMG_BOOL bPDumpPersistent; -#if defined(SUPPORT_PDUMP_MULTI_PROCESS) - - IMG_BOOL bPDumpActive; -#endif -#endif - - IMG_HANDLE hOsPrivateData; -} PVRSRV_PER_PROCESS_DATA; - -PVRSRV_PER_PROCESS_DATA *PVRSRVPerProcessData(IMG_UINT32 ui32PID); - -PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flags); -IMG_VOID PVRSRVPerProcessDataDisconnect(IMG_UINT32 ui32PID); - -PVRSRV_ERROR PVRSRVPerProcessDataInit(IMG_VOID); -PVRSRV_ERROR PVRSRVPerProcessDataDeInit(IMG_VOID); - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVFindPerProcessData) -#endif -static INLINE -PVRSRV_PER_PROCESS_DATA *PVRSRVFindPerProcessData(IMG_VOID) -{ - return PVRSRVPerProcessData(OSGetCurrentProcessIDKM()); -} - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVProcessPrivateData) -#endif -static INLINE -IMG_HANDLE PVRSRVProcessPrivateData(PVRSRV_PER_PROCESS_DATA *psPerProc) -{ - return (psPerProc != IMG_NULL) ? psPerProc->hOsPrivateData : IMG_NULL; -} - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVPerProcessPrivateData) -#endif -static INLINE -IMG_HANDLE PVRSRVPerProcessPrivateData(IMG_UINT32 ui32PID) -{ - return PVRSRVProcessPrivateData(PVRSRVPerProcessData(ui32PID)); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVFindPerProcessPrivateData) -#endif -static INLINE -IMG_HANDLE PVRSRVFindPerProcessPrivateData(IMG_VOID) -{ - return PVRSRVProcessPrivateData(PVRSRVFindPerProcessData()); -} - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/power.h b/drivers/staging/cdv/pvr/services4/srvkm/include/power.h deleted file mode 100644 index 9e3dcc40..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/power.h +++ /dev/null @@ -1,120 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef POWER_H -#define POWER_H - -#if defined(__cplusplus) -extern "C" { -#endif - - - -typedef struct _PVRSRV_POWER_DEV_TAG_ -{ - PFN_PRE_POWER pfnPrePower; - PFN_POST_POWER pfnPostPower; - PFN_PRE_CLOCKSPEED_CHANGE pfnPreClockSpeedChange; - PFN_POST_CLOCKSPEED_CHANGE pfnPostClockSpeedChange; - IMG_HANDLE hDevCookie; - IMG_UINT32 ui32DeviceIndex; - PVRSRV_DEV_POWER_STATE eDefaultPowerState; - PVRSRV_DEV_POWER_STATE eCurrentPowerState; - struct _PVRSRV_POWER_DEV_TAG_ *psNext; - struct _PVRSRV_POWER_DEV_TAG_ **ppsThis; - -} PVRSRV_POWER_DEV; - -typedef enum _PVRSRV_INIT_SERVER_STATE_ -{ - PVRSRV_INIT_SERVER_Unspecified = -1, - PVRSRV_INIT_SERVER_RUNNING = 0, - PVRSRV_INIT_SERVER_RAN = 1, - PVRSRV_INIT_SERVER_SUCCESSFUL = 2, - PVRSRV_INIT_SERVER_NUM = 3, - PVRSRV_INIT_SERVER_FORCE_I32 = 0x7fffffff - -} PVRSRV_INIT_SERVER_STATE, *PPVRSRV_INIT_SERVER_STATE; - -IMG_IMPORT -IMG_BOOL PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_STATE eInitServerState); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetInitServerState(PVRSRV_INIT_SERVER_STATE eInitServerState, IMG_BOOL bState); - - - -IMG_IMPORT -PVRSRV_ERROR PVRSRVPowerLock(IMG_UINT32 ui32CallerID, - IMG_BOOL bSystemPowerEvent); -IMG_IMPORT -IMG_VOID PVRSRVPowerUnlock(IMG_UINT32 ui32CallerID); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetDevicePowerStateKM(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - IMG_UINT32 ui32CallerID, - IMG_BOOL bRetainMutex); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVSystemPrePowerStateKM(PVRSRV_SYS_POWER_STATE eNewPowerState); -IMG_IMPORT -PVRSRV_ERROR PVRSRVSystemPostPowerStateKM(PVRSRV_SYS_POWER_STATE eNewPowerState); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVSetPowerStateKM (PVRSRV_SYS_POWER_STATE ePVRState); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVRegisterPowerDevice(IMG_UINT32 ui32DeviceIndex, - PFN_PRE_POWER pfnPrePower, - PFN_POST_POWER pfnPostPower, - PFN_PRE_CLOCKSPEED_CHANGE pfnPreClockSpeedChange, - PFN_POST_CLOCKSPEED_CHANGE pfnPostClockSpeedChange, - IMG_HANDLE hDevCookie, - PVRSRV_DEV_POWER_STATE eCurrentPowerState, - PVRSRV_DEV_POWER_STATE eDefaultPowerState); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVRemovePowerDevice (IMG_UINT32 ui32DeviceIndex); - -IMG_IMPORT -IMG_BOOL PVRSRVIsDevicePowered(IMG_UINT32 ui32DeviceIndex); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVDevicePreClockSpeedChange(IMG_UINT32 ui32DeviceIndex, - IMG_BOOL bIdleDevice, - IMG_VOID *pvInfo); - -IMG_IMPORT -IMG_VOID PVRSRVDevicePostClockSpeedChange(IMG_UINT32 ui32DeviceIndex, - IMG_BOOL bIdleDevice, - IMG_VOID *pvInfo); - -#if defined (__cplusplus) -} -#endif -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/queue.h b/drivers/staging/cdv/pvr/services4/srvkm/include/queue.h deleted file mode 100644 index ab89527..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/queue.h +++ /dev/null @@ -1,110 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef QUEUE_H -#define QUEUE_H - - -#if defined(__cplusplus) -extern "C" { -#endif - -#define UPDATE_QUEUE_ROFF(psQueue, ui32Size) \ - (psQueue)->ui32ReadOffset = ((psQueue)->ui32ReadOffset + (ui32Size)) \ - & ((psQueue)->ui32QueueSize - 1); - - typedef struct _COMMAND_COMPLETE_DATA_ - { - IMG_BOOL bInUse; - - IMG_UINT32 ui32DstSyncCount; - IMG_UINT32 ui32SrcSyncCount; - PVRSRV_SYNC_OBJECT *psDstSync; - PVRSRV_SYNC_OBJECT *psSrcSync; - IMG_UINT32 ui32AllocSize; - }COMMAND_COMPLETE_DATA, *PCOMMAND_COMPLETE_DATA; - -#if !defined(USE_CODE) -IMG_VOID QueueDumpDebugInfo(IMG_VOID); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVProcessQueues (IMG_BOOL bFlush); - -#if defined(__linux__) && defined(__KERNEL__) -#include -#include -void* ProcSeqOff2ElementQueue(struct seq_file * sfile, loff_t off); -void ProcSeqShowQueue(struct seq_file *sfile,void* el); -#endif - - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateCommandQueueKM(IMG_SIZE_T ui32QueueSize, - PVRSRV_QUEUE_INFO **ppsQueueInfo); -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueueInfo); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, - PVRSRV_COMMAND **ppsCommand, - IMG_UINT32 ui32DevIndex, - IMG_UINT16 CommandType, - IMG_UINT32 ui32DstSyncCount, - PVRSRV_KERNEL_SYNC_INFO *apsDstSync[], - IMG_UINT32 ui32SrcSyncCount, - PVRSRV_KERNEL_SYNC_INFO *apsSrcSync[], - IMG_SIZE_T ui32DataByteSize ); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetQueueSpaceKM(PVRSRV_QUEUE_INFO *psQueue, - IMG_SIZE_T ui32ParamSize, - IMG_VOID **ppvSpace); - -IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVSubmitCommandKM(PVRSRV_QUEUE_INFO *psQueue, - PVRSRV_COMMAND *psCommand); - -IMG_IMPORT -IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, IMG_BOOL bScheduleMISR); - -IMG_IMPORT -PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, - PFN_CMD_PROC *ppfnCmdProcList, - IMG_UINT32 ui32MaxSyncsPerCmd[][2], - IMG_UINT32 ui32CmdCount); -IMG_IMPORT -PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, - IMG_UINT32 ui32CmdCount); - -#endif - - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/ra.h b/drivers/staging/cdv/pvr/services4/srvkm/include/ra.h deleted file mode 100644 index db141f6..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/ra.h +++ /dev/null @@ -1,159 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _RA_H_ -#define _RA_H_ - -#include "img_types.h" -#include "hash.h" -#include "osfunc.h" - -typedef struct _RA_ARENA_ RA_ARENA; -typedef struct _BM_MAPPING_ BM_MAPPING; - - - -#define RA_STATS - - -struct _RA_STATISTICS_ -{ - - IMG_SIZE_T uSpanCount; - - - IMG_SIZE_T uLiveSegmentCount; - - - IMG_SIZE_T uFreeSegmentCount; - - - IMG_SIZE_T uTotalResourceCount; - - - IMG_SIZE_T uFreeResourceCount; - - - IMG_SIZE_T uCumulativeAllocs; - - - IMG_SIZE_T uCumulativeFrees; - - - IMG_SIZE_T uImportCount; - - - IMG_SIZE_T uExportCount; -}; -typedef struct _RA_STATISTICS_ RA_STATISTICS; - -struct _RA_SEGMENT_DETAILS_ -{ - IMG_SIZE_T uiSize; - IMG_CPU_PHYADDR sCpuPhyAddr; - IMG_HANDLE hSegment; -}; -typedef struct _RA_SEGMENT_DETAILS_ RA_SEGMENT_DETAILS; - -RA_ARENA * -RA_Create (IMG_CHAR *name, - IMG_UINTPTR_T base, - IMG_SIZE_T uSize, - BM_MAPPING *psMapping, - IMG_SIZE_T uQuantum, - IMG_BOOL (*imp_alloc)(IMG_VOID *_h, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINTPTR_T *pBase), - IMG_VOID (*imp_free) (IMG_VOID *, - IMG_UINTPTR_T, - BM_MAPPING *), - IMG_VOID (*backingstore_free) (IMG_VOID *, - IMG_SIZE_T, - IMG_SIZE_T, - IMG_HANDLE), - IMG_VOID *import_handle); - -IMG_VOID -RA_Delete (RA_ARENA *pArena); - -IMG_BOOL -RA_TestDelete (RA_ARENA *pArena); - -IMG_BOOL -RA_Add (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize); - -IMG_BOOL -RA_Alloc (RA_ARENA *pArena, - IMG_SIZE_T uSize, - IMG_SIZE_T *pActualSize, - BM_MAPPING **ppsMapping, - IMG_UINT32 uFlags, - IMG_UINT32 uAlignment, - IMG_UINT32 uAlignmentOffset, - IMG_UINTPTR_T *pBase); - -IMG_VOID -RA_Free (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_BOOL bFreeBackingStore); - - -#ifdef RA_STATS - -#define CHECK_SPACE(total) \ -{ \ - if((total)<100) \ - return PVRSRV_ERROR_INVALID_PARAMS; \ -} - -#define UPDATE_SPACE(str, count, total) \ -{ \ - if((count) == -1) \ - return PVRSRV_ERROR_INVALID_PARAMS; \ - else \ - { \ - (str) += (count); \ - (total) -= (count); \ - } \ -} - - -IMG_BOOL RA_GetNextLiveSegment(IMG_HANDLE hArena, RA_SEGMENT_DETAILS *psSegDetails); - - -PVRSRV_ERROR RA_GetStats(RA_ARENA *pArena, - IMG_CHAR **ppszStr, - IMG_UINT32 *pui32StrLen); - -PVRSRV_ERROR RA_GetStatsFreeMem(RA_ARENA *pArena, - IMG_CHAR **ppszStr, - IMG_UINT32 *pui32StrLen); - -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/resman.h b/drivers/staging/cdv/pvr/services4/srvkm/include/resman.h deleted file mode 100644 index 648e490..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/resman.h +++ /dev/null @@ -1,118 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __RESMAN_H__ -#define __RESMAN_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -enum { - - RESMAN_TYPE_SHARED_PB_DESC = 1, - RESMAN_TYPE_SHARED_PB_DESC_CREATE_LOCK, - RESMAN_TYPE_HW_RENDER_CONTEXT, - RESMAN_TYPE_HW_TRANSFER_CONTEXT, - RESMAN_TYPE_HW_2D_CONTEXT, - RESMAN_TYPE_TRANSFER_CONTEXT, - - - RESMAN_TYPE_DMA_CLIENT_FIFO_DATA, - - - - - - RESMAN_TYPE_DISPLAYCLASS_SWAPCHAIN_REF, - RESMAN_TYPE_DISPLAYCLASS_DEVICE, - - - RESMAN_TYPE_BUFFERCLASS_DEVICE, - - - RESMAN_TYPE_OS_USERMODE_MAPPING, - - - RESMAN_TYPE_DEVICEMEM_CONTEXT, - RESMAN_TYPE_DEVICECLASSMEM_MAPPING, - RESMAN_TYPE_DEVICEMEM_MAPPING, - RESMAN_TYPE_DEVICEMEM_WRAP, - RESMAN_TYPE_DEVICEMEM_ALLOCATION, - RESMAN_TYPE_EVENT_OBJECT, - RESMAN_TYPE_SHARED_MEM_INFO, - RESMAN_TYPE_MODIFY_SYNC_OPS, - RESMAN_TYPE_SYNC_INFO, - - - RESMAN_TYPE_KERNEL_DEVICEMEM_ALLOCATION -}; - -#define RESMAN_CRITERIA_ALL 0x00000000 -#define RESMAN_CRITERIA_RESTYPE 0x00000001 -#define RESMAN_CRITERIA_PVOID_PARAM 0x00000002 -#define RESMAN_CRITERIA_UI32_PARAM 0x00000004 - -typedef PVRSRV_ERROR (*RESMAN_FREE_FN)(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup); - -typedef struct _RESMAN_ITEM_ *PRESMAN_ITEM; -typedef struct _RESMAN_CONTEXT_ *PRESMAN_CONTEXT; - -PVRSRV_ERROR ResManInit(IMG_VOID); -IMG_VOID ResManDeInit(IMG_VOID); - -PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT hResManContext, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param, - RESMAN_FREE_FN pfnFreeResource); - -PVRSRV_ERROR ResManFreeResByPtr(PRESMAN_ITEM psResItem, - IMG_BOOL bForceCleanup); - -PVRSRV_ERROR ResManFreeResByCriteria(PRESMAN_CONTEXT hResManContext, - IMG_UINT32 ui32SearchCriteria, - IMG_UINT32 ui32ResType, - IMG_PVOID pvParam, - IMG_UINT32 ui32Param); - -PVRSRV_ERROR ResManDissociateRes(PRESMAN_ITEM psResItem, - PRESMAN_CONTEXT psNewResManContext); - -PVRSRV_ERROR ResManFindResourceByPtr(PRESMAN_CONTEXT hResManContext, - PRESMAN_ITEM psItem); - -PVRSRV_ERROR PVRSRVResManConnect(IMG_HANDLE hPerProc, - PRESMAN_CONTEXT *phResManContext); -IMG_VOID PVRSRVResManDisconnect(PRESMAN_CONTEXT hResManContext, - IMG_BOOL bKernelContext); - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/services_headers.h b/drivers/staging/cdv/pvr/services4/srvkm/include/services_headers.h deleted file mode 100644 index 2b5f197..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/services_headers.h +++ /dev/null @@ -1,49 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef SERVICES_HEADERS_H -#define SERVICES_HEADERS_H - -#ifdef DEBUG_RELEASE_BUILD -#pragma optimize( "", off ) -#define DEBUG 1 -#endif - -#include "img_defs.h" -#include "services.h" -#include "servicesint.h" -#include "power.h" -#include "resman.h" -#include "queue.h" -#include "srvkm.h" -#include "kerneldisplay.h" -#include "syscommon.h" -#include "pvr_debug.h" -#include "metrics.h" -#include "osfunc.h" - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/srvkm.h b/drivers/staging/cdv/pvr/services4/srvkm/include/srvkm.h deleted file mode 100644 index 474a1ee..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/srvkm.h +++ /dev/null @@ -1,78 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef SRVKM_H -#define SRVKM_H - - -#if defined(__cplusplus) -extern "C" { -#endif - - - #ifdef PVR_DISABLE_LOGGING - #define PVR_LOG(X) - #else - - #define PVR_LOG(X) PVRSRVReleasePrintf X; - #endif - - IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVReleasePrintf(const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(1, 2); - - IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVProcessConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flags); - IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVProcessDisconnect(IMG_UINT32 ui32PID); - - IMG_IMPORT IMG_VOID PVRSRVScheduleDevicesKM(IMG_VOID); - - IMG_VOID IMG_CALLCONV PVRSRVSetDCState(IMG_UINT32 ui32State); - - PVRSRV_ERROR IMG_CALLCONV PVRSRVSaveRestoreLiveSegments(IMG_HANDLE hArena, IMG_PBYTE pbyBuffer, IMG_SIZE_T *puiBufSize, IMG_BOOL bSave); - - IMG_VOID PVRSRVScheduleDeviceCallbacks(IMG_VOID); - - -#if defined (__cplusplus) -} -#endif - - -#define LOOP_UNTIL_TIMEOUT(TIMEOUT) \ -{\ - IMG_UINT32 uiOffset, uiStart, uiCurrent; \ - IMG_INT32 iNotLastLoop; \ - for(uiOffset = 0, uiStart = OSClockus(), uiCurrent = uiStart + 1, iNotLastLoop = 1;\ - ((uiCurrent - uiStart + uiOffset) < (TIMEOUT)) || iNotLastLoop--; \ - uiCurrent = OSClockus(), \ - uiOffset = uiCurrent < uiStart ? IMG_UINT32_MAX - uiStart : uiOffset, \ - uiStart = uiCurrent < uiStart ? 0 : uiStart) - -#define END_LOOP_UNTIL_TIMEOUT() \ -} - -IMG_IMPORT -const IMG_CHAR *PVRSRVGetErrorStringKM(PVRSRV_ERROR eError); - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace.h b/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace.h deleted file mode 100644 index 9e04b88..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace.h +++ /dev/null @@ -1,184 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "ttrace_common.h" -#include "ttrace_tokens.h" - -#ifndef __TTRACE_H__ -#define __TTRACE_H__ - -#if defined(TTRACE) - - #define PVR_TTRACE(group, class, token) \ - PVRSRVTimeTrace(group, class, token) - #define PVR_TTRACE_UI8(group, class, token, val) \ - PVRSRVTimeTraceUI8(group, class, token, val) - #define PVR_TTRACE_UI16(group, class, token, val) \ - PVRSRVTimeTraceUI16(group, class, token, val) - #define PVR_TTRACE_UI32(group, class, token, val) \ - PVRSRVTimeTraceUI32(group, class, token, val) - #define PVR_TTRACE_UI64(group, class, token, val) \ - PVRSRVTimeTraceUI64(group, class, token, val) - #define PVR_TTRACE_DEV_VIRTADDR(group, class, token, val) \ - PVRSRVTimeTraceDevVirtAddr(group, class, token, val) - #define PVR_TTRACE_CPU_PHYADDR(group, class, token, val) \ - PVRSRVTimeTraceCpuPhyAddr(group, class, token, val) - #define PVR_TTRACE_DEV_PHYADDR(group, class, token, val) \ - PVRSRVTimeTraceDevPhysAddr(group, class, token, val) - #define PVR_TTRACE_SYS_PHYADDR(group, class, token, val) \ - PVRSRVTimeTraceSysPhysAddr(group, class, token, val) - #define PVR_TTRACE_SYNC_OBJECT(group, token, syncobj, op) \ - PVRSRVTimeTraceSyncObject(group, token, syncobj, op) - -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTimeTraceArray(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_UINT32 ui32TypeSize, - IMG_UINT32 ui32Count, IMG_UINT8 *ui8Data); - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTrace) -#endif -static INLINE IMG_VOID PVRSRVTimeTrace(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, 0, 0, NULL); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceUI8) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceUI8(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_UINT8 ui8Value) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI8, - 1, &ui8Value); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceUI16) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceUI16(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_UINT16 ui16Value) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI16, - 1, (IMG_UINT8 *) &ui16Value); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceUI32) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceUI32(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_UINT32 ui32Value) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, - 1, (IMG_UINT8 *) &ui32Value); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceUI64) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceUI64(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_UINT64 ui64Value) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI64, - 1, (IMG_UINT8 *) &ui64Value); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceDevVirtAddr) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceDevVirtAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_DEV_VIRTADDR psVAddr) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, - 1, (IMG_UINT8 *) &psVAddr.uiAddr); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceCpuPhyAddr) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceCpuPhyAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_CPU_PHYADDR psPAddr) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, - 1, (IMG_UINT8 *) &psPAddr.uiAddr); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceDevPhysAddr) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceDevPhysAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_DEV_PHYADDR psPAddr) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, PVRSRV_TRACE_TYPE_UI32, - 1, (IMG_UINT8 *) &psPAddr.uiAddr); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(PVRSRVTimeTraceSysPhysAddr) -#endif -static INLINE IMG_VOID PVRSRVTimeTraceSysPhysAddr(IMG_UINT32 ui32Group, IMG_UINT32 ui32Class, - IMG_UINT32 ui32Token, IMG_SYS_PHYADDR psPAddr) -{ - PVRSRVTimeTraceArray(ui32Group, ui32Class, ui32Token, sizeof(psPAddr.uiAddr), - 1, (IMG_UINT8 *) &psPAddr.uiAddr); -} - -#else - - #define PVR_TTRACE(group, class, token) \ - ((void) 0) - #define PVR_TTRACE_UI8(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_UI16(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_UI32(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_UI64(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_DEV_VIRTADDR(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_CPU_PHYADDR(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_DEV_PHYADDR(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_SYS_PHYADDR(group, class, token, val) \ - ((void) 0) - #define PVR_TTRACE_SYNC_OBJECT(group, token, syncobj, op) \ - ((void) 0) - -#endif - -IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceInit(IMG_VOID); -IMG_IMPORT IMG_VOID PVRSRVTimeTraceDeinit(IMG_VOID); - -IMG_IMPORT IMG_VOID PVRSRVTimeTraceSyncObject(IMG_UINT32 ui32Group, IMG_UINT32 ui32Token, - PVRSRV_KERNEL_SYNC_INFO *psSync, IMG_UINT8 ui8SyncOp); -IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceBufferCreate(IMG_UINT32 ui32PID); -IMG_IMPORT PVRSRV_ERROR PVRSRVTimeTraceBufferDestroy(IMG_UINT32 ui32PID); - -IMG_IMPORT IMG_VOID PVRSRVDumpTimeTraceBuffers(IMG_VOID); -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_common.h b/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_common.h deleted file mode 100644 index 5895b6c..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_common.h +++ /dev/null @@ -1,81 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "img_types.h" - -#ifndef __TTRACE_COMMON_H__ -#define __TTRACE_COMMON_H__ - -#define PVRSRV_TRACE_HEADER 0 -#define PVRSRV_TRACE_TIMESTAMP 1 -#define PVRSRV_TRACE_HOSTUID 2 -#define PVRSRV_TRACE_DATA_HEADER 3 -#define PVRSRV_TRACE_DATA_PAYLOAD 4 - -#define PVRSRV_TRACE_ITEM_SIZE 16 - -#define PVRSRV_TRACE_GROUP_MASK 0xff -#define PVRSRV_TRACE_CLASS_MASK 0xff -#define PVRSRV_TRACE_TOKEN_MASK 0xffff - -#define PVRSRV_TRACE_GROUP_SHIFT 24 -#define PVRSRV_TRACE_CLASS_SHIFT 16 -#define PVRSRV_TRACE_TOKEN_SHIFT 0 - -#define PVRSRV_TRACE_SIZE_MASK 0xffff -#define PVRSRV_TRACE_TYPE_MASK 0xf -#define PVRSRV_TRACE_COUNT_MASK 0xfff - -#define PVRSRV_TRACE_SIZE_SHIFT 16 -#define PVRSRV_TRACE_TYPE_SHIFT 12 -#define PVRSRV_TRACE_COUNT_SHIFT 0 - - -#define WRITE_HEADER(n,m) \ - ((m & PVRSRV_TRACE_##n##_MASK) << PVRSRV_TRACE_##n##_SHIFT) - -#define READ_HEADER(n,m) \ - ((m & (PVRSRV_TRACE_##n##_MASK << PVRSRV_TRACE_##n##_SHIFT)) >> PVRSRV_TRACE_##n##_SHIFT) - -#define TIME_TRACE_BUFFER_SIZE 4096 - -#define PVRSRV_TRACE_TYPE_UI8 0 -#define PVRSRV_TRACE_TYPE_UI16 1 -#define PVRSRV_TRACE_TYPE_UI32 2 -#define PVRSRV_TRACE_TYPE_UI64 3 - -#define PVRSRV_TRACE_TYPE_SYNC 15 - #define PVRSRV_TRACE_SYNC_UID 0 - #define PVRSRV_TRACE_SYNC_WOP 1 - #define PVRSRV_TRACE_SYNC_WOC 2 - #define PVRSRV_TRACE_SYNC_ROP 3 - #define PVRSRV_TRACE_SYNC_ROC 4 - #define PVRSRV_TRACE_SYNC_WO_DEV_VADDR 5 - #define PVRSRV_TRACE_SYNC_RO_DEV_VADDR 6 - #define PVRSRV_TRACE_SYNC_OP 7 -#define PVRSRV_TRACE_TYPE_SYNC_SIZE ((PVRSRV_TRACE_SYNC_OP + 1) * sizeof(IMG_UINT32)) - -#endif diff --git a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_tokens.h b/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_tokens.h deleted file mode 100644 index 21ea5fb..0000000 --- a/drivers/staging/cdv/pvr/services4/srvkm/include/ttrace_tokens.h +++ /dev/null @@ -1,84 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef __TTRACE_TOKENS_H__ -#define __TTRACE_TOKENS_H__ - -#define PVRSRV_TRACE_GROUP_KICK 0 -#define PVRSRV_TRACE_GROUP_TRANSFER 1 -#define PVRSRV_TRACE_GROUP_QUEUE 2 -#define PVRSRV_TRACE_GROUP_POWER 3 -#define PVRSRV_TRACE_GROUP_MKSYNC 4 - -#define PVRSRV_TRACE_GROUP_PADDING 255 - -#define PVRSRV_TRACE_CLASS_FUNCTION_ENTER 0 -#define PVRSRV_TRACE_CLASS_FUNCTION_EXIT 1 -#define PVRSRV_TRACE_CLASS_SYNC 2 -#define PVRSRV_TRACE_CLASS_CCB 3 -#define PVRSRV_TRACE_CLASS_CMD_START 4 -#define PVRSRV_TRACE_CLASS_CMD_END 5 -#define PVRSRV_TRACE_CLASS_CMD_COMP_START 6 -#define PVRSRV_TRACE_CLASS_CMD_COMP_END 7 - -#define PVRSRV_TRACE_CLASS_NONE 255 - -#define PVRSRV_SYNCOP_SAMPLE 0 -#define PVRSRV_SYNCOP_COMPLETE 1 -#define PVRSRV_SYNCOP_DUMP 2 - -#define KICK_TOKEN_DOKICK 0 -#define KICK_TOKEN_CCB_OFFSET 1 -#define KICK_TOKEN_TA3D_SYNC 2 -#define KICK_TOKEN_TA_SYNC 3 -#define KICK_TOKEN_3D_SYNC 4 -#define KICK_TOKEN_SRC_SYNC 5 -#define KICK_TOKEN_DST_SYNC 6 - -#define TRANSFER_TOKEN_SUBMIT 0 -#define TRANSFER_TOKEN_TA_SYNC 1 -#define TRANSFER_TOKEN_3D_SYNC 2 -#define TRANSFER_TOKEN_SRC_SYNC 3 -#define TRANSFER_TOKEN_DST_SYNC 4 -#define TRANSFER_TOKEN_CCB_OFFSET 5 - -#define QUEUE_TOKEN_GET_SPACE 0 -#define QUEUE_TOKEN_INSERTKM 1 -#define QUEUE_TOKEN_SUBMITKM 2 -#define QUEUE_TOKEN_PROCESS_COMMAND 3 -#define QUEUE_TOKEN_PROCESS_QUEUES 4 -#define QUEUE_TOKEN_COMMAND_COMPLETE 5 -#define QUEUE_TOKEN_UPDATE_DST 6 -#define QUEUE_TOKEN_UPDATE_SRC 7 -#define QUEUE_TOKEN_SRC_SYNC 8 -#define QUEUE_TOKEN_DST_SYNC 9 -#define QUEUE_TOKEN_COMMAND_TYPE 10 - -#define MKSYNC_TOKEN_KERNEL_CCB_OFFSET 0 -#define MKSYNC_TOKEN_CORE_CLK 1 -#define MKSYNC_TOKEN_UKERNEL_CLK 2 - -#endif diff --git a/drivers/staging/cdv/pvr/services4/system/include/syscommon.h b/drivers/staging/cdv/pvr/services4/system/include/syscommon.h deleted file mode 100644 index 6131e13..0000000 --- a/drivers/staging/cdv/pvr/services4/system/include/syscommon.h +++ /dev/null @@ -1,262 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _SYSCOMMON_H -#define _SYSCOMMON_H - -#include "sysconfig.h" -#include "sysinfo.h" -#include "servicesint.h" -#include "queue.h" -#include "power.h" -#include "resman.h" -#include "ra.h" -#include "device.h" -#include "buffer_manager.h" -#include "pvr_debug.h" -#include "services.h" - -#if defined(NO_HARDWARE) && defined(__linux__) && defined(__KERNEL__) -#include -#endif - -#if defined (__cplusplus) -extern "C" { -#endif - -typedef struct _SYS_DEVICE_ID_TAG -{ - IMG_UINT32 uiID; - IMG_BOOL bInUse; - -} SYS_DEVICE_ID; - - -#define SYS_MAX_LOCAL_DEVMEM_ARENAS 4 - -typedef IMG_HANDLE (*PFN_HTIMER_CREATE) (IMG_VOID); -typedef IMG_UINT32 (*PFN_HTIMER_GETUS) (IMG_HANDLE); -typedef IMG_VOID (*PFN_HTIMER_DESTROY) (IMG_HANDLE); -typedef struct _SYS_DATA_TAG_ -{ - IMG_UINT32 ui32NumDevices; - SYS_DEVICE_ID sDeviceID[SYS_DEVICE_COUNT]; - PVRSRV_DEVICE_NODE *psDeviceNodeList; - PVRSRV_POWER_DEV *psPowerDeviceList; - PVRSRV_RESOURCE sPowerStateChangeResource; - PVRSRV_SYS_POWER_STATE eCurrentPowerState; - PVRSRV_SYS_POWER_STATE eFailedPowerState; - IMG_UINT32 ui32CurrentOSPowerState; - PVRSRV_QUEUE_INFO *psQueueList; - PVRSRV_KERNEL_SYNC_INFO *psSharedSyncInfoList; - IMG_PVOID pvEnvSpecificData; - IMG_PVOID pvSysSpecificData; - PVRSRV_RESOURCE sQProcessResource; - IMG_VOID *pvSOCRegsBase; - IMG_HANDLE hSOCTimerRegisterOSMemHandle; - IMG_UINT32 *pvSOCTimerRegisterKM; - IMG_VOID *pvSOCClockGateRegsBase; - IMG_UINT32 ui32SOCClockGateRegsSize; - - struct _DEVICE_COMMAND_DATA_ *apsDeviceCommandData[SYS_DEVICE_COUNT]; - - - RA_ARENA *apsLocalDevMemArena[SYS_MAX_LOCAL_DEVMEM_ARENAS]; - - IMG_CHAR *pszVersionString; -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_EVENTOBJECT_KM *psGlobalEventObject; -#else - PVRSRV_EVENTOBJECT *psGlobalEventObject; -#endif - - PVRSRV_MISC_INFO_CPUCACHEOP_TYPE ePendingCacheOpType; - - PFN_HTIMER_CREATE pfnHighResTimerCreate; - PFN_HTIMER_GETUS pfnHighResTimerGetus; - PFN_HTIMER_DESTROY pfnHighResTimerDestroy; -} SYS_DATA; - - - -PVRSRV_ERROR SysInitialise(IMG_VOID); -PVRSRV_ERROR SysFinalise(IMG_VOID); - -PVRSRV_ERROR SysDeinitialise(SYS_DATA *psSysData); -PVRSRV_ERROR SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_VOID **ppvDeviceMap); - -IMG_VOID SysRegisterExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode); -IMG_VOID SysRemoveExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData, - PVRSRV_DEVICE_NODE *psDeviceNode); - -IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits); - -PVRSRV_ERROR SysResetDevice(IMG_UINT32 ui32DeviceIndex); - -PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState); -PVRSRV_ERROR SysSystemPostPowerState(PVRSRV_SYS_POWER_STATE eNewPowerState); -PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); -PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState); - -#if defined(SYS_CUSTOM_POWERLOCK_WRAP) -PVRSRV_ERROR SysPowerLockWrap(IMG_BOOL bTryLock); -IMG_VOID SysPowerLockUnwrap(IMG_VOID); -#endif - -PVRSRV_ERROR SysOEMFunction ( IMG_UINT32 ui32ID, - IMG_VOID *pvIn, - IMG_UINT32 ulInSize, - IMG_VOID *pvOut, - IMG_UINT32 ulOutSize); - - -IMG_DEV_PHYADDR SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_CPU_PHYADDR cpu_paddr); -IMG_DEV_PHYADDR SysSysPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_SYS_PHYADDR SysPAddr); -IMG_SYS_PHYADDR SysDevPAddrToSysPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_DEV_PHYADDR SysPAddr); -IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr (IMG_SYS_PHYADDR SysPAddr); -IMG_SYS_PHYADDR SysCpuPAddrToSysPAddr (IMG_CPU_PHYADDR cpu_paddr); -#if defined(PVR_LMA) -IMG_BOOL SysVerifyCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_CPU_PHYADDR CpuPAddr); -IMG_BOOL SysVerifySysPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_SYS_PHYADDR SysPAddr); -#endif - -extern SYS_DATA* gpsSysData; - - -#if !defined(USE_CODE) - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysAcquireData) -#endif -static INLINE IMG_VOID SysAcquireData(SYS_DATA **ppsSysData) -{ - - *ppsSysData = gpsSysData; - - - - - - PVR_ASSERT (gpsSysData != IMG_NULL); -} - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysAcquireDataNoCheck) -#endif -static INLINE SYS_DATA * SysAcquireDataNoCheck(IMG_VOID) -{ - - return gpsSysData; -} - - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysInitialiseCommon) -#endif -static INLINE PVRSRV_ERROR SysInitialiseCommon(SYS_DATA *psSysData) -{ - PVRSRV_ERROR eError; - - - eError = PVRSRVInit(psSysData); - - return eError; -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysDeinitialiseCommon) -#endif -static INLINE IMG_VOID SysDeinitialiseCommon(SYS_DATA *psSysData) -{ - - PVRSRVDeInit(psSysData); - - OSDestroyResource(&psSysData->sPowerStateChangeResource); -} -#endif - - -#if !(defined(NO_HARDWARE) && defined(__linux__) && defined(__KERNEL__)) -#define SysReadHWReg(p, o) OSReadHWReg(p, o) -#define SysWriteHWReg(p, o, v) OSWriteHWReg(p, o, v) -#else -static inline IMG_UINT32 SysReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset) -{ - return (IMG_UINT32) readl(pvLinRegBaseAddr + ui32Offset); -} - -static inline IMG_VOID SysWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value) -{ - writel(ui32Value, pvLinRegBaseAddr + ui32Offset); -} -#endif - -#if defined(__cplusplus) -} -#endif - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysHighResTimerCreate) -#endif -static INLINE IMG_HANDLE SysHighResTimerCreate(IMG_VOID) -{ - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - return psSysData->pfnHighResTimerCreate(); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysHighResTimerGetus) -#endif -static INLINE IMG_UINT32 SysHighResTimerGetus(IMG_HANDLE hTimer) -{ - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - return psSysData->pfnHighResTimerGetus(hTimer); -} - -#ifdef INLINE_IS_PRAGMA -#pragma inline(SysHighResTimerDestroy) -#endif -static INLINE IMG_VOID SysHighResTimerDestroy(IMG_HANDLE hTimer) -{ - SYS_DATA *psSysData; - - SysAcquireData(&psSysData); - psSysData->pfnHighResTimerDestroy(hTimer); -} -#endif - diff --git a/drivers/staging/cdv/pvr/services4/system/unified/extsyscache.h b/drivers/staging/cdv/pvr/services4/system/unified/extsyscache.h deleted file mode 100644 index c3b9517..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/extsyscache.h +++ /dev/null @@ -1,44 +0,0 @@ -#include "sgxdefs.h" - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) -/* - byte offsets to ext cache control registers from the - base of the external register bank - - TO BE SPECIFIED IN SYSTEM PORT! -*/ -/* global invalidate */ -/* This address must be the physical address of the cache controller rounded - down to the nearest page*/ -#define SYS_EXT_SYS_CACHE_GBL_INV_REG_OFFSET 0x80000000 - - -/* per address invalidate (data written in the address) */ -/* This is the offset within the page to the cache controller which we want - to write */ -#define SYS_EXT_SYS_CACHE_ADDR_INV_REG_OFFSET 0x0 - -/* - FIXME: these two defines should really live in sgxconfig.h as a heap define - not possible right now due to .h include issues -*/ - -/* This address must not live within the same virtal address as - any of the heaps, but must be within a shared heap */ - -#if SGX_FEATURE_ADDRESS_SPACE_SIZE == 32 -#define SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE (0xF8FFE000) -#endif - -#if SGX_FEATURE_ADDRESS_SPACE_SIZE == 28 -#define SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE (0x0F3FE000) -#endif - -/* assume 4k is enough range to cover all control registers */ -#define SGX_EXT_SYSTEM_CACHE_REGS_SIZE 0x00001000 - -#define INVALIDATE_EXT_SYSTEM_CACHE_INLINE(RegA) \ - mov RegA, HSH(SGX_EXT_SYSTEM_CACHE_REGS_DEVVADDR_BASE); \ - stad.bpcache [RegA, HSH(SYS_EXT_SYS_CACHE_ADDR_INV_REG_OFFSET>>2)], HSH(0); \ - idf drc0, st; \ - wdf drc0; -#endif /* SUPPORT_EXTERNAL_SYSTEM_CACHE */ diff --git a/drivers/staging/cdv/pvr/services4/system/unified/oemfuncs.h b/drivers/staging/cdv/pvr/services4/system/unified/oemfuncs.h deleted file mode 100644 index 0d3b6d7..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/oemfuncs.h +++ /dev/null @@ -1,72 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__OEMFUNCS_H__) -#define __OEMFUNCS_H__ - -#if defined (__cplusplus) -extern "C" { -#endif - -#define OEM_EXCHANGE_POWER_STATE (1<<0) -#define OEM_DEVICE_MEMORY_POWER (1<<1) -#define OEM_DISPLAY_POWER (1<<2) -#define OEM_GET_EXT_FUNCS (1<<3) - -typedef struct OEM_ACCESS_INFO_TAG -{ - IMG_UINT32 ui32Size; - IMG_UINT32 ui32FBPhysBaseAddress; - IMG_UINT32 ui32FBMemAvailable; - IMG_UINT32 ui32SysPhysBaseAddress; - IMG_UINT32 ui32SysSize; - IMG_UINT32 ui32DevIRQ; -} OEM_ACCESS_INFO, *POEM_ACCESS_INFO; - -typedef IMG_UINT32 (*PFN_SRV_BRIDGEDISPATCH)( IMG_UINT32 Ioctl, - IMG_BYTE *pInBuf, - IMG_UINT32 InBufLen, - IMG_BYTE *pOutBuf, - IMG_UINT32 OutBufLen, - IMG_UINT32 *pdwBytesTransferred); - - -typedef PVRSRV_ERROR (*PFN_SRV_READREGSTRING)(PPVRSRV_REGISTRY_INFO psRegInfo); - - -typedef struct PVRSRV_DC_OEM_JTABLE_TAG -{ - PFN_SRV_BRIDGEDISPATCH pfnOEMBridgeDispatch; - PFN_SRV_READREGSTRING pfnOEMReadRegistryString; - PFN_SRV_READREGSTRING pfnOEMWriteRegistryString; - -} PVRSRV_DC_OEM_JTABLE; -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.c b/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.c deleted file mode 100644 index c3ba410..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.c +++ /dev/null @@ -1,202 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include - -#include "pvr_drm_shared.h" - -#include "services_headers.h" -#include "private_data.h" -#include "pvr_drm.h" - -#include "pvr_bridge.h" -#include "mutex.h" -#include "lock.h" -#include "linkage.h" -#include "mmap.h" - -#if defined(PDUMP) -#include "linuxsrv.h" -#endif - -#include "sys_pvr_drm_import.h" - -#include "sys_pvr_drm_export.h" - -int -SYSPVRInit(void) -{ - PVRDPFInit(); - - return 0; -} - -int -SYSPVRLoad(struct drm_device *dev, unsigned long flags) -{ - return PVRSRVDrmLoad(dev, flags); -} - -int -SYSPVROpen(struct drm_device *dev, struct drm_file *pFile) -{ - return PVRSRVDrmOpen(dev, pFile); -} - -int -SYSPVRUnload(struct drm_device *dev) -{ - return PVRSRVDrmUnload(dev); -} - -void -SYSPVRPostClose(struct drm_device *dev, struct drm_file *file) -{ - return PVRSRVDrmPostClose(dev, file); -} - -int -SYSPVRBridgeDispatch(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ - return PVRSRV_BridgeDispatchKM(dev, arg, pFile); -} - -int -SYSPVRDCDriverIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ - return PVRDRM_Dummy_ioctl(dev, arg, pFile); - -} - -int -SYSPVRBCDriverIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ - return PVRDRM_Dummy_ioctl(dev, arg, pFile); - -} - -int -SYSPVRIsMaster(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ - return PVRDRMIsMaster(dev, arg, pFile); -} - -int -SYSPVRUnprivCmd(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ - return PVRDRMUnprivCmd(dev, arg, pFile); -} - -int -SYSPVRMMap(struct file* pFile, struct vm_area_struct* ps_vma) -{ - int ret; - - ret = PVRMMap(pFile, ps_vma); - if (ret == -ENOENT) - { - ret = drm_mmap(pFile, ps_vma); - } - - return ret; -} - -int -SYSPVRDBGDrivIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -{ -#if defined(PDUMP) - return dbgdrv_ioctl(dev, arg, pFile); -#else - PVR_UNREFERENCED_PARAMETER(dev); - PVR_UNREFERENCED_PARAMETER(arg); - PVR_UNREFERENCED_PARAMETER(pFile); - - return -EINVAL; -#endif -} - -void -SYSPVRSuspendLock(struct drm_device *dev) -{ - PVR_UNREFERENCED_PARAMETER(dev); - - LinuxLockMutex(&gPVRSRVLock); -} - -void -SYSPVRSuspendUnlock(struct drm_device *dev) -{ - PVR_UNREFERENCED_PARAMETER(dev); - - LinuxUnLockMutex(&gPVRSRVLock); -} - -int -SYSPVRPreSuspend(struct drm_device *dev) -{ - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3) != PVRSRV_OK) - { - return -EBUSY; - } - -#if defined(DISPLAY_CONTROLLER) - if (PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Suspend)(dev) != 0) - { - (void)PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0); - return -EBUSY; - } -#else - PVR_UNREFERENCED_PARAMETER(dev); -#endif - - return 0; -} - -int -SYSPVRPostSuspend(struct drm_device *dev) -{ - if (PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D0) != PVRSRV_OK) - { - return -EBUSY; - } - - return 0; -} - -int -SYSPVRResume(struct drm_device *dev) -{ -#if defined(DISPLAY_CONTROLLER) - if (PVR_DRM_MAKENAME(DISPLAY_CONTROLLER, _Resume)(dev) != 0) - { - return -EINVAL; - } -#else - PVR_UNREFERENCED_PARAMETER(dev); -#endif - return 0; -} diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.h b/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.h deleted file mode 100644 index f2fc6bf..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_export.h +++ /dev/null @@ -1,97 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYS_PVR_DRM_EXPORT_H__) -#define __SYS_PVR_DRM_EXPORT_H__ - -#include "pvr_drm_shared.h" - -#if defined(__KERNEL__) - -#include "services_headers.h" -#include "private_data.h" -#include "pvr_drm.h" - -#include "pvr_bridge.h" - -#if defined(PDUMP) -#include "linuxsrv.h" -#endif - -#define PVR_DRM_SRVKM_IOCTL \ - DRM_IOW(DRM_COMMAND_BASE + PVR_DRM_SRVKM_CMD, PVRSRV_BRIDGE_PACKAGE) - -#define PVR_DRM_DISP_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_DISP_CMD) - -#define PVR_DRM_BC_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_BC_CMD) - -#define PVR_DRM_IS_MASTER_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_IS_MASTER_CMD) - -#define PVR_DRM_UNPRIV_IOCTL \ - DRM_IOWR(DRM_COMMAND_BASE + PVR_DRM_UNPRIV_CMD, IMG_UINT32) - -#if defined(PDUMP) -#define PVR_DRM_DBGDRV_IOCTL \ - DRM_IOW(DRM_COMMAND_BASE + PVR_DRM_DBGDRV_CMD, IOCTL_PACKAGE) -#else -#define PVR_DRM_DBGDRV_IOCTL \ - DRM_IO(DRM_COMMAND_BASE + PVR_DRM_DBGDRV_CMD) -#endif - -int SYSPVRInit(void); -int SYSPVRLoad(struct drm_device *dev, unsigned long flags); -int SYSPVROpen(struct drm_device *dev, struct drm_file *pFile); -int SYSPVRUnload(struct drm_device *dev); -void SYSPVRPostClose(struct drm_device *dev, struct drm_file *file); -int SYSPVRBridgeDispatch(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int SYSPVRDCDriverIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int SYSPVRBCDriverIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int SYSPVRIsMaster(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); -int SYSPVRUnprivCmd(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); - -int SYSPVRMMap(struct file* pFile, struct vm_area_struct* ps_vma); - -int SYSPVRDBGDrivIoctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile); - -int SYSPVRServiceSGXInterrupt(struct drm_device *dev); - -void SYSPVRSuspendLock(struct drm_device *dev); -void SYSPVRSuspendUnlock(struct drm_device *dev); -int SYSPVRPreSuspend(struct drm_device *dev); -int SYSPVRPostSuspend(struct drm_device *dev); -int SYSPVRResume(struct drm_device *dev); - -int BC_Video_ModInit(void); -int BC_Video_ModCleanup(void); -int BC_Video_Bridge(struct drm_device *dev, IMG_VOID *arg, struct drm_file *file_priv); - -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_import.h b/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_import.h deleted file mode 100644 index 635d903..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sys_pvr_drm_import.h +++ /dev/null @@ -1,46 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYS_PVR_DRM_IMPORT_H__) -#define __SYS_PVR_DRM_IMPORT_H__ - -#if defined(__KERNEL__) -#include "psb_drm.h" -#endif - -#define DRM_PSB_PLACEMENT_OFFSET 0x13 - -#if 0 -#define DRM_PVR_RESERVED1 0x0D -#define DRM_PVR_RESERVED2 0x0E -#define DRM_PVR_RESERVED3 0x0F -#define DRM_PVR_RESERVED4 0x10 -#define DRM_PVR_RESERVED5 0x11 -#define DRM_PVR_RESERVED6 0x12 -#endif - - -#endif diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.c b/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.c deleted file mode 100644 index 86db743..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.c +++ /dev/null @@ -1,1022 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "linux/pci.h" - -#include "sgxdefs.h" -#include "services_headers.h" -#include "kerneldisplay.h" -#include "oemfuncs.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#include "pdump_km.h" -#include "syslocal.h" -#include "env_data.h" -#include "psb_drv.h" -#include "psb_powermgmt.h" -#include "sys_pvr_drm_export.h" -#include "msvdx_power.h" - - -/* Graphics MSI address and data region in PCIx */ -#define MRST_PCIx_MSI_ADDR_LOC 0x94 -#define MRST_PCIx_MSI_DATA_LOC 0x98 - -#define SYS_SGX_CLOCK_SPEED (400000000) -#define SYS_SGX_HWRECOVERY_TIMEOUT_FREQ (100) -#define SYS_SGX_PDS_TIMER_FREQ (1000) -#define SYS_SGX_ACTIVE_POWER_LATENCY_MS (5) - -#define DRI_DRM_STATIC -SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; -SYS_DATA gsSysData; - -static SYS_SPECIFIC_DATA gsSysSpecificData; - -IMG_UINT32 gui32SGXDeviceID; -extern IMG_UINT32 gui32MRSTDisplayDeviceID; -IMG_UINT32 gui32MRSTMSVDXDeviceID; -IMG_UINT32 gui32MRSTTOPAZDeviceID; - -static SGX_DEVICE_MAP gsSGXDeviceMap; -extern struct drm_device *gpDrmDevice; - -static PVRSRV_DEVICE_NODE *gpsSGXDevNode; - -IMG_CPU_VIRTADDR gsPoulsboRegsCPUVaddr; - -IMG_CPU_VIRTADDR gsPoulsboDisplayRegsCPUVaddr; - -extern struct pci_dev *gpsPVRLDMDev; - -#define POULSBO_ADDR_RANGE_INDEX (MMADR_INDEX - 4) -#define POULSBO_HP_ADDR_RANGE_INDEX (GMADR_INDEX - 4) -static PVRSRV_ERROR PCIInitDev(SYS_DATA *psSysData) -{ - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - IMG_UINT32 ui32MaxOffset = POULSBO_MAX_OFFSET; - - if (!IS_CDV(gpDrmDevice)) - { - PVR_DPF((PVR_DBG_ERROR,"PCIInitDev: Device not supported")); - return PVRSRV_ERROR_NOT_SUPPORTED; - } - - psSysSpecData->hSGXPCI = OSPCISetDev((IMG_VOID *)psSysSpecData->psPCIDev, 0); - ui32MaxOffset = PSB_POULSBO_MAX_OFFSET; - - if (!psSysSpecData->hSGXPCI) - { - PVR_DPF((PVR_DBG_ERROR,"PCIInitDev: Failed to acquire PCI device")); - return PVRSRV_ERROR_PCI_DEVICE_NOT_FOUND; - } - - SYS_SPECIFIC_DATA_SET(psSysSpecData, SYS_SPECIFIC_DATA_PCI_ACQUIRE_DEV); - - PVR_TRACE(("PCI memory region: %x to %x", OSPCIAddrRangeStart(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX), OSPCIAddrRangeEnd(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX))); -#if defined(SGX_FEATURE_HOST_PORT) - PVR_TRACE(("Host Port region: %x to %x", OSPCIAddrRangeStart(psSysSpecData->hSGXPCI, POULSBO_HP_ADDR_RANGE_INDEX), OSPCIAddrRangeEnd(psSysSpecData->hSGXPCI, POULSBO_HP_ADDR_RANGE_INDEX))); -#endif - - if (OSPCIAddrRangeLen(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX) < ui32MaxOffset) - { - PVR_DPF((PVR_DBG_ERROR,"PCIInitDev: Device memory region isn't big enough")); - return PVRSRV_ERROR_PCI_REGION_TOO_SMALL; - } - - - if (OSPCIRequestAddrRange(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PCIInitDev: Device memory region not available")); - return PVRSRV_ERROR_PCI_REGION_UNAVAILABLE; - - } - SYS_SPECIFIC_DATA_SET(psSysSpecData, SYS_SPECIFIC_DATA_PCI_REQUEST_SGX_ADDR_RANGE); - -#if defined(SGX_FEATURE_HOST_PORT) - - if (OSPCIRequestAddrRange(psSysSpecData->hSGXPCI, POULSBO_HP_ADDR_RANGE_INDEX) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"PCIInitDev: Host Port region not available")); - return PVRSRV_ERROR_PCI_REGION_UNAVAILABLE; - } - SYS_SPECIFIC_DATA_SET(psSysSpecData, SYS_SPECIFIC_DATA_PCI_REQUEST_HOST_PORT_RANGE); -#endif - return PVRSRV_OK; -} - -static IMG_VOID PCIDeInitDev(SYS_DATA *psSysData) -{ - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_PCI_REQUEST_SGX_ADDR_RANGE)) - { - OSPCIReleaseAddrRange(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX); - } -#if defined(SGX_FEATURE_HOST_PORT) - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_PCI_REQUEST_HOST_PORT_RANGE)) - { - OSPCIReleaseAddrRange(psSysSpecData->hSGXPCI, POULSBO_HP_ADDR_RANGE_INDEX); - } -#endif - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_PCI_ACQUIRE_DEV)) - { - OSPCIReleaseDev(psSysSpecData->hSGXPCI); - } -} -static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) -{ - IMG_UINT32 ui32BaseAddr = 0; - IMG_UINT32 ui32IRQ = 0; - -#if defined(SGX_FEATURE_HOST_PORT) - IMG_UINT32 ui32HostPortAddr = 0; -#endif - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - -#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE) - struct drm_psb_private *dev_priv = (struct drm_psb_private *) gpDrmDevice->dev_private; -#endif - - ui32BaseAddr = OSPCIAddrRangeStart(psSysSpecData->hSGXPCI, POULSBO_ADDR_RANGE_INDEX); -#if defined(SGX_FEATURE_HOST_PORT) - ui32HostPortAddr = OSPCIAddrRangeStart(psSysSpecData->hSGXPCI, POULSBO_HP_ADDR_RANGE_INDEX); -#endif - if (OSPCIIRQ(psSysSpecData->hSGXPCI, &ui32IRQ) != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysLocateDevices: Couldn't get IRQ")); - return PVRSRV_ERROR_INVALID_DEVICE; - } - - PVR_TRACE(("ui32BaseAddr: %08X", ui32BaseAddr)); -#if defined(SGX_FEATURE_HOST_PORT) - PVR_TRACE(("ui32HostPortAddr: %08X", ui32HostPortAddr)); -#endif - PVR_TRACE(("IRQ: %d", ui32IRQ)); - - - gsSGXDeviceMap.ui32Flags = 0x0; - gsSGXDeviceMap.ui32IRQ = ui32IRQ; - - - gsSGXDeviceMap.sRegsSysPBase.uiAddr = ui32BaseAddr + (IS_CDV(gpDrmDevice) ? SGX_REGS_OFFSET : PSB_SGX_REGS_OFFSET); - gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); - gsSGXDeviceMap.ui32RegsSize = SGX_REG_SIZE; - -#if defined(SGX_FEATURE_HOST_PORT) - - gsSGXDeviceMap.ui32Flags = SGX_HOSTPORT_PRESENT; - gsSGXDeviceMap.sHPSysPBase.uiAddr = ui32HostPortAddr; - gsSGXDeviceMap.sHPCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sHPSysPBase); - if (IS_CDV(gpDrmDevice) ) - gsSGXDeviceMap.ui32HPSize = SYS_SGX_HP_SIZE; - else - gsSGXDeviceMap.ui32HPSize = PSB_SYS_SGX_HP_SIZE; -#endif - -#if defined(MRST_SLAVEPORT) - - gsSGXDeviceMap.sSPSysPBase.uiAddr = ui32BaseAddr + MRST_SGX_SP_OFFSET; - gsSGXDeviceMap.sSPCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sSPSysPBase); - gsSGXDeviceMap.ui32SPSize = SGX_SP_SIZE; -#endif - - - - gsSGXDeviceMap.sLocalMemSysPBase.uiAddr = 0; - gsSGXDeviceMap.sLocalMemDevPBase.uiAddr = 0; - gsSGXDeviceMap.sLocalMemCpuPBase.uiAddr = 0; - gsSGXDeviceMap.ui32LocalMemSize = 0; - - - { - IMG_SYS_PHYADDR sPoulsboRegsCpuPBase; - sPoulsboRegsCpuPBase.uiAddr = ui32BaseAddr + POULSBO_REGS_OFFSET; - gsPoulsboRegsCPUVaddr = OSMapPhysToLin(SysSysPAddrToCpuPAddr(sPoulsboRegsCpuPBase), - POULSBO_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - sPoulsboRegsCpuPBase.uiAddr = ui32BaseAddr + POULSBO_DISPLAY_REGS_OFFSET; - gsPoulsboDisplayRegsCPUVaddr = OSMapPhysToLin(SysSysPAddrToCpuPAddr(sPoulsboRegsCpuPBase), - POULSBO_DISPLAY_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - } - -#if defined(PDUMP) - { - - static IMG_CHAR pszPDumpDevName[] = "SGXMEM"; - gsSGXDeviceMap.pszPDumpDevName = pszPDumpDevName; - } -#endif - - return PVRSRV_OK; -} - - -#define VERSION_STR_MAX_LEN_TEMPLATE "SGX revision = 000.000.000" -static PVRSRV_ERROR SysCreateVersionString(SYS_DATA *psSysData) -{ - IMG_UINT32 ui32MaxStrLen; - PVRSRV_ERROR eError; - IMG_INT32 i32Count; - IMG_CHAR *pszVersionString; - IMG_UINT32 ui32SGXRevision = 0; - IMG_VOID *pvSGXRegs; - - pvSGXRegs = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase, - gsSGXDeviceMap.ui32RegsSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - if (pvSGXRegs != IMG_NULL) - { - ui32SGXRevision = OSReadHWReg(pvSGXRegs, EUR_CR_CORE_REVISION); - OSUnMapPhysToLin(pvSGXRegs, - gsSGXDeviceMap.ui32RegsSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - } - else - { - PVR_DPF((PVR_DBG_ERROR,"SysCreateVersionString: Couldn't map SGX registers")); - } - - ui32MaxStrLen = OSStringLength(VERSION_STR_MAX_LEN_TEMPLATE); - eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32MaxStrLen + 1, - (IMG_PVOID *)&pszVersionString, - IMG_NULL, - "Version String"); - if(eError != PVRSRV_OK) - { - return eError; - } - - i32Count = OSSNPrintf(pszVersionString, ui32MaxStrLen + 1, - "SGX revision = %u.%u.%u", - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MAJOR_MASK) - >> EUR_CR_CORE_REVISION_MAJOR_SHIFT), - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MINOR_MASK) - >> EUR_CR_CORE_REVISION_MINOR_SHIFT), - (IMG_UINT)((ui32SGXRevision & EUR_CR_CORE_REVISION_MAINTENANCE_MASK) - >> EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT) - ); - if(i32Count == -1) - { - ui32MaxStrLen = OSStringLength(VERSION_STR_MAX_LEN_TEMPLATE); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32MaxStrLen + 1, - pszVersionString, - IMG_NULL); - - return PVRSRV_ERROR_INVALID_PARAMS; - } - - psSysData->pszVersionString = pszVersionString; - - return PVRSRV_OK; -} - -static IMG_VOID SysFreeVersionString(SYS_DATA *psSysData) -{ - if(psSysData->pszVersionString) - { - IMG_UINT32 ui32MaxStrLen; - ui32MaxStrLen = OSStringLength(VERSION_STR_MAX_LEN_TEMPLATE); - OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, - ui32MaxStrLen+1, - psSysData->pszVersionString, - IMG_NULL); - psSysData->pszVersionString = IMG_NULL; - } -} - -PVRSRV_ERROR SysInitialise(IMG_VOID) -{ - IMG_UINT32 i = 0; - PVRSRV_ERROR eError; - PVRSRV_DEVICE_NODE *psDeviceNode; - SGX_TIMING_INFORMATION* psTimingInfo; - - gpsSysData = &gsSysData; - OSMemSet(gpsSysData, 0, sizeof(SYS_DATA)); - - gpsSysData->pvSysSpecificData = &gsSysSpecificData; - gsSysSpecificData.ui32SysSpecificData = 0; - - PVR_ASSERT(gpsPVRLDMDev != IMG_NULL); - gsSysSpecificData.psPCIDev = gpsPVRLDMDev; - - eError = OSInitEnvData(&gpsSysData->pvEnvSpecificData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to setup env structure")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - - psTimingInfo = &gsSGXDeviceMap.sTimingInfo; - psTimingInfo->ui32CoreClockSpeed = SYS_SGX_CLOCK_SPEED; - psTimingInfo->ui32HWRecoveryFreq = SYS_SGX_HWRECOVERY_TIMEOUT_FREQ; -#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) - psTimingInfo->bEnableActivePM = (drm_psb_ospm != 0); - /*printk(KERN_ERR "SGX APM is %s\n", (drm_psb_ospm != 0)? "enabled":"disabled"); */ -#else - psTimingInfo->bEnableActivePM = IMG_FALSE; -#endif - psTimingInfo->ui32ActivePowManLatencyms = SYS_SGX_ACTIVE_POWER_LATENCY_MS; - psTimingInfo->ui32uKernelFreq = SYS_SGX_PDS_TIMER_FREQ; - - eError = PCIInitDev(gpsSysData); - if (eError != PVRSRV_OK) - { - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - gpsSysData->ui32NumDevices = SYS_DEVICE_COUNT; - - - for(i=0; isDeviceID[i].uiID = i; - gpsSysData->sDeviceID[i].bInUse = IMG_FALSE; - } - - gpsSysData->psDeviceNodeList = IMG_NULL; - gpsSysData->psQueueList = IMG_NULL; - - eError = SysInitialiseCommon(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed in SysInitialiseCommon")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - - - - - eError = SysLocateDevices(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to locate devices")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - - - - eError = PVRSRVRegisterDevice(gpsSysData, SGXRegisterDevice, - DEVICE_SGX_INTERRUPT, &gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to register device!")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - - /* register MSVDX, with 0 interrupt bit, no interrupt will be served */ - eError = PVRSRVRegisterDevice(gpsSysData, MSVDXRegisterDevice, - DEVICE_MSVDX_INTERRUPT, &gui32MRSTMSVDXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to register MSVDXdevice!")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - psDeviceNode = gpsSysData->psDeviceNodeList; - - while(psDeviceNode) - { - - switch(psDeviceNode->sDevId.eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - DEVICE_MEMORY_INFO *psDevMemoryInfo; - DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; - - - psDeviceNode->psLocalDevMemArena = IMG_NULL; - - - psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; - psDeviceMemoryHeap = psDevMemoryInfo->psDeviceMemoryHeap; - - - for(i=0; iui32HeapCount; i++) - { - psDeviceMemoryHeap[i].ui32Attribs |= PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG; -#ifdef OEM_CUSTOMISE - -#endif - } - - gpsSGXDevNode = psDeviceNode; - break; - } - case PVRSRV_DEVICE_TYPE_MSVDX: - /* nothing need to do here */ - break; - case PVRSRV_DEVICE_TYPE_TOPAZ: - break; - default: - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to find SGX device node!")); - return PVRSRV_ERROR_INIT_FAILURE; - } - } - - - psDeviceNode = psDeviceNode->psNext; - } - - PDUMPINIT(); - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_PDUMP_INIT); - - - eError = PVRSRVInitialiseDevice (gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to initialise device!")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_SGX_INITIALISED); - - eError = PVRSRVInitialiseDevice (gui32MRSTMSVDXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to initialise device!")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - - if (0) - { - eError = PVRSRVInitialiseDevice (gui32MRSTTOPAZDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to initialise device!")); - SysDeinitialise(gpsSysData); - gpsSysData = IMG_NULL; - return eError; - } - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysFinalise(IMG_VOID) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - - eError = OSInstallMISR(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysFinalise: OSInstallMISR failed")); - return eError; - } - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_MISR_INSTALLED); - - eError = SysCreateVersionString(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to create a system version string")); - } - else - { - PVR_DPF((PVR_DBG_WARNING, "SysFinalise: Version string: %s", gpsSysData->pszVersionString)); - } - - return eError; -} - -PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) -{ - PVRSRV_ERROR eError; - - SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; - - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_MISR_INSTALLED)) - { - eError = OSUninstallMISR(psSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallMISR failed")); - return eError; - } - } - - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_SGX_INITIALISED)) - { - - eError = PVRSRVDeinitialiseDevice(gui32SGXDeviceID); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: failed to de-init the device")); - return eError; - } - } - - SysFreeVersionString(psSysData); - - PCIDeInitDev(psSysData); - - eError = OSDeInitEnvData(psSysData->pvEnvSpecificData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: failed to de-init env structure")); - return eError; - } - - SysDeinitialiseCommon(gpsSysData); - - - OSUnMapPhysToLin(gsPoulsboRegsCPUVaddr, - POULSBO_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - OSUnMapPhysToLin(gsPoulsboDisplayRegsCPUVaddr, - POULSBO_DISPLAY_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_PDUMP_INIT)) - { - PDUMPDEINIT(); - } - - gpsSysData = IMG_NULL; - - return PVRSRV_OK; -} - -IMG_UINT32 SysGetInterruptSource(SYS_DATA* psSysData, - PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVR_UNREFERENCED_PARAMETER(psSysData); - PVR_UNREFERENCED_PARAMETER(psDeviceNode); - - return 0; -} - -IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) -{ - PVR_UNREFERENCED_PARAMETER(psSysData); - PVR_UNREFERENCED_PARAMETER(ui32ClearBits); -} - - -PVRSRV_ERROR SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE eDeviceType, - IMG_VOID **ppvDeviceMap) -{ - switch(eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - - *ppvDeviceMap = (IMG_VOID*)&gsSGXDeviceMap; - break; - } - default: - { - PVR_DPF((PVR_DBG_ERROR,"SysGetDeviceMemoryMap: unsupported device type")); - } - } - return PVRSRV_OK; -} - - -IMG_DEV_PHYADDR SysCpuPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, - IMG_CPU_PHYADDR CpuPAddr) -{ - IMG_DEV_PHYADDR DevPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - DevPAddr.uiAddr = CpuPAddr.uiAddr; - - return DevPAddr; -} - - -IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr (IMG_SYS_PHYADDR sys_paddr) -{ - IMG_CPU_PHYADDR cpu_paddr; - - - cpu_paddr.uiAddr = sys_paddr.uiAddr; - return cpu_paddr; -} - -IMG_SYS_PHYADDR SysCpuPAddrToSysPAddr (IMG_CPU_PHYADDR cpu_paddr) -{ - IMG_SYS_PHYADDR sys_paddr; - - - sys_paddr.uiAddr = cpu_paddr.uiAddr; - return sys_paddr; -} - - -IMG_DEV_PHYADDR SysSysPAddrToDevPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_SYS_PHYADDR SysPAddr) -{ - IMG_DEV_PHYADDR DevPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - DevPAddr.uiAddr = SysPAddr.uiAddr; - - return DevPAddr; -} - - -IMG_SYS_PHYADDR SysDevPAddrToSysPAddr (PVRSRV_DEVICE_TYPE eDeviceType, IMG_DEV_PHYADDR DevPAddr) -{ - IMG_SYS_PHYADDR SysPAddr; - - PVR_UNREFERENCED_PARAMETER(eDeviceType); - - - SysPAddr.uiAddr = DevPAddr.uiAddr; - - return SysPAddr; -} - - -IMG_VOID SysRegisterExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - - psDeviceNode->ui32SOCInterruptBit = DEVICE_DISP_INTERRUPT; -} - - -IMG_VOID SysRemoveExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode) -{ - PVR_UNREFERENCED_PARAMETER(psDeviceNode); -} - -PVRSRV_ERROR SysOEMFunction ( IMG_UINT32 ui32ID, - IMG_VOID *pvIn, - IMG_UINT32 ulInSize, - IMG_VOID *pvOut, - IMG_UINT32 ulOutSize) -{ - PVR_UNREFERENCED_PARAMETER(ulInSize); - PVR_UNREFERENCED_PARAMETER(pvIn); - - return PVRSRV_ERROR_INVALID_PARAMS; -} - - -static PVRSRV_ERROR SysMapInRegisters(IMG_VOID) -{ - PVRSRV_DEVICE_NODE *psDeviceNodeList; - - psDeviceNodeList = gpsSysData->psDeviceNodeList; - - while (psDeviceNodeList) - { - switch(psDeviceNodeList->sDevId.eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNodeList->pvDevice; - - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_REGS)) - { - psDevInfo->pvRegsBaseKM = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase, - gsSGXDeviceMap.ui32RegsSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - if (!psDevInfo->pvRegsBaseKM) - { - PVR_DPF((PVR_DBG_ERROR,"SysMapInRegisters : Failed to map in SGX registers\n")); - return PVRSRV_ERROR_BAD_MAPPING; - } - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_REGS); - } - psDevInfo->ui32RegSize = gsSGXDeviceMap.ui32RegsSize; - psDevInfo->sRegsPhysBase = gsSGXDeviceMap.sRegsSysPBase; - -#if defined(SGX_FEATURE_HOST_PORT) - if (gsSGXDeviceMap.ui32Flags & SGX_HOSTPORT_PRESENT) - { - if (SYS_SPECIFIC_DATA_TEST(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_HP)) - { - - psDevInfo->pvHostPortBaseKM = OSMapPhysToLin(gsSGXDeviceMap.sHPCpuPBase, - gsSGXDeviceMap.ui32HPSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - if (!psDevInfo->pvHostPortBaseKM) - { - PVR_DPF((PVR_DBG_ERROR,"SysMapInRegisters : Failed to map in host port\n")); - return PVRSRV_ERROR_BAD_MAPPING; - } - SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_HP); - } - psDevInfo->ui32HPSize = gsSGXDeviceMap.ui32HPSize; - psDevInfo->sHPSysPAddr = gsSGXDeviceMap.sHPSysPBase; - } -#endif - break; - } - default: - break; - } - psDeviceNodeList = psDeviceNodeList->psNext; - } - - return PVRSRV_OK; -} - - -static PVRSRV_ERROR SysUnmapRegisters(IMG_VOID) -{ - PVRSRV_DEVICE_NODE *psDeviceNodeList; - - psDeviceNodeList = gpsSysData->psDeviceNodeList; - - while (psDeviceNodeList) - { - switch (psDeviceNodeList->sDevId.eDeviceType) - { - case PVRSRV_DEVICE_TYPE_SGX: - { - PVRSRV_SGXDEV_INFO *psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNodeList->pvDevice; - - if (psDevInfo->pvRegsBaseKM) - { - OSUnMapPhysToLin(psDevInfo->pvRegsBaseKM, - gsSGXDeviceMap.ui32RegsSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_REGS); - } - - psDevInfo->pvRegsBaseKM = IMG_NULL; - psDevInfo->ui32RegSize = 0; - psDevInfo->sRegsPhysBase.uiAddr = 0; - -#if defined(SGX_FEATURE_HOST_PORT) - if (gsSGXDeviceMap.ui32Flags & SGX_HOSTPORT_PRESENT) - { - - if (psDevInfo->pvHostPortBaseKM) - { - OSUnMapPhysToLin(psDevInfo->pvHostPortBaseKM, - gsSGXDeviceMap.ui32HPSize, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNMAP_SGX_HP); - - psDevInfo->pvHostPortBaseKM = IMG_NULL; - } - - psDevInfo->ui32HPSize = 0; - psDevInfo->sHPSysPAddr.uiAddr = 0; - } -#endif - break; - } - default: - break; - } - psDeviceNodeList = psDeviceNodeList->psNext; - } - - OSUnMapPhysToLin(gsPoulsboRegsCPUVaddr, - POULSBO_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - - OSUnMapPhysToLin(gsPoulsboDisplayRegsCPUVaddr, - POULSBO_DISPLAY_REG_SIZE, - PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, - IMG_NULL); - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError= PVRSRV_OK; - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)(gsSysSpecificData.hSGXPCI); - - if (eNewPowerState != gpsSysData->eCurrentPowerState) - { - if ((eNewPowerState == PVRSRV_SYS_POWER_STATE_D3) && - (gpsSysData->eCurrentPowerState < PVRSRV_SYS_POWER_STATE_D3)) - { - SysUnmapRegisters(); - - //Save some pci state that won't get saved properly by pci_save_state() - pci_read_config_dword(psPVRPCI->psPCIDev, 0x5C, &gsSysSpecificData.saveBSM); - pci_read_config_dword(psPVRPCI->psPCIDev, 0xFC, &gsSysSpecificData.saveVBT); - pci_read_config_dword(psPVRPCI->psPCIDev, MRST_PCIx_MSI_ADDR_LOC, &gsSysSpecificData.msi_addr); - pci_read_config_dword(psPVRPCI->psPCIDev, MRST_PCIx_MSI_DATA_LOC, &gsSysSpecificData.msi_data); - } - } - - return eError; -} - -PVRSRV_ERROR SysSystemPostPowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) -{ - PVRSRV_ERROR eError = PVRSRV_OK; - PVR_PCI_DEV *psPVRPCI = (PVR_PCI_DEV *)(gsSysSpecificData.hSGXPCI); - - if (eNewPowerState != gpsSysData->eCurrentPowerState) - { - if ((gpsSysData->eCurrentPowerState == PVRSRV_SYS_POWER_STATE_D3) && - (eNewPowerState < PVRSRV_SYS_POWER_STATE_D3)) - { - //Restore some pci state that will not have gotten restored properly by pci_restore_state() - pci_write_config_dword(psPVRPCI->psPCIDev, 0x5c, gsSysSpecificData.saveBSM); - pci_write_config_dword(psPVRPCI->psPCIDev, 0xFC, gsSysSpecificData.saveVBT); - pci_write_config_dword(psPVRPCI->psPCIDev, MRST_PCIx_MSI_ADDR_LOC, gsSysSpecificData.msi_addr); - pci_write_config_dword(psPVRPCI->psPCIDev, MRST_PCIx_MSI_DATA_LOC, gsSysSpecificData.msi_data); - - eError = SysLocateDevices(gpsSysData); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysSystemPostPowerState: Failed to locate devices")); - return eError; - } - - eError = SysMapInRegisters(); - if (eError != PVRSRV_OK) - { - PVR_DPF((PVR_DBG_ERROR,"SysSystemPostPowerState: Failed to map in registers")); - return eError; - } - } - } - return eError; -} - - -PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - if ((eNewPowerState != eCurrentPowerState) && - (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF)) - { - if (ui32DeviceIndex == gui32SGXDeviceID) - { - PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Remove SGX power")); - psb_irq_uninstall_islands(gpDrmDevice, OSPM_GRAPHICS_ISLAND); - /* XXX don't power off SGX on Cedartrail, windows driver guy said don't - * need that. -- zhenyu */ - /* ospm_power_island_down(OSPM_GRAPHICS_ISLAND); */ - } -#if 1 - else if (ui32DeviceIndex == gui32MRSTMSVDXDeviceID) - { - ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); -#if 0 - ospm_power_using_hw_end(OSPM_VIDEO_DEC_ISLAND); - ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); -#endif - } - else if (ui32DeviceIndex == gui32MRSTTOPAZDeviceID) - { - ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND); - } -#if 0 - ospm_power_using_hw_end(OSPM_VIDEO_ENC_ISLAND); - ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); -#endif -#endif - } - - return PVRSRV_OK; -} - - -PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, - PVRSRV_DEV_POWER_STATE eNewPowerState, - PVRSRV_DEV_POWER_STATE eCurrentPowerState) -{ - if ((eNewPowerState != eCurrentPowerState) && - (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF)) - { - if (ui32DeviceIndex == gui32SGXDeviceID) - { - PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore SGX power")); - /* XXX we don't power off SGX on Cedartrail */ - /* ospm_power_island_up(OSPM_GRAPHICS_ISLAND); */ - } -#if 1 - else if (ui32DeviceIndex == gui32MRSTMSVDXDeviceID) - { - PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore MSVDX power")); - ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); -#if 0 - if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, true)) - { - return PVRSRV_ERROR_GENERIC; - } - - if (!ospm_power_using_hw_begin(OSPM_VIDEO_DEC_ISLAND, true)) - { - ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); - - return PVRSRV_ERROR_GENERIC; - } -#endif - } - else if (ui32DeviceIndex == gui32MRSTTOPAZDeviceID) - { - PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore TOPAZ power")); - - ospm_power_island_up(OSPM_VIDEO_ENC_ISLAND); -#if 0 - if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, true)) - { - return PVRSRV_ERROR_GENERIC; - } - - if (!ospm_power_using_hw_begin(OSPM_VIDEO_ENC_ISLAND, true)) - { - ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); - - return PVRSRV_ERROR_GENERIC; - } -#endif - } -#endif - } - - return PVRSRV_OK; -} - -int SYSPVRServiceSGXInterrupt(struct drm_device *dev) -{ - IMG_BOOL bStatus = IMG_FALSE; - - PVR_UNREFERENCED_PARAMETER(dev); - - if (gpsSGXDevNode != IMG_NULL) - { - bStatus = (*gpsSGXDevNode->pfnDeviceISR)(gpsSGXDevNode->pvISRData); - if (bStatus) - { - OSScheduleMISR((IMG_VOID *)gpsSGXDevNode->psSysData); - } - } - - return bStatus ? 1 : 0; -} diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.h b/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.h deleted file mode 100644 index 814b0b2..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sysconfig.h +++ /dev/null @@ -1,161 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SOCCONFIG_H__) -#define __SOCCONFIG_H__ -#include "syscommon.h" -#include "extsyscache.h" - -#define VS_PRODUCT_NAME "SGX Cedarview" - -#define SYS_NO_POWER_LOCK_TIMEOUT - -/*#define SGX_FEATURE_HOST_PORT */ - -#define SYS_SGX_USSE_COUNT (2) - -#define POULSBO_REGS_OFFSET 0x00000 -#define POULSBO_REG_SIZE 0x2100 - -#define SGX_REGS_OFFSET 0x80000 -#define PSB_SGX_REGS_OFFSET 0x40000 -#define SGX_REG_SIZE 0x4000 -#define MSVDX_REGS_OFFSET 0x90000 - -#ifdef SUPPORT_MSVDX -#define POULSBO_MAX_OFFSET (MSVDX_REGS_OFFSET + MSVDX_REG_SIZE) -#else -#define POULSBO_MAX_OFFSET (SGX_REGS_OFFSET + SGX_REG_SIZE) -#define PSB_POULSBO_MAX_OFFSET (PSB_SGX_REGS_OFFSET + SGX_REG_SIZE) -#endif - -#define SYS_SGX_DEV_VENDOR_ID 0x8086 -#define PSB_SYS_SGX_DEV_DEVICE_ID_1 0x8108 -#define PSB_SYS_SGX_DEV_DEVICE_ID_2 0x8109 - -#define SYS_SGX_DEV_DEVICE_ID 0x4102 - -#define SYS_SGX_DEVICE_IDS \ - {0x8086, 0x8108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PSB_8108}, \ - {0x8086, 0x8109, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PSB_8109}, \ - {0x8086, 0x4100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4101, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4103, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4105, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x4107, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MRST_4100}, \ - {0x8086, 0x0130, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0131, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0133, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0134, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0135, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MDFLD_0130}, \ - {0x8086, 0x0BE0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0x8086, 0x0BE7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CDV_0BE0}, \ - {0, 0, 0} - - -#define MMADR_INDEX 4 -#define IOPORT_INDEX 5 -#define GMADR_INDEX 6 -#define MMUADR_INDEX 7 -#define FBADR_INDEX 23 -#define FBSIZE_INDEX 24 - -#define DISPLAY_SURFACE_SIZE (4 * 1024 * 1024) - -#define DEVICE_SGX_INTERRUPT (1<<0) -#define DEVICE_MSVDX_INTERRUPT (1<<1) -#define DEVICE_DISP_INTERRUPT (1<<2) -#define DEVICE_TOPAZ_INTERRUPT (1<<3) - -#define POULSBO_INTERRUPT_ENABLE_REG 0x20A0 -#define POULSBO_INTERRUPT_IDENTITY_REG 0x20A4 -#define POULSBO_INTERRUPT_MASK_REG 0x20A8 -#define POULSBO_INTERRUPT_STATUS_REG 0x20AC - -#define POULSBO_DISP_MASK (1<<17) -#define POULSBO_THALIA_MASK (1<<18) -#define POULSBO_MSVDX_MASK (1<<19) -#define POULSBO_VSYNC_PIPEA_VBLANK_MASK (1<<7) -#define POULSBO_VSYNC_PIPEA_EVENT_MASK (1<<6) -#define POULSBO_VSYNC_PIPEB_VBLANK_MASK (1<<5) -#define POULSBO_VSYNC_PIPEB_EVENT_MASK (1<<4) - -#define POULSBO_DISPLAY_REGS_OFFSET 0x70000 -#define POULSBO_DISPLAY_REG_SIZE 0x2000 - -#define POULSBO_DISPLAY_A_CONFIG 0x00008 -#define POULSBO_DISPLAY_A_STATUS_SELECT 0x00024 -#define POULSBO_DISPLAY_B_CONFIG 0x01008 -#define POULSBO_DISPLAY_B_STATUS_SELECT 0x01024 - -#define POULSBO_DISPLAY_PIPE_ENABLE (1<<31) -#define POULSBO_DISPLAY_VSYNC_STS_EN (1<<25) -#define POULSBO_DISPLAY_VSYNC_STS (1<<9) - -#if defined(SGX_FEATURE_HOST_PORT) - #define SYS_SGX_HP_SIZE 0x8000000 - #define PSB_SYS_SGX_HP_SIZE 0x4000000 - - #define SYS_SGX_HOSTPORT_BASE_DEVVADDR 0xD0000000 - #if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) - - - - #define SYS_SGX_HOSTPORT_BRN23030_OFFSET 0x7C00000 - #endif -#endif - - -typedef struct -{ - union - { - IMG_UINT8 aui8PCISpace[256]; - IMG_UINT16 aui16PCISpace[128]; - IMG_UINT32 aui32PCISpace[64]; - struct - { - IMG_UINT16 ui16VenID; - IMG_UINT16 ui16DevID; - IMG_UINT16 ui16PCICmd; - IMG_UINT16 ui16PCIStatus; - }s; - }u; -} PCICONFIG_SPACE, *PPCICONFIG_SPACE; - -#endif diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sysinfo.h b/drivers/staging/cdv/pvr/services4/system/unified/sysinfo.h deleted file mode 100644 index 6e113c9..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sysinfo.h +++ /dev/null @@ -1,43 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYSINFO_H__) -#define __SYSINFO_H__ - -#define MAX_HW_TIME_US (500000) -#define WAIT_TRY_COUNT (10000) - -typedef enum _SYS_DEVICE_TYPE_ -{ - SYS_DEVICE_SGX = 0, - - SYS_DEVICE_FORCE_I16 = 0x7fff - -} SYS_DEVICE_TYPE; - -#define SYS_DEVICE_COUNT 10 - -#endif diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sysirq.h b/drivers/staging/cdv/pvr/services4/system/unified/sysirq.h deleted file mode 100644 index c5efc4a..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sysirq.h +++ /dev/null @@ -1,49 +0,0 @@ -/************************************************************************** - * Copyright (c) 2011, Intel Corporation. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Authors: - * Benjamin Defnet - * Rajesh Poornachandran - * - **************************************************************************/ - -#ifndef _SYSIRQ_H_ -#define _SYSIRQ_H_ - -#include - -bool sysirq_init(struct drm_device *dev); -void sysirq_uninit(struct drm_device *dev); - -void psb_irq_preinstall(struct drm_device *dev); -int psb_irq_postinstall(struct drm_device *dev); -void psb_irq_uninstall(struct drm_device *dev); -irqreturn_t psb_irq_handler(DRM_IRQ_ARGS); - -void psb_irq_preinstall_islands(struct drm_device *dev, int hw_islands); -int psb_irq_postinstall_islands(struct drm_device *dev, int hw_islands); -void psb_irq_uninstall_islands(struct drm_device *dev, int hw_islands); - -int psb_irq_enable_dpst(struct drm_device *dev); -int psb_irq_disable_dpst(struct drm_device *dev); -void sysirq_turn_on_dpst(struct drm_device *dev); -void sysirq_turn_off_dpst(struct drm_device *dev); -int psb_enable_vblank(struct drm_device *dev, int pipe); -void psb_disable_vblank(struct drm_device *dev, int pipe); -u32 psb_get_vblank_counter(struct drm_device *dev, int pipe); - -#endif //_SYSIRQ_H_ diff --git a/drivers/staging/cdv/pvr/services4/system/unified/syslocal.h b/drivers/staging/cdv/pvr/services4/system/unified/syslocal.h deleted file mode 100644 index c36b9c1..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/syslocal.h +++ /dev/null @@ -1,75 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#if !defined(__SYSLOCAL_H__) -#define __SYSLOCAL_H__ - -#define SYS_SPECIFIC_DATA_PCI_ACQUIRE_DEV 0x00000001 -#define SYS_SPECIFIC_DATA_PCI_REQUEST_SGX_ADDR_RANGE 0x00000002 -#define SYS_SPECIFIC_DATA_PCI_REQUEST_HOST_PORT_RANGE 0x00000004 -#define SYS_SPECIFIC_DATA_SGX_INITIALISED 0x00000040 -#if defined(SUPPORT_MSVDX) -#define SYS_SPECIFIC_DATA_MSVDX_INITIALISED 0x00000080 -#endif -#define SYS_SPECIFIC_DATA_MISR_INSTALLED 0x00000100 -#define SYS_SPECIFIC_DATA_LISR_INSTALLED 0x00000200 -#define SYS_SPECIFIC_DATA_PDUMP_INIT 0x00000400 -#define SYS_SPECIFIC_DATA_IRQ_ENABLED 0x00000800 - -#define SYS_SPECIFIC_DATA_PM_UNMAP_SGX_REGS 0x00001000 -#define SYS_SPECIFIC_DATA_PM_UNMAP_SGX_HP 0x00004000 -#define SYS_SPECIFIC_DATA_PM_UNMAP_MSVDX_REGS 0x00008000 -#define SYS_SPECIFIC_DATA_PM_IRQ_DISABLE 0x00010000 -#define SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR 0x00020000 - -#define SYS_SPECIFIC_DATA_SET(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData |= (flag))) - -#define SYS_SPECIFIC_DATA_CLEAR(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData &= ~(flag))) - -#define SYS_SPECIFIC_DATA_TEST(psSysSpecData, flag) (((psSysSpecData)->ui32SysSpecificData & (flag)) != 0) - - -typedef struct _SYS_SPECIFIC_DATA_TAG_ -{ - - IMG_UINT32 ui32SysSpecificData; -#ifdef __linux__ - PVRSRV_PCI_DEV_HANDLE hSGXPCI; -#endif - struct pci_dev *psPCIDev; - - /* MSI reg save */ - uint32_t msi_addr; - uint32_t msi_data; - - uint32_t saveBSM; - uint32_t saveVBT; -} SYS_SPECIFIC_DATA; - - -#endif - - diff --git a/drivers/staging/cdv/pvr/services4/system/unified/sysutils.c b/drivers/staging/cdv/pvr/services4/system/unified/sysutils.c deleted file mode 100644 index b89a1da..0000000 --- a/drivers/staging/cdv/pvr/services4/system/unified/sysutils.c +++ /dev/null @@ -1,30 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "services_headers.h" -#include "sysinfo.h" -#include "syslocal.h" - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/client/linuxsrv.h b/drivers/staging/cdv/pvr/tools/intern/debug/client/linuxsrv.h deleted file mode 100644 index f1cb02a..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/client/linuxsrv.h +++ /dev/null @@ -1,48 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - **************************************************************************/ - -#ifndef _LINUXSRV_H__ -#define _LINUXSRV_H__ - -typedef struct tagIOCTL_PACKAGE -{ - IMG_UINT32 ui32Cmd; // ioctl command - IMG_UINT32 ui32Size; // needs to be correctly set - IMG_VOID *pInBuffer; // input data buffer - IMG_UINT32 ui32InBufferSize; // size of input data buffer - IMG_VOID *pOutBuffer; // output data buffer - IMG_UINT32 ui32OutBufferSize; // size of output data buffer -} IOCTL_PACKAGE; - -IMG_UINT32 DeviceIoControl(IMG_UINT32 hDevice, - IMG_UINT32 ui32ControlCode, - IMG_VOID *pInBuffer, - IMG_UINT32 ui32InBufferSize, - IMG_VOID *pOutBuffer, - IMG_UINT32 ui32OutBufferSize, - IMG_UINT32 *pui32BytesReturned); - -#endif /* _LINUXSRV_H__*/ diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.c deleted file mode 100644 index 4bf93d0..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.c +++ /dev/null @@ -1,2357 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - -#ifdef LINUX -#include -#endif -#ifdef __QNXNTO__ -#include -#endif - -#include "img_types.h" -#include "pvr_debug.h" -#include "dbgdrvif.h" -#include "dbgdriv.h" -#include "hotkey.h" -#include "hostfunc.h" -#include "pvr_debug.h" - - - - -#define LAST_FRAME_BUF_SIZE 1024 - -typedef struct _DBG_LASTFRAME_BUFFER_ -{ - PDBG_STREAM psStream; - IMG_UINT8 ui8Buffer[LAST_FRAME_BUF_SIZE]; - IMG_UINT32 ui32BufLen; - struct _DBG_LASTFRAME_BUFFER_ *psNext; -} *PDBG_LASTFRAME_BUFFER; - - -static PDBG_STREAM g_psStreamList = 0; -static PDBG_LASTFRAME_BUFFER g_psLFBufferList; - -static IMG_UINT32 g_ui32LOff = 0; -static IMG_UINT32 g_ui32Line = 0; -static IMG_UINT32 g_ui32MonoLines = 25; - -static IMG_BOOL g_bHotkeyMiddump = IMG_FALSE; -static IMG_UINT32 g_ui32HotkeyMiddumpStart = 0xffffffff; -static IMG_UINT32 g_ui32HotkeyMiddumpEnd = 0xffffffff; - -IMG_VOID * g_pvAPIMutex=IMG_NULL; - -extern IMG_UINT32 g_ui32HotKeyFrame; -extern IMG_BOOL g_bHotKeyPressed; -extern IMG_BOOL g_bHotKeyRegistered; - -IMG_BOOL gbDumpThisFrame = IMG_FALSE; - - -IMG_UINT32 SpaceInStream(PDBG_STREAM psStream); -IMG_BOOL ExpandStreamBuffer(PDBG_STREAM psStream, IMG_UINT32 ui32NewSize); -PDBG_LASTFRAME_BUFFER FindLFBuf(PDBG_STREAM psStream); - -DBGKM_SERVICE_TABLE g_sDBGKMServices = -{ - sizeof (DBGKM_SERVICE_TABLE), - ExtDBGDrivCreateStream, - ExtDBGDrivDestroyStream, - ExtDBGDrivFindStream, - ExtDBGDrivWriteString, - ExtDBGDrivReadString, - ExtDBGDrivWrite, - ExtDBGDrivRead, - ExtDBGDrivSetCaptureMode, - ExtDBGDrivSetOutputMode, - ExtDBGDrivSetDebugLevel, - ExtDBGDrivSetFrame, - ExtDBGDrivGetFrame, - ExtDBGDrivOverrideMode, - ExtDBGDrivDefaultMode, - ExtDBGDrivWrite2, - ExtDBGDrivWriteStringCM, - ExtDBGDrivWriteCM, - ExtDBGDrivSetMarker, - ExtDBGDrivGetMarker, - ExtDBGDrivStartInitPhase, - ExtDBGDrivStopInitPhase, - ExtDBGDrivIsCaptureFrame, - ExtDBGDrivWriteLF, - ExtDBGDrivReadLF, - ExtDBGDrivGetStreamOffset, - ExtDBGDrivSetStreamOffset, - ExtDBGDrivIsLastCaptureFrame, - ExtDBGDrivWaitForEvent, - ExtDBGDrivSetConnectNotifier, - ExtDBGDrivWritePersist -}; - - -static IMG_UINT32 DBGDrivWritePersist(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -static IMG_VOID InvalidateAllStreams(IMG_VOID); - - - - -DBGKM_CONNECT_NOTIFIER g_fnDBGKMNotifier; - -IMG_VOID IMG_CALLCONV ExtDBGDrivSetConnectNotifier(DBGKM_CONNECT_NOTIFIER fn_notifier) -{ - - g_fnDBGKMNotifier = fn_notifier; -} - -IMG_VOID * IMG_CALLCONV ExtDBGDrivCreateStream(IMG_CHAR * pszName, IMG_UINT32 ui32CapMode, IMG_UINT32 ui32OutMode, IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size) -{ - IMG_VOID * pvRet; - - - HostAquireMutex(g_pvAPIMutex); - - pvRet=DBGDrivCreateStream(pszName, ui32CapMode, ui32OutMode, ui32Flags, ui32Size); - - - HostReleaseMutex(g_pvAPIMutex); - - return pvRet; -} - -void IMG_CALLCONV ExtDBGDrivDestroyStream(PDBG_STREAM psStream) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivDestroyStream(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_VOID * IMG_CALLCONV ExtDBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream) -{ - IMG_VOID * pvRet; - - - HostAquireMutex(g_pvAPIMutex); - - pvRet=DBGDrivFindStream(pszName, bResetStream); - if(g_fnDBGKMNotifier.pfnConnectNotifier) - { - g_fnDBGKMNotifier.pfnConnectNotifier(); - } - else - { - PVR_DPF((PVR_DBG_ERROR, "pfnConnectNotifier not initialised.\n")); - } - - - HostReleaseMutex(g_pvAPIMutex); - - return pvRet; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWriteString(psStream, pszString, ui32Level); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivReadString(psStream, pszString, ui32Limit); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWrite(psStream, pui8InBuf, ui32InBuffSize, ui32Level); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivRead(PDBG_STREAM psStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBuffSize,IMG_UINT8 * pui8OutBuf) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivRead(psStream, bReadInitBuffer, ui32OutBuffSize, pui8OutBuf); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -void IMG_CALLCONV ExtDBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32End,IMG_UINT32 ui32SampleRate) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetCaptureMode(psStream, ui32Mode, ui32Start, ui32End, ui32SampleRate); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -void IMG_CALLCONV ExtDBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetOutputMode(psStream, ui32OutMode); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -void IMG_CALLCONV ExtDBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetDebugLevel(psStream, ui32DebugLevel); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -void IMG_CALLCONV ExtDBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetFrame(psStream, ui32Frame); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetFrame(PDBG_STREAM psStream) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivGetFrame(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_BOOL IMG_CALLCONV ExtDBGDrivIsLastCaptureFrame(PDBG_STREAM psStream) -{ - IMG_BOOL bRet; - - - HostAquireMutex(g_pvAPIMutex); - - bRet = DBGDrivIsLastCaptureFrame(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return bRet; -} - -IMG_BOOL IMG_CALLCONV ExtDBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame) -{ - IMG_BOOL bRet; - - - HostAquireMutex(g_pvAPIMutex); - - bRet = DBGDrivIsCaptureFrame(psStream, bCheckPreviousFrame); - - - HostReleaseMutex(g_pvAPIMutex); - - return bRet; -} - -void IMG_CALLCONV ExtDBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivOverrideMode(psStream, ui32Mode); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -void IMG_CALLCONV ExtDBGDrivDefaultMode(PDBG_STREAM psStream) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivDefaultMode(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite2(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWrite2(psStream, pui8InBuf, ui32InBuffSize, ui32Level); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWritePersist(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWritePersist(psStream, pui8InBuf, ui32InBuffSize, ui32Level); - if(ui32Ret==0xFFFFFFFFU) - { - PVR_DPF((PVR_DBG_ERROR, "An error occurred in DBGDrivWritePersist.")); - } - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWriteStringCM(psStream, pszString, ui32Level); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret=DBGDrivWriteCM(psStream, pui8InBuf, ui32InBuffSize, ui32Level); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -void IMG_CALLCONV ExtDBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetMarker(psStream, ui32Marker); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetMarker(PDBG_STREAM psStream) -{ - IMG_UINT32 ui32Marker; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Marker = DBGDrivGetMarker(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Marker; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 * pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret = DBGDrivWriteLF(psStream, pui8InBuf, ui32InBuffSize, ui32Level, ui32Flags); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 * pui8OutBuf) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret = DBGDrivReadLF(psStream, ui32OutBuffSize, pui8OutBuf); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - - -IMG_VOID IMG_CALLCONV ExtDBGDrivStartInitPhase(PDBG_STREAM psStream) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivStartInitPhase(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_VOID IMG_CALLCONV ExtDBGDrivStopInitPhase(PDBG_STREAM psStream) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivStopInitPhase(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return; -} - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetStreamOffset(PDBG_STREAM psStream) -{ - IMG_UINT32 ui32Ret; - - - HostAquireMutex(g_pvAPIMutex); - - ui32Ret = DBGDrivGetStreamOffset(psStream); - - - HostReleaseMutex(g_pvAPIMutex); - - return ui32Ret; -} - -IMG_VOID IMG_CALLCONV ExtDBGDrivSetStreamOffset(PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset) -{ - - HostAquireMutex(g_pvAPIMutex); - - DBGDrivSetStreamOffset(psStream, ui32StreamOffset); - - - HostReleaseMutex(g_pvAPIMutex); -} - -IMG_VOID IMG_CALLCONV ExtDBGDrivWaitForEvent(DBG_EVENT eEvent) -{ -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - DBGDrivWaitForEvent(eEvent); -#else - PVR_UNREFERENCED_PARAMETER(eEvent); -#endif -} - -IMG_UINT32 AtoI(IMG_CHAR *szIn) -{ - IMG_INT iLen = 0; - IMG_UINT32 ui32Value = 0; - IMG_UINT32 ui32Digit=1; - IMG_UINT32 ui32Base=10; - IMG_INT iPos; - IMG_CHAR bc; - - - while (szIn[iLen] > 0) - { - iLen ++; - } - - - if (iLen == 0) - { - return (0); - } - - - iPos=0; - while (szIn[iPos] == '0') - { - iPos++; - } - if (szIn[iPos] == '\0') - { - return 0; - } - if (szIn[iPos] == 'x' || szIn[iPos] == 'X') - { - ui32Base=16; - szIn[iPos]='0'; - } - - - for (iPos = iLen - 1; iPos >= 0; iPos --) - { - bc = szIn[iPos]; - - if ( (bc >= 'a') && (bc <= 'f') && ui32Base == 16) - { - bc -= 'a' - 0xa; - } - else - if ( (bc >= 'A') && (bc <= 'F') && ui32Base == 16) - { - bc -= 'A' - 0xa; - } - else - if ((bc >= '0') && (bc <= '9')) - { - bc -= '0'; - } - else - return (0); - - ui32Value += (IMG_UINT32)bc * ui32Digit; - - ui32Digit = ui32Digit * ui32Base; - } - return (ui32Value); -} - - -static IMG_BOOL StreamValid(PDBG_STREAM psStream) -{ - PDBG_STREAM psThis; - - psThis = g_psStreamList; - - while (psThis) - { - if (psStream && (psThis == psStream) ) - { - return(IMG_TRUE); - } - else - { - psThis = psThis->psNext; - } - } - - return(IMG_FALSE); -} - - -static IMG_BOOL StreamValidForRead(PDBG_STREAM psStream) -{ - if( StreamValid(psStream) && - ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_WRITEONLY) == 0) ) - { - return(IMG_TRUE); - } - - return(IMG_FALSE); -} - -static IMG_BOOL StreamValidForWrite(PDBG_STREAM psStream) -{ - if( StreamValid(psStream) && - ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_READONLY) == 0) ) - { - return(IMG_TRUE); - } - - return(IMG_FALSE); -} - - -static void Write(PDBG_STREAM psStream,IMG_PUINT8 pui8Data,IMG_UINT32 ui32InBuffSize) -{ - - - if (!psStream->bCircularAllowed) - { - - } - - if ((psStream->ui32WPtr + ui32InBuffSize) > psStream->ui32Size) - { - - IMG_UINT32 ui32B1 = psStream->ui32Size - psStream->ui32WPtr; - IMG_UINT32 ui32B2 = ui32InBuffSize - ui32B1; - - - HostMemCopy((IMG_PVOID)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32WPtr), - (IMG_PVOID) pui8Data, - ui32B1); - - - HostMemCopy(psStream->pvBase, - (IMG_PVOID)(pui8Data + ui32B1), - ui32B2); - - - psStream->ui32WPtr = ui32B2; - } - else - { - HostMemCopy((IMG_PVOID)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32WPtr), - (IMG_PVOID) pui8Data, - ui32InBuffSize); - - psStream->ui32WPtr += ui32InBuffSize; - - if (psStream->ui32WPtr == psStream->ui32Size) - { - psStream->ui32WPtr = 0; - } - } - psStream->ui32DataWritten += ui32InBuffSize; -} - - -void MonoOut(IMG_CHAR * pszString,IMG_BOOL bNewLine) -{ -#if defined (_WIN64) - PVR_UNREFERENCED_PARAMETER(pszString); - PVR_UNREFERENCED_PARAMETER(bNewLine); - -#else - IMG_UINT32 i; - IMG_CHAR * pScreen; - - pScreen = (IMG_CHAR *) DBGDRIV_MONOBASE; - - pScreen += g_ui32Line * 160; - - - - i=0; - do - { - pScreen[g_ui32LOff + (i*2)] = pszString[i]; - pScreen[g_ui32LOff + (i*2)+1] = 127; - i++; - } - while ((pszString[i] != 0) && (i < 4096)); - - g_ui32LOff += i * 2; - - if (bNewLine) - { - g_ui32LOff = 0; - g_ui32Line++; - } - - - - if (g_ui32Line == g_ui32MonoLines) - { - g_ui32Line = g_ui32MonoLines - 1; - - HostMemCopy((IMG_VOID *)DBGDRIV_MONOBASE,(IMG_VOID *)(DBGDRIV_MONOBASE + 160),160 * (g_ui32MonoLines - 1)); - - HostMemSet((IMG_VOID *)(DBGDRIV_MONOBASE + (160 * (g_ui32MonoLines - 1))),0,160); - } -#endif -} - -static IMG_UINT32 WriteExpandingBuffer(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize) -{ - IMG_UINT ui32Space; - - - - ui32Space = SpaceInStream(psStream); - - - - if ((psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) == 0) - { - PVR_DPF((PVR_DBG_ERROR, "WriteExpandingBuffer: buffer %x is disabled", (IMG_UINTPTR_T) psStream)); - return(0); - } - - - - if (psStream->psCtrl->ui32Flags & DEBUG_FLAGS_NO_BUF_EXPANDSION) - { - - - - if (ui32Space < 32) - { - PVR_DPF((PVR_DBG_ERROR, "WriteExpandingBuffer: buffer %x is full and isn't expandable", (IMG_UINTPTR_T) psStream)); - return(0); - } - } - else - { - if ((ui32Space < 32) || (ui32Space <= (ui32InBuffSize + 4))) - { - IMG_UINT32 ui32NewBufSize; - - - - ui32NewBufSize = 2 * psStream->ui32Size; - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Expanding buffer size = %x, new size = %x", - psStream->ui32Size, ui32NewBufSize)); - - if (ui32InBuffSize > psStream->ui32Size) - { - ui32NewBufSize += ui32InBuffSize; - } - - - - if (!ExpandStreamBuffer(psStream,ui32NewBufSize)) - { - if (ui32Space < 32) - { - if(psStream->bCircularAllowed) - { - return(0); - } - else - { - - PVR_DPF((PVR_DBG_ERROR, "WriteExpandingBuffer: Unable to expand %x. Out of memory.", (IMG_UINTPTR_T) psStream)); - InvalidateAllStreams(); - return (0xFFFFFFFFUL); - } - } - } - - - - ui32Space = SpaceInStream(psStream); - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Expanded buffer, free space = %x", - ui32Space)); - } - } - - - - if (ui32Space <= (ui32InBuffSize + 4)) - { - ui32InBuffSize = ui32Space - 4; - } - - - - Write(psStream,pui8InBuf,ui32InBuffSize); - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - if (ui32InBuffSize) - { - HostSignalEvent(DBG_EVENT_STREAM_DATA); - } -#endif - return(ui32InBuffSize); -} - -IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, - IMG_UINT32 ui32CapMode, - IMG_UINT32 ui32OutMode, - IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Size) -{ - PDBG_STREAM psStream; - PDBG_STREAM psInitStream; - PDBG_LASTFRAME_BUFFER psLFBuffer; - PDBG_STREAM_CONTROL psCtrl; - IMG_UINT32 ui32Off; - IMG_VOID * pvBase; - static IMG_CHAR pszNameInitSuffix[] = "_Init"; - IMG_UINT32 ui32OffSuffix; - - - - - psStream = (PDBG_STREAM) DBGDrivFindStream(pszName, IMG_FALSE); - - if (psStream) - { - return ((IMG_VOID *) psStream); - } - - - - psStream = HostNonPageablePageAlloc(1); - psInitStream = HostNonPageablePageAlloc(1); - psLFBuffer = HostNonPageablePageAlloc(1); - psCtrl = HostNonPageablePageAlloc(1); - if ( - (!psStream) || - (!psInitStream) || - (!psLFBuffer) || - (!psCtrl) - ) - { - PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc control structs\n\r")); - return((IMG_VOID *) 0); - } - - - if ((ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - pvBase = HostNonPageablePageAlloc(ui32Size); - } - else - { - pvBase = HostPageablePageAlloc(ui32Size); - } - - if (!pvBase) - { - PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc Stream buffer\n\r")); - HostNonPageablePageFree(psStream); - return((IMG_VOID *) 0); - } - - - psCtrl->ui32Flags = ui32Flags; - psCtrl->ui32CapMode = ui32CapMode; - psCtrl->ui32OutMode = ui32OutMode; - psCtrl->ui32DebugLevel = DEBUG_LEVEL_0; - psCtrl->ui32DefaultMode = ui32CapMode; - psCtrl->ui32Start = 0; - psCtrl->ui32End = 0; - psCtrl->ui32Current = 0; - psCtrl->ui32SampleRate = 1; - psCtrl->bInitPhaseComplete = IMG_FALSE; - - - - psStream->psNext = 0; - psStream->pvBase = pvBase; - psStream->psCtrl = psCtrl; - psStream->ui32Size = ui32Size * 4096UL; - psStream->ui32RPtr = 0; - psStream->ui32WPtr = 0; - psStream->ui32DataWritten = 0; - psStream->ui32Marker = 0; - psStream->bCircularAllowed = IMG_TRUE; - psStream->ui32InitPhaseWOff = 0; - - - - - if ((ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - pvBase = HostNonPageablePageAlloc(ui32Size); - } - else - { - pvBase = HostPageablePageAlloc(ui32Size); - } - - if (!pvBase) - { - PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc InitStream buffer\n\r")); - - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - HostNonPageablePageFree(psStream->pvBase); - } - else - { - HostPageablePageFree(psStream->pvBase); - } - HostNonPageablePageFree(psStream); - return((IMG_VOID *) 0); - } - - - psInitStream->psNext = 0; - psInitStream->pvBase = pvBase; - psInitStream->psCtrl = psCtrl; - psInitStream->ui32Size = ui32Size * 4096UL; - psInitStream->ui32RPtr = 0; - psInitStream->ui32WPtr = 0; - psInitStream->ui32DataWritten = 0; - psInitStream->ui32Marker = 0; - psInitStream->bCircularAllowed = IMG_FALSE; - psInitStream->ui32InitPhaseWOff = 0; - - - - psStream->psInitStream = psInitStream; - - - psLFBuffer->psStream = psStream; - psLFBuffer->ui32BufLen = 0UL; - - g_bHotkeyMiddump = IMG_FALSE; - g_ui32HotkeyMiddumpStart = 0xffffffffUL; - g_ui32HotkeyMiddumpEnd = 0xffffffffUL; - - - - ui32Off = 0; - - do - { - psStream->szName[ui32Off] = pszName[ui32Off]; - psInitStream->szName[ui32Off] = pszName[ui32Off]; - ui32Off++; - } - while ((pszName[ui32Off] != 0) && (ui32Off < (4096UL - sizeof(DBG_STREAM)))); - psStream->szName[ui32Off] = pszName[ui32Off]; - - - - ui32OffSuffix = 0; - do - { - psInitStream->szName[ui32Off] = pszNameInitSuffix[ui32OffSuffix]; - ui32Off++; - ui32OffSuffix++; - } - while ( (pszNameInitSuffix[ui32OffSuffix] != 0) && - (ui32Off < (4096UL - sizeof(DBG_STREAM)))); - psInitStream->szName[ui32Off] = pszNameInitSuffix[ui32OffSuffix]; - - - - psStream->psNext = g_psStreamList; - g_psStreamList = psStream; - - psLFBuffer->psNext = g_psLFBufferList; - g_psLFBufferList = psLFBuffer; - - AddSIDEntry(psStream); - - return((IMG_VOID *) psStream); -} - -void IMG_CALLCONV DBGDrivDestroyStream(PDBG_STREAM psStream) -{ - PDBG_STREAM psStreamThis; - PDBG_STREAM psStreamPrev; - PDBG_LASTFRAME_BUFFER psLFBuffer; - PDBG_LASTFRAME_BUFFER psLFThis; - PDBG_LASTFRAME_BUFFER psLFPrev; - - PVR_DPF((PVR_DBG_MESSAGE, "DBGDriv: Destroying stream %s\r\n", psStream->szName )); - - - - if (!StreamValid(psStream)) - { - return; - } - - RemoveSIDEntry(psStream); - - psLFBuffer = FindLFBuf(psStream); - - - - psStreamThis = g_psStreamList; - psStreamPrev = 0; - - while (psStreamThis) - { - if (psStreamThis == psStream) - { - if (psStreamPrev) - { - psStreamPrev->psNext = psStreamThis->psNext; - } - else - { - g_psStreamList = psStreamThis->psNext; - } - - psStreamThis = 0; - } - else - { - psStreamPrev = psStreamThis; - psStreamThis = psStreamThis->psNext; - } - } - - psLFThis = g_psLFBufferList; - psLFPrev = 0; - - while (psLFThis) - { - if (psLFThis == psLFBuffer) - { - if (psLFPrev) - { - psLFPrev->psNext = psLFThis->psNext; - } - else - { - g_psLFBufferList = psLFThis->psNext; - } - - psLFThis = 0; - } - else - { - psLFPrev = psLFThis; - psLFThis = psLFThis->psNext; - } - } - - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_HOTKEY) - { - DeactivateHotKeys(); - } - - - - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - HostNonPageablePageFree(psStream->psCtrl); - HostNonPageablePageFree(psStream->pvBase); - HostNonPageablePageFree(psStream->psInitStream->pvBase); - } - else - { - HostNonPageablePageFree(psStream->psCtrl); - HostPageablePageFree(psStream->pvBase); - HostPageablePageFree(psStream->psInitStream->pvBase); - } - - HostNonPageablePageFree(psStream->psInitStream); - HostNonPageablePageFree(psStream); - HostNonPageablePageFree(psLFBuffer); - - if (g_psStreamList == 0) - { - PVR_DPF((PVR_DBG_MESSAGE,"DBGDriv: Stream list now empty" )); - } - - return; -} - -IMG_VOID * IMG_CALLCONV DBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream) -{ - PDBG_STREAM psStream; - PDBG_STREAM psThis; - IMG_UINT32 ui32Off; - IMG_BOOL bAreSame; - - psStream = 0; - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "PDump client connecting to %s %s", - pszName, - (bResetStream == IMG_TRUE) ? "with reset" : "no reset")); - - - - for (psThis = g_psStreamList; psThis != IMG_NULL; psThis = psThis->psNext) - { - bAreSame = IMG_TRUE; - ui32Off = 0; - - if (strlen(psThis->szName) == strlen(pszName)) - { - while ((psThis->szName[ui32Off] != 0) && (pszName[ui32Off] != 0) && (ui32Off < 128) && bAreSame) - { - if (psThis->szName[ui32Off] != pszName[ui32Off]) - { - bAreSame = IMG_FALSE; - } - - ui32Off++; - } - } - else - { - bAreSame = IMG_FALSE; - } - - if (bAreSame) - { - psStream = psThis; - break; - } - } - - if(bResetStream && psStream) - { - static IMG_CHAR szComment[] = "-- Init phase terminated\r\n"; - psStream->psInitStream->ui32RPtr = 0; - psStream->ui32RPtr = 0; - psStream->ui32WPtr = 0; - psStream->ui32DataWritten = psStream->psInitStream->ui32DataWritten; - if (psStream->psCtrl->bInitPhaseComplete == IMG_FALSE) - { - if (psStream->psCtrl->ui32Flags & DEBUG_FLAGS_TEXTSTREAM) - { - DBGDrivWrite2(psStream, (IMG_UINT8 *)szComment, sizeof(szComment) - 1, 0x01); - } - psStream->psCtrl->bInitPhaseComplete = IMG_TRUE; - } - - { - - - psStream->psInitStream->ui32InitPhaseWOff = psStream->psInitStream->ui32WPtr; - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Set %s client marker bo %x, total bw %x", - psStream->szName, - psStream->psInitStream->ui32InitPhaseWOff, - psStream->psInitStream->ui32DataWritten )); - } - } - - return((IMG_VOID *) psStream); -} - -static void IMG_CALLCONV DBGDrivInvalidateStream(PDBG_STREAM psStream) -{ - IMG_CHAR pszErrorMsg[] = "**OUTOFMEM\n"; - IMG_UINT32 ui32Space; - IMG_UINT32 ui32Off = 0; - IMG_UINT32 ui32WPtr = psStream->ui32WPtr; - IMG_PUINT8 pui8Buffer = (IMG_UINT8 *) psStream->pvBase; - - PVR_DPF((PVR_DBG_ERROR, "DBGDrivInvalidateStream: An error occurred for stream %s\r\n", psStream->szName )); - - - - - - - - - - ui32Space = SpaceInStream(psStream); - - - if(ui32Space > 0) - { - ui32Space--; - } - else - { - PVR_DPF((PVR_DBG_ERROR, "DBGDrivInvalidateStream: Buffer full.")); - } - - while((pszErrorMsg[ui32Off] != 0) && (ui32Off < ui32Space)) - { - pui8Buffer[ui32WPtr] = (IMG_UINT8)pszErrorMsg[ui32Off]; - ui32Off++; - ui32WPtr++; - } - pui8Buffer[ui32WPtr++] = '\0'; - psStream->ui32WPtr = ui32WPtr; - - - psStream->psCtrl->ui32Flags |= DEBUG_FLAGS_READONLY; -} - -static IMG_VOID InvalidateAllStreams(IMG_VOID) -{ - PDBG_STREAM psStream = g_psStreamList; - while (psStream != IMG_NULL) - { - DBGDrivInvalidateStream(psStream); - psStream = psStream->psNext; - } - return; -} - - - -IMG_UINT32 IMG_CALLCONV DBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level) -{ - - - if (!StreamValidForWrite(psStream)) - { - return(0xFFFFFFFFUL); - } - - - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) - { - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0) - { - return(0); - } - } - else - { - if (psStream->psCtrl->ui32CapMode == DEBUG_CAPMODE_HOTKEY) - { - if ((psStream->psCtrl->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE)) - { - return(0); - } - } - } - - return(DBGDrivWriteString(psStream,pszString,ui32Level)); - -} - -IMG_UINT32 IMG_CALLCONV DBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Len; - IMG_UINT32 ui32Space; - IMG_UINT32 ui32WPtr; - IMG_UINT8 * pui8Buffer; - - - - if (!StreamValidForWrite(psStream)) - { - return(0xFFFFFFFFUL); - } - - - - if ((psStream->psCtrl->ui32DebugLevel & ui32Level) == 0) - { - return(0xFFFFFFFFUL); - } - - - - - if ((psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_ASYNC) == 0) - { - if (psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_STANDARDDBG) - { - PVR_DPF((PVR_DBG_MESSAGE,"%s: %s\r\n",psStream->szName, pszString)); - } - - - - if (psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_MONO) - { - MonoOut(psStream->szName,IMG_FALSE); - MonoOut(": ",IMG_FALSE); - MonoOut(pszString,IMG_TRUE); - } - } - - - - if ( - !( - ((psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) != 0) || - ((psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_ASYNC) != 0) - ) - ) - { - return(0xFFFFFFFFUL); - } - - - - ui32Space=SpaceInStream(psStream); - - - if(ui32Space > 0) - { - ui32Space--; - } - - ui32Len = 0; - ui32WPtr = psStream->ui32WPtr; - pui8Buffer = (IMG_UINT8 *) psStream->pvBase; - - while((pszString[ui32Len] != 0) && (ui32Len < ui32Space)) - { - pui8Buffer[ui32WPtr] = (IMG_UINT8)pszString[ui32Len]; - ui32Len++; - ui32WPtr++; - if (ui32WPtr == psStream->ui32Size) - { - ui32WPtr = 0; - } - } - - if (ui32Len < ui32Space) - { - - pui8Buffer[ui32WPtr] = (IMG_UINT8)pszString[ui32Len]; - ui32Len++; - ui32WPtr++; - if (ui32WPtr == psStream->ui32Size) - { - ui32WPtr = 0; - } - - - psStream->ui32WPtr = ui32WPtr; - psStream->ui32DataWritten+= ui32Len; - } else - { - ui32Len = 0; - } - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - if (ui32Len) - { - HostSignalEvent(DBG_EVENT_STREAM_DATA); - } -#endif - - return(ui32Len); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit) -{ - IMG_UINT32 ui32OutLen; - IMG_UINT32 ui32Len; - IMG_UINT32 ui32Offset; - IMG_UINT8 *pui8Buff; - - - - if (!StreamValidForRead(psStream)) - { - return(0); - } - - - - pui8Buff = (IMG_UINT8 *)psStream->pvBase; - ui32Offset = psStream->ui32RPtr; - - if (psStream->ui32RPtr == psStream->ui32WPtr) - { - return(0); - } - - - - ui32Len = 0; - while((pui8Buff[ui32Offset] != 0) && (ui32Offset != psStream->ui32WPtr)) - { - ui32Offset++; - ui32Len++; - - - - if (ui32Offset == psStream->ui32Size) - { - ui32Offset = 0; - } - } - - ui32OutLen = ui32Len + 1; - - - - if (ui32Len > ui32Limit) - { - return(0); - } - - - - ui32Offset = psStream->ui32RPtr; - ui32Len = 0; - - while ((pui8Buff[ui32Offset] != 0) && (ui32Len < ui32Limit)) - { - pszString[ui32Len] = (IMG_CHAR)pui8Buff[ui32Offset]; - ui32Offset++; - ui32Len++; - - - - if (ui32Offset == psStream->ui32Size) - { - ui32Offset = 0; - } - } - - pszString[ui32Len] = (IMG_CHAR)pui8Buff[ui32Offset]; - - psStream->ui32RPtr = ui32Offset + 1; - - if (psStream->ui32RPtr == psStream->ui32Size) - { - psStream->ui32RPtr = 0; - } - - return(ui32OutLen); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivWrite(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - IMG_UINT32 ui32Space; - DBG_STREAM *psStream; - - - - if (!StreamValidForWrite(psMainStream)) - { - return(0xFFFFFFFFUL); - } - - - - if ((psMainStream->psCtrl->ui32DebugLevel & ui32Level) == 0) - { - return(0xFFFFFFFFUL); - } - - - - if (psMainStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) - { - if ((psMainStream->psCtrl->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0) - { - - return(ui32InBuffSize); - } - } - else if (psMainStream->psCtrl->ui32CapMode == DEBUG_CAPMODE_HOTKEY) - { - if ((psMainStream->psCtrl->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE)) - { - - return(ui32InBuffSize); - } - } - - if(psMainStream->psCtrl->bInitPhaseComplete) - { - psStream = psMainStream; - } - else - { - psStream = psMainStream->psInitStream; - } - - - - ui32Space=SpaceInStream(psStream); - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Recv %d b for %s: Roff = %x, WOff = %x", - ui32InBuffSize, - psStream->szName, - psStream->ui32RPtr, - psStream->ui32WPtr)); - - - - if ((psStream->psCtrl->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) == 0) - { - PVR_DPF((PVR_DBG_ERROR, "DBGDrivWrite: buffer %x is disabled", (IMG_UINTPTR_T) psStream)); - return(0); - } - - if (ui32Space < 8) - { - PVR_DPF((PVR_DBG_ERROR, "DBGDrivWrite: buffer %x is full", (IMG_UINTPTR_T) psStream)); - return(0); - } - - - - if (ui32Space <= (ui32InBuffSize + 4)) - { - ui32InBuffSize = ui32Space - 8; - } - - - - Write(psStream,(IMG_UINT8 *) &ui32InBuffSize,4); - Write(psStream,pui8InBuf,ui32InBuffSize); - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - if (ui32InBuffSize) - { - HostSignalEvent(DBG_EVENT_STREAM_DATA); - } -#endif - return(ui32InBuffSize); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - - - if (!StreamValidForWrite(psStream)) - { - return(0xFFFFFFFFUL); - } - - - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) - { - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0) - { - - return(ui32InBuffSize); - } - } - else - { - if (psStream->psCtrl->ui32CapMode == DEBUG_CAPMODE_HOTKEY) - { - if ((psStream->psCtrl->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE)) - { - - return(ui32InBuffSize); - } - } - } - - return(DBGDrivWrite2(psStream,pui8InBuf,ui32InBuffSize,ui32Level)); -} - - -static IMG_UINT32 DBGDrivWritePersist(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - DBG_STREAM *psStream; - PVR_UNREFERENCED_PARAMETER(ui32Level); - - - - if (!StreamValidForWrite(psMainStream)) - { - return(0xFFFFFFFFUL); - } - - - psStream = psMainStream->psInitStream; - if(psStream->bCircularAllowed == IMG_TRUE) - { - PVR_DPF((PVR_DBG_WARNING, "DBGDrivWritePersist: Init phase is a circular buffer, some data may be lost")); - } - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Append %x b to %s: Roff = %x, WOff = %x [bw = %x]", - ui32InBuffSize, - psStream->szName, - psStream->ui32RPtr, - psStream->ui32WPtr, - psStream->ui32DataWritten)); - - return( WriteExpandingBuffer(psStream, pui8InBuf, ui32InBuffSize) ); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivWrite2(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level) -{ - DBG_STREAM *psStream; - - - - if (!StreamValidForWrite(psMainStream)) - { - PVR_DPF((PVR_DBG_ERROR, "DBGDrivWrite2: stream not valid")); - return(0xFFFFFFFFUL); - } - - - - if ((psMainStream->psCtrl->ui32DebugLevel & ui32Level) == 0) - { - return(0); - } - - if(psMainStream->psCtrl->bInitPhaseComplete) - { - psStream = psMainStream; - } - else - { - psStream = psMainStream->psInitStream; - } - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Recv(exp) %d b for %s: Roff = %x, WOff = %x", - ui32InBuffSize, - psStream->szName, - psStream->ui32RPtr, - psStream->ui32WPtr)); - - return( WriteExpandingBuffer(psStream, pui8InBuf, ui32InBuffSize) ); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivRead(PDBG_STREAM psMainStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBuffSize,IMG_UINT8 * pui8OutBuf) -{ - IMG_UINT32 ui32Data; - DBG_STREAM *psStream; - - - - if (!StreamValidForRead(psMainStream)) - { - PVR_DPF((PVR_DBG_ERROR, "DBGDrivRead: buffer %x is invalid", (IMG_UINTPTR_T) psMainStream)); - return(0); - } - - if(bReadInitBuffer) - { - psStream = psMainStream->psInitStream; - } - else - { - psStream = psMainStream; - } - - - if (psStream->ui32RPtr == psStream->ui32WPtr || - ((psStream->ui32InitPhaseWOff > 0) && - (psStream->ui32RPtr >= psStream->ui32InitPhaseWOff)) ) - { - return(0); - } - - - - if (psStream->ui32RPtr <= psStream->ui32WPtr) - { - ui32Data = psStream->ui32WPtr - psStream->ui32RPtr; - } - else - { - ui32Data = psStream->ui32WPtr + (psStream->ui32Size - psStream->ui32RPtr); - } - - - - if ((psStream->ui32InitPhaseWOff > 0) && - (psStream->ui32InitPhaseWOff < psStream->ui32WPtr)) - { - ui32Data = psStream->ui32InitPhaseWOff - psStream->ui32RPtr; - } - - - - if (ui32Data > ui32OutBuffSize) - { - ui32Data = ui32OutBuffSize; - } - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "Send %x b from %s: Roff = %x, WOff = %x", - ui32Data, - psStream->szName, - psStream->ui32RPtr, - psStream->ui32WPtr)); - - - - if ((psStream->ui32RPtr + ui32Data) > psStream->ui32Size) - { - IMG_UINT32 ui32B1 = psStream->ui32Size - psStream->ui32RPtr; - IMG_UINT32 ui32B2 = ui32Data - ui32B1; - - - HostMemCopy((IMG_VOID *) pui8OutBuf, - (IMG_VOID *)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32RPtr), - ui32B1); - - - HostMemCopy((IMG_VOID *)(pui8OutBuf + ui32B1), - psStream->pvBase, - ui32B2); - - - psStream->ui32RPtr = ui32B2; - } - else - { - HostMemCopy((IMG_VOID *) pui8OutBuf, - (IMG_VOID *)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32RPtr), - ui32Data); - - - psStream->ui32RPtr += ui32Data; - - - if (psStream->ui32RPtr == psStream->ui32Size) - { - psStream->ui32RPtr = 0; - } - } - - return(ui32Data); -} - -void IMG_CALLCONV DBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32End,IMG_UINT32 ui32SampleRate) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32CapMode = ui32Mode; - psStream->psCtrl->ui32DefaultMode = ui32Mode; - psStream->psCtrl->ui32Start = ui32Start; - psStream->psCtrl->ui32End = ui32End; - psStream->psCtrl->ui32SampleRate = ui32SampleRate; - - - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_HOTKEY) - { - ActivateHotKeys(psStream); - } -} - -void IMG_CALLCONV DBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32OutMode = ui32OutMode; -} - -void IMG_CALLCONV DBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32DebugLevel = ui32DebugLevel; -} - -void IMG_CALLCONV DBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32Current = ui32Frame; - - if ((ui32Frame >= psStream->psCtrl->ui32Start) && - (ui32Frame <= psStream->psCtrl->ui32End) && - (((ui32Frame - psStream->psCtrl->ui32Start) % psStream->psCtrl->ui32SampleRate) == 0)) - { - psStream->psCtrl->ui32Flags |= DEBUG_FLAGS_ENABLESAMPLE; - } - else - { - psStream->psCtrl->ui32Flags &= ~DEBUG_FLAGS_ENABLESAMPLE; - } - - if (g_bHotkeyMiddump) - { - if ((ui32Frame >= g_ui32HotkeyMiddumpStart) && - (ui32Frame <= g_ui32HotkeyMiddumpEnd) && - (((ui32Frame - g_ui32HotkeyMiddumpStart) % psStream->psCtrl->ui32SampleRate) == 0)) - { - psStream->psCtrl->ui32Flags |= DEBUG_FLAGS_ENABLESAMPLE; - } - else - { - psStream->psCtrl->ui32Flags &= ~DEBUG_FLAGS_ENABLESAMPLE; - if (psStream->psCtrl->ui32Current > g_ui32HotkeyMiddumpEnd) - { - g_bHotkeyMiddump = IMG_FALSE; - } - } - } - - - if (g_bHotKeyRegistered) - { - g_bHotKeyRegistered = IMG_FALSE; - - PVR_DPF((PVR_DBG_MESSAGE,"Hotkey pressed (%p)!\n",psStream)); - - if (!g_bHotKeyPressed) - { - - - g_ui32HotKeyFrame = psStream->psCtrl->ui32Current + 2; - - - - g_bHotKeyPressed = IMG_TRUE; - } - - - - if (((psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) != 0) && - ((psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_HOTKEY) != 0)) - { - if (!g_bHotkeyMiddump) - { - - g_ui32HotkeyMiddumpStart = g_ui32HotKeyFrame + 1; - g_ui32HotkeyMiddumpEnd = 0xffffffff; - g_bHotkeyMiddump = IMG_TRUE; - PVR_DPF((PVR_DBG_MESSAGE,"Sampling every %d frame(s)\n", psStream->psCtrl->ui32SampleRate)); - } - else - { - - g_ui32HotkeyMiddumpEnd = g_ui32HotKeyFrame; - PVR_DPF((PVR_DBG_MESSAGE,"Turning off sampling\n")); - } - } - - } - - - - if (psStream->psCtrl->ui32Current > g_ui32HotKeyFrame) - { - g_bHotKeyPressed = IMG_FALSE; - } -} - -IMG_UINT32 IMG_CALLCONV DBGDrivGetFrame(PDBG_STREAM psStream) -{ - - - if (!StreamValid(psStream)) - { - return(0); - } - - return(psStream->psCtrl->ui32Current); -} - -IMG_BOOL IMG_CALLCONV DBGDrivIsLastCaptureFrame(PDBG_STREAM psStream) -{ - IMG_UINT32 ui32NextFrame; - - - - if (!StreamValid(psStream)) - { - return IMG_FALSE; - } - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) - { - ui32NextFrame = psStream->psCtrl->ui32Current + psStream->psCtrl->ui32SampleRate; - if (ui32NextFrame > psStream->psCtrl->ui32End) - { - return IMG_TRUE; - } - } - return IMG_FALSE; -} - -IMG_BOOL IMG_CALLCONV DBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame) -{ - IMG_UINT32 ui32FrameShift = bCheckPreviousFrame ? 1UL : 0UL; - - - - if (!StreamValid(psStream)) - { - return IMG_FALSE; - } - - if (psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) - { - - if (g_bHotkeyMiddump) - { - if ((psStream->psCtrl->ui32Current >= (g_ui32HotkeyMiddumpStart - ui32FrameShift)) && - (psStream->psCtrl->ui32Current <= (g_ui32HotkeyMiddumpEnd - ui32FrameShift)) && - ((((psStream->psCtrl->ui32Current + ui32FrameShift) - g_ui32HotkeyMiddumpStart) % psStream->psCtrl->ui32SampleRate) == 0)) - { - return IMG_TRUE; - } - } - else - { - if ((psStream->psCtrl->ui32Current >= (psStream->psCtrl->ui32Start - ui32FrameShift)) && - (psStream->psCtrl->ui32Current <= (psStream->psCtrl->ui32End - ui32FrameShift)) && - ((((psStream->psCtrl->ui32Current + ui32FrameShift) - psStream->psCtrl->ui32Start) % psStream->psCtrl->ui32SampleRate) == 0)) - { - return IMG_TRUE; - } - } - } - else if (psStream->psCtrl->ui32CapMode == DEBUG_CAPMODE_HOTKEY) - { - if ((psStream->psCtrl->ui32Current == (g_ui32HotKeyFrame-ui32FrameShift)) && (g_bHotKeyPressed)) - { - return IMG_TRUE; - } - } - return IMG_FALSE; -} - -void IMG_CALLCONV DBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32CapMode = ui32Mode; -} - -void IMG_CALLCONV DBGDrivDefaultMode(PDBG_STREAM psStream) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->psCtrl->ui32CapMode = psStream->psCtrl->ui32DefaultMode; -} - -IMG_VOID IMG_CALLCONV DBGDrivSetClientMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->ui32InitPhaseWOff = ui32Marker; -} - -void IMG_CALLCONV DBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker) -{ - - - if (!StreamValid(psStream)) - { - return; - } - - psStream->ui32Marker = ui32Marker; -} - -IMG_UINT32 IMG_CALLCONV DBGDrivGetMarker(PDBG_STREAM psStream) -{ - - - if (!StreamValid(psStream)) - { - return 0; - } - - return psStream->ui32Marker; -} - - -IMG_UINT32 IMG_CALLCONV DBGDrivGetStreamOffset(PDBG_STREAM psMainStream) -{ - PDBG_STREAM psStream; - - - - if (!StreamValid(psMainStream)) - { - return 0; - } - - if(psMainStream->psCtrl->bInitPhaseComplete) - { - psStream = psMainStream; - } - else - { - psStream = psMainStream->psInitStream; - } - - return psStream->ui32DataWritten; -} - -IMG_VOID IMG_CALLCONV DBGDrivSetStreamOffset(PDBG_STREAM psMainStream, IMG_UINT32 ui32StreamOffset) -{ - PDBG_STREAM psStream; - - - - if (!StreamValid(psMainStream)) - { - return; - } - - if(psMainStream->psCtrl->bInitPhaseComplete) - { - psStream = psMainStream; - } - else - { - psStream = psMainStream->psInitStream; - } - - PVR_DPF((PVR_DBGDRIV_MESSAGE, "DBGDrivSetStreamOffset: %s set to %x b", - psStream->szName, - ui32StreamOffset)); - psStream->ui32DataWritten = ui32StreamOffset; -} - -IMG_PVOID IMG_CALLCONV DBGDrivGetServiceTable(IMG_VOID) -{ - return((IMG_PVOID)&g_sDBGKMServices); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 * pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags) -{ - PDBG_LASTFRAME_BUFFER psLFBuffer; - - - - if (!StreamValidForWrite(psStream)) - { - return(0xFFFFFFFFUL); - } - - - - if ((psStream->psCtrl->ui32DebugLevel & ui32Level) == 0) - { - return(0xFFFFFFFFUL); - } - - - - if ((psStream->psCtrl->ui32CapMode & DEBUG_CAPMODE_FRAMED) != 0) - { - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0) - { - - return(ui32InBuffSize); - } - } - else if (psStream->psCtrl->ui32CapMode == DEBUG_CAPMODE_HOTKEY) - { - if ((psStream->psCtrl->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE)) - { - - return(ui32InBuffSize); - } - } - - psLFBuffer = FindLFBuf(psStream); - - if (ui32Flags & WRITELF_FLAGS_RESETBUF) - { - - - ui32InBuffSize = (ui32InBuffSize > LAST_FRAME_BUF_SIZE) ? LAST_FRAME_BUF_SIZE : ui32InBuffSize; - HostMemCopy((IMG_VOID *)psLFBuffer->ui8Buffer, (IMG_VOID *)pui8InBuf, ui32InBuffSize); - psLFBuffer->ui32BufLen = ui32InBuffSize; - } - else - { - - - ui32InBuffSize = ((psLFBuffer->ui32BufLen + ui32InBuffSize) > LAST_FRAME_BUF_SIZE) ? (LAST_FRAME_BUF_SIZE - psLFBuffer->ui32BufLen) : ui32InBuffSize; - HostMemCopy((IMG_VOID *)(&psLFBuffer->ui8Buffer[psLFBuffer->ui32BufLen]), (IMG_VOID *)pui8InBuf, ui32InBuffSize); - psLFBuffer->ui32BufLen += ui32InBuffSize; - } - - return(ui32InBuffSize); -} - -IMG_UINT32 IMG_CALLCONV DBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 * pui8OutBuf) -{ - PDBG_LASTFRAME_BUFFER psLFBuffer; - IMG_UINT32 ui32Data; - - - - if (!StreamValidForRead(psStream)) - { - return(0); - } - - psLFBuffer = FindLFBuf(psStream); - - - - ui32Data = (ui32OutBuffSize < psLFBuffer->ui32BufLen) ? ui32OutBuffSize : psLFBuffer->ui32BufLen; - - - - HostMemCopy((IMG_VOID *)pui8OutBuf, (IMG_VOID *)psLFBuffer->ui8Buffer, ui32Data); - - return ui32Data; -} - -IMG_VOID IMG_CALLCONV DBGDrivStartInitPhase(PDBG_STREAM psStream) -{ - psStream->psCtrl->bInitPhaseComplete = IMG_FALSE; -} - -IMG_VOID IMG_CALLCONV DBGDrivStopInitPhase(PDBG_STREAM psStream) -{ - psStream->psCtrl->bInitPhaseComplete = IMG_TRUE; -} - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) -IMG_VOID IMG_CALLCONV DBGDrivWaitForEvent(DBG_EVENT eEvent) -{ - HostWaitForEvent(eEvent); -} -#endif - -IMG_BOOL ExpandStreamBuffer(PDBG_STREAM psStream, IMG_UINT32 ui32NewSize) -{ - IMG_VOID * pvNewBuf; - IMG_UINT32 ui32NewSizeInPages; - IMG_UINT32 ui32NewWOffset; - IMG_UINT32 ui32NewROffset; - IMG_UINT32 ui32SpaceInOldBuf; - - - - if (psStream->ui32Size >= ui32NewSize) - { - return IMG_FALSE; - } - - - - ui32SpaceInOldBuf = SpaceInStream(psStream); - - - - ui32NewSizeInPages = ((ui32NewSize + 0xfffUL) & ~0xfffUL) / 4096UL; - - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - pvNewBuf = HostNonPageablePageAlloc(ui32NewSizeInPages); - } - else - { - pvNewBuf = HostPageablePageAlloc(ui32NewSizeInPages); - } - - if (pvNewBuf == IMG_NULL) - { - return IMG_FALSE; - } - - if(psStream->bCircularAllowed) - { - - - - if (psStream->ui32RPtr <= psStream->ui32WPtr) - { - - - HostMemCopy(pvNewBuf, - (IMG_VOID *)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32RPtr), - psStream->ui32WPtr - psStream->ui32RPtr); - } - else - { - IMG_UINT32 ui32FirstCopySize; - - - - ui32FirstCopySize = psStream->ui32Size - psStream->ui32RPtr; - - HostMemCopy(pvNewBuf, - (IMG_VOID *)((IMG_UINTPTR_T)psStream->pvBase + psStream->ui32RPtr), - ui32FirstCopySize); - - - - HostMemCopy((IMG_VOID *)((IMG_UINTPTR_T)pvNewBuf + ui32FirstCopySize), - (IMG_VOID *)(IMG_PBYTE)psStream->pvBase, - psStream->ui32WPtr); - } - ui32NewROffset = 0; - } - else - { - - HostMemCopy(pvNewBuf, psStream->pvBase, psStream->ui32WPtr); - ui32NewROffset = psStream->ui32RPtr; - } - - - - - ui32NewWOffset = psStream->ui32Size - ui32SpaceInOldBuf; - - - - if ((psStream->psCtrl->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0) - { - HostNonPageablePageFree(psStream->pvBase); - } - else - { - HostPageablePageFree(psStream->pvBase); - } - - - - psStream->pvBase = pvNewBuf; - psStream->ui32RPtr = ui32NewROffset; - psStream->ui32WPtr = ui32NewWOffset; - psStream->ui32Size = ui32NewSizeInPages * 4096; - - return IMG_TRUE; -} - -IMG_UINT32 SpaceInStream(PDBG_STREAM psStream) -{ - IMG_UINT32 ui32Space; - - if (psStream->bCircularAllowed) - { - - if (psStream->ui32RPtr > psStream->ui32WPtr) - { - ui32Space = psStream->ui32RPtr - psStream->ui32WPtr; - } - else - { - ui32Space = psStream->ui32RPtr + (psStream->ui32Size - psStream->ui32WPtr); - } - } - else - { - - ui32Space = psStream->ui32Size - psStream->ui32WPtr; - } - - return ui32Space; -} - - -void DestroyAllStreams(void) -{ - while (g_psStreamList != IMG_NULL) - { - DBGDrivDestroyStream(g_psStreamList); - } - return; -} - -PDBG_LASTFRAME_BUFFER FindLFBuf(PDBG_STREAM psStream) -{ - PDBG_LASTFRAME_BUFFER psLFBuffer; - - psLFBuffer = g_psLFBufferList; - - while (psLFBuffer) - { - if (psLFBuffer->psStream == psStream) - { - break; - } - - psLFBuffer = psLFBuffer->psNext; - } - - return psLFBuffer; -} - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.h b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.h deleted file mode 100644 index 2db4843..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv.h +++ /dev/null @@ -1,122 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _DBGDRIV_ -#define _DBGDRIV_ - -#define BUFFER_SIZE 64*PAGESIZE - -#define DBGDRIV_VERSION 0x100 -#define MAX_PROCESSES 2 -#define BLOCK_USED 0x01 -#define BLOCK_LOCKED 0x02 -#define DBGDRIV_MONOBASE 0x000B0000 - - -extern IMG_VOID * g_pvAPIMutex; - -IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, - IMG_UINT32 ui32CapMode, - IMG_UINT32 ui32OutMode, - IMG_UINT32 ui32Flags, - IMG_UINT32 ui32Pages); -IMG_VOID IMG_CALLCONV DBGDrivDestroyStream(PDBG_STREAM psStream); -IMG_VOID * IMG_CALLCONV DBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream); -IMG_UINT32 IMG_CALLCONV DBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV DBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit); -IMG_UINT32 IMG_CALLCONV DBGDrivWrite(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV DBGDrivWrite2(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV DBGDrivRead(PDBG_STREAM psStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBufferSize,IMG_UINT8 *pui8OutBuf); -IMG_VOID IMG_CALLCONV DBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32Stop,IMG_UINT32 ui32SampleRate); -IMG_VOID IMG_CALLCONV DBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode); -IMG_VOID IMG_CALLCONV DBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel); -IMG_VOID IMG_CALLCONV DBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame); -IMG_UINT32 IMG_CALLCONV DBGDrivGetFrame(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV DBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode); -IMG_VOID IMG_CALLCONV DBGDrivDefaultMode(PDBG_STREAM psStream); -IMG_PVOID IMG_CALLCONV DBGDrivGetServiceTable(IMG_VOID); -IMG_UINT32 IMG_CALLCONV DBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV DBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_VOID IMG_CALLCONV DBGDrivSetClientMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker); -IMG_VOID IMG_CALLCONV DBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker); -IMG_UINT32 IMG_CALLCONV DBGDrivGetMarker(PDBG_STREAM psStream); -IMG_BOOL IMG_CALLCONV DBGDrivIsLastCaptureFrame(PDBG_STREAM psStream); -IMG_BOOL IMG_CALLCONV DBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame); -IMG_UINT32 IMG_CALLCONV DBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 *pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags); -IMG_UINT32 IMG_CALLCONV DBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 *pui8OutBuf); -IMG_VOID IMG_CALLCONV DBGDrivStartInitPhase(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV DBGDrivStopInitPhase(PDBG_STREAM psStream); -IMG_UINT32 IMG_CALLCONV DBGDrivGetStreamOffset(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV DBGDrivSetStreamOffset(PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset); -IMG_VOID IMG_CALLCONV DBGDrivWaitForEvent(DBG_EVENT eEvent); - -IMG_VOID DestroyAllStreams(IMG_VOID); - -IMG_UINT32 AtoI(IMG_CHAR *szIn); - -IMG_VOID HostMemSet(IMG_VOID *pvDest,IMG_UINT8 ui8Value,IMG_UINT32 ui32Size); -IMG_VOID HostMemCopy(IMG_VOID *pvDest,IMG_VOID *pvSrc,IMG_UINT32 ui32Size); -IMG_VOID MonoOut(IMG_CHAR * pszString,IMG_BOOL bNewLine); - -IMG_SID PStream2SID(PDBG_STREAM psStream); -PDBG_STREAM SID2PStream(IMG_SID hStream); -IMG_BOOL AddSIDEntry(PDBG_STREAM psStream); -IMG_BOOL RemoveSIDEntry(PDBG_STREAM psStream); - -IMG_VOID * IMG_CALLCONV ExtDBGDrivCreateStream(IMG_CHAR * pszName, IMG_UINT32 ui32CapMode, IMG_UINT32 ui32OutMode, IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size); -IMG_VOID IMG_CALLCONV ExtDBGDrivDestroyStream(PDBG_STREAM psStream); -IMG_VOID * IMG_CALLCONV ExtDBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivRead(PDBG_STREAM psStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBuffSize,IMG_UINT8 *pui8OutBuf); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32End,IMG_UINT32 ui32SampleRate); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetFrame(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV ExtDBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode); -IMG_VOID IMG_CALLCONV ExtDBGDrivDefaultMode(PDBG_STREAM psStream); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite2(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetMarker(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV ExtDBGDrivStartInitPhase(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV ExtDBGDrivStopInitPhase(PDBG_STREAM psStream); -IMG_BOOL IMG_CALLCONV ExtDBGDrivIsLastCaptureFrame(PDBG_STREAM psStream); -IMG_BOOL IMG_CALLCONV ExtDBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 *pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 *pui8OutBuf); -IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetStreamOffset(PDBG_STREAM psStream); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetStreamOffset(PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset); -IMG_VOID IMG_CALLCONV ExtDBGDrivWaitForEvent(DBG_EVENT eEvent); -IMG_VOID IMG_CALLCONV ExtDBGDrivSetConnectNotifier(DBGKM_CONNECT_NOTIFIER fn_notifier); - -IMG_UINT32 IMG_CALLCONV ExtDBGDrivWritePersist(PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); - -#endif - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h deleted file mode 100644 index 130c146..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/dbgdriv_ioctl.h +++ /dev/null @@ -1,35 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _IOCTL_ -#define _IOCTL_ - -#define MAX_DBGVXD_W32_API 25 - -extern IMG_UINT32 (*g_DBGDrivProc[MAX_DBGVXD_W32_API])(IMG_VOID *, IMG_VOID *); - -#endif - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/handle.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/handle.c deleted file mode 100644 index ddffb3f..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/handle.c +++ /dev/null @@ -1,121 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include "img_defs.h" -#include "dbgdrvif.h" -#include "dbgdriv.h" - -#define MAX_SID_ENTRIES 8 - -typedef struct _SID_INFO -{ - PDBG_STREAM psStream; -} SID_INFO, *PSID_INFO; - -static SID_INFO gaSID_Xlat_Table[MAX_SID_ENTRIES]; - -IMG_SID PStream2SID(PDBG_STREAM psStream) -{ - if (psStream != (PDBG_STREAM)IMG_NULL) - { - IMG_INT32 iIdx; - - for (iIdx = 0; iIdx < MAX_SID_ENTRIES; iIdx++) - { - if (psStream == gaSID_Xlat_Table[iIdx].psStream) - { - - return (IMG_SID)iIdx+1; - } - } - } - - return (IMG_SID)0; -} - - -PDBG_STREAM SID2PStream(IMG_SID hStream) -{ - - IMG_INT32 iIdx = (IMG_INT32)hStream-1; - - if (iIdx >= 0 && iIdx < MAX_SID_ENTRIES) - { - return gaSID_Xlat_Table[iIdx].psStream; - } - else - { - return (PDBG_STREAM)IMG_NULL; - } -} - - -IMG_BOOL AddSIDEntry(PDBG_STREAM psStream) -{ - if (psStream != (PDBG_STREAM)IMG_NULL) - { - IMG_INT32 iIdx; - - for (iIdx = 0; iIdx < MAX_SID_ENTRIES; iIdx++) - { - if (psStream == gaSID_Xlat_Table[iIdx].psStream) - { - - return IMG_TRUE; - } - - if (gaSID_Xlat_Table[iIdx].psStream == (PDBG_STREAM)IMG_NULL) - { - - gaSID_Xlat_Table[iIdx].psStream = psStream; - return IMG_TRUE; - } - } - } - - return IMG_FALSE; -} - -IMG_BOOL RemoveSIDEntry(PDBG_STREAM psStream) -{ - if (psStream != (PDBG_STREAM)IMG_NULL) - { - IMG_INT32 iIdx; - - for (iIdx = 0; iIdx < MAX_SID_ENTRIES; iIdx++) - { - if (psStream == gaSID_Xlat_Table[iIdx].psStream) - { - gaSID_Xlat_Table[iIdx].psStream = (PDBG_STREAM)IMG_NULL; - return IMG_TRUE; - } - } - } - - return IMG_FALSE; -} - - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hostfunc.h b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hostfunc.h deleted file mode 100644 index 70192fb..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hostfunc.h +++ /dev/null @@ -1,58 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _HOSTFUNC_ -#define _HOSTFUNC_ - -#define HOST_PAGESIZE (4096) -#define DBG_MEMORY_INITIALIZER (0xe2) - -IMG_UINT32 HostReadRegistryDWORDFromString(IMG_CHAR *pcKey, IMG_CHAR *pcValueName, IMG_UINT32 *pui32Data); - -IMG_VOID * HostPageablePageAlloc(IMG_UINT32 ui32Pages); -IMG_VOID HostPageablePageFree(IMG_VOID * pvBase); -IMG_VOID * HostNonPageablePageAlloc(IMG_UINT32 ui32Pages); -IMG_VOID HostNonPageablePageFree(IMG_VOID * pvBase); - -IMG_VOID * HostMapKrnBufIntoUser(IMG_VOID * pvKrnAddr, IMG_UINT32 ui32Size, IMG_VOID * *ppvMdl); -IMG_VOID HostUnMapKrnBufFromUser(IMG_VOID * pvUserAddr, IMG_VOID * pvMdl, IMG_VOID * pvProcess); - -IMG_VOID HostCreateRegDeclStreams(IMG_VOID); - -IMG_VOID * HostCreateMutex(IMG_VOID); -IMG_VOID HostAquireMutex(IMG_VOID * pvMutex); -IMG_VOID HostReleaseMutex(IMG_VOID * pvMutex); -IMG_VOID HostDestroyMutex(IMG_VOID * pvMutex); - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) -IMG_INT32 HostCreateEventObjects(IMG_VOID); -IMG_VOID HostWaitForEvent(DBG_EVENT eEvent); -IMG_VOID HostSignalEvent(DBG_EVENT eEvent); -IMG_VOID HostDestroyEventObjects(IMG_VOID); -#endif - -#endif - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.c deleted file mode 100644 index 62c89e3..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.c +++ /dev/null @@ -1,135 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - -#if (!defined(LINUX) && !defined(__QNXNTO__)) -#include -#include -#endif - -#include "img_types.h" -#include "pvr_debug.h" -#include "dbgdrvif.h" -#include "dbgdriv.h" -#include "hotkey.h" -#include "hostfunc.h" - - - - - -IMG_UINT32 g_ui32HotKeyFrame = 0xFFFFFFFF; -IMG_BOOL g_bHotKeyPressed = IMG_FALSE; -IMG_BOOL g_bHotKeyRegistered = IMG_FALSE; - -PRIVATEHOTKEYDATA g_PrivateHotKeyData; - - -IMG_VOID ReadInHotKeys(IMG_VOID) -{ - g_PrivateHotKeyData.ui32ScanCode = 0x58; - g_PrivateHotKeyData.ui32ShiftState = 0x0; - - - -#if 0 - if (_RegOpenKey(HKEY_LOCAL_MACHINE,pszRegPath,&hKey) == ERROR_SUCCESS) - { - - - QueryReg(hKey,"ui32ScanCode",&g_PrivateHotKeyData.ui32ScanCode); - QueryReg(hKey,"ui32ShiftState",&g_PrivateHotKeyData.ui32ShiftState); - } -#else - HostReadRegistryDWORDFromString("DEBUG\\Streams", "ui32ScanCode" , &g_PrivateHotKeyData.ui32ScanCode); - HostReadRegistryDWORDFromString("DEBUG\\Streams", "ui32ShiftState", &g_PrivateHotKeyData.ui32ShiftState); -#endif -} - -IMG_VOID RegisterKeyPressed(IMG_UINT32 dwui32ScanCode, PHOTKEYINFO pInfo) -{ - PDBG_STREAM psStream; - - PVR_UNREFERENCED_PARAMETER(pInfo); - - if (dwui32ScanCode == g_PrivateHotKeyData.ui32ScanCode) - { - PVR_DPF((PVR_DBG_MESSAGE,"PDUMP Hotkey pressed !\n")); - - psStream = (PDBG_STREAM) g_PrivateHotKeyData.sHotKeyInfo.pvStream; - - if (!g_bHotKeyPressed) - { - - - g_ui32HotKeyFrame = psStream->psCtrl->ui32Current + 2; - - - - g_bHotKeyPressed = IMG_TRUE; - } - } -} - -IMG_VOID ActivateHotKeys(PDBG_STREAM psStream) -{ - - - ReadInHotKeys(); - - - - if (!g_PrivateHotKeyData.sHotKeyInfo.hHotKey) - { - if (g_PrivateHotKeyData.ui32ScanCode != 0) - { - PVR_DPF((PVR_DBG_MESSAGE,"Activate HotKey for PDUMP.\n")); - - - - g_PrivateHotKeyData.sHotKeyInfo.pvStream = psStream; - - DefineHotKey(g_PrivateHotKeyData.ui32ScanCode, g_PrivateHotKeyData.ui32ShiftState, &g_PrivateHotKeyData.sHotKeyInfo); - } - else - { - g_PrivateHotKeyData.sHotKeyInfo.hHotKey = 0; - } - } -} - -IMG_VOID DeactivateHotKeys(IMG_VOID) -{ - if (g_PrivateHotKeyData.sHotKeyInfo.hHotKey != 0) - { - PVR_DPF((PVR_DBG_MESSAGE,"Deactivate HotKey.\n")); - - RemoveHotKey(g_PrivateHotKeyData.sHotKeyInfo.hHotKey); - g_PrivateHotKeyData.sHotKeyInfo.hHotKey = 0; - } -} - - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.h b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.h deleted file mode 100644 index c5d84bb..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/hotkey.h +++ /dev/null @@ -1,60 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef _HOTKEY_ -#define _HOTKEY_ - - -typedef struct _hotkeyinfo -{ - IMG_UINT8 ui8ScanCode; - IMG_UINT8 ui8Type; - IMG_UINT8 ui8Flag; - IMG_UINT8 ui8Filler1; - IMG_UINT32 ui32ShiftState; - IMG_UINT32 ui32HotKeyProc; - IMG_VOID *pvStream; - IMG_UINT32 hHotKey; -} HOTKEYINFO, *PHOTKEYINFO; - -typedef struct _privatehotkeydata -{ - IMG_UINT32 ui32ScanCode; - IMG_UINT32 ui32ShiftState; - HOTKEYINFO sHotKeyInfo; -} PRIVATEHOTKEYDATA, *PPRIVATEHOTKEYDATA; - - -IMG_VOID ReadInHotKeys (IMG_VOID); -IMG_VOID ActivateHotKeys(PDBG_STREAM psStream); -IMG_VOID DeactivateHotKeys(IMG_VOID); - -IMG_VOID RemoveHotKey (IMG_UINT32 hHotKey); -IMG_VOID DefineHotKey (IMG_UINT32 ui32ScanCode, IMG_UINT32 ui32ShiftState, PHOTKEYINFO psInfo); -IMG_VOID RegisterKeyPressed (IMG_UINT32 ui32ScanCode, PHOTKEYINFO psInfo); - -#endif - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/ioctl.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/ioctl.c deleted file mode 100644 index a8b8b6e..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/common/ioctl.c +++ /dev/null @@ -1,586 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - - - -#ifdef LINUX -#include -#endif - -#include "img_types.h" -#include "dbgdrvif.h" -#include "dbgdriv.h" -#include "hotkey.h" -#include "dbgdriv_ioctl.h" - - -static IMG_UINT32 DBGDIOCDrivCreateStream(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_CREATESTREAM psIn; - IMG_VOID * *ppvOut; - #ifdef LINUX - static IMG_CHAR name[32]; - #endif - - psIn = (PDBG_IN_CREATESTREAM) pvInBuffer; - ppvOut = (IMG_VOID * *) pvOutBuffer; - - #ifdef LINUX - - if (copy_from_user(name, psIn->u.pszName, 32) != 0) - { - return IMG_FALSE; - } - - *ppvOut = ExtDBGDrivCreateStream(name, psIn->ui32CapMode, psIn->ui32OutMode, 0, psIn->ui32Pages); - - #else - *ppvOut = ExtDBGDrivCreateStream(psIn->u.pszName, psIn->ui32CapMode, psIn->ui32OutMode, DEBUG_FLAGS_NO_BUF_EXPANDSION, psIn->ui32Pages); - #endif - - - return(IMG_TRUE); -} - -static IMG_UINT32 DBGDIOCDrivDestroyStream(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_STREAM *ppsStream; - PDBG_STREAM psStream; - - ppsStream = (PDBG_STREAM *) pvInBuffer; - psStream = (PDBG_STREAM) *ppsStream; - - PVR_UNREFERENCED_PARAMETER( pvOutBuffer); - - ExtDBGDrivDestroyStream(psStream); - - return(IMG_TRUE); -} - -static IMG_UINT32 DBGDIOCDrivGetStream(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_FINDSTREAM psParams; - IMG_SID * phStream; - - psParams = (PDBG_IN_FINDSTREAM)pvInBuffer; - phStream = (IMG_SID *)pvOutBuffer; - - *phStream = PStream2SID(ExtDBGDrivFindStream(psParams->u.pszName, psParams->bResetStream)); - - return(IMG_TRUE); -} - -static IMG_UINT32 DBGDIOCDrivWriteString(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_WRITESTRING psParams; - IMG_UINT32 *pui32OutLen; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_WRITESTRING) pvInBuffer; - pui32OutLen = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32OutLen = ExtDBGDrivWriteString(psStream,psParams->u.pszString,psParams->ui32Level); - return(IMG_TRUE); - } - else - { - - *pui32OutLen = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivWriteStringCM(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_WRITESTRING psParams; - IMG_UINT32 *pui32OutLen; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_WRITESTRING) pvInBuffer; - pui32OutLen = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32OutLen = ExtDBGDrivWriteStringCM(psStream,psParams->u.pszString,psParams->ui32Level); - return(IMG_TRUE); - } - else - { - - *pui32OutLen = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivReadString(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32OutLen; - PDBG_IN_READSTRING psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_READSTRING) pvInBuffer; - pui32OutLen = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32OutLen = ExtDBGDrivReadString(psStream, - psParams->u.pszString,psParams->ui32StringLen); - return(IMG_TRUE); - } - else - { - - *pui32OutLen = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivWrite(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32BytesCopied; - PDBG_IN_WRITE psInParams; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_WRITE) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivWrite(psStream, - psInParams->u.pui8InBuffer, - psInParams->ui32TransferSize, - psInParams->ui32Level); - return(IMG_TRUE); - } - else - { - - *pui32BytesCopied = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivWrite2(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32BytesCopied; - PDBG_IN_WRITE psInParams; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_WRITE) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivWrite2(psStream, - psInParams->u.pui8InBuffer, - psInParams->ui32TransferSize, - psInParams->ui32Level); - return(IMG_TRUE); - } - else - { - - *pui32BytesCopied = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivWriteCM(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32BytesCopied; - PDBG_IN_WRITE psInParams; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_WRITE) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivWriteCM(psStream, - psInParams->u.pui8InBuffer, - psInParams->ui32TransferSize, - psInParams->ui32Level); - return(IMG_TRUE); - } - else - { - - *pui32BytesCopied = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivRead(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32BytesCopied; - PDBG_IN_READ psInParams; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_READ) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivRead(psStream, - psInParams->bReadInitBuffer, - psInParams->ui32OutBufferSize, - psInParams->u.pui8OutBuffer); - return(IMG_TRUE); - } - else - { - - *pui32BytesCopied = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivSetCaptureMode(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_SETDEBUGMODE psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_SETDEBUGMODE) pvInBuffer; - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivSetCaptureMode(psStream, - psParams->ui32Mode, - psParams->ui32Start, - psParams->ui32End, - psParams->ui32SampleRate); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivSetOutMode(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_SETDEBUGOUTMODE psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_SETDEBUGOUTMODE) pvInBuffer; - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivSetOutputMode(psStream,psParams->ui32Mode); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivSetDebugLevel(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_SETDEBUGLEVEL psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_SETDEBUGLEVEL) pvInBuffer; - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivSetDebugLevel(psStream,psParams->ui32Level); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivSetFrame(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_SETFRAME psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_SETFRAME) pvInBuffer; - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivSetFrame(psStream,psParams->ui32Frame); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivGetFrame(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_STREAM psStream; - IMG_UINT32 *pui32Current; - - pui32Current = (IMG_UINT32 *) pvOutBuffer; - psStream = SID2PStream(*(IMG_SID *)pvInBuffer); - - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32Current = ExtDBGDrivGetFrame(psStream); - return(IMG_TRUE); - } - else - { - - *pui32Current = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivIsCaptureFrame(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_ISCAPTUREFRAME psParams; - IMG_UINT32 * pui32Current; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_ISCAPTUREFRAME) pvInBuffer; - pui32Current = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32Current = ExtDBGDrivIsCaptureFrame(psStream, - psParams->bCheckPreviousFrame); - return(IMG_TRUE); - } - else - { - - *pui32Current = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivOverrideMode(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_OVERRIDEMODE psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_OVERRIDEMODE) pvInBuffer; - PVR_UNREFERENCED_PARAMETER( pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivOverrideMode(psStream,psParams->ui32Mode); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivDefaultMode(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_STREAM psStream; - - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(*(IMG_SID *)pvInBuffer); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivDefaultMode(psStream); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivSetMarker(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_SETMARKER psParams; - PDBG_STREAM psStream; - - psParams = (PDBG_IN_SETMARKER) pvInBuffer; - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - psStream = SID2PStream(psParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - ExtDBGDrivSetMarker(psStream, psParams->ui32Marker); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivGetMarker(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_STREAM psStream; - IMG_UINT32 *pui32Current; - - pui32Current = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(*(IMG_SID *)pvInBuffer); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32Current = ExtDBGDrivGetMarker(psStream); - return(IMG_TRUE); - } - else - { - - *pui32Current = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivGetServiceTable(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_PVOID * ppvOut; - - PVR_UNREFERENCED_PARAMETER(pvInBuffer); - ppvOut = (IMG_PVOID *) pvOutBuffer; - - *ppvOut = DBGDrivGetServiceTable(); - - return(IMG_TRUE); -} - -static IMG_UINT32 DBGDIOCDrivWriteLF(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - PDBG_IN_WRITE_LF psInParams; - IMG_UINT32 *pui32BytesCopied; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_WRITE_LF) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivWriteLF(psStream, - psInParams->u.pui8InBuffer, - psInParams->ui32BufferSize, - psInParams->ui32Level, - psInParams->ui32Flags); - return(IMG_TRUE); - } - else - { - - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivReadLF(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - IMG_UINT32 * pui32BytesCopied; - PDBG_IN_READ psInParams; - PDBG_STREAM psStream; - - psInParams = (PDBG_IN_READ) pvInBuffer; - pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; - - psStream = SID2PStream(psInParams->hStream); - if (psStream != (PDBG_STREAM)IMG_NULL) - { - *pui32BytesCopied = ExtDBGDrivReadLF(psStream, - psInParams->ui32OutBufferSize, - psInParams->u.pui8OutBuffer); - return(IMG_TRUE); - } - else - { - - *pui32BytesCopied = 0; - return(IMG_FALSE); - } -} - -static IMG_UINT32 DBGDIOCDrivWaitForEvent(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer) -{ - DBG_EVENT eEvent = (DBG_EVENT)(*(IMG_UINT32 *)pvInBuffer); - - PVR_UNREFERENCED_PARAMETER(pvOutBuffer); - - ExtDBGDrivWaitForEvent(eEvent); - - return(IMG_TRUE); -} - -IMG_UINT32 (*g_DBGDrivProc[25])(IMG_VOID *, IMG_VOID *) = -{ - DBGDIOCDrivCreateStream, - DBGDIOCDrivDestroyStream, - DBGDIOCDrivGetStream, - DBGDIOCDrivWriteString, - DBGDIOCDrivReadString, - DBGDIOCDrivWrite, - DBGDIOCDrivRead, - DBGDIOCDrivSetCaptureMode, - DBGDIOCDrivSetOutMode, - DBGDIOCDrivSetDebugLevel, - DBGDIOCDrivSetFrame, - DBGDIOCDrivGetFrame, - DBGDIOCDrivOverrideMode, - DBGDIOCDrivDefaultMode, - DBGDIOCDrivGetServiceTable, - DBGDIOCDrivWrite2, - DBGDIOCDrivWriteStringCM, - DBGDIOCDrivWriteCM, - DBGDIOCDrivSetMarker, - DBGDIOCDrivGetMarker, - DBGDIOCDrivIsCaptureFrame, - DBGDIOCDrivWriteLF, - DBGDIOCDrivReadLF, - DBGDIOCDrivWaitForEvent -}; - diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/hostfunc.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/hostfunc.c deleted file mode 100644 index 66d328d..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/hostfunc.c +++ /dev/null @@ -1,324 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) -#include -#else -#include -#endif -#include - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) -#include -#include -#include -#include -#endif - -#include "img_types.h" -#include "pvr_debug.h" - -#include "dbgdrvif.h" -#include "hostfunc.h" -#include "dbgdriv.h" - -#if defined(MODULE) && defined(DEBUG) && !defined(SUPPORT_DRI_DRM) -IMG_UINT32 gPVRDebugLevel = (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING); - -#define PVR_STRING_TERMINATOR '\0' -#define PVR_IS_FILE_SEPARATOR(character) ( ((character) == '\\') || ((character) == '/') ) - -void PVRSRVDebugPrintf ( - IMG_UINT32 ui32DebugLevel, - const IMG_CHAR* pszFileName, - IMG_UINT32 ui32Line, - const IMG_CHAR* pszFormat, - ... - ) -{ - IMG_BOOL bTrace; -#if !defined(__sh__) - IMG_CHAR *pszLeafName; - - pszLeafName = (char *)strrchr (pszFileName, '\\'); - - if (pszLeafName) - { - pszFileName = pszLeafName; - } -#endif - - bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; - - if (gPVRDebugLevel & ui32DebugLevel) - { - va_list vaArgs; - char szBuffer[256]; - char *szBufferEnd = szBuffer; - char *szBufferLimit = szBuffer + sizeof(szBuffer) - 1; - - - *szBufferLimit = '\0'; - - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "PVR_K:"); - szBufferEnd += strlen(szBufferEnd); - - - if (bTrace == IMG_FALSE) - { - switch(ui32DebugLevel) - { - case DBGPRIV_FATAL: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Fatal):"); - break; - } - case DBGPRIV_ERROR: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Error):"); - break; - } - case DBGPRIV_WARNING: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Warning):"); - break; - } - case DBGPRIV_MESSAGE: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Message):"); - break; - } - case DBGPRIV_VERBOSE: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Verbose):"); - break; - } - default: - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, "(Unknown message level)"); - break; - } - } - szBufferEnd += strlen(szBufferEnd); - } - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, " "); - szBufferEnd += strlen(szBufferEnd); - - va_start (vaArgs, pszFormat); - vsnprintf(szBufferEnd, szBufferLimit - szBufferEnd, pszFormat, vaArgs); - va_end (vaArgs); - szBufferEnd += strlen(szBufferEnd); - - - if (bTrace == IMG_FALSE) - { - snprintf(szBufferEnd, szBufferLimit - szBufferEnd, - " [%d, %s]", (int)ui32Line, pszFileName); - szBufferEnd += strlen(szBufferEnd); - } - - printk(KERN_INFO "%s\r\n", szBuffer); - } -} -#endif - -IMG_VOID HostMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_UINT32 ui32Size) -{ - memset(pvDest, (int) ui8Value, (size_t) ui32Size); -} - -IMG_VOID HostMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_UINT32 ui32Size) -{ -#if defined(USE_UNOPTIMISED_MEMCPY) - unsigned char *src,*dst; - int i; - - src=(unsigned char *)pvSrc; - dst=(unsigned char *)pvDst; - for(i=0;i= KERNEL_VERSION(2,6,37)) -typedef struct mutex MUTEX; -#define INIT_MUTEX(m) mutex_init(m) -#define DOWN_TRYLOCK(m) (!mutex_trylock(m)) -#define DOWN(m) mutex_lock(m) -#define UP(m) mutex_unlock(m) -#else -typedef struct semaphore MUTEX; -#define INIT_MUTEX(m) init_MUTEX(m) -#define DOWN_TRYLOCK(m) down_trylock(m) -#define DOWN(m) down(m) -#define UP(m) up(m) -#endif - -IMG_VOID * HostCreateMutex(IMG_VOID) -{ - MUTEX *psMutex; - - psMutex = kmalloc(sizeof(*psMutex), GFP_KERNEL); - if (psMutex) - { - INIT_MUTEX(psMutex); - } - - return psMutex; -} - -IMG_VOID HostAquireMutex(IMG_VOID * pvMutex) -{ - BUG_ON(in_interrupt()); - -#if defined(PVR_DEBUG_DBGDRV_DETECT_HOST_MUTEX_COLLISIONS) - if (DOWN_TRYLOCK((MUTEX *)pvMutex)) - { - printk(KERN_INFO "HostAquireMutex: Waiting for mutex\n"); - DOWN((MUTEX *)pvMutex); - } -#else - DOWN((MUTEX *)pvMutex); -#endif -} - -IMG_VOID HostReleaseMutex(IMG_VOID * pvMutex) -{ - UP((MUTEX *)pvMutex); -} - -IMG_VOID HostDestroyMutex(IMG_VOID * pvMutex) -{ - if (pvMutex) - { - kfree(pvMutex); - } -} - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - -#define EVENT_WAIT_TIMEOUT_MS 500 -#define EVENT_WAIT_TIMEOUT_JIFFIES (EVENT_WAIT_TIMEOUT_MS * HZ / 1000) - -static int iStreamData; -static wait_queue_head_t sStreamDataEvent; - -IMG_INT32 HostCreateEventObjects(IMG_VOID) -{ - init_waitqueue_head(&sStreamDataEvent); - - return 0; -} - -IMG_VOID HostWaitForEvent(DBG_EVENT eEvent) -{ - switch(eEvent) - { - case DBG_EVENT_STREAM_DATA: - - wait_event_interruptible_timeout(sStreamDataEvent, iStreamData != 0, EVENT_WAIT_TIMEOUT_JIFFIES); - iStreamData = 0; - break; - default: - - msleep_interruptible(EVENT_WAIT_TIMEOUT_MS); - break; - } -} - -IMG_VOID HostSignalEvent(DBG_EVENT eEvent) -{ - switch(eEvent) - { - case DBG_EVENT_STREAM_DATA: - iStreamData = 1; - wake_up_interruptible(&sStreamDataEvent); - break; - default: - break; - } -} - -IMG_VOID HostDestroyEventObjects(IMG_VOID) -{ -} -#endif diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/kbuild/Makefile b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/kbuild/Makefile deleted file mode 100644 index 00db6ef..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/kbuild/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -MODULE = dbgdrv - -INCLUDES = -I$(EURASIAROOT)/services4/srvkm/env/linux - -SOURCES = - -include $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux/makefile.linux.common - -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/main.c b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/main.c deleted file mode 100644 index b577a2f..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/main.c +++ /dev/null @@ -1,315 +0,0 @@ -/********************************************************************** - * - * Copyright (C) Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) -#include -#endif - -#if defined(LDM_PCI) && !defined(SUPPORT_DRI_DRM) -#include -#endif - -#include - -#if defined(SUPPORT_DRI_DRM) -#include "drmP.h" -#include "drm.h" -#endif - -#include "img_types.h" -#include "linuxsrv.h" -#include "dbgdriv_ioctl.h" -#include "dbgdrvif.h" -#include "dbgdriv.h" -#include "hostfunc.h" -#include "hotkey.h" -#include "pvr_debug.h" -#include "pvrmodule.h" - -#if defined(SUPPORT_DRI_DRM) - -#include "pvr_drm_shared.h" -#include "pvr_drm.h" - -#else - -#define DRVNAME "dbgdrv" -MODULE_SUPPORTED_DEVICE(DRVNAME); - -#if (defined(LDM_PLATFORM) || defined(LDM_PCI)) && !defined(SUPPORT_DRI_DRM) -static struct class *psDbgDrvClass; -#endif - -static int AssignedMajorNumber = 0; - -long dbgdrv_ioctl(struct file *, unsigned int, unsigned long); - -static int dbgdrv_open(struct inode unref__ * pInode, struct file unref__ * pFile) -{ - return 0; -} - -static int dbgdrv_release(struct inode unref__ * pInode, struct file unref__ * pFile) -{ - return 0; -} - -static int dbgdrv_mmap(struct file* pFile, struct vm_area_struct* ps_vma) -{ - return 0; -} - -static struct file_operations dbgdrv_fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = dbgdrv_ioctl, - .open = dbgdrv_open, - .release = dbgdrv_release, - .mmap = dbgdrv_mmap, -}; - -#endif - -IMG_VOID DBGDrvGetServiceTable(IMG_VOID **fn_table); - -IMG_VOID DBGDrvGetServiceTable(IMG_VOID **fn_table) -{ - extern DBGKM_SERVICE_TABLE g_sDBGKMServices; - - *fn_table = &g_sDBGKMServices; -} - -#if defined(SUPPORT_DRI_DRM) -void dbgdrv_cleanup(void) -#else -static void __exit dbgdrv_cleanup(void) -#endif -{ -#if !defined(SUPPORT_DRI_DRM) -#if defined(LDM_PLATFORM) || defined(LDM_PCI) - device_destroy(psDbgDrvClass, MKDEV(AssignedMajorNumber, 0)); - class_destroy(psDbgDrvClass); -#endif - unregister_chrdev(AssignedMajorNumber, DRVNAME); -#endif -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - HostDestroyEventObjects(); -#endif - HostDestroyMutex(g_pvAPIMutex); - return; -} - -#if defined(SUPPORT_DRI_DRM) -IMG_INT dbgdrv_init(void) -#else -static int __init dbgdrv_init(void) -#endif -{ -#if (defined(LDM_PLATFORM) || defined(LDM_PCI)) && !defined(SUPPORT_DRI_DRM) - struct device *psDev; -#endif - -#if !defined(SUPPORT_DRI_DRM) - int err = -EBUSY; -#endif - - - if ((g_pvAPIMutex=HostCreateMutex()) == IMG_NULL) - { - return -ENOMEM; - } - -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - - (void) HostCreateEventObjects(); -#endif - -#if !defined(SUPPORT_DRI_DRM) - AssignedMajorNumber = - register_chrdev(AssignedMajorNumber, DRVNAME, &dbgdrv_fops); - - if (AssignedMajorNumber <= 0) - { - PVR_DPF((PVR_DBG_ERROR," unable to get major\n")); - goto ErrDestroyEventObjects; - } - -#if defined(LDM_PLATFORM) || defined(LDM_PCI) - - psDbgDrvClass = class_create(THIS_MODULE, DRVNAME); - if (IS_ERR(psDbgDrvClass)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: unable to create class (%ld)", - __func__, PTR_ERR(psDbgDrvClass))); - goto ErrUnregisterCharDev; - } - - psDev = device_create(psDbgDrvClass, NULL, MKDEV(AssignedMajorNumber, 0), -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) - NULL, -#endif - DRVNAME); - if (IS_ERR(psDev)) - { - PVR_DPF((PVR_DBG_ERROR, "%s: unable to create device (%ld)", - __func__, PTR_ERR(psDev))); - goto ErrDestroyClass; - } -#endif -#endif - - return 0; - -#if !defined(SUPPORT_DRI_DRM) -ErrDestroyEventObjects: -#if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) - HostDestroyEventObjects(); -#endif -#if defined(LDM_PLATFORM) || defined(LDM_PCI) -ErrUnregisterCharDev: - unregister_chrdev(AssignedMajorNumber, DRVNAME); -ErrDestroyClass: - class_destroy(psDbgDrvClass); -#endif - return err; -#endif -} - -#if defined(SUPPORT_DRI_DRM) -int dbgdrv_ioctl(struct drm_device *dev, IMG_VOID *arg, struct drm_file *pFile) -#else -long dbgdrv_ioctl(struct file *file, unsigned int ioctlCmd, unsigned long arg) -#endif -{ - IOCTL_PACKAGE *pIP = (IOCTL_PACKAGE *) arg; - char *buffer, *in, *out; - unsigned int cmd; - - if((pIP->ui32InBufferSize > (PAGE_SIZE >> 1) ) || (pIP->ui32OutBufferSize > (PAGE_SIZE >> 1))) - { - PVR_DPF((PVR_DBG_ERROR,"Sizes of the buffers are too large, cannot do ioctl\n")); - return -1; - } - - buffer = (char *) HostPageablePageAlloc(1); - if(!buffer) - { - PVR_DPF((PVR_DBG_ERROR,"Failed to allocate buffer, cannot do ioctl\n")); - return -EFAULT; - } - - in = buffer; - out = buffer + (PAGE_SIZE >>1); - - if (copy_from_user(in, pIP->pInBuffer, pIP->ui32InBufferSize) != 0) - { - goto init_failed; - } - - cmd = MAKEIOCTLINDEX(pIP->ui32Cmd) - DEBUG_SERVICE_IOCTL_BASE - 1; - - if(pIP->ui32Cmd == DEBUG_SERVICE_READ) - { - IMG_UINT32 *pui32BytesCopied = (IMG_UINT32 *)out; - DBG_IN_READ *psReadInParams = (DBG_IN_READ *)in; - DBG_STREAM *psStream; - IMG_CHAR *ui8Tmp; - - ui8Tmp = vmalloc(psReadInParams->ui32OutBufferSize); - - if(!ui8Tmp) - { - goto init_failed; - } - - psStream = SID2PStream(psReadInParams->hStream); - if(!psStream) - { - goto init_failed; - } - - *pui32BytesCopied = ExtDBGDrivRead(psStream, - psReadInParams->bReadInitBuffer, - psReadInParams->ui32OutBufferSize, - ui8Tmp); - - if (copy_to_user(psReadInParams->u.pui8OutBuffer, - ui8Tmp, - *pui32BytesCopied) != 0) - { - vfree(ui8Tmp); - goto init_failed; - } - - vfree(ui8Tmp); - } - else - { - (g_DBGDrivProc[cmd])(in, out); - } - - if(copy_to_user(pIP->pOutBuffer, out, pIP->ui32OutBufferSize) != 0) - { - goto init_failed; - } - - HostPageablePageFree((IMG_VOID *)buffer); - return 0; - -init_failed: - HostPageablePageFree((IMG_VOID *)buffer); - return -EFAULT; -} - - -IMG_VOID RemoveHotKey (IMG_UINT32 hHotKey) -{ - PVR_UNREFERENCED_PARAMETER(hHotKey); -} - -IMG_VOID DefineHotKey (IMG_UINT32 ui32ScanCode, IMG_UINT32 ui32ShiftState, PHOTKEYINFO psInfo) -{ - PVR_UNREFERENCED_PARAMETER(ui32ScanCode); - PVR_UNREFERENCED_PARAMETER(ui32ShiftState); - PVR_UNREFERENCED_PARAMETER(psInfo); -} - -EXPORT_SYMBOL(DBGDrvGetServiceTable); - -#if !defined(SUPPORT_DRI_DRM) -subsys_initcall(dbgdrv_init); -module_exit(dbgdrv_cleanup); -#endif diff --git a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/makefile.linux.common b/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/makefile.linux.common deleted file mode 100644 index a995a15..0000000 --- a/drivers/staging/cdv/pvr/tools/intern/debug/dbgdriv/linux/makefile.linux.common +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful but, except -# as otherwise stated in writing, without any warranty; without even the -# implied warranty of merchantability or fitness for a particular purpose. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -# -# The full GNU General Public License is included in this distribution in -# the file called "COPYING". -# -# Contact Information: -# Imagination Technologies Ltd. -# Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK -# -# -# - -DBGDRV_SOURCES_ROOT = $(KBUILDROOT)/../tools/intern/debug/dbgdriv - -INCLUDES += -I$(EURASIAROOT)/include4 \ - -I$(EURASIAROOT)/tools/intern/debug \ - -I$(EURASIAROOT)/tools/intern/debug/dbgdriv/common \ - -I$(EURASIAROOT)/tools/intern/debug/client - -SOURCES += $(DBGDRV_SOURCES_ROOT)/linux/main.c \ - $(DBGDRV_SOURCES_ROOT)/common/dbgdriv.c \ - $(DBGDRV_SOURCES_ROOT)/common/ioctl.c \ - $(DBGDRV_SOURCES_ROOT)/common/handle.c \ - $(DBGDRV_SOURCES_ROOT)/linux/hostfunc.c \ - $(DBGDRV_SOURCES_ROOT)/common/hotkey.c -- 1.7.4.1