From: Imagination Technologies/TI Date: Mon, 14 May 2012 23:47:46 +0000 (+0300) Subject: 1.6.16.3977/4_03_00_02 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9dadbe7237ded54ea97955a7b5d58fbdfc4def7;p=sgx.git 1.6.16.3977/4_03_00_02 --- diff --git a/Kbuild b/Kbuild index 73f873c..a34841f 100644 --- a/Kbuild +++ b/Kbuild @@ -38,7 +38,7 @@ services4/srvkm/devices/sgx/sgxpower.c \ services4/srvkm/bridged/bridged_pvr_bridge.c \ services4/srvkm/bridged/bridged_support.c \ services4/srvkm/bridged/sgx/bridged_sgx_bridge.c \ -services4/system/$(TI_PLATFORM)/sysutils_linux.c \ +services4/system/$(TI_PLATFORM)/sysutils.c \ services4/system/$(TI_PLATFORM)/sysconfig.c \ EXTRA_CFLAGS += -I$(src)/include4 @@ -55,14 +55,11 @@ EXTRA_CFLAGS += -I$(src)/services4/srvkm/bridged/sgx EXTRA_CFLAGS += $(ALL_CFLAGS) pvrsrvkm-y := $(FILES:.c=.o) -ifeq ($(TI_PLATFORM),ti8168) -obj-y := services4/3rdparty/dc_ti8168_linux/ + +ifeq ($(TI_PLATFORM),ti81xx) +obj-y := services4/3rdparty/dc_ti81xx_linux/ else -obj-y := services4/3rdparty/dc_omap3_linux/ +obj-y := services4/3rdparty/dc_omap3430_linux/ endif obj-y += services4/3rdparty/bufferclass_ti/ -ifeq ($(VERSION), 3) -export EXTRA_CFLAGS += -DAUTOCONF_INCLUDED -endif - diff --git a/Makefile b/Makefile index 4f87695..7fe1828 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,4 @@ -#export KERNELDIR = /opt/oe/stuff/build/tmp/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r44/git/ -export TI_PLATFORM ?= omap3 -SUPPORT_ANDROID_PLATFORM ?= 1 +export KERNELDIR = /opt/oe/stuff/build/tmp/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r44/git/ export KERNEL_PATH=$(KERNELDIR) export KERNEL_SRC=$(KERNELDIR) @@ -10,16 +8,42 @@ export BUILD = release export KBUILD_EXTRA_SYMBOLS = `pwd`/services4/srvkm/env/linux/kbuild/Module.symvers +OMAP_KERNEL_VER := $(shell grep "^VERSION = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_REL := $(shell grep "^PATCHLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_SUBREL := $(shell grep "^SUBLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') + +OMAP_KERNEL_AT_LEAST_2_6_29 := $(shell test $(OMAP_KERNEL_VER) -ge 2 -a \ + $(OMAP_KERNEL_REL) -ge 6 -a \ + $(OMAP_KERNEL_SUBREL) -ge 29 && echo 1 || echo 0) + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_29),1) +SUPPORT_OMAP3430_OMAPFB3 = 1 +SUPPORT_LINUX_USING_WORKQUEUES = 1 +SYS_CFLAGS += -DPVR_HAS_BROKEN_OMAPFB_H +endif +OPTIM = -Os + + SGXCORE = 530 -ifeq ($(TI_PLATFORM),ti8168) -CORE = -DPLAT_TI8168 -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=125 +ifeq ($(TI_PLATFORM),ti81xx) +CORE = -DPLAT_TI81xx -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=125 else ifeq ($(TI_PLATFORM),omap3630) CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=125 else +ifeq ($(TI_PLATFORM),omap3) +ifeq ($(OMAPES),3.x) CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=121 +else +CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=103 +endif +endif endif endif + SUPPORT_SGX = 1 SUPPORT_HW_RECOVERY = 1 SUPPORT_SGX_HWPERF = 1 @@ -37,11 +61,22 @@ LDM_PLATFORM ?= 1 # passive power management isn't enabled, the driver won't see the # system suspend/resume events, and so won't take appropriate action. ifeq ($(LDM_PLATFORM),1) -SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1 +ifeq ($(TI_PLATFORM),ti81xx) +SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 0 +else +SUPPORT_ACTIVE_POWER_MANAGEMENT = 1 +endif else SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 endif + +PVRSRV_MODNAME ?= pvrsrvkm + +SYS_CFLAGS += -DPVRSRV_MODNAME="\"$(PVRSRV_MODNAME)"\" + + + export PVR_BUILD_DIR := $(shell pwd) DATE := $(shell date "+%a %B %d %Z %Y" ) @@ -59,6 +94,41 @@ CFLAGS.timing = $(OPTIM) -g -DDLL_METRIC=1 -DTIMING CFLAGS.release = $(OPTIM) -g CFLAGS = $(CFLAGS.$(BUILD)) +ifeq ($(EXTRA_EXTRA_WARNINGS),1) +EXTRA_WARNINGS=1 +endif +ifeq ($(EXTRA_WARNINGS),1) +CCFLAGS_KERNEL += +ifeq ($(EXTRA_EXTRA_WARNINGS),1) +CCFLAGS_KERNEL += -Wwrite-strings +endif +endif + +CCFLAGS_KERNEL += -Wall -Wdeclaration-after-statement -Wpointer-arith +CCFLAGS_KERNEL += -Wmissing-format-attribute -Wno-format-zero-length +CCFLAGS_KERNEL += -Wmissing-prototypes -Wstrict-prototypes + + +CCFLAGS := $(CCFLAGS_KERNEL) -Wunused-parameter + + +CCFLAGS_HOST := $(CCFLAGS) +CCFLAGS += -W -Wno-missing-field-initializers +CCFLAGS_KERNEL += -Wno-unused-parameter -Wno-sign-compare + +ifneq ($(SUPPORT_DRI_DRM_EXT),1) +ifeq ($(EXTRA_WARNINGS),1) +SYS_CFLAGS += -Wno-error +else +CCFLAGS_KERNEL += -Werror +endif +endif + +CPPFLAGS = -W -Wall -Wmissing-format-attribute -Wpointer-arith +CPPFLAGS += -Wno-missing-field-initializers + + + ifeq ("$(BUILD)", "debug") DEBUG_LINUX_MEMORY_ALLOCATIONS ?= 1 @@ -73,30 +143,63 @@ PVRSRV_LOG_MEMORY_ALLOCS ?= 0 PVRSRV_DEBUG_OS_MEMORY ?= 0 endif -SUPPORT_SECURE_FD_EXPORT = 1 -ifeq ($(SUPPORT_DRI_DRM),1) -SUPPORT_SECURE_FD_EXPORT = 0 +SUPPORT_XORG ?= 0 +ifneq ($(SUPPORT_XORG),1) +SUPPORT_XWS ?= 1 +XWS_SERVER_ONLY ?= 0 +else +SUPPORT_XWS = 0 +XWS_SERVER_ONLY = 0 +SUPPORT_EWS = 0 endif -PVR_PROC_USE_SEQ_FILE ?= 1 -TRANSFER_QUEUE ?= 1 -SUPPORT_SGX_EVENT_OBJECT ?=1 -SUPPORT_SECURE_HANDLES = 1 -SUPPORT_SRVINIT = 1 -SUPPORT_PERCONTEXT_PB = 1 -SUPPORT_LINUX_X86_PAT ?=1 -SUPPORT_LINUX_X86_WRITECOMBINE ?=1 -SUPPORT_SGX_LOW_LATENCY_SCHEDULING ?=1 +SUPPORT_DRI_DRM ?= $(SUPPORT_XORG) +SUPPORT_SECURE_DRM_AUTH_EXPORT ?= $(SUPPORT_XORG) +SUPPORT_DRI_DRM_EXT ?= 0 +SUPPORT_LIBDRM_LITE ?= 0 -SUPPORT_CPU_CACHED_BUFFERS ?= 0 +ifeq ($(SUPPORT_EWS),1) +SUPPORT_SECURE_FD_EXPORT ?= 1 +else +SUPPORT_SECURE_FD_EXPORT ?= 0 +endif + + + + +TRANSFER_QUEUE ?= 1 +SUPPORT_SGX_EVENT_OBJECT ?= 1 +SUPPORT_SECURE_HANDLES = 1 +SUPPORT_SECURE_FD_EXPORT = 1 +SUPPORT_SRVINIT = 1 +SUPPORT_PERCONTEXT_PB = 1 +DISABLE_SGX_PB_GROW_SHRINK ?= 1 +SUPPORT_LINUX_X86_PAT ?=1 +SUPPORT_LINUX_X86_WRITECOMBINE ?=1 +SUPPORT_SGX_LOW_LATENCY_SCHEDULING ?=1 + +SUPPORT_OMAP3430_SGXFCLK_96M ?= 0 +SUPPORT_OMAP3430_OMAPFB3 ?= 0 -SUPPORT_CACHEFLUSH_ON_ALLOC ?= 0 SUPPORT_MEMINFO_IDS ?= 0 +SUPPORT_PVR_PDP_LINUX_FB ?= $(SUPPORT_XWS) + SUPPORT_LINUX_USING_WORKQUEUES ?= 1 +ifeq ($(SUPPORT_OMAP3430_OMAPFB3),1) +SUPPORT_LINUX_USING_WORKQUEUES = 1 +endif + +SUPPORT_SGX_NEW_STATUS_VALS ?= 1 + +DC_NOHW_WIDTH ?= 640 +DC_NOHW_HEIGHT ?= 480 + +DISPLAY_CONTROLLER ?= +SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309 -DPVR2D_VALIDATE_INPUT_PARAMS -SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -DPVR2D_VALIDATE_INPUT_PARAMS +#SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -DPVR2D_VALIDATE_INPUT_PARAMS # Thread support USE_PTHREADS ?= 1 @@ -107,15 +210,19 @@ DISABLE_THREADS ?= 0 # Automatically define C compiler macros for features possible (or not) in use. SYS_CFLAGS.$(SUPPORT_SRVINIT) += -DSUPPORT_SRVINIT - +SYS_CFLAGS.$(SUPPORT_VGX) += -DSUPPORT_VGX SYS_CFLAGS.$(SUPPORT_SGX) += -DSUPPORT_SGX SYS_CFLAGS.$(SUPPORT_XWS) += -DSUPPORT_XWS SYS_CFLAGS.$(PDUMP) += -DPDUMP +SYS_CFLAGS.$(VGX_PDUMP_FROM_FIRMWARE) += -DVGX_PDUMP_FROM_FIRMWARE +SYS_CFLAGS.$(OVG_ALWAYS_CONVERT_DATA) += -DOVG_ALWAYS_CONVERT_DATA + SYS_CFLAGS.$(SUPPORT_POWER_MANAGEMENT) += -DSUPPORT_POWER_MANAGEMENT SYS_CFLAGS.$(SUPPORT_BUFFER_CLASS) += -DSUPPORT_BUFFER_CLASS SYS_CFLAGS.$(SUPPORT_PERCONTEXT_PB) += -DSUPPORT_PERCONTEXT_PB SYS_CFLAGS.$(SUPPORT_DYNAMIC_PBRESIZE) += -DSUPPORT_DYNAMIC_PBRESIZE +SYS_CFLAGS.$(DISABLE_SGX_PB_GROW_SHRINK) += -DDISABLE_SGX_PB_GROW_SHRINK SYS_CFLAGS.$(USE_FBDEV) += -DUSE_FBDEV SYS_CFLAGS.$(USE_FBDEV) += -DFBDEV_NAME="\"$(FBDEV_NAME)\"" @@ -134,9 +241,11 @@ SYS_CFLAGS.$(DEBUG_LINUX_SLAB_ALLOCATIONS) += -DDEBUG_LINUX_SLAB_ALLOCATIONS SYS_CFLAGS.$(DEBUG_BRIDGE_KM) += -DDEBUG_BRIDGE_KM SYS_CFLAGS.$(DEBUG_TRACE_BRIDGE_KM) += -DDEBUG_TRACE_BRIDGE_KM SYS_CFLAGS.$(DEBUG_BRIDGE_KM_DISPATCH_TABLE) += -DDEBUG_BRIDGE_KM_DISPATCH_TABLE -SYS_CFLAGS.$(PVRSRV_LOG_MEMORY_ALLOCS) += -DPVRSRV_LOG_MEMORY_ALLOCS -SYS_CFLAGS.$(PVRSRV_DEBUG_OS_MEMORY) += -DPVRSRV_DEBUG_OS_MEMORY -SYS_CFLAGS.$(DEBUG_MESA_OGL_TRACE) += -DDEBUG_MESA_OGL_TRACE + +SYS_CFLAGS.$(PVRSRV_LOG_MEMORY_ALLOCS) += -DPVRSRV_LOG_MEMORY_ALLOCS +SYS_CFLAGS.$(PVRSRV_DEBUG_OS_MEMORY) += -DPVRSRV_DEBUG_OS_MEMORY +SYS_CFLAGS.$(DEBUG_MESA_OGL_TRACE) += -DDEBUG_MESA_OGL_TRACE + SYS_CFLAGS.$(SUPPORT_LINUX_X86_WRITECOMBINE) += -DSUPPORT_LINUX_X86_WRITECOMBINE @@ -146,32 +255,51 @@ SYS_CFLAGS.$(SUPPORT_SGX_TILING) += -DSUPPORT_SGX_TILING SYS_CFLAGS.$(TRANSFER_QUEUE) += -DTRANSFER_QUEUE SYS_CFLAGS.$(SUPPORT_SGX_MMU_DUMMY_PAGE) += -DSUPPORT_SGX_MMU_DUMMY_PAGE -SYS_CFLAGS.$(PVRSRV_DUMP_MK_TRACE) += -DPVRSRV_DUMP_MK_TRACE +SYS_CFLAGS.$(PVRSRV_DUMP_MK_TRACE) += -DPVRSRV_DUMP_MK_TRACE +SYS_CFLAGS.$(PVRSRV_DUMP_KERNEL_CCB) += -DPVRSRV_DUMP_KERNEL_CCB +SYS_CFLAGS.$(EDM_USSE_HWDEBUG) += -DEDM_USSE_HWDEBUG + + SYS_CFLAGS.$(PVRSRV_USSE_EDM_STATUS_DEBUG) += -DPVRSRV_USSE_EDM_STATUS_DEBUG -SYS_CFLAGS.$(USE_SUPPORT_STATUSVALS_DEBUG) += -DUSE_SUPPORT_STATUSVALS_DEBUG -SYS_CFLAGS.$(SGX_FAST_DPM_INIT) += -DSGX_FAST_DPM_INIT -SYS_CFLAGS.$(SGX_DISABLE_UKERNEL_SECONDARY_STATE) += -DSGX_DISABLE_UKERNEL_SECONDARY_STATE -SYS_CFLAGS.$(DBGBREAK_ON_SPM) += -DDBGBREAK_ON_SPM -SYS_CFLAGS.$(PVR_DBG_BREAK_ASSERT_FAIL) += -DPVR_DBG_BREAK_ASSERT_FAIL +SYS_CFLAGS.$(USE_SUPPORT_STATUSVALS_DEBUG) += -DUSE_SUPPORT_STATUSVALS_DEBUG +SYS_CFLAGS.$(SGX_FAST_DPM_INIT) += -DSGX_FAST_DPM_INIT +SYS_CFLAGS.$(SGX_DISABLE_UKERNEL_SECONDARY_STATE) += -DSGX_DISABLE_UKERNEL_SECONDARY_STATE +SYS_CFLAGS.$(DBGBREAK_ON_SPM) += -DDBGBREAK_ON_SPM +SYS_CFLAGS.$(PVR_DBG_BREAK_ASSERT_FAIL) += -DPVR_DBG_BREAK_ASSERT_FAIL + +SYS_CFLAGS.$(PVRSRV_RESET_ON_HWTIMEOUT) += -DPVRSRV_RESET_ON_HWTIMEOUT +SYS_CFLAGS.$(PVRSRV_CLIENT_RESET_ON_HWTIMEOUT) += -DPVRSRV_CLIENT_RESET_ON_HWTIMEOUT +SYS_CFLAGS.$(NO_HARDWARE) += -DNO_HARDWARE + + -SYS_CFLAGS.$(NO_HARDWARE) += -DNO_HARDWARE SYS_CFLAGS.$(SUPPORT_DRI_DRM) += -DSUPPORT_DRI_DRM -SYS_CFLAGS.$(SUPPORT_DRI_DRM_EXT) += -DSUPPORT_DRI_DRM_EXT -SYS_CFLAGS.$(USE_PRIMARY_SURFACE_IN_FLIP_CHAIN) += -DUSE_PRIMARY_SURFACE_IN_FLIP_CHAIN +SYS_CFLAGS.$(SUPPORT_DRI_DRM_EXT) += -DSUPPORT_DRI_DRM_EXT +SYS_CFLAGS.$(SUPPORT_LIBDRM_LITE) += -DSUPPORT_LIBDRM_LITE -SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS -SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY -SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT +ifneq ("$(NO_HARDWARE)", "1") +SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS +SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY +SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT +endif ifeq ("$(PDUMP)", "1") SUPPORT_DBGDRV_EVENT_OBJECTS ?=1 -SYS_CFLAGS.$(SUPPORT_DBGDRV_EVENT_OBJECTS) += -DSUPPORT_DBGDRV_EVENT_OBJECTS +SYS_CFLAGS.$(SUPPORT_DBGDRV_EVENT_OBJECTS) += -DSUPPORT_DBGDRV_EVENT_OBJECTS +SYS_CFLAGS.$(PDUMP_DEBUG_OUTFILES) += -DPDUMP_DEBUG_OUTFILES endif + + +SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS +SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY +SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT + SYS_CFLAGS.$(SUPPORT_SECURE_HANDLES) += -DPVR_SECURE_HANDLES SYS_CFLAGS.$(SUPPORT_SECURE_FD_EXPORT) += -DPVR_SECURE_FD_EXPORT +SYS_CFLAGS.$(SUPPORT_SECURE_DRM_AUTH_EXPORT) += -DPVR_SECURE_DRM_AUTH_EXPORT SYS_CFLAGS.$(USE_PTHREADS) += -DUSE_PTHREADS SYS_CFLAGS.$(USE_GCC__thread_KEYWORD) += -DUSE_GCC__thread_KEYWORD @@ -188,40 +316,81 @@ SYS_CFLAGS.$(SUPPORT_SGX_HWPERF) += -DSUPPORT_SGX_HWPERF SYS_CFLAGS.$(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) += -DSUPPORT_SGX_LOW_LATENCY_SCHEDULING +SYS_CFLAGS.$(SUPPORT_SLC) += -DSGX_FEATURE_SYSTEM_CACHE +SYS_CFLAGS.$(BYPASS_SLC) += -DSGX_BYPASS_SYSTEM_CACHE +SYS_CFLAGS.$(BYPASS_DCU) += -DSGX_BYPASS_DCU +SYS_CFLAGS.$(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) += -DSUPPORT_SGX_LOW_LATENCY_SCHEDULING +SYS_CFLAGS.$(SGX_SUPPORT_VDM_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_VDM_TIMER_BASED_SWITCHING +SYS_CFLAGS.$(SGX_SUPPORT_ISP_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_ISP_TIMER_BASED_SWITCHING + + SYS_CFLAGS.$(SUPPORT_LINUX_X86_PAT) += -DSUPPORT_LINUX_X86_PAT -SYS_CFLAGS.$(SUPPORT_CPU_CACHED_BUFFERS) += -DSUPPORT_CPU_CACHED_BUFFERS -SYS_CFLAGS.$(SUPPORT_CACHE_LINE_FLUSH) += -DSUPPORT_CACHE_LINE_FLUSH +SYS_CFLAGS.$(SUPPORT_TI_PM) += -DSUPPORT_TI_PM -SYS_CFLAGS.$(SUPPORT_CACHEFLUSH_ON_ALLOC) += -DSUPPORT_CACHEFLUSH_ON_ALLOC -SYS_CFLAGS.$(SUPPORT_MEMINFO_IDS) += -DSUPPORT_MEMINFO_IDS +SYS_CFLAGS.$(SUPPORT_OMAP3430_SGXFCLK_96M) += -DSUPPORT_OMAP3430_SGXFCLK_96M +SYS_CFLAGS.$(SUPPORT_OMAP3430_OMAPFB3) += -DSUPPORT_OMAP3430_OMAPFB3 -SYS_CFLAGS.$(SUPPORT_SGX_EDM_MEMORY_DEBUG) += -DSUPPORT_SGX_EDM_MEMORY_DEBUG +SYS_CFLAGS.$(SUPPORT_CACHEFLUSH_ON_ALLOC) += -DSUPPORT_CACHEFLUSH_ON_ALLOC +SYS_CFLAGS.$(SUPPORT_MEMINFO_IDS) += -DSUPPORT_MEMINFO_IDS -SYS_CFLAGS.$(SUPPORT_ANDROID_PLATFORM) += -DSUPPORT_ANDROID_PLATFORM -DANDROID -SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DSUPPORT_GRAPHICS_HAL -SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DGRALLOC_VARIANT="\"$(GRALLOC_VARIANT)\"" +SYS_CFLAGS.$(SUPPORT_SGX_EDM_MEMORY_DEBUG) += -DSUPPORT_SGX_EDM_MEMORY_DEBUG -SYS_CFLAGS += -DDEBUG_LOG_PATH_TRUNCATE=\"$(EURASIAROOT)\" -SYS_CFLAGS.$(PVR_PROC_USE_SEQ_FILE) += -DPVR_PROC_USE_SEQ_FILE +SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DSUPPORT_GRAPHICS_HAL +SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DGRALLOC_VARIANT="\"$(GRALLOC_VARIANT)\"" -SYS_CFLAGS.$(SUPPORT_LINUX_USING_WORKQUEUES) += -DPVR_LINUX_USING_WORKQUEUES \ +SYS_CFLAGS.$(SUPPORT_EGL_IMAGE_SYNC_DEPENDENCY) += -DSUPPORT_EGL_IMAGE_SYNC_DEPENDENCY +SYS_CFLAGS.$(SUPPORT_PVR_PDP_LINUX_FB) += -DPVR_PDP_LINUX_FB + +#SYS_CFLAGS.$(SUPPORT_LINUX_USING_WORKQUEUES) += -DPVR_LINUX_USING_WORKQUEUES \ -DPVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE +SYS_CFLAGS.$(SUPPORT_LINUX_USING_WORKQUEUES) += -DPVR_LINUX_USING_WORKQUEUES \ + -DPVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE \ + -DPVR_LINUX_TIMERS_USING_WORKQUEUES \ + -DSYS_CUSTOM_POWERLOCK_WRAP + + + +SYS_CFLAGS.$(SUPPORT_SGX_NEW_STATUS_VALS) += -DSUPPORT_SGX_NEW_STATUS_VALS + +ifneq ("$(DISPLAY_CONTROLLER)", "") +SYS_CFLAGS += -DDISPLAY_CONTROLLER=$(DISPLAY_CONTROLLER) +endif + +ifeq ("$(PVR_SYSTEM)", "sgx_nohw") +ifndef RTSIM +SYS_CFLAGS += -DNO_HARDWARE +endif +SYS_CFLAGS += -DDC_NOHW_BUFFER_WIDTH=$(DC_NOHW_WIDTH) -DDC_NOHW_BUFFER_HEIGHT=$(DC_NOHW_HEIGHT) +endif + +ifeq ("$(PVR_SYSTEM)", "vgx_nohw") +SYS_CFLAGS += -DNO_HARDWARE -DDC_NOHW_BUFFER_WIDTH=$(DC_NOHW_WIDTH) -DDC_NOHW_BUFFER_HEIGHT=$(DC_NOHW_HEIGHT) +endif + +SYS_CFLAGS += -DDEBUG_LOG_PATH_TRUNCATE=\"$(EURASIAROOT)\" + +SYS_INCLUDES = -I$(EURASIAROOT)/include4 \ + -I$(EURASIAROOT)/eurasiacon/includeext \ + -I$(SYSBIN) \ + -isystem $(KERNELDIR)/include + -SYS_CFLAGS.$(SUPPORT_TI_PM) += -DSUPPORT_TI_PM export ALL_CFLAGS = -DLINUX \ $(CBUILD) $(CBUILD.$(BUILD)) \ $(SYS_CFLAGS) $(SYS_CFLAGS.1) \ $(MODULE_CFLAGS) $(MODULE_CFLAGS.$(BUILD)) \ - $(CORE) \ + $(CORE) -fno-strict-aliasing -Wno-pointer-arith \ $(CFLAGS) all: $(MAKE) -C $(KERNELDIR) M=`pwd` $* clean: - $(MAKE) -C $(KERNELDIR) M=`pwd` clean + @find . -name "*.o" -exec rm -r {} \; + @find . -name "*.ko" -exec rm -r {} \; + diff --git a/eurasiacon/build/linux/exports/egl.txt b/eurasiacon/build/linux/exports/egl.txt new file mode 100644 index 0000000..53f97fb --- /dev/null +++ b/eurasiacon/build/linux/exports/egl.txt @@ -0,0 +1,36 @@ +/* + * EGL 1.0 FUNCTIONS + */ +eglChooseConfig +eglCopyBuffers +eglCreateContext +eglCreatePbufferSurface +eglCreatePixmapSurface +eglCreateWindowSurface +eglDestroyContext +eglDestroySurface +eglGetConfigAttrib +eglGetConfigs +eglGetCurrentContext +eglGetCurrentDisplay +eglGetCurrentSurface +eglGetDisplay +eglGetError +eglGetProcAddress +eglInitialize +eglMakeCurrent +eglQueryContext +eglQueryString +eglQuerySurface +eglSwapBuffers +eglTerminate +eglWaitGL +eglWaitNative + +/* + * EGL 1.1 FUNCTIONS + */ +eglBindTexImage +eglSwapInterval +eglReleaseTexImage +eglSurfaceAttrib diff --git a/eurasiacon/build/linux/exports/ignored_symbols.txt b/eurasiacon/build/linux/exports/ignored_symbols.txt new file mode 100644 index 0000000..538ad12 --- /dev/null +++ b/eurasiacon/build/linux/exports/ignored_symbols.txt @@ -0,0 +1,4 @@ +^_init +^_fini +^__data_start +^__aeabi_f2ulz diff --git a/eurasiacon/build/linux/exports/libEGL.so.txt b/eurasiacon/build/linux/exports/libEGL.so.txt new file mode 100644 index 0000000..bff89e1 --- /dev/null +++ b/eurasiacon/build/linux/exports/libEGL.so.txt @@ -0,0 +1,10 @@ +#include "egl.txt" + +/* + * EGL 1.2/1.3 FUNCTIONS + */ +eglCreatePbufferFromClientBuffer +eglBindAPI +eglQueryAPI +eglWaitClient +eglReleaseThread diff --git a/eurasiacon/build/linux/exports/libGLES_CM.so.txt b/eurasiacon/build/linux/exports/libGLES_CM.so.txt new file mode 100644 index 0000000..0b55307 --- /dev/null +++ b/eurasiacon/build/linux/exports/libGLES_CM.so.txt @@ -0,0 +1,2 @@ +#include "egl.txt" +#include "libGLESv1_CM.so.txt" diff --git a/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt b/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt new file mode 100644 index 0000000..f29d2c2 --- /dev/null +++ b/eurasiacon/build/linux/exports/libGLESv1_CL.so.txt @@ -0,0 +1,113 @@ +/* + * OPENGLES 1.0 COMMON LITE FUNCTIONS + */ +glActiveTexture +glAlphaFuncx +glBindTexture +glBlendFunc +glClear +glClearColorx +glClearDepthx +glClearStencil +glClientActiveTexture +glColor4x +glColorMask +glColorPointer +glCompressedTexImage2D +glCompressedTexSubImage2D +glCopyTexImage2D +glCopyTexSubImage2D +glCullFace +glDeleteTextures +glDepthFunc +glDepthMask +glDepthRangex +glDisable +glDisableClientState +glDrawArrays +glDrawElements +glEnable +glEnableClientState +glFinish +glFlush +glFogx +glFogxv +glFrontFace +glFrustumx +glGenTextures +glGetError +glGetIntegerv +glGetString +glHint +glLightModelx +glLightModelxv +glLightx +glLightxv +glLineWidthx +glLoadIdentity +glLoadMatrixx +glLogicOp +glMaterialx +glMaterialxv +glMatrixMode +glMultMatrixx +glMultiTexCoord4x +glNormal3x +glNormalPointer +glOrthox +glPixelStorei +glPointSizex +glPolygonOffsetx +glPopMatrix +glPushMatrix +glReadPixels +glRotatex +glSampleCoveragex +glScalex +glScissor +glShadeModel +glStencilFunc +glStencilMask +glStencilOp +glTexCoordPointer +glTexEnvx +glTexEnvxv +glTexImage2D +glTexParameterx +glTexSubImage2D +glTranslatex +glVertexPointer +glViewport + +/* + * OPENGLES 1.1 COMMON LITE FUNCTIONS + */ +glBindBuffer +glBufferData +glBufferSubData +glClipPlanex +glColor4ub +glDeleteBuffers +glGetBooleanv +glGetBufferParameteriv +glGetClipPlanex +glGenBuffers +glGetFixedv +glGetLightxv +glGetMaterialxv +glGetPointerv +glGetTexEnviv +glGetTexEnvxv +glGetTexParameteriv +glGetTexParameterxv +glIsBuffer +glIsEnabled +glIsTexture +glPointParameterx +glPointParameterxv +glPointSizePointerOES +glTexEnvi +glTexParameteri +glTexParameteriv +glTexParameterxv +glTexEnviv diff --git a/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt b/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt new file mode 100644 index 0000000..5c7f919 --- /dev/null +++ b/eurasiacon/build/linux/exports/libGLESv1_CM.so.txt @@ -0,0 +1,48 @@ +#include "libGLESv1_CL.so.txt" + +/* + * OPENGLES 1.0 COMMON FUNCTIONS + */ +glAlphaFunc +glClearColor +glClearDepthf +glColor4f +glDepthRangef +glFogf +glFogfv +glFrustumf +glLightModelf +glLightModelfv +glLightf +glLightfv +glLineWidth +glLoadMatrixf +glMaterialf +glMaterialfv +glMultMatrixf +glMultiTexCoord4f +glNormal3f +glOrthof +glPointSize +glPolygonOffset +glRotatef +glSampleCoverage +glScalef +glTexEnvf +glTexEnvfv +glTexParameterf +glTranslatef + +/* + * OPENGLES 1.1 COMMON FUNCTIONS + */ +glClipPlanef +glGetClipPlanef +glGetFloatv +glGetLightfv +glGetMaterialfv +glGetTexEnvfv +glGetTexParameterfv +glPointParameterf +glPointParameterfv +glTexParameterfv diff --git a/eurasiacon/build/linux/exports/libGLESv2.so.txt b/eurasiacon/build/linux/exports/libGLESv2.so.txt new file mode 100644 index 0000000..0ab65be --- /dev/null +++ b/eurasiacon/build/linux/exports/libGLESv2.so.txt @@ -0,0 +1,145 @@ +/* + * OGLES 2.0 core functions + */ +glActiveTexture +glAttachShader +glBindAttribLocation +glBindBuffer +glBindFramebuffer +glBindRenderbuffer +glBindTexture +glBlendColor +glBlendEquation +glBlendEquationSeparate +glBlendFunc +glBlendFuncSeparate +glBufferData +glBufferSubData +glCheckFramebufferStatus +glClear +glClearColor +glClearDepthf +glClearStencil +glColorMask +glCompileShader +glCompressedTexImage2D +glCompressedTexSubImage2D +glCopyTexImage2D +glCopyTexSubImage2D +glCreateProgram +glCreateShader +glCullFace +glDeleteBuffers +glDeleteTextures +glDeleteProgram +glDeleteFramebuffers +glDeleteRenderbuffers +glDeleteShader +glDetachShader +glDepthFunc +glDepthMask +glDepthRangef +glDisable +glDisableVertexAttribArray +glDrawArrays +glDrawElements +glEnable +glEnableVertexAttribArray +glFinish +glFlush +glFramebufferTexture2D +glFramebufferRenderbuffer +glFrontFace +glGetActiveAttrib +glGetActiveUniform +glGetAttachedShaders +glGetAttribLocation +glGetBooleanv +glGetBufferParameteriv +glGenBuffers +glGenerateMipmap +glGenFramebuffers +glGenRenderbuffers +glGenTextures +glGetError +glGetFloatv +glGetFramebufferAttachmentParameteriv +glGetIntegerv +glGetProgramiv +glGetProgramInfoLog +glGetRenderbufferParameteriv +glGetShaderiv +glGetShaderInfoLog +glGetShaderPrecisionFormat +glGetShaderSource +glGetString +glGetTexParameteriv +glGetTexParameterfv +glGetUniformfv +glGetUniformiv +glGetUniformLocation +glGetVertexAttribfv +glGetVertexAttribiv +glGetVertexAttribPointerv +glHint +glIsBuffer +glIsEnabled +glIsFramebuffer +glIsProgram +glIsRenderbuffer +glIsShader +glIsTexture +glLineWidth +glLinkProgram +glPixelStorei +glPolygonOffset +glReadPixels +glReleaseShaderCompiler +glRenderbufferStorage +glSampleCoverage +glScissor +glShaderBinary +glShaderSource +glStencilFunc +glStencilFuncSeparate +glStencilMask +glStencilMaskSeparate +glStencilOp +glStencilOpSeparate +glTexImage2D +glTexParameteri +glTexParameterf +glTexParameteriv +glTexParameterfv +glTexSubImage2D +glUniform1i +glUniform2i +glUniform3i +glUniform4i +glUniform1f +glUniform2f +glUniform3f +glUniform4f +glUniform1iv +glUniform2iv +glUniform3iv +glUniform4iv +glUniform1fv +glUniform2fv +glUniform3fv +glUniform4fv +glUniformMatrix2fv +glUniformMatrix3fv +glUniformMatrix4fv +glUseProgram +glValidateProgram +glVertexAttrib1f +glVertexAttrib2f +glVertexAttrib3f +glVertexAttrib4f +glVertexAttrib1fv +glVertexAttrib2fv +glVertexAttrib3fv +glVertexAttrib4fv +glVertexAttribPointer +glViewport diff --git a/eurasiacon/build/linux/exports/libIMGegl.so.txt b/eurasiacon/build/linux/exports/libIMGegl.so.txt new file mode 100644 index 0000000..d089eab --- /dev/null +++ b/eurasiacon/build/linux/exports/libIMGegl.so.txt @@ -0,0 +1,53 @@ +/* + * IMGEGL FUNCTIONS + */ +IMGeglBindAPI +IMGeglBindTexImage +IMGeglChooseConfig +IMGeglCopyBuffers +IMGeglCreateContext +IMGeglCreatePbufferFromClientBuffer +IMGeglCreatePbufferSurface +IMGeglCreatePixmapSurface +IMGeglCreateWindowSurface +IMGeglDestroyContext +IMGeglDestroySurface +IMGeglGetConfigAttrib +IMGeglGetConfigs +IMGeglGetCurrentContext +IMGeglGetCurrentDisplay +IMGeglGetCurrentSurface +IMGeglGetDisplay +IMGeglGetError +IMGeglGetProcAddress +IMGeglInitialize +IMGeglMakeCurrent +IMGeglQueryAPI +IMGeglQueryContext +IMGeglQueryString +IMGeglQuerySurface +IMGeglReleaseTexImage +IMGeglReleaseThread +IMGeglSurfaceAttrib +IMGeglSwapBuffers +IMGeglSwapInterval +IMGeglTerminate +IMGeglWaitClient +IMGeglWaitGL +IMGeglWaitNative + +KEGLBindImage +KEGLCreateRenderSurface +KEGLDestroyRenderSurface +KEGLGetDrawableParameters +KEGLGetImageSource +KEGLResizeRenderSurface +KEGLSurfaceBind +KEGLSurfaceUnbind +KEGLUnbindImage + +#if defined(DEBUG) +KEGLAllocDeviceMemTrack +KEGLFreeDeviceMemTrack +#endif /* defined(DEBUG) */ + diff --git a/eurasiacon/build/linux/exports/libOpenVG.so.txt b/eurasiacon/build/linux/exports/libOpenVG.so.txt new file mode 100644 index 0000000..dad4187 --- /dev/null +++ b/eurasiacon/build/linux/exports/libOpenVG.so.txt @@ -0,0 +1,90 @@ +/* + * OpenVG core functions + */ +vgAppendPath +vgAppendPathData +vgChildImage +vgClear +vgClearGlyph +vgClearImage +vgClearPath +vgColorMatrix +vgConvolve +vgCopyImage +vgCopyMask +vgCopyPixels +vgCreateFont +vgCreateImage +vgCreateMaskLayer +vgCreatePaint +vgCreatePath +vgDestroyFont +vgDestroyImage +vgDestroyMaskLayer +vgDestroyPaint +vgDestroyPath +vgDrawGlyph +vgDrawGlyphs +vgDrawImage +vgDrawPath +vgFillMaskLayer +vgFinish +vgFlush +vgGaussianBlur +vgGetColor +vgGetError +vgGetImageSubData +vgGetMatrix +vgGetPaint +vgGetParameterVectorSize +vgGetParameterf +vgGetParameterfv +vgGetParameteri +vgGetParameteriv +vgGetParent +vgGetPathCapabilities +vgGetPixels +vgGetString +vgGetVectorSize +vgGetf +vgGetfv +vgGeti +vgGetiv +vgHardwareQuery +vgImageSubData +vgInterpolatePath +vgLoadIdentity +vgLoadMatrix +vgLookup +vgLookupSingle +vgMask +vgModifyPathCoords +vgMultMatrix +vgPaintPattern +vgPathBounds +vgPathLength +vgPathTransformedBounds +vgPointAlongPath +vgReadPixels +vgRemovePathCapabilities +vgRenderToMask +vgRotate +vgScale +vgSeparableConvolve +vgSetColor +vgSetGlyphToImage +vgSetGlyphToPath +vgSetPaint +vgSetParameterf +vgSetParameterfv +vgSetParameteri +vgSetParameteriv +vgSetPixels +vgSetf +vgSetfv +vgSeti +vgSetiv +vgShear +vgTransformPath +vgTranslate +vgWritePixels diff --git a/eurasiacon/build/linux/exports/libOpenVGU.so.txt b/eurasiacon/build/linux/exports/libOpenVGU.so.txt new file mode 100644 index 0000000..a894d89 --- /dev/null +++ b/eurasiacon/build/linux/exports/libOpenVGU.so.txt @@ -0,0 +1,12 @@ +/* + * OpenVG utility functions + */ +vguArc +vguComputeWarpQuadToQuad +vguComputeWarpQuadToSquare +vguComputeWarpSquareToQuad +vguEllipse +vguLine +vguPolygon +vguRect +vguRoundRect diff --git a/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt b/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt new file mode 100644 index 0000000..dc5878c --- /dev/null +++ b/eurasiacon/build/linux/exports/libPVRScopeServices.so.txt @@ -0,0 +1,4 @@ +/* + * PVRSCOPESERVICES FUNCTIONS + */ +pvrssGetProcAddress diff --git a/eurasiacon/build/linux/exports/libews.so.txt b/eurasiacon/build/linux/exports/libews.so.txt new file mode 100644 index 0000000..b0c5ba3 --- /dev/null +++ b/eurasiacon/build/linux/exports/libews.so.txt @@ -0,0 +1,50 @@ +/* $Revision: 1.5 $ */ +EWSAtomName +EWSBlitWindow +EWSClearEventQueue +EWSCloseDisplay +EWSCreateWindow +EWSDefaultErrorHandler +EWSDestroyWindow +EWSEventsQueued +EWSFrameComplete +EWSGetProperty +EWSGetPropertyEx +EWSGetRestrictedProperty +EWSGetSurfaceInfo +EWSInternAtom +EWSListProperties +EWSListPropertiesEx +EWSListRestrictedProperties +EWSListWindows +EWSLockBuffer +EWSNextEvent +EWSNextEventIfAvailable +EWSNextQueuedEvent +EWSNoOp +EWSOpenDisplay +EWSPackCoord +EWSPackPixelFormat +EWSPackSize +EWSPackZOrder +EWSPeekEvent +EWSPeekEventIfAvailable +EWSPropertyLength +EWSPropertyLengthEx +EWSRegisterEventHandler +EWSRestrictedPropertyLength +EWSServerRunning +EWSSetErrorHandler +EWSSetProperty +EWSSetPropertyEx +EWSSetRestrictedProperty +EWSUnlockBuffer +EWSUnpackCoord +EWSUnpackPixelFormat +EWSUnpackSize +EWSUnpackZOrder +EWSUnregisterEventHandler +EWSValidDisplay +EWSWriteProperty +EWSWritePropertyEx +EWSWriteRestrictedProperty diff --git a/eurasiacon/build/linux/exports/libglslcompiler.so.txt b/eurasiacon/build/linux/exports/libglslcompiler.so.txt new file mode 100644 index 0000000..e35ac5a --- /dev/null +++ b/eurasiacon/build/linux/exports/libglslcompiler.so.txt @@ -0,0 +1,9 @@ +/* + * GLSL compiler functions + */ +GLSLCompileToUniflex +GLSLFreeCompiledUniflexProgram +GLSLInitCompiler +GLSLDisplayMetrics +GLSLShutDownCompiler +SGXBS_CreateBinaryProgram diff --git a/eurasiacon/build/linux/exports/libpvr2d.so.txt b/eurasiacon/build/linux/exports/libpvr2d.so.txt new file mode 100644 index 0000000..ec59a81 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvr2d.so.txt @@ -0,0 +1,31 @@ +/* + * PVR2D FUNCTIONS + */ +PVR2DBlt +PVR2DBlt3D +PVR2DBlt3DExt +PVR2DBltClipped +PVR2DCreateDeviceContext +PVR2DCreateFlipChain +PVR2DDestroyDeviceContext +PVR2DDestroyFlipChain +PVR2DEnumerateDevices +PVR2DFreeUseCode +PVR2DGetAPIRev +PVR2DGetDeviceInfo +PVR2DGetFlipChainBuffers +PVR2DGetFrameBuffer +PVR2DGetScreenMode +PVR2DLoadUseCode +PVR2DMemAlloc +PVR2DMemFree +PVR2DMemWrap +PVR2DMemExport +PVR2DPresentBlt +PVR2DPresentFlip +PVR2DQueryBlitsComplete +PVR2DSetPresentBltProperties +PVR2DSetPresentFlipProperties +PVR2DMemMap +PVR2DSet1555Alpha +PVR2DGetMiscDisplayInfo diff --git a/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt new file mode 100644 index 0000000..08e9e0c --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrEWS_WSEGL.so.txt @@ -0,0 +1,2 @@ +/* $Revision: 1.1 $ */ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_BLITWSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_DRIWSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_FLIPWSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_FRONTWSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_LINUXFBWSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt b/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt new file mode 100644 index 0000000..beb7704 --- /dev/null +++ b/eurasiacon/build/linux/exports/libpvrPVR2D_X11WSEGL.so.txt @@ -0,0 +1 @@ +#include "wsegl.txt" diff --git a/eurasiacon/build/linux/exports/libsrv_init.so.txt b/eurasiacon/build/linux/exports/libsrv_init.so.txt new file mode 100644 index 0000000..23b1612 --- /dev/null +++ b/eurasiacon/build/linux/exports/libsrv_init.so.txt @@ -0,0 +1 @@ +SrvInit diff --git a/eurasiacon/build/linux/exports/libsrv_um.so.txt b/eurasiacon/build/linux/exports/libsrv_um.so.txt new file mode 100644 index 0000000..d5fad42 --- /dev/null +++ b/eurasiacon/build/linux/exports/libsrv_um.so.txt @@ -0,0 +1,215 @@ +/* + * SERVICES_UM FUNCTIONS + */ +PVRSRVAcquireDeviceData +PVRSRVAllocDeviceMem +PVRSRVAllocUserModeMem +PVRSRVCallocUserModeMem +PVRSRVClientEvent +PVRSRVClockus +PVRSRVCloseBCDevice +PVRSRVCloseDCDevice +PVRSRVConnect +PVRSRVCreateAppHintState +PVRSRVCreateDCSwapChain +PVRSRVCreateDeviceMemContext +PVRSRVCreateMutex +PVRSRVDestroyDCSwapChain +PVRSRVDestroyDeviceMemContext +PVRSRVDestroyMutex +PVRSRVDisconnect +PVRSRVEnumDCDims +PVRSRVEnumDCFormats +PVRSRVEnumerateDeviceClass +PVRSRVEnumerateDevices +PVRSRVEventObjectWait +PVRSRVFreeAppHintState +PVRSRVFreeDeviceMem +PVRSRVFreeUserModeMem +PVRSRVGetAppHint +PVRSRVGetBCBuffer +PVRSRVGetBCBufferInfo +PVRSRVGetDCBuffers +PVRSRVGetDCInfo +PVRSRVGetDCSystemBuffer +PVRSRVGetLibFuncAddr +PVRSRVGetMiscInfo +PVRSRVInitSrvConnect +PVRSRVInitSrvDisconnect +PVRSRVLoadLibrary +PVRSRVLockMutex +PVRSRVMapDeviceClassMemory +PVRSRVMapPhysToUserSpace +PVRSRVMemCopy +PVRSRVMemSet +PVRSRVCreateSyncInfoModObj +PVRSRVDestroySyncInfoModObj +PVRSRVModifyCompleteSyncOps +PVRSRVModifyPendingSyncOps +PVRSRVSyncOpsFlushToModObj +PVRSRVSyncOpsFlushToDelta +PVRSRVAllocSyncInfo +PVRSRVFreeSyncInfo +PVRSRVOpenBCDevice +PVRSRVOpenDCDevice +PVRSRVReallocUserModeMem +PVRSRVReleaseMiscInfo +PVRSRVReleaseThreadQuanta +PVRSRVSetDCDstColourKey +PVRSRVSetDCDstRect +PVRSRVSetDCSrcColourKey +PVRSRVSetDCSrcRect +PVRSRVSwapToDCBuffer +PVRSRVSwapToDCSystem +PVRSRVUnloadLibrary +PVRSRVUnlockMutex +PVRSRVUnmapDeviceClassMemory +PVRSRVUnmapPhysToUserSpace +PVRSRVUnwrapExtMemory +PVRSRVWaitus +PVRSRVWrapExtMemory +PVRSRVPollForValue +PVRSRVGetErrorString +PVRSRVGetCurrentProcessID +PVRSRVMapDeviceMemory +PVRSRVUnmapDeviceMemory +PVRSRVExportDeviceMem +PVRSRVSetLocale + +#if defined(PDUMP) + +PVRSRVPDumpBitmap +PVRSRVPDumpComment +PVRSRVPDumpCommentf +PVRSRVPDumpCommentWithFlagsf +PVRSRVPDumpCycleCountRegRead +PVRSRVPDumpDriverInfo +PVRSRVPDumpInit +PVRSRVPDumpIsCapturing +PVRSRVPDumpIsCapturingTest +PVRSRVPDumpMem +PVRSRVPDumpMemPol +PVRSRVPDumpPDDevPAddr +PVRSRVPDumpReg +PVRSRVPDumpRegPol +PVRSRVPDumpRegPolWithFlags +PVRSRVPDumpRegRead +PVRSRVPDumpSetFrame +PVRSRVPDumpStartInitPhase +PVRSRVPDumpStopInitPhase +PVRSRVPDumpSync +PVRSRVPDumpSyncPol + +#if !defined(SUPPORT_VGX) +PVRSRVPDumpBufferArray +#endif + +#endif /* PDUMP */ + +#if defined(DEBUG) +PVRSRVAllocUserModeMemTracking +PVRSRVCallocUserModeMemTracking +PVRSRVReallocUserModeMemTracking +PVRSRVFreeUserModeMemTracking +#endif + +#if defined(DEBUG) || defined(TIMING) +PVRSRVInitProfileOutput +PVRSRVDeInitProfileOutput +PVRSRVMetricsGetCPUFreq +PVRSRVMetricsTimeNow +PVRSRVProfileOutput +PVRSRVGetTimerRegister +PVRSRVReleaseTimerRegister +#endif + +#if defined(SUPPORT_SGX) + +SGX2DQueryBlitsComplete +SGXAddRenderTarget +SGXCreateRenderContext +SGXCreateTransferContext +SGXDestroyRenderContext +SGXDestroyTransferContext +SGXDevInitPart2 +SGXGetClientInfo +SGXGetInfoForSrvInit +SGXGetMiscInfo +SGXKickTA +SGXQueueTransfer +SGXReleaseClientInfo +SGXRemoveRenderTarget +SGXScheduleProcessQueues +SGXSetContextPriority + +SGXReadHWPerfCB + +#endif /* SUPPORT_SGX */ + +#if defined(SUPPORT_VGX) + +VGXActivateFrameContext +VGXCreateRenderContext +VGXDestroyRenderContext +VGXDevInitPart2 +VGXDMAUnitDelete +#if defined(PDUMP) && defined(VGX_PDUMP_FROM_FIRMWARE) +VGXDMAUnitDequeueItem +#endif +VGXDMAUnitDiscardScene +VGXDMAUnitEndOfPath +VGXDMAUnitEndOfScene +VGXDMAUnitFlush +VGXDMAUnitNew +VGXDMAUnitQueueItem +VGXDMAUnitQueueRawItem +VGXGetClientInfo +VGXGetInfoForSrvInit +VGXGetMiscInfo +VGXReleaseClientInfo +VGXCreateRenderTarget +VGXDestroyRenderTarget +VGXScheduleProcessQueues + +#endif /* SUPPORT_VGX */ + +#if defined(SUPPORT_DRI_DRM_NO_LIBDRM) +drmClose +drmCommandNone +drmCommandWrite +drmDropMaster +drmIoctl +drmModeAddFB +drmModeSetCrtc +drmOpen +#endif + +/* Policy copied from pvr_debug.h + * + * Horrible to have this here but we can't use the header + * because it has some non-preprocessor stuff in it. + */ + +#if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) +#define PVRSRV_NEED_PVR_ASSERT +#endif + +#if defined(PVRSRV_NEED_PVR_ASSERT) && !defined(PVRSRV_NEED_PVR_DPF) +#define PVRSRV_NEED_PVR_DPF +#endif + +#if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG) || defined(TIMING)) +#define PVRSRV_NEED_PVR_TRACE +#endif + +#if defined(PVRSRV_NEED_PVR_ASSERT) +PVRSRVDebugAssertFail +#endif + +#if defined(PVRSRV_NEED_PVR_DPF) +PVRSRVDebugPrintf +#endif + +#if defined(PVRSRV_NEED_PVR_TRACE) +PVRSRVTrace +#endif diff --git a/eurasiacon/build/linux/exports/libusc.so.txt b/eurasiacon/build/linux/exports/libusc.so.txt new file mode 100644 index 0000000..000d261 --- /dev/null +++ b/eurasiacon/build/linux/exports/libusc.so.txt @@ -0,0 +1,28 @@ +/* + * USC functions + */ +PVRUniFlexCreateContext +PVRUniFlexInitInst + +#if defined(OUTPUT_USCHW) +#if !defined(GPGPU) +PVRUniFlexCompileToHw +PVRCleanupUniflexHw +#else +GpgpuPVRUniFlexCompileToHw +#endif /* #if !defined(GPGPU) */ +#endif /* #if defined(OUTPUT_USCHW) */ + +#if defined(OUTPUT_USPBIN) +PVRUniFlexCompileToUspBin +PVRUniFlexDestroyUspBin +#endif /* #if defined(OUTPUT_USPBIN) */ + +PVRUniFlexDestroyContext + +#if defined(UF_TESTBENCH) || defined(DEBUG) || defined(PDUMP) +PVRUniFlexDecodeInputInst +PVRUniFlexDecodeIteration +#endif /* #if defined(UF_TESTBENCH) || defined(DEBUG) || defined(PDUMP) */ + +PVRUniFlexGetInputInstDesc diff --git a/eurasiacon/build/linux/exports/wsegl.txt b/eurasiacon/build/linux/exports/wsegl.txt new file mode 100644 index 0000000..095c187 --- /dev/null +++ b/eurasiacon/build/linux/exports/wsegl.txt @@ -0,0 +1 @@ +WSEGL_GetFunctionTablePointer diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild b/eurasiacon/build/linux/kbuild/Makefile.kbuild index caa5dc4..28a3377 100644 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild +++ b/eurasiacon/build/linux/kbuild/Makefile.kbuild @@ -46,15 +46,19 @@ include $(EURASIAROOT)/eurasiacon/build/linux/$(PVR_BUILD_DIR)/makefile.core # include $(EURASIAROOT)/eurasiacon/build/linux/makefile.shared_conf +KBUILD_SUBDIRS = + +ifeq ($(SUPPORT_DRI_DRM_NOT_PCI),1) +KBUILD_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/linux_drm +endif ifeq ($(PDUMP),1) ifneq ($(SUPPORT_DRI_DRM),1) -PDUMP_SUBDIRS += $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux +KBUILD_SUBDIRS += $(EURASIAROOT)/tools/intern/debug/dbgdriv/linux endif endif -KBUILD_SUBDIRS = \ - $(PDUMP_SUBDIRS) \ +KBUILD_SUBDIRS += \ $(EURASIAROOT)/services4/srvkm/env/linux \ $(EXTRA_SUBDIRS) diff --git a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common b/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common index ae1b28f..0c4497f 100644 --- a/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common +++ b/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common @@ -33,15 +33,7 @@ obj-$(PVR_KBUILD_CONFIG_FLAG) += $(MODULE).o $(MODULE)-objs = $(SOURCES:.c=.o) -EXTRA_CFLAGS = $(INCLUDES) \ - $(ALL_CFLAGS_kbuild) \ - -Wall -fno-strict-aliasing - -ifneq ($(PVR_KBUILD_IN_KERNEL),1) -ifneq ($(SUPPORT_DRI_DRM_EXT),1) - EXTRA_CFLAGS += -Werror -endif -endif +EXTRA_CFLAGS = $(INCLUDES) $(ALL_CFLAGS_kbuild) ifneq ($(PVR_KBUILD_IN_KERNEL),1) ifeq ($(SILENT),@) diff --git a/eurasiacon/build/linux/makefile.shared_conf b/eurasiacon/build/linux/makefile.shared_conf old mode 100755 new mode 100644 index b4a155b..01bf4a0 --- a/eurasiacon/build/linux/makefile.shared_conf +++ b/eurasiacon/build/linux/makefile.shared_conf @@ -23,6 +23,8 @@ # # # +# --- Revision Logs Removed --- +# ################################################################################## # ENV is used in a few other makefiles instead of the literal 'linux', for @@ -46,24 +48,29 @@ SIZE = $(CROSS_COMPILE)size CC= $(CROSS_COMPILE)gcc ifdef QAC_ANALYSE -ifneq ("$(CROSS_COMPILE)","") -CC= perl "$(ANALROOT)/wrapper.pl -wcf $(ANALROOT)/eurasia_linux.cfg $(CROSS_COMPILE)gcc" -endif +export QAC_SYS_INC_PATH ?= $(shell $(CROSS_COMPILE)gcc -print-file-name=include) + +#ifneq ("$(CROSS_COMPILE)","") +#CC= perl "$(ANALROOT)/wrapper.pl -wcf $(ANALROOT)/eurasia_linux.cfg $(CROSS_COMPILE)gcc" +#endif endif -CAT ?= cat -CP ?= cp +CAT ?= cat +CP ?= cp CHMOD ?= chmod -DOS2UNIX ?= dos2unix +CUT ?= cut +DIFF ?= diff ECHO ?= -@echo +ENV ?= env FIND ?= find GREP ?= grep -LN ?= ln -s +LN ?= ln -s +NM ?= nm MKDIR ?= mkdir -p -MV ?= mv -RM ?= rm -f -SED ?= sed -M4 ?= m4 +MV ?= mv +RM ?= rm -f +SED ?= sed +M4 ?= m4 TOUCH ?= touch PERL ?= perl SORT ?= sort @@ -71,8 +78,13 @@ UNIQ ?= uniq FLEX ?= flex BISON ?= bison MD5SUM ?= md5sum -ENV ?= env -CUT ?= cut +GAWK ?= gawk + +# The `dos2unix' package is missing from Ubuntu 10.04. Additionally, +# the tofrodos package no longer provides the dos2unix symlink. +# +DOS2UNIX ?= \ + $(shell if [ -z `which fromdos` ]; then echo dos2unix; else echo fromdos -p; fi) # SILENT=@ causes command text to be omitted during the process. If you want # to see what's really happening then use "make SILENT= ..." @@ -90,6 +102,11 @@ endif # BUILD ?= release +# Services module name +PVRSRV_MODNAME ?= pvrsrvkm + +SYS_CFLAGS += -DPVRSRV_MODNAME="\"$(PVRSRV_MODNAME)"\" + # Services version. # SERVICES ?= 4 @@ -115,7 +132,7 @@ SYSBIN = $(_SYSBIN)_$(PVR_BUILD_DIR)_$(BUILD) # so instead we supply pvrversion.h. We produce pvrversion.h if # if doesn't exist. # -DATE := $(shell date "+%a %B %d %Z %Y" ) +DATE := $(shell date +%Y-%m-%d) EURASIACON_PJ = $(EURASIAROOT)/eurasiacon.pj PVRVERSION_H = $(EURASIAROOT)/include$(SERVICES)/pvrversion.h PVRVERSION = $(shell if [ -f $(EURASIACON_PJ) ]; then \ @@ -137,11 +154,21 @@ KERNEL_REL = $(shell grep "^PATCHLEVEL = " \ $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') KERNEL_SUBREL = $(shell grep "^SUBLEVEL = " \ $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') + +KERNEL_EXTRAVER = $(shell grep "^EXTRAVERSION = " \ + $(KERNELDIR)/Makefile | $(CUT) -f3 -d' ') + +KERNELVERSION = $(KERNEL_VER).$(KERNEL_REL).$(KERNEL_SUBREL) + KERNEL_ID ?= $(shell grep -h '\#define UTS_RELEASE' $(KERNELDIR)/include/linux/* | \ $(CUT) -f3 -d' ' | \ $(SED) s/\"//g) -KERNELVERSION = $(KERNEL_VER).$(KERNEL_REL).$(KERNEL_SUBREL) +ifeq ("$(KERNEL_ID)", "") +# For Linux 2.6.33, the above method of finding the KERNEL ID no longer +# works, as UTS_RELEASE is no longer defined anywhere. +KERNEL_ID := $(KERNELVERSION)$(KERNEL_EXTRAVER) +endif # Get checksum from env variables # @@ -170,13 +197,77 @@ CBUILD = -DPVR_BUILD_DIR="\"$(PVR_BUILD_DIR)\"" \ -DPVR_BUILD_TYPE="\"$(BUILD)\"" # Don't support HW recovery on debug builds -CBUILD.debug = -DDEBUG_PVR +CBUILD.debug = -DDEBUG CBUILD.timing = -DTIMING CBUILD.release = -DRELEASE CFLAGS.debug = -g -O0 -DDLL_METRIC=1 CFLAGS.timing = $(OPTIM) -g -DDLL_METRIC=1 -DTIMING CFLAGS.release = $(OPTIM) -g +# If either EXTRA_WARNINGS or EXTRA_EXTRA_WARNINGS are enabled, +# modify the base flags (CCFLAGS_KERNEL). +# +ifeq ($(EXTRA_EXTRA_WARNINGS),1) +EXTRA_WARNINGS=1 +endif +ifeq ($(EXTRA_WARNINGS),1) +CCFLAGS_KERNEL += +ifeq ($(EXTRA_EXTRA_WARNINGS),1) +CCFLAGS_KERNEL += -Wwrite-strings +endif +endif + +# These flags are enabled unconditionally for both UM/KM parts. +# +CCFLAGS_KERNEL += -Wall -Wdeclaration-after-statement -Wpointer-arith +CCFLAGS_KERNEL += -Wmissing-format-attribute -Wno-format-zero-length +CCFLAGS_KERNEL += -Wmissing-prototypes -Wstrict-prototypes + +# These are just for UM builds. +# +CCFLAGS := $(CCFLAGS_KERNEL) -Wunused-parameter + +# Snapshot host flags without -W -Wno-missing-field-initializers +# FIXME: Temporary workaround for ancient centos4 toolchain.. +# +CCFLAGS_HOST := $(CCFLAGS) + +# Our platform guides require the use of either GCC 4.2 for x86, +# or GCC 4.3 for ARM. Both of these compilers support "-W +# -Wno-missing-field-initializers", and support switching off each +# of the warnings -W enables. +# +# Because earlier GCCs don't support these flags, or don't support +# them properly, we can't enable them for kernel builds because +# there may be bugs in kernel headers which we can't work around. +# +CCFLAGS += -W -Wno-missing-field-initializers + +# These flags are used to work around kernel header bugs. +# +CCFLAGS_KERNEL += -Wno-unused-parameter -Wno-sign-compare + +# We have no control over errors in external sources, so no +# additional error checking if SUPPORT_DRI_DRM_EXT is set. +# +ifneq ($(SUPPORT_DRI_DRM_EXT),1) +# If EXTRA_WARNINGS are enabled, we don't want any -Werror +# to cause the build to fail, so turn it back off again. +# +# Otherwise, turn Werror on for all kernel module builds. +# +ifeq ($(EXTRA_WARNINGS),1) +SYS_CFLAGS += -Wno-error +else +CCFLAGS_KERNEL += -Werror +endif +endif + +# CPPFLAGS are default compiler flags for C++ (subset of C flags) +# +CPPFLAGS = -W -Wall -Wmissing-format-attribute -Wpointer-arith +CPPFLAGS += -Wno-missing-field-initializers + # Defaults for useful things. # @@ -193,39 +284,71 @@ PVRSRV_LOG_MEMORY_ALLOCS ?= 0 PVRSRV_DEBUG_OS_MEMORY ?= 0 endif +SUPPORT_XORG ?= 0 +ifneq ($(SUPPORT_XORG),1) +SUPPORT_XWS ?= 1 +XWS_SERVER_ONLY ?= 0 +else +SUPPORT_XWS = 0 +XWS_SERVER_ONLY = 0 +SUPPORT_EWS = 0 +endif + SUPPORT_DRI_DRM ?= $(SUPPORT_XORG) SUPPORT_DRI_DRM_EXT ?= 0 +SUPPORT_DRI_DRM_NOT_PCI ?= 0 +SUPPORT_DRI_DRM_NO_DROPMASTER ?= 0 +SUPPORT_SECURE_DRM_AUTH_EXPORT ?= $(SUPPORT_XORG) -SUPPORT_SECURE_FD_EXPORT = 1 +ifeq ($(SUPPORT_EWS),1) +SUPPORT_SECURE_FD_EXPORT ?= 1 +else +SUPPORT_SECURE_FD_EXPORT ?= 0 +endif + +SUPPORT_DRI_DRM_NO_LIBDRM ?= 0 +ifneq ($(SUPPORT_XORG),1) ifeq ($(SUPPORT_DRI_DRM),1) -SUPPORT_SECURE_FD_EXPORT = 0 +SUPPORT_DRI_DRM_NO_LIBDRM = 1 +endif endif -PVR_PROC_USE_SEQ_FILE ?= 1 TRANSFER_QUEUE ?= 1 SUPPORT_SGX_EVENT_OBJECT ?=1 SUPPORT_SECURE_HANDLES = 1 SUPPORT_SRVINIT = 1 SUPPORT_PERCONTEXT_PB = 1 +DISABLE_SGX_PB_GROW_SHRINK ?= 0 SUPPORT_LINUX_X86_PAT ?=1 SUPPORT_LINUX_X86_WRITECOMBINE ?=1 SUPPORT_SGX_LOW_LATENCY_SCHEDULING ?=1 -SUPPORT_OMAP3430_SGXFCLK_96M ?= 0 -SUPPORT_OMAP3430_OMAPFB3 ?= 0 +ifeq ($(SUPPORT_XORG),1) +SUPPORT_PDUMP_MULTI_PROCESS = 1 +endif -SUPPORT_CPU_CACHED_BUFFERS ?= 0 +SUPPORT_OMAP3430_SGXFCLK_96M ?= 0 -SUPPORT_CACHEFLUSH_ON_ALLOC ?= 0 SUPPORT_MEMINFO_IDS ?= 0 +SUPPORT_PVR_PDP_LINUX_FB ?= $(SUPPORT_XWS) + +SUPPORT_LINUX_USING_WORKQUEUES ?= 0 +SUPPORT_LINUX_USING_SHARED_WORKQUEUES ?= 0 +ifeq ($(SUPPORT_LINUX_USING_WORKQUEUES),1) +SUPPORT_LINUX_USING_SHARED_WORKQUEUES = 0 +endif + +SUPPORT_SGX_NEW_STATUS_VALS ?= 1 + DC_NOHW_WIDTH ?= 640 DC_NOHW_HEIGHT ?= 480 DISPLAY_CONTROLLER ?= -SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -DPVR2D_VALIDATE_INPUT_PARAMS +SUPPORT_DYNAMIC_GTF_TIMING ?= 0 +SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309 -DPVR2D_VALIDATE_INPUT_PARAMS # Thread support USE_PTHREADS ?= 1 @@ -243,11 +366,12 @@ SYS_CFLAGS.$(SUPPORT_XWS) += -DSUPPORT_XWS SYS_CFLAGS.$(SUPPORT_EWS) += -DSUPPORT_EWS SYS_CFLAGS.$(PDUMP) += -DPDUMP SYS_CFLAGS.$(VGX_PDUMP_FROM_FIRMWARE) += -DVGX_PDUMP_FROM_FIRMWARE +SYS_CFLAGS.$(OVG_ALWAYS_CONVERT_DATA) += -DOVG_ALWAYS_CONVERT_DATA SYS_CFLAGS.$(SUPPORT_POWER_MANAGEMENT) += -DSUPPORT_POWER_MANAGEMENT SYS_CFLAGS.$(SUPPORT_BUFFER_CLASS) += -DSUPPORT_BUFFER_CLASS SYS_CFLAGS.$(SUPPORT_PERCONTEXT_PB) += -DSUPPORT_PERCONTEXT_PB -SYS_CFLAGS.$(SUPPORT_DYNAMIC_PBRESIZE) += -DSUPPORT_DYNAMIC_PBRESIZE +SYS_CFLAGS.$(DISABLE_SGX_PB_GROW_SHRINK) += -DDISABLE_SGX_PB_GROW_SHRINK SYS_CFLAGS.$(USE_FBDEV) += -DUSE_FBDEV SYS_CFLAGS.$(USE_FBDEV) += -DFBDEV_NAME="\"$(FBDEV_NAME)\"" @@ -279,6 +403,8 @@ SYS_CFLAGS.$(TRANSFER_QUEUE) += -DTRANSFER_QUEUE SYS_CFLAGS.$(SUPPORT_SGX_MMU_DUMMY_PAGE) += -DSUPPORT_SGX_MMU_DUMMY_PAGE SYS_CFLAGS.$(PVRSRV_DUMP_MK_TRACE) += -DPVRSRV_DUMP_MK_TRACE +SYS_CFLAGS.$(PVRSRV_DUMP_KERNEL_CCB) += -DPVRSRV_DUMP_KERNEL_CCB +SYS_CFLAGS.$(EDM_USSE_HWDEBUG) += -DEDM_USSE_HWDEBUG SYS_CFLAGS.$(PVRSRV_USSE_EDM_STATUS_DEBUG) += -DPVRSRV_USSE_EDM_STATUS_DEBUG SYS_CFLAGS.$(USE_SUPPORT_STATUSVALS_DEBUG) += -DUSE_SUPPORT_STATUSVALS_DEBUG @@ -287,10 +413,19 @@ SYS_CFLAGS.$(SGX_DISABLE_UKERNEL_SECONDARY_STATE) += -DSGX_DISABLE_UKERNEL_SECON SYS_CFLAGS.$(DBGBREAK_ON_SPM) += -DDBGBREAK_ON_SPM SYS_CFLAGS.$(PVR_DBG_BREAK_ASSERT_FAIL) += -DPVR_DBG_BREAK_ASSERT_FAIL +SYS_CFLAGS.$(PVRSRV_RESET_ON_HWTIMEOUT) += -DPVRSRV_RESET_ON_HWTIMEOUT +SYS_CFLAGS.$(PVRSRV_CLIENT_RESET_ON_HWTIMEOUT) += -DPVRSRV_CLIENT_RESET_ON_HWTIMEOUT SYS_CFLAGS.$(NO_HARDWARE) += -DNO_HARDWARE SYS_CFLAGS.$(SUPPORT_DRI_DRM) += -DSUPPORT_DRI_DRM SYS_CFLAGS.$(SUPPORT_DRI_DRM_EXT) += -DSUPPORT_DRI_DRM_EXT +SYS_CFLAGS.$(SUPPORT_DRI_DRM_NOT_PCI) += -DPVR_DRI_DRM_NOT_PCI +SYS_CFLAGS.$(SUPPORT_DRI_DRM_NO_DROPMASTER) += -DSUPPORT_DRI_DRM_NO_DROPMASTER +SYS_CFLAGS.$(SUPPORT_DRI_DRM_NO_LIBDRM) += -DSUPPORT_DRI_DRM_NO_LIBDRM +SYS_CFLAGS.$(DRM_PVR_RESERVED_INTEL_ORDER) += -DDRM_PVR_RESERVED_INTEL_ORDER +SYS_CFLAGS.$(DRM_PVR_USE_INTEL_FB) += -DDRM_PVR_USE_INTEL_FB + + SYS_CFLAGS.$(USE_PRIMARY_SURFACE_IN_FLIP_CHAIN) += -DUSE_PRIMARY_SURFACE_IN_FLIP_CHAIN ifneq ("$(NO_HARDWARE)", "1") @@ -302,10 +437,13 @@ endif ifeq ("$(PDUMP)", "1") SUPPORT_DBGDRV_EVENT_OBJECTS ?=1 SYS_CFLAGS.$(SUPPORT_DBGDRV_EVENT_OBJECTS) += -DSUPPORT_DBGDRV_EVENT_OBJECTS +SYS_CFLAGS.$(PDUMP_DEBUG_OUTFILES) += -DPDUMP_DEBUG_OUTFILES +SYS_CFLAGS.$(SUPPORT_PDUMP_MULTI_PROCESS) += -DSUPPORT_PDUMP_MULTI_PROCESS endif SYS_CFLAGS.$(SUPPORT_SECURE_HANDLES) += -DPVR_SECURE_HANDLES SYS_CFLAGS.$(SUPPORT_SECURE_FD_EXPORT) += -DPVR_SECURE_FD_EXPORT +SYS_CFLAGS.$(SUPPORT_SECURE_DRM_AUTH_EXPORT) += -DPVR_SECURE_DRM_AUTH_EXPORT SYS_CFLAGS.$(USE_PTHREADS) += -DUSE_PTHREADS SYS_CFLAGS.$(USE_GCC__thread_KEYWORD) += -DUSE_GCC__thread_KEYWORD @@ -322,18 +460,14 @@ SYS_CFLAGS.$(SUPPORT_SGX_HWPERF) += -DSUPPORT_SGX_HWPERF SYS_CFLAGS.$(SUPPORT_SLC) += -DSGX_FEATURE_SYSTEM_CACHE SYS_CFLAGS.$(BYPASS_SLC) += -DSGX_BYPASS_SYSTEM_CACHE +SYS_CFLAGS.$(BYPASS_DCU) += -DSGX_BYPASS_DCU SYS_CFLAGS.$(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) += -DSUPPORT_SGX_LOW_LATENCY_SCHEDULING - +SYS_CFLAGS.$(SGX_SUPPORT_VDM_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_VDM_TIMER_BASED_SWITCHING +SYS_CFLAGS.$(SGX_SUPPORT_ISP_TIMER_BASED_SWITCHING) += -DSGX_SUPPORT_ISP_TIMER_BASED_SWITCHING SYS_CFLAGS.$(SUPPORT_LINUX_X86_PAT) += -DSUPPORT_LINUX_X86_PAT SYS_CFLAGS.$(SUPPORT_OMAP3430_SGXFCLK_96M) += -DSUPPORT_OMAP3430_SGXFCLK_96M -SYS_CFLAGS.$(SUPPORT_OMAP3430_OMAPFB3) += -DSUPPORT_OMAP3430_OMAPFB3 - -SYS_CFLAGS.$(SUPPORT_CPU_CACHED_BUFFERS) += -DSUPPORT_CPU_CACHED_BUFFERS -SYS_CFLAGS.$(SUPPORT_CACHE_LINE_FLUSH) += -DSUPPORT_CACHE_LINE_FLUSH - - SYS_CFLAGS.$(SUPPORT_CACHEFLUSH_ON_ALLOC) += -DSUPPORT_CACHEFLUSH_ON_ALLOC SYS_CFLAGS.$(SUPPORT_MEMINFO_IDS) += -DSUPPORT_MEMINFO_IDS @@ -343,6 +477,24 @@ SYS_CFLAGS.$(SUPPORT_ANDROID_PLATFORM) += -DSUPPORT_ANDROID_PLATFORM SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DSUPPORT_GRAPHICS_HAL SYS_CFLAGS.$(SUPPORT_GRAPHICS_HAL) += -DGRALLOC_VARIANT="\"$(GRALLOC_VARIANT)\"" +SYS_CFLAGS.$(SUPPORT_EGL_IMAGE_SYNC_DEPENDENCY) += -DSUPPORT_EGL_IMAGE_SYNC_DEPENDENCY + +SYS_CFLAGS.$(SUPPORT_PVR_PDP_LINUX_FB) += -DPVR_PDP_LINUX_FB + +SYS_CFLAGS.$(SUPPORT_LINUX_USING_WORKQUEUES) += \ + -DPVR_LINUX_USING_WORKQUEUES \ + -DPVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE \ + -DPVR_LINUX_TIMERS_USING_WORKQUEUES \ + -DSYS_CUSTOM_POWERLOCK_WRAP + +SYS_CFLAGS.$(SUPPORT_LINUX_USING_SHARED_WORKQUEUES) += \ + -DPVR_LINUX_USING_WORKQUEUES \ + -DPVR_LINUX_MISR_USING_WORKQUEUE \ + -DPVR_LINUX_TIMERS_USING_SHARED_WORKQUEUE \ + -DSYS_CUSTOM_POWERLOCK_WRAP + +SYS_CFLAGS.$(SUPPORT_SGX_NEW_STATUS_VALS) += -DSUPPORT_SGX_NEW_STATUS_VALS + ifneq ("$(DISPLAY_CONTROLLER)", "") SYS_CFLAGS += -DDISPLAY_CONTROLLER=$(DISPLAY_CONTROLLER) endif @@ -359,7 +511,6 @@ SYS_CFLAGS += -DNO_HARDWARE -DDC_NOHW_BUFFER_WIDTH=$(DC_NOHW_WIDTH) -DDC_NOHW_BU endif SYS_CFLAGS += -DDEBUG_LOG_PATH_TRUNCATE=\"$(EURASIAROOT)\" -SYS_CFLAGS.$(PVR_PROC_USE_SEQ_FILE) += -DPVR_PROC_USE_SEQ_FILE SYS_INCLUDES = -I$(EURASIAROOT)/include4 \ -I$(EURASIAROOT)/eurasiacon/includeext \ @@ -367,12 +518,25 @@ SYS_INCLUDES = -I$(EURASIAROOT)/include4 \ -isystem $(KERNELDIR)/include -ALL_CFLAGS_kbuild = -DLINUX \ +ALL_CFLAGS_kbuild = $(CCFLAGS_KERNEL) -DLINUX \ $(CBUILD) $(CBUILD.$(BUILD)) \ - $(SYS_CFLAGS) $(SYS_CFLAGS.1) \ $(MODULE_CFLAGS) $(MODULE_CFLAGS.$(BUILD)) \ - $(CORE) \ - -Wall -fno-strict-aliasing \ + $(SYS_CFLAGS) $(SYS_CFLAGS.1) \ + $(CORE) -fno-strict-aliasing -Wno-pointer-arith \ $(CFLAGS.$(BUILD)) +ifdef SUPPORT_DRI_DRM_NO_TTM +export SUPPORT_DRI_DRM_NO_TTM +endif + +ifdef SUPPORT_XORG_SENSOR_FRAMEWORK +export SUPPORT_XORG_SENSOR_FRAMEWORK +endif + +# If we do not specify direst path to external 3pdd sources, use tarball +ifeq ($(MRST_DRIVER_SOURCE),) +EXTERNAL_3PDD_TARBALL_PATH = $(EURASIAROOT)/eurasiacon/external/$(EXTERNAL_3PDD_TARBALL) +export EXTERNAL_3PDD_TARBALL_PATH +endif + diff --git a/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt b/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt new file mode 100755 index 0000000..e35602f --- /dev/null +++ b/eurasiacon/build/linux/omap3430_linux/ignored_symbols.txt @@ -0,0 +1,5 @@ +^__aeabi_ +^__exidx_ +^__data_start +^_init +^_fini diff --git a/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile b/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile index 5747505..d1805a5 100644 --- a/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile +++ b/eurasiacon/build/linux/omap3430_linux/kbuild/Makefile @@ -26,6 +26,12 @@ include ../../kbuild/Makefile.kbuild -EXTRA_SUBDIRS = $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux \ - $(EURASIAROOT)/services4/3rdparty/bufferclass_example +EXTRA_SUBDIRS = +ifeq ($(SUPPORT_OMAP3430_OMAPFB3),1) +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omapfb3_linux +else +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux +endif + +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/bufferclass_example diff --git a/eurasiacon/build/linux/omap3430_linux/makefile.core b/eurasiacon/build/linux/omap3430_linux/makefile.core old mode 100755 new mode 100644 index b16d3ef..eea2327 --- a/eurasiacon/build/linux/omap3430_linux/makefile.core +++ b/eurasiacon/build/linux/omap3430_linux/makefile.core @@ -27,7 +27,7 @@ CORE = -DSGX$(SGXCORE) -DSUPPORT_SGX$(SGXCORE) ifeq ("$(SGXCOREREV)","") ifeq ("$(SGXCORE)","530") -CORE += -DSGX_CORE_REV=125 +CORE += -DSGX_CORE_REV=121 else CORE += -DUSE_SGX_CORE_REV_HEAD endif diff --git a/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf b/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf old mode 100755 new mode 100644 index 9eb7f17..86f53dc --- a/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf +++ b/eurasiacon/build/linux/omap3430_linux/makefile.shared_conf @@ -36,7 +36,7 @@ SYS_EXE_LDFLAGS = -Xlinker -rpath-link=$(TOOLCHAIN)/arm-none-linux-gnueabi/lib # Cross-compile extra settings. # -PVR_SYSTEM = omap3430 +PVR_SYSTEM = omap3 DISPLAY_CONTROLLER = omaplfb ARCH_CFLAGS = -march=armv7-a @@ -46,20 +46,8 @@ SYS_CFLAGS = -DSGX_DYNAMIC_TIMING_INFO \ -DSYS_CUSTOM_POWERLOCK_WRAP # The version of the kernel that is required for compilation -REQUIREDKERNELVERSION = 2.6.24 +REQUIREDKERNELVERSION = 2.6.34 -# -# OPTIM contains the optimisation level in timing and release builds -OPTIM = -Os - -SGXCORE = 530 -SUPPORT_SGX = 1 - -SUPPORT_HW_RECOVERY = 1 -SUPPORT_SGX_HWPERF = 1 -SYS_USING_INTERRUPTS = 1 - -PVR2D_ALT_2DHW = 1 LDM_PLATFORM ?= 1 # Only enable active power management if passive power management is @@ -73,3 +61,33 @@ SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1 else SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 endif + +OMAP_KERNEL_VER := $(shell grep "^VERSION = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_REL := $(shell grep "^PATCHLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_SUBREL := $(shell grep "^SUBLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') + +OMAP_KERNEL_AT_LEAST_2_6_29 := $(shell test $(OMAP_KERNEL_VER) -ge 2 -a \ + $(OMAP_KERNEL_REL) -ge 6 -a \ + $(OMAP_KERNEL_SUBREL) -ge 29 && echo 1 || echo 0) + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_29),1) +SUPPORT_OMAP3430_OMAPFB3 = 1 +SUPPORT_LINUX_USING_WORKQUEUES = 1 +SYS_CFLAGS += -DPVR_HAS_BROKEN_OMAPFB_H +endif + +# +# OPTIM contains the optimisation level in timing and release builds +OPTIM = -Os + +SGXCORE = 530 +SUPPORT_SGX = 1 + +SUPPORT_HW_RECOVERY = 1 +SUPPORT_SGX_HWPERF = 1 +SYS_USING_INTERRUPTS = 1 + +PVR2D_ALT_2DHW = 1 diff --git a/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile b/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile index 5747505..d1805a5 100644 --- a/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile +++ b/eurasiacon/build/linux/omap3630_linux/kbuild/Makefile @@ -26,6 +26,12 @@ include ../../kbuild/Makefile.kbuild -EXTRA_SUBDIRS = $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux \ - $(EURASIAROOT)/services4/3rdparty/bufferclass_example +EXTRA_SUBDIRS = +ifeq ($(SUPPORT_OMAP3430_OMAPFB3),1) +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omapfb3_linux +else +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/dc_omap3430_linux +endif + +EXTRA_SUBDIRS += $(EURASIAROOT)/services4/3rdparty/bufferclass_example diff --git a/eurasiacon/build/linux/omap3630_linux/makefile.core b/eurasiacon/build/linux/omap3630_linux/makefile.core old mode 100755 new mode 100644 diff --git a/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf b/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf old mode 100755 new mode 100644 index fed61f1..8d150d9 --- a/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf +++ b/eurasiacon/build/linux/omap3630_linux/makefile.shared_conf @@ -46,20 +46,8 @@ SYS_CFLAGS = -DSGX_DYNAMIC_TIMING_INFO \ -DSYS_CUSTOM_POWERLOCK_WRAP # The version of the kernel that is required for compilation -REQUIREDKERNELVERSION = 2.6.32 +REQUIREDKERNELVERSION = 2.6.37 -# -# OPTIM contains the optimisation level in timing and release builds -OPTIM = -Os - -SGXCORE = 530 -SUPPORT_SGX = 1 - -SUPPORT_HW_RECOVERY = 1 -SUPPORT_SGX_HWPERF = 1 -SYS_USING_INTERRUPTS = 1 - -PVR2D_ALT_2DHW = 1 LDM_PLATFORM ?= 1 # Only enable active power management if passive power management is @@ -69,7 +57,37 @@ LDM_PLATFORM ?= 1 # passive power management isn't enabled, the driver won't see the # system suspend/resume events, and so won't take appropriate action. ifeq ($(LDM_PLATFORM),1) -SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1 +SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 0 else SUPPORT_ACTIVE_POWER_MANAGEMENT = 0 endif + +OMAP_KERNEL_VER := $(shell grep "^VERSION = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_REL := $(shell grep "^PATCHLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') +OMAP_KERNEL_SUBREL := $(shell grep "^SUBLEVEL = " \ + $(KERNELDIR)/Makefile | cut -f3 -d' ') + +OMAP_KERNEL_AT_LEAST_2_6_29 := $(shell test $(OMAP_KERNEL_VER) -ge 2 -a \ + $(OMAP_KERNEL_REL) -ge 6 -a \ + $(OMAP_KERNEL_SUBREL) -ge 29 && echo 1 || echo 0) + +ifeq ($(OMAP_KERNEL_AT_LEAST_2_6_29),1) +SUPPORT_OMAP3430_OMAPFB3 = 1 +SUPPORT_LINUX_USING_WORKQUEUES = 1 +SYS_CFLAGS += -DPVR_HAS_BROKEN_OMAPFB_H +endif + +# +# OPTIM contains the optimisation level in timing and release builds +OPTIM = -Os + +SGXCORE = 530 +SUPPORT_SGX = 1 + +SUPPORT_HW_RECOVERY = 1 +SUPPORT_SGX_HWPERF = 1 +SYS_USING_INTERRUPTS = 1 + +PVR2D_ALT_2DHW = 1 diff --git a/include4/dbgdrvif.h b/include4/dbgdrvif.h index 9e5d8dc..1057c6a 100644 --- a/include4/dbgdrvif.h +++ b/include4/dbgdrvif.h @@ -43,6 +43,8 @@ #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 @@ -97,6 +99,7 @@ #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_ @@ -104,37 +107,54 @@ 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; - IMG_CHAR *pszName; }DBG_IN_CREATESTREAM, *PDBG_IN_CREATESTREAM; typedef struct _DBG_IN_FINDSTREAM_ { + union + { + IMG_CHAR *pszName; + IMG_UINT64 ui64Name; + }u; IMG_BOOL bResetStream; - IMG_CHAR *pszName; }DBG_IN_FINDSTREAM, *PDBG_IN_FINDSTREAM; typedef struct _DBG_IN_WRITESTRING_ { - IMG_VOID *pvStream; + union + { + IMG_CHAR *pszString; + IMG_UINT64 ui64String; + } u; + IMG_SID hStream; IMG_UINT32 ui32Level; - IMG_CHAR *pszString; }DBG_IN_WRITESTRING, *PDBG_IN_WRITESTRING; typedef struct _DBG_IN_READSTRING_ { - IMG_VOID *pvStream; + union + { + IMG_CHAR *pszString; + IMG_UINT64 ui64String; + } u; + IMG_SID hStream; IMG_UINT32 ui32StringLen; - IMG_CHAR *pszString; } DBG_IN_READSTRING, *PDBG_IN_READSTRING; typedef struct _DBG_IN_SETDEBUGMODE_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Mode; IMG_UINT32 ui32Start; IMG_UINT32 ui32End; @@ -143,93 +163,119 @@ typedef struct _DBG_IN_SETDEBUGMODE_ typedef struct _DBG_IN_SETDEBUGOUTMODE_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Mode; } DBG_IN_SETDEBUGOUTMODE, *PDBG_IN_SETDEBUGOUTMODE; typedef struct _DBG_IN_SETDEBUGLEVEL_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Level; } DBG_IN_SETDEBUGLEVEL, *PDBG_IN_SETDEBUGLEVEL; typedef struct _DBG_IN_SETFRAME_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Frame; } DBG_IN_SETFRAME, *PDBG_IN_SETFRAME; typedef struct _DBG_IN_WRITE_ { - IMG_VOID *pvStream; + union + { + IMG_UINT8 *pui8InBuffer; + IMG_UINT64 ui64InBuffer; + } u; + IMG_SID hStream; IMG_UINT32 ui32Level; IMG_UINT32 ui32TransferSize; - IMG_UINT8 *pui8InBuffer; } DBG_IN_WRITE, *PDBG_IN_WRITE; typedef struct _DBG_IN_READ_ { - IMG_VOID *pvStream; + union + { + IMG_UINT8 *pui8OutBuffer; + IMG_UINT64 ui64OutBuffer; + } u; + IMG_SID hStream; IMG_BOOL bReadInitBuffer; IMG_UINT32 ui32OutBufferSize; - IMG_UINT8 *pui8OutBuffer; } DBG_IN_READ, *PDBG_IN_READ; typedef struct _DBG_IN_OVERRIDEMODE_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Mode; } DBG_IN_OVERRIDEMODE, *PDBG_IN_OVERRIDEMODE; typedef struct _DBG_IN_ISCAPTUREFRAME_ { - IMG_VOID *pvStream; + IMG_SID hStream; IMG_BOOL bCheckPreviousFrame; } DBG_IN_ISCAPTUREFRAME, *PDBG_IN_ISCAPTUREFRAME; typedef struct _DBG_IN_SETMARKER_ { - IMG_VOID *pvStream; + 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_VOID *pvStream; + IMG_SID hStream; IMG_UINT32 ui32Level; IMG_UINT32 ui32BufferSize; - IMG_UINT8 *pui8InBuffer; } 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; - IMG_BOOL bInitPhaseComplete; - IMG_UINT32 ui32Flags; - IMG_UINT32 ui32Base; + DBG_STREAM_CONTROL *psCtrl; + IMG_BOOL bCircularAllowed; + IMG_PVOID pvBase; IMG_UINT32 ui32Size; IMG_UINT32 ui32RPtr; IMG_UINT32 ui32WPtr; IMG_UINT32 ui32DataWritten; - IMG_UINT32 ui32CapMode; - IMG_UINT32 ui32OutMode; - IMG_UINT32 ui32DebugLevel; - IMG_UINT32 ui32DefaultMode; - IMG_UINT32 ui32Start; - IMG_UINT32 ui32End; - IMG_UINT32 ui32Current; - IMG_UINT32 ui32Access; - IMG_UINT32 ui32SampleRate; - IMG_UINT32 ui32Reserved; - IMG_UINT32 ui32Timeout; - IMG_UINT32 ui32Marker; + 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; @@ -260,7 +306,9 @@ typedef struct _DBGKM_SERVICE_TABLE_ 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 *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; diff --git a/include4/img_defs.h b/include4/img_defs.h index bdaa73b..3ba2d2f 100644 --- a/include4/img_defs.h +++ b/include4/img_defs.h @@ -80,8 +80,8 @@ typedef char TCHAR, *PTCHAR, *PTSTR; #if defined(__linux__) || defined(__METAG) #define IMG_CALLCONV - #define IMG_INTERNAL __attribute__ ((visibility ("hidden"))) - #define IMG_EXPORT + #define IMG_INTERNAL __attribute__((visibility("hidden"))) + #define IMG_EXPORT __attribute__((visibility("default"))) #define IMG_IMPORT #define IMG_RESTRICT __restrict__ @@ -103,6 +103,16 @@ typedef char TCHAR, *PTCHAR, *PTSTR; #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 + +#if defined (_WIN64) +#define IMG_UNDEF (~0ULL) +#else +#define IMG_UNDEF (~0UL) +#endif #endif diff --git a/include4/img_types.h b/include4/img_types.h index b1fec3c..31962aa 100644 --- a/include4/img_types.h +++ b/include4/img_types.h @@ -45,9 +45,13 @@ 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 @@ -75,11 +79,15 @@ typedef enum tag_img_bool IMG_FORCE_ALIGN = 0x7FFFFFFF } IMG_BOOL, *IMG_PBOOL; -typedef void IMG_VOID, *IMG_PVOID; +typedef void IMG_VOID, *IMG_PVOID; typedef IMG_INT32 IMG_RESULT; -typedef IMG_UINT32 IMG_UINTPTR_T; +#if defined(_WIN64) +typedef unsigned __int64 IMG_UINTPTR_T; +#else +typedef unsigned int IMG_UINTPTR_T; +#endif typedef IMG_PVOID IMG_HANDLE; @@ -87,15 +95,17 @@ typedef void** IMG_HVOID, * IMG_PHVOID; typedef IMG_UINT32 IMG_SIZE_T; -#define IMG_NULL 0 +#define IMG_NULL 0 + +typedef IMG_UINT32 IMG_SID; typedef IMG_PVOID IMG_CPU_VIRTADDR; -typedef struct +typedef struct _IMG_DEV_VIRTADDR { - IMG_UINT32 uiAddr; + IMG_UINT32 uiAddr; #define IMG_CAST_TO_DEVVADDR_UINT(var) (IMG_UINT32)(var) } IMG_DEV_VIRTADDR; diff --git a/include4/pvr_debug.h b/include4/pvr_debug.h index 9bba6bd..21fa2cd 100644 --- a/include4/pvr_debug.h +++ b/include4/pvr_debug.h @@ -43,6 +43,9 @@ extern "C" { #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) @@ -55,7 +58,9 @@ extern "C" { #define PVR_DBG_CALLTRACE DBGPRIV_CALLTRACE,__FILE__, __LINE__ #define PVR_DBG_ALLOC DBGPRIV_ALLOC,__FILE__, __LINE__ -#if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG_PVR) +#define PVR_DBGDRIV_MESSAGE DBGPRIV_DBGDRV_MESSAGE, "", 0 + +#if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) #define PVRSRV_NEED_PVR_ASSERT #endif @@ -63,7 +68,7 @@ extern "C" { #define PVRSRV_NEED_PVR_DPF #endif -#if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG_PVR) || defined(TIMING)) +#if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG) || defined(TIMING)) #define PVRSRV_NEED_PVR_TRACE #endif @@ -97,7 +102,7 @@ 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 @@ -110,7 +115,8 @@ IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, #define PVR_TRACE(X) PVRSRVTrace X -IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTrace(const IMG_CHAR* pszFormat, ... ); +IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTrace(const IMG_CHAR* pszFormat, ... ) + IMG_FORMAT_PRINTF(1, 2); #else diff --git a/include4/pvrversion.h b/include4/pvrversion.h index 20e7b2c..3288915 100644 --- a/include4/pvrversion.h +++ b/include4/pvrversion.h @@ -28,10 +28,10 @@ #define _PVRVERSION_H_ #define PVRVERSION_MAJ 1 -#define PVRVERSION_MIN 5 -#define PVRVERSION_BRANCH 15 -#define PVRVERSION_BUILD 2766 -#define PVRVERSION_STRING "1.5.15.2766" +#define PVRVERSION_MIN 6 +#define PVRVERSION_BRANCH 16 +#define PVRVERSION_BUILD 3977 +#define PVRVERSION_STRING "1.6.16.3977" #define PVRVERSION_FILE "eurasiacon.pj" #endif diff --git a/include4/services.h b/include4/services.h index 85495e6..d1afe28 100644 --- a/include4/services.h +++ b/include4/services.h @@ -44,29 +44,29 @@ extern "C" { #define EVENTOBJNAME_MAXLENGTH (50) -#define PVRSRV_MEM_READ (1UL<<0) -#define PVRSRV_MEM_WRITE (1UL<<1) -#define PVRSRV_MEM_CACHE_CONSISTENT (1UL<<2) -#define PVRSRV_MEM_NO_SYNCOBJ (1UL<<3) -#define PVRSRV_MEM_INTERLEAVED (1UL<<4) -#define PVRSRV_MEM_DUMMY (1UL<<5) -#define PVRSRV_MEM_EDM_PROTECT (1UL<<6) -#define PVRSRV_MEM_ZERO (1UL<<7) -#define PVRSRV_MEM_USER_SUPPLIED_DEVVADDR (1UL<<8) -#define PVRSRV_MEM_RAM_BACKED_ALLOCATION (1UL<<9) -#define PVRSRV_MEM_NO_RESMAN (1UL<<10) -#define PVRSRV_MEM_EXPORTED (1UL<<11) - - -#define PVRSRV_HAP_CACHED (1UL<<12) -#define PVRSRV_HAP_UNCACHED (1UL<<13) -#define PVRSRV_HAP_WRITECOMBINE (1UL<<14) +#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 (1UL<<15) -#define PVRSRV_HAP_SINGLE_PROCESS (1UL<<16) -#define PVRSRV_HAP_MULTI_PROCESS (1UL<<17) -#define PVRSRV_HAP_FROM_EXISTING_PROCESS (1UL<<18) -#define PVRSRV_HAP_NO_CPU_VIRTUAL (1UL<<19) +#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 \ @@ -89,12 +89,15 @@ extern "C" { #define PVRSRV_DEFAULT_DEV_COOKIE (1) -#define PVRSRV_MISC_INFO_TIMER_PRESENT (1UL<<0) -#define PVRSRV_MISC_INFO_CLOCKGATE_PRESENT (1UL<<1) -#define PVRSRV_MISC_INFO_MEMSTATS_PRESENT (1UL<<2) -#define PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT (1UL<<3) -#define PVRSRV_MISC_INFO_DDKVERSION_PRESENT (1UL<<4) -#define PVRSRV_MISC_INFO_CPUCACHEFLUSH_PRESENT (1UL<<5) +#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 @@ -108,6 +111,12 @@ extern "C" { #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 , @@ -179,6 +188,8 @@ 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; @@ -188,6 +199,7 @@ 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; @@ -195,21 +207,22 @@ typedef struct _PVRSRV_CLIENT_DEV_DATA_ typedef struct _PVRSRV_CONNECTION_ { IMG_HANDLE hServices; - IMG_UINT32 ui32ProcessID; + IMG_UINTPTR_T ui32ProcessID; PVRSRV_CLIENT_DEV_DATA sClientDevData; + IMG_UINT32 ui32SrvFlags; }PVRSRV_CONNECTION; typedef struct _PVRSRV_DEV_DATA_ { - PVRSRV_CONNECTION sConnection; - IMG_HANDLE hDevCookie; + IMG_CONST PVRSRV_CONNECTION *psConnection; + IMG_HANDLE hDevCookie; } PVRSRV_DEV_DATA; typedef struct _PVRSRV_MEMUPDATE_ { - IMG_UINT32 ui32UpdateAddr; + IMG_UINTPTR_T ui32UpdateAddr; IMG_UINT32 ui32UpdateVal; } PVRSRV_MEMUPDATE; @@ -219,11 +232,11 @@ typedef struct _PVRSRV_HWREG_ IMG_UINT32 ui32RegVal; } PVRSRV_HWREG; -typedef struct _PVRSRV_MEMBLK_ +typedef struct _PVRSRV_MEMBLK_ { IMG_DEV_VIRTADDR sDevVirtAddr; IMG_HANDLE hOSMemHandle; - IMG_HANDLE hOSWrapMem; + IMG_HANDLE hOSWrapMem; IMG_HANDLE hBuffer; IMG_HANDLE hResItem; IMG_SYS_PHYADDR *psIntSysPAddr; @@ -235,7 +248,7 @@ typedef struct _PVRSRV_KERNEL_MEM_INFO_ *PPVRSRV_KERNEL_MEM_INFO; typedef struct _PVRSRV_CLIENT_MEM_INFO_ { - IMG_PVOID pvLinAddr; + IMG_PVOID pvLinAddr; IMG_PVOID pvLinAddrKM; @@ -300,6 +313,7 @@ typedef struct _PVRSRV_HEAP_INFO_ IMG_DEV_VIRTADDR sDevVAddrBase; IMG_UINT32 ui32HeapByteSize; IMG_UINT32 ui32Attribs; + IMG_UINT32 ui32XTileStride; }PVRSRV_HEAP_INFO; @@ -314,6 +328,13 @@ typedef struct _PVRSRV_EVENTOBJECT_ } 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; @@ -326,7 +347,7 @@ typedef struct _PVRSRV_MISC_INFO_ IMG_HANDLE hSOCTimerRegisterMappingInfo; - IMG_VOID *pvSOCClockGateRegs; + IMG_VOID *pvSOCClockGateRegs; IMG_UINT32 ui32SOCClockGateRegsSize; @@ -341,23 +362,48 @@ typedef struct _PVRSRV_MISC_INFO_ IMG_UINT32 aui32DDKVersion[4]; - - IMG_BOOL bCPUCacheFlushAll; - - IMG_BOOL bDeferCPUCacheFlush; - - IMG_PVOID pvRangeAddrStart; - - IMG_PVOID pvRangeAddrEnd; - + struct + { + + IMG_BOOL bDeferOp; + + + PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType; + + + union + { + + PVRSRV_CLIENT_MEM_INFO *psClientMemInfo; + + + struct _PVRSRV_KERNEL_MEM_INFO_ *psKernelMemInfo; + } u; + + + IMG_VOID *pvBaseVAddr; + + + IMG_UINT32 ui32Length; + } sCacheOpCtl; } PVRSRV_MISC_INFO; +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 *psConnection); +PVRSRV_ERROR IMG_CALLCONV PVRSRVConnect(PVRSRV_CONNECTION **ppsConnection, IMG_UINT32 ui32SrvFlags); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVDisconnect(PVRSRV_CONNECTION *psConnection); +PVRSRV_ERROR IMG_CALLCONV PVRSRVDisconnect(IMG_CONST PVRSRV_CONNECTION *psConnection); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevices(IMG_CONST PVRSRV_CONNECTION *psConnection, @@ -471,11 +517,12 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDev IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory(IMG_CONST PVRSRV_DEV_DATA *psDevData, IMG_HANDLE hDevMemContext, - IMG_SIZE_T ui32ByteSize, + 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, @@ -553,12 +600,12 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseDCDevice(IMG_CONST PVRSRV_CONNECTION *psCon IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCFormats (IMG_HANDLE hDevice, - IMG_UINT32 *pui32Count, + IMG_UINT32 *pui32Count, DISPLAY_FORMAT *psFormat); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCDims (IMG_HANDLE hDevice, - IMG_UINT32 *pui32Count, + IMG_UINT32 *pui32Count, DISPLAY_FORMAT *psFormat, DISPLAY_DIMS *psDims); @@ -655,6 +702,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPol(IMG_CONST PVRSRV_CONNECTION *psConne IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value, IMG_UINT32 ui32Mask, + PDUMP_POLL_OPERATOR eOperator, IMG_UINT32 ui32Flags); IMG_IMPORT @@ -680,19 +728,22 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSync(IMG_CONST PVRSRV_CONNECTION *psConnect IMG_UINT32 ui32Bytes); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpReg(IMG_CONST PVRSRV_CONNECTION *psConnection, +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(IMG_CONST PVRSRV_CONNECTION *psConnection, +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(IMG_CONST PVRSRV_CONNECTION *psConnection, +PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPol(const PVRSRV_DEV_DATA *psDevData, + IMG_CHAR *pszRegRegion, IMG_UINT32 ui32RegAddr, IMG_UINT32 ui32RegValue, IMG_UINT32 ui32Mask); @@ -729,12 +780,20 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpComment(IMG_CONST PVRSRV_CONNECTION *psConn IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentf(IMG_CONST PVRSRV_CONNECTION *psConnection, IMG_BOOL bContinuous, - IMG_CONST IMG_CHAR *pszFormat, ...); + 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, ...); + 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, @@ -746,20 +805,22 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpIsCapturing(IMG_CONST PVRSRV_CONNECTION *ps IMG_BOOL *pbIsCapturing); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpBitmap(IMG_CONST PVRSRV_CONNECTION *psConnection, +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, + IMG_HANDLE hDevMemContext, IMG_UINT32 ui32Size, PDUMP_PIXEL_FORMAT ePixelFormat, PDUMP_MEM_FORMAT eMemFormat, IMG_UINT32 ui32PDumpFlags); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegRead(IMG_CONST PVRSRV_CONNECTION *psConnection, +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, @@ -771,7 +832,7 @@ IMG_IMPORT IMG_BOOL IMG_CALLCONV PVRSRVPDumpIsCapturingTest(IMG_CONST PVRSRV_CONNECTION *psConnection); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCycleCountRegRead(IMG_CONST PVRSRV_CONNECTION *psConnection, +PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCycleCountRegRead(IMG_CONST PVRSRV_DEV_DATA *psDevData, IMG_UINT32 ui32RegOffset, IMG_BOOL bLastFrame); @@ -782,7 +843,7 @@ IMG_IMPORT PVRSRV_ERROR PVRSRVGetLibFuncAddr(IMG_HANDLE hExtDrv, const IMG_CHAR IMG_IMPORT IMG_UINT32 PVRSRVClockus (void); IMG_IMPORT IMG_VOID PVRSRVWaitus (IMG_UINT32 ui32Timeus); IMG_IMPORT IMG_VOID PVRSRVReleaseThreadQuanta (void); -IMG_IMPORT IMG_UINT32 IMG_CALLCONV PVRSRVGetCurrentProcessID(void); +IMG_IMPORT IMG_UINTPTR_T IMG_CALLCONV PVRSRVGetCurrentProcessID(void); IMG_IMPORT IMG_CHAR * IMG_CALLCONV PVRSRVSetLocale(const IMG_CHAR *pszLocale); @@ -816,30 +877,116 @@ IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMut IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex); IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex); -#if (defined(DEBUG_PVR) && defined(__linux__)) -IMG_PVOID PVRSRVAllocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); -IMG_PVOID PVRSRVCallocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); -IMG_VOID PVRSRVFreeUserModeMemTracking(IMG_VOID *pvMem); -IMG_PVOID PVRSRVReallocUserModeMemTracking(IMG_VOID *pvMem, IMG_SIZE_T ui32NewSize, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber); +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__)) +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, +IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection, IMG_HANDLE hOSEvent); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(PVRSRV_CONNECTION *psConnection, - IMG_HANDLE hKernelSyncInfo, +PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateSyncInfoModObj(const PVRSRV_CONNECTION *psConnection, + IMG_HANDLE *phKernelSyncInfoModObj); + +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroySyncInfoModObj(const PVRSRV_CONNECTION *psConnection, + IMG_HANDLE hKernelSyncInfoModObj); + + + +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(const PVRSRV_CONNECTION *psConnection, + IMG_HANDLE hKernelSyncInfoModObj, + PVRSRV_CLIENT_SYNC_INFO *psSyncInfo, IMG_UINT32 ui32ModifyFlags, IMG_UINT32 *pui32ReadOpsPending, IMG_UINT32 *pui32WriteOpsPending); IMG_IMPORT -PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(PVRSRV_CONNECTION *psConnection, - IMG_HANDLE hKernelSyncInfo, - IMG_UINT32 ui32ModifyFlags); +PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(const PVRSRV_CONNECTION *psConnection, + IMG_HANDLE hKernelSyncInfoModObj); + +IMG_IMPORT +PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToModObj(const PVRSRV_CONNECTION *psConnection, + IMG_HANDLE hKernelSyncInfoModObj, + 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); -#define TIME_NOT_PASSED_UINT32(a,b,c) ((a - b) < c) +#define TIME_NOT_PASSED_UINT32(a,b,c) (((a) - (b)) < (c)) #if defined (__cplusplus) } diff --git a/include4/servicesext.h b/include4/servicesext.h index d7a89b3..2f81b11 100644 --- a/include4/servicesext.h +++ b/include4/servicesext.h @@ -31,46 +31,231 @@ typedef enum _PVRSRV_ERROR_ { - PVRSRV_OK = 0, - PVRSRV_ERROR_GENERIC = 1, - PVRSRV_ERROR_OUT_OF_MEMORY = 2, - PVRSRV_ERROR_TOO_FEW_BUFFERS = 3, - PVRSRV_ERROR_SYMBOL_NOT_FOUND = 4, - PVRSRV_ERROR_OUT_OF_HSPACE = 5, - PVRSRV_ERROR_INVALID_PARAMS = 6, - PVRSRV_ERROR_TILE_MAP_FAILED = 7, - PVRSRV_ERROR_INIT_FAILURE = 8, - PVRSRV_ERROR_CANT_REGISTER_CALLBACK = 9, - PVRSRV_ERROR_INVALID_DEVICE = 10, - PVRSRV_ERROR_NOT_OWNER = 11, - PVRSRV_ERROR_BAD_MAPPING = 12, - PVRSRV_ERROR_TIMEOUT = 13, - PVRSRV_ERROR_NO_PRIMARY = 14, - PVRSRV_ERROR_FLIP_CHAIN_EXISTS = 15, - PVRSRV_ERROR_CANNOT_ACQUIRE_SYSDATA = 16, - PVRSRV_ERROR_SCENE_INVALID = 17, - PVRSRV_ERROR_STREAM_ERROR = 18, - PVRSRV_ERROR_INVALID_INTERRUPT = 19, - PVRSRV_ERROR_FAILED_DEPENDENCIES = 20, - PVRSRV_ERROR_CMD_NOT_PROCESSED = 21, - PVRSRV_ERROR_CMD_TOO_BIG = 22, - PVRSRV_ERROR_DEVICE_REGISTER_FAILED = 23, - PVRSRV_ERROR_FIFO_SPACE = 24, - PVRSRV_ERROR_TA_RECOVERY = 25, - PVRSRV_ERROR_INDOSORLOWPOWER = 26, - PVRSRV_ERROR_TOOMANYBUFFERS = 27, - PVRSRV_ERROR_NOT_SUPPORTED = 28, - PVRSRV_ERROR_PROCESSING_BLOCKED = 29, - - - PVRSRV_ERROR_CANNOT_FLUSH_QUEUE = 31, - PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE = 32, - PVRSRV_ERROR_CANNOT_GET_RENDERDETAILS = 33, - PVRSRV_ERROR_RETRY = 34, - - PVRSRV_ERROR_DDK_VERSION_MISMATCH = 35, - PVRSRV_ERROR_BUILD_MISMATCH = 36, + 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_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_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_FORCE_I32 = 0x7fffffff @@ -89,7 +274,6 @@ typedef enum _PVRSRV_DEVICE_CLASS_ } PVRSRV_DEVICE_CLASS; - typedef enum _PVRSRV_SYS_POWER_STATE_ { PVRSRV_SYS_POWER_STATE_Unspecified = -1, @@ -133,251 +317,269 @@ typedef PVRSRV_ERROR (*PFN_POST_CLOCKSPEED_CHANGE) (IMG_HANDLE hDevHandle, 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, - PVRSRV_PIXEL_FORMAT_XBGR8888, - PVRSRV_PIXEL_FORMAT_BGRA8888, - PVRSRV_PIXEL_FORMAT_XRGB4444, - PVRSRV_PIXEL_FORMAT_ARGB8332, - PVRSRV_PIXEL_FORMAT_A2RGB10, - PVRSRV_PIXEL_FORMAT_A2BGR10, - PVRSRV_PIXEL_FORMAT_P8, - PVRSRV_PIXEL_FORMAT_L8, - PVRSRV_PIXEL_FORMAT_A8L8, - PVRSRV_PIXEL_FORMAT_A4L4, - PVRSRV_PIXEL_FORMAT_L16, - PVRSRV_PIXEL_FORMAT_L6V5U5, - PVRSRV_PIXEL_FORMAT_V8U8, - PVRSRV_PIXEL_FORMAT_V16U16, - PVRSRV_PIXEL_FORMAT_QWVU8888, - PVRSRV_PIXEL_FORMAT_XLVU8888, - PVRSRV_PIXEL_FORMAT_QWVU16, - PVRSRV_PIXEL_FORMAT_D16, - PVRSRV_PIXEL_FORMAT_D24S8, - PVRSRV_PIXEL_FORMAT_D24X8, - - - PVRSRV_PIXEL_FORMAT_ABGR16, - PVRSRV_PIXEL_FORMAT_ABGR16F, - PVRSRV_PIXEL_FORMAT_ABGR32, - PVRSRV_PIXEL_FORMAT_ABGR32F, - PVRSRV_PIXEL_FORMAT_B10GR11, - PVRSRV_PIXEL_FORMAT_GR88, - PVRSRV_PIXEL_FORMAT_BGR32, - PVRSRV_PIXEL_FORMAT_GR32, - PVRSRV_PIXEL_FORMAT_E5BGR9, - - - PVRSRV_PIXEL_FORMAT_DXT1, - PVRSRV_PIXEL_FORMAT_DXT2, - PVRSRV_PIXEL_FORMAT_DXT3, - PVRSRV_PIXEL_FORMAT_DXT4, - PVRSRV_PIXEL_FORMAT_DXT5, - - - PVRSRV_PIXEL_FORMAT_R8G8_B8G8, - PVRSRV_PIXEL_FORMAT_G8R8_G8B8, - - - PVRSRV_PIXEL_FORMAT_NV11, - PVRSRV_PIXEL_FORMAT_NV12, - - - PVRSRV_PIXEL_FORMAT_YUY2, - PVRSRV_PIXEL_FORMAT_YUV420, - PVRSRV_PIXEL_FORMAT_YUV444, - PVRSRV_PIXEL_FORMAT_VUY444, - PVRSRV_PIXEL_FORMAT_YUYV, - PVRSRV_PIXEL_FORMAT_YVYU, - PVRSRV_PIXEL_FORMAT_UYVY, - PVRSRV_PIXEL_FORMAT_VYUY, - - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YVYU, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_VYUY, - PVRSRV_PIXEL_FORMAT_FOURCC_ORG_AYUV, - - - PVRSRV_PIXEL_FORMAT_A32B32G32R32, - PVRSRV_PIXEL_FORMAT_A32B32G32R32F, - PVRSRV_PIXEL_FORMAT_A32B32G32R32_UINT, - PVRSRV_PIXEL_FORMAT_A32B32G32R32_SINT, - - - PVRSRV_PIXEL_FORMAT_B32G32R32, - PVRSRV_PIXEL_FORMAT_B32G32R32F, - PVRSRV_PIXEL_FORMAT_B32G32R32_UINT, - PVRSRV_PIXEL_FORMAT_B32G32R32_SINT, - - - PVRSRV_PIXEL_FORMAT_G32R32, - PVRSRV_PIXEL_FORMAT_G32R32F, - PVRSRV_PIXEL_FORMAT_G32R32_UINT, - PVRSRV_PIXEL_FORMAT_G32R32_SINT, - - - PVRSRV_PIXEL_FORMAT_D32F, - PVRSRV_PIXEL_FORMAT_R32, - PVRSRV_PIXEL_FORMAT_R32F, - PVRSRV_PIXEL_FORMAT_R32_UINT, - PVRSRV_PIXEL_FORMAT_R32_SINT, - - - PVRSRV_PIXEL_FORMAT_A16B16G16R16, - PVRSRV_PIXEL_FORMAT_A16B16G16R16F, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_SINT, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_SNORM, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_UINT, - PVRSRV_PIXEL_FORMAT_A16B16G16R16_UNORM, - - - PVRSRV_PIXEL_FORMAT_G16R16, - PVRSRV_PIXEL_FORMAT_G16R16F, - PVRSRV_PIXEL_FORMAT_G16R16_UINT, - PVRSRV_PIXEL_FORMAT_G16R16_UNORM, - PVRSRV_PIXEL_FORMAT_G16R16_SINT, - PVRSRV_PIXEL_FORMAT_G16R16_SNORM, - - - PVRSRV_PIXEL_FORMAT_R16, - PVRSRV_PIXEL_FORMAT_R16F, - PVRSRV_PIXEL_FORMAT_R16_UINT, - PVRSRV_PIXEL_FORMAT_R16_UNORM, - PVRSRV_PIXEL_FORMAT_R16_SINT, - PVRSRV_PIXEL_FORMAT_R16_SNORM, - - - PVRSRV_PIXEL_FORMAT_X8R8G8B8, - PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM, - PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM_SRGB, - - PVRSRV_PIXEL_FORMAT_A8R8G8B8, - PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM, - PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM_SRGB, - - PVRSRV_PIXEL_FORMAT_A8B8G8R8, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UINT, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM_SRGB, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_SINT, - PVRSRV_PIXEL_FORMAT_A8B8G8R8_SNORM, - - - PVRSRV_PIXEL_FORMAT_G8R8, - PVRSRV_PIXEL_FORMAT_G8R8_UINT, - PVRSRV_PIXEL_FORMAT_G8R8_UNORM, - PVRSRV_PIXEL_FORMAT_G8R8_SINT, - PVRSRV_PIXEL_FORMAT_G8R8_SNORM, - - - PVRSRV_PIXEL_FORMAT_A8, - PVRSRV_PIXEL_FORMAT_R8, - PVRSRV_PIXEL_FORMAT_R8_UINT, - PVRSRV_PIXEL_FORMAT_R8_UNORM, - PVRSRV_PIXEL_FORMAT_R8_SINT, - PVRSRV_PIXEL_FORMAT_R8_SNORM, - - - PVRSRV_PIXEL_FORMAT_A2B10G10R10, - PVRSRV_PIXEL_FORMAT_A2B10G10R10_UNORM, - PVRSRV_PIXEL_FORMAT_A2B10G10R10_UINT, - - - PVRSRV_PIXEL_FORMAT_B10G11R11, - PVRSRV_PIXEL_FORMAT_B10G11R11F, - - - PVRSRV_PIXEL_FORMAT_X24G8R32, - PVRSRV_PIXEL_FORMAT_G8R24, - PVRSRV_PIXEL_FORMAT_X8R24, - PVRSRV_PIXEL_FORMAT_E5B9G9R9, - PVRSRV_PIXEL_FORMAT_R1, - - PVRSRV_PIXEL_FORMAT_BC1, - PVRSRV_PIXEL_FORMAT_BC1_UNORM, - PVRSRV_PIXEL_FORMAT_BC1_SRGB, - PVRSRV_PIXEL_FORMAT_BC2, - PVRSRV_PIXEL_FORMAT_BC2_UNORM, - PVRSRV_PIXEL_FORMAT_BC2_SRGB, - PVRSRV_PIXEL_FORMAT_BC3, - PVRSRV_PIXEL_FORMAT_BC3_UNORM, - PVRSRV_PIXEL_FORMAT_BC3_SRGB, - PVRSRV_PIXEL_FORMAT_BC4, - PVRSRV_PIXEL_FORMAT_BC4_UNORM, - PVRSRV_PIXEL_FORMAT_BC4_SNORM, - PVRSRV_PIXEL_FORMAT_BC5, - PVRSRV_PIXEL_FORMAT_BC5_UNORM, - PVRSRV_PIXEL_FORMAT_BC5_SNORM, - - - PVRSRV_PIXEL_FORMAT_L_F16, - PVRSRV_PIXEL_FORMAT_L_F16_REP, - PVRSRV_PIXEL_FORMAT_L_F16_A_F16, - PVRSRV_PIXEL_FORMAT_A_F16, - PVRSRV_PIXEL_FORMAT_B16G16R16F, - - PVRSRV_PIXEL_FORMAT_L_F32, - PVRSRV_PIXEL_FORMAT_A_F32, - PVRSRV_PIXEL_FORMAT_L_F32_A_F32, - - - PVRSRV_PIXEL_FORMAT_PVRTC2, - PVRSRV_PIXEL_FORMAT_PVRTC4, - PVRSRV_PIXEL_FORMAT_PVRTCII2, - PVRSRV_PIXEL_FORMAT_PVRTCII4, - PVRSRV_PIXEL_FORMAT_PVRTCIII, - PVRSRV_PIXEL_FORMAT_PVRO8, - PVRSRV_PIXEL_FORMAT_PVRO88, - PVRSRV_PIXEL_FORMAT_PT1, - PVRSRV_PIXEL_FORMAT_PT2, - PVRSRV_PIXEL_FORMAT_PT4, - PVRSRV_PIXEL_FORMAT_PT8, - PVRSRV_PIXEL_FORMAT_PTW, - PVRSRV_PIXEL_FORMAT_PTB, - PVRSRV_PIXEL_FORMAT_MONO8, - PVRSRV_PIXEL_FORMAT_MONO16, - - - PVRSRV_PIXEL_FORMAT_C0_YUYV, - PVRSRV_PIXEL_FORMAT_C0_UYVY, - PVRSRV_PIXEL_FORMAT_C0_YVYU, - PVRSRV_PIXEL_FORMAT_C0_VYUY, - PVRSRV_PIXEL_FORMAT_C1_YUYV, - PVRSRV_PIXEL_FORMAT_C1_UYVY, - PVRSRV_PIXEL_FORMAT_C1_YVYU, - PVRSRV_PIXEL_FORMAT_C1_VYUY, - - - PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_UV, - PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_VU, - PVRSRV_PIXEL_FORMAT_C0_YUV420_3P, - PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_UV, - PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_VU, - PVRSRV_PIXEL_FORMAT_C1_YUV420_3P, - - PVRSRV_PIXEL_FORMAT_A2B10G10R10F, - PVRSRV_PIXEL_FORMAT_B8G8R8_SINT, - PVRSRV_PIXEL_FORMAT_PVRF32SIGNMASK, - - PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff, + 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_FORCE_I32 = 0x7fffffff + } PVRSRV_PIXEL_FORMAT; typedef enum _PVRSRV_ALPHA_FORMAT_ { @@ -417,7 +619,7 @@ typedef struct _PVRSRV_SYNC_DATA_ IMG_UINT32 ui32ReadOpsPending; volatile IMG_UINT32 ui32ReadOpsComplete; - + IMG_UINT32 ui32LastOpDumpVal; IMG_UINT32 ui32LastReadOpDumpVal; @@ -443,11 +645,10 @@ typedef struct _PVRSRV_CLIENT_SYNC_INFO_ IMG_HANDLE hKernelSyncInfo; - -} PVRSRV_CLIENT_SYNC_INFO, *PPVRSRV_CLIENT_SYNC_INFO; +} PVRSRV_CLIENT_SYNC_INFO, *PPVRSRV_CLIENT_SYNC_INFO; -typedef struct PVRSRV_RESOURCE_TAG +typedef struct PVRSRV_RESOURCE_TAG { volatile IMG_UINT32 ui32Lock; IMG_UINT32 ui32ID; @@ -458,34 +659,35 @@ 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 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_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_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*); +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 @@ -529,21 +731,24 @@ typedef struct DISPLAY_MODE_INFO_TAG 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 @@ -554,7 +759,7 @@ typedef struct ACCESS_INFO_TAG IMG_UINT32 ui32SysPhysBaseAddress; IMG_UINT32 ui32SysSize; IMG_UINT32 ui32DevIRQ; -}ACCESS_INFO; +}ACCESS_INFO; typedef struct PVRSRV_CURSOR_SHAPE_TAG @@ -563,15 +768,15 @@ typedef struct PVRSRV_CURSOR_SHAPE_TAG IMG_UINT16 ui16Height; IMG_INT16 i16XHot; IMG_INT16 i16YHot; - + IMG_VOID* pvMask; IMG_INT16 i16MaskByteStride; - + IMG_VOID* pvColour; IMG_INT16 i16ColourByteStride; - PVRSRV_PIXEL_FORMAT eColourPixelFormat; + PVRSRV_PIXEL_FORMAT eColourPixelFormat; } PVRSRV_CURSOR_SHAPE; #define PVRSRV_SET_CURSOR_VISIBILITY (1<<0) @@ -583,20 +788,20 @@ typedef struct PVRSRV_CURSOR_INFO_TAG { IMG_UINT32 ui32Flags; - + IMG_BOOL bVisible; - + IMG_INT16 i16XPos; IMG_INT16 i16YPos; - + PVRSRV_CURSOR_SHAPE sCursorShape; - + IMG_UINT32 ui32Rotation; - + } PVRSRV_CURSOR_INFO; @@ -620,6 +825,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVWriteRegistryString (PPVRSRV_REGISTRY_INFO psReg #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; @@ -629,6 +836,7 @@ typedef struct BUFFER_INFO_TAG IMG_UINT32 ui32Width; IMG_UINT32 ui32Height; IMG_UINT32 ui32Flags; + IMG_CHAR szDeviceName[MAX_BUFFER_DEVICE_NAME_SIZE]; } BUFFER_INFO; typedef enum _OVERLAY_DEINTERLACE_MODE_ diff --git a/include4/sgx_options.h b/include4/sgx_options.h index c6af88e..6f91894 100644 --- a/include4/sgx_options.h +++ b/include4/sgx_options.h @@ -24,7 +24,7 @@ * ******************************************************************************/ -#if defined(DEBUG_PVR) || defined (INTERNAL_TEST) +#if defined(DEBUG) || defined (INTERNAL_TEST) #define DEBUG_SET_OFFSET OPTIONS_BIT0 #define OPTIONS_BIT0 0x1 #else @@ -82,7 +82,7 @@ #define OPTIONS_BIT8 0x0 #endif -#if defined(SGX_FEATURE_DCU) || defined (INTERNAL_TEST) +#if defined(SGX_FEATURE_WRITEBACK_DCU) || defined (INTERNAL_TEST) #define SGX_FEATURE_DCU_SET_OFFSET OPTIONS_BIT9 #define OPTIONS_BIT9 (0x1 << 9) #else @@ -173,7 +173,7 @@ #define OPTIONS_BIT20 0x0 #endif -#if defined(SGX_LOW_LATENCY_SCHEDULING) || defined (INTERNAL_TEST) +#if defined(SUPPORT_SGX_LOW_LATENCY_SCHEDULING) || defined (INTERNAL_TEST) #define SUPPORT_SGX_LOW_LATENCY_SCHEDULING_SET_OFFSET OPTIONS_BIT21 #define OPTIONS_BIT21 (0x1 << 21) #else @@ -220,5 +220,6 @@ OPTIONS_BIT19 |\ OPTIONS_BIT20 |\ OPTIONS_BIT21 |\ + OPTIONS_BIT22 |\ OPTIONS_HIGHBYTE diff --git a/include4/sgxapi_km.h b/include4/sgxapi_km.h index 40c7d88..db376b6 100644 --- a/include4/sgxapi_km.h +++ b/include4/sgxapi_km.h @@ -64,25 +64,30 @@ extern "C" { #endif #define SGX_MAX_HEAP_ID 13 +#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 3 +#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 -#if defined(ANDROID) -#define SGX_MAX_SRC_SYNCS 8 -#else #define SGX_MAX_SRC_SYNCS 4 -#endif +#define SGX_MAX_DST_SYNCS 1 #endif -#ifdef SUPPORT_SGX_HWPERF +#if defined(SGX_FEATURE_EXTENDED_PERF_COUNTERS) +#define PVRSRV_SGX_HWPERF_NUM_COUNTERS 8 +#else #define PVRSRV_SGX_HWPERF_NUM_COUNTERS 9 +#endif #define PVRSRV_SGX_HWPERF_INVALID 0x1 @@ -90,6 +95,8 @@ extern "C" { #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_MK_EVENT 0x101 #define PVRSRV_SGX_HWPERF_MK_TA 0x102 @@ -109,6 +116,9 @@ extern "C" { #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_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) @@ -119,9 +129,11 @@ extern "C" { #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_OFF (0x0) -#define PVRSRV_SGX_HWPERF_GRAPHICS_ON (1UL << 0) -#define PVRSRV_SGX_HWPERF_MK_EXECUTION_ON (1UL << 1) +#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_ @@ -129,34 +141,12 @@ typedef struct _PVRSRV_SGX_HWPERF_CB_ENTRY_ IMG_UINT32 ui32FrameNo; IMG_UINT32 ui32Type; IMG_UINT32 ui32Ordinal; + IMG_UINT32 ui32Info; IMG_UINT32 ui32Clocksx16; - IMG_UINT32 ui32Counters[PVRSRV_SGX_HWPERF_NUM_COUNTERS]; + IMG_UINT32 ui32Counters[SGX_FEATURE_MP_CORE_COUNT][PVRSRV_SGX_HWPERF_NUM_COUNTERS]; } PVRSRV_SGX_HWPERF_CB_ENTRY; -typedef struct _PVRSRV_SGX_HWPERF_CBDATA_ -{ - IMG_UINT32 ui32FrameNo; - IMG_UINT32 ui32Type; - IMG_UINT32 ui32StartTimeWraps; - IMG_UINT32 ui32StartTime; - IMG_UINT32 ui32EndTimeWraps; - IMG_UINT32 ui32EndTime; - IMG_UINT32 ui32ClockSpeed; - IMG_UINT32 ui32TimeMax; -} PVRSRV_SGX_HWPERF_CBDATA; - - -typedef struct _SGX_MISC_INFO_HWPERF_RETRIEVE_CB -{ - PVRSRV_SGX_HWPERF_CBDATA* psHWPerfData; - IMG_UINT32 ui32ArraySize; - IMG_UINT32 ui32DataCount; - IMG_UINT32 ui32Time; -} SGX_MISC_INFO_HWPERF_RETRIEVE_CB; -#endif - - typedef struct _CTL_STATUS_ { IMG_DEV_VIRTADDR sStatusDevAddr; @@ -171,18 +161,20 @@ typedef enum _SGX_MISC_INFO_REQUEST_ SGX_MISC_INFO_REQUEST_DRIVER_SGXREV, #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) SGX_MISC_INFO_REQUEST_MEMREAD, -#endif -#if defined(SUPPORT_SGX_HWPERF) - SGX_MISC_INFO_REQUEST_SET_HWPERF_STATUS, - SGX_MISC_INFO_REQUEST_HWPERF_CB_ON, - SGX_MISC_INFO_REQUEST_HWPERF_CB_OFF, - SGX_MISC_INFO_REQUEST_HWPERF_RETRIEVE_CB, + 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_WAIT_FOR_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; @@ -199,28 +191,87 @@ typedef struct _PVRSRV_SGX_MISCINFO_FEATURES #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_UINT32 ui32BPIndex; + IMG_DEV_VIRTADDR sBPDevVAddr, sBPDevVAddrEnd; + + IMG_BOOL bTrapped; + + IMG_BOOL bRead; + + IMG_BOOL bWrite; + + IMG_BOOL bTrappedBP; - IMG_DEV_VIRTADDR sBPDevVAddr; + 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; #if defined(SUPPORT_SGX_EDM_MEMORY_DEBUG) - IMG_DEV_VIRTADDR sDevVAddr; + IMG_DEV_VIRTADDR sDevVAddrSrc; + IMG_DEV_VIRTADDR sDevVAddrDest; IMG_HANDLE hDevMemContext; #endif union @@ -228,13 +279,13 @@ typedef struct _SGX_MISC_INFO_ 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 -#ifdef SUPPORT_SGX_HWPERF - IMG_UINT32 ui32NewHWPerfStatus; - SGX_MISC_INFO_HWPERF_RETRIEVE_CB sRetrieveCB; -#endif + PVRSRV_SGX_MISCINFO_SET_HWPERF_STATUS sSetHWPerfStatus; } uData; } SGX_MISC_INFO; @@ -315,7 +366,7 @@ typedef struct _SGX_KICKTA_PDUMP_ #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_STATUS_VALS 2 #define SGX_MAX_TRANSFER_SYNC_OPS 5 #endif diff --git a/services4/3rdparty/bufferclass_example/bufferclass_example.c b/services4/3rdparty/bufferclass_example/bufferclass_example.c index c32bf3c..0754c51 100644 --- a/services4/3rdparty/bufferclass_example/bufferclass_example.c +++ b/services4/3rdparty/bufferclass_example/bufferclass_example.c @@ -24,9 +24,18 @@ * ******************************************************************************/ +#if defined(__linux__) +#include +#else +#include +#endif + #include "bufferclass_example.h" + +#define BUFFERCLASS_DEVICE_NAME "Example Bufferclass Device (SW)" + static void *gpvAnchor = NULL; static PFN_BC_GET_PVRJTABLE pfnGetPVRJTable = IMG_NULL; @@ -41,9 +50,14 @@ static void SetAnchorPtr(BC_EXAMPLE_DEVINFO *psDevInfo) } -static PVRSRV_ERROR OpenBCDevice(IMG_HANDLE *phDevice) +static PVRSRV_ERROR OpenBCDevice(IMG_UINT32 ui32DeviceID, IMG_HANDLE *phDevice) { BC_EXAMPLE_DEVINFO *psDevInfo; + + + + + UNREFERENCED_PARAMETER(ui32DeviceID); psDevInfo = GetAnchorPtr(); @@ -54,8 +68,9 @@ static PVRSRV_ERROR OpenBCDevice(IMG_HANDLE *phDevice) } -static PVRSRV_ERROR CloseBCDevice(IMG_HANDLE hDevice) +static PVRSRV_ERROR CloseBCDevice(IMG_UINT32 ui32DeviceID, IMG_HANDLE hDevice) { + UNREFERENCED_PARAMETER(ui32DeviceID); UNREFERENCED_PARAMETER(hDevice); return (PVRSRV_OK); @@ -112,10 +127,13 @@ static PVRSRV_ERROR GetBCBufferAddr(IMG_HANDLE hDevice, IMG_UINT32 *pui32ByteSize, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMapInfo, - IMG_BOOL *pbIsContiguous) + IMG_BOOL *pbIsContiguous, + IMG_UINT32 *pui32TilingStride) { BC_EXAMPLE_BUFFER *psBuffer; + PVR_UNREFERENCED_PARAMETER(pui32TilingStride); + if(!hDevice || !hBuffer || !ppsSysAddr || !pui32ByteSize) { return (PVRSRV_ERROR_INVALID_PARAMS); @@ -123,13 +141,18 @@ static PVRSRV_ERROR GetBCBufferAddr(IMG_HANDLE hDevice, psBuffer = (BC_EXAMPLE_BUFFER *) hBuffer; - *ppsSysAddr = &psBuffer->sPageAlignSysAddr; *ppvCpuVAddr = psBuffer->sCPUVAddr; + *phOSMapInfo = IMG_NULL; *pui32ByteSize = (IMG_UINT32)psBuffer->ulSize; - *phOSMapInfo = IMG_NULL; +#if defined(BC_DISCONTIG_BUFFERS) + *ppsSysAddr = psBuffer->psSysAddr; + *pbIsContiguous = IMG_FALSE; +#else + *ppsSysAddr = &psBuffer->sPageAlignSysAddr; *pbIsContiguous = IMG_TRUE; +#endif return (PVRSRV_OK); } @@ -202,6 +225,8 @@ BCE_ERROR BC_Example_Register(void) psDevInfo->sBufferInfo.ui32BufferDeviceID = BC_EXAMPLE_DEVICEID; psDevInfo->sBufferInfo.ui32Flags = 0; psDevInfo->sBufferInfo.ui32BufferCount = (IMG_UINT32)psDevInfo->ulNumBuffers; + + strncpy(psDevInfo->sBufferInfo.szDeviceName, BUFFERCLASS_DEVICE_NAME, MAX_BUFFER_DEVICE_NAME_SIZE); @@ -216,7 +241,7 @@ BCE_ERROR BC_Example_Register(void) if(psDevInfo->sPVRJTable.pfnPVRSRVRegisterBCDevice (&psDevInfo->sBCJTable, - &psDevInfo->ulDeviceID ) != PVRSRV_OK) + (IMG_UINT32*)&psDevInfo->ulDeviceID ) != PVRSRV_OK) { return (BCE_ERROR_DEVICE_REGISTER_FAILED); } @@ -281,8 +306,10 @@ BCE_ERROR BC_Example_Unregister(void) BCE_ERROR BC_Example_Buffers_Create(void) { BC_EXAMPLE_DEVINFO *psDevInfo; - IMG_CPU_PHYADDR sSystemBufferCPUPAddr; unsigned long i; +#if !defined(BC_DISCONTIG_BUFFERS) + IMG_CPU_PHYADDR sSystemBufferCPUPAddr; +#endif @@ -315,7 +342,24 @@ BCE_ERROR BC_Example_Buffers_Create(void) ulSize += ((BC_EXAMPLE_STRIDE >> 1) * (BC_EXAMPLE_HEIGHT >> 1) << 1); } + else if(psDevInfo->sBufferInfo.pixelformat == PVRSRV_PIXEL_FORMAT_I420) + { + + ulSize += (BC_EXAMPLE_STRIDE >> 1) * (BC_EXAMPLE_HEIGHT >> 1); + + + ulSize += (BC_EXAMPLE_STRIDE >> 1) * (BC_EXAMPLE_HEIGHT >> 1); + } +#if defined(BC_DISCONTIG_BUFFERS) + if (BCAllocDiscontigMemory(ulSize, + &psDevInfo->psSystemBuffer[i].hMemHandle, + &psDevInfo->psSystemBuffer[i].sCPUVAddr, + &psDevInfo->psSystemBuffer[i].psSysAddr) != BCE_OK) + { + break; + } +#else if (BCAllocContigMemory(ulSize, &psDevInfo->psSystemBuffer[i].hMemHandle, @@ -324,12 +368,13 @@ BCE_ERROR BC_Example_Buffers_Create(void) { break; } + psDevInfo->psSystemBuffer[i].sSysAddr = CpuPAddrToSysPAddrBC(sSystemBufferCPUPAddr); + psDevInfo->psSystemBuffer[i].sPageAlignSysAddr.uiAddr = (psDevInfo->psSystemBuffer[i].sSysAddr.uiAddr & 0xFFFFF000); +#endif psDevInfo->ulNumBuffers++; psDevInfo->psSystemBuffer[i].ulSize = ulSize; - psDevInfo->psSystemBuffer[i].sSysAddr = CpuPAddrToSysPAddrBC(sSystemBufferCPUPAddr); - psDevInfo->psSystemBuffer[i].sPageAlignSysAddr.uiAddr = (psDevInfo->psSystemBuffer[i].sSysAddr.uiAddr & 0xFFFFF000); psDevInfo->psSystemBuffer[i].psSyncData = NULL; } @@ -367,10 +412,17 @@ BCE_ERROR BC_Example_Buffers_Destroy(void) for(i = 0; i < psDevInfo->ulNumBuffers; i++) { +#if defined(BC_DISCONTIG_BUFFERS) + BCFreeDiscontigMemory(psDevInfo->psSystemBuffer[i].ulSize, + psDevInfo->psSystemBuffer[i].hMemHandle, + psDevInfo->psSystemBuffer[i].sCPUVAddr, + psDevInfo->psSystemBuffer[i].psSysAddr); +#else BCFreeContigMemory(psDevInfo->psSystemBuffer[i].ulSize, psDevInfo->psSystemBuffer[i].hMemHandle, psDevInfo->psSystemBuffer[i].sCPUVAddr, SysPAddrToCpuPAddrBC(psDevInfo->psSystemBuffer[i].sSysAddr)); +#endif } psDevInfo->ulNumBuffers = 0; diff --git a/services4/3rdparty/bufferclass_example/bufferclass_example.h b/services4/3rdparty/bufferclass_example/bufferclass_example.h index 1791dd0..84182db 100644 --- a/services4/3rdparty/bufferclass_example/bufferclass_example.h +++ b/services4/3rdparty/bufferclass_example/bufferclass_example.h @@ -35,18 +35,24 @@ extern "C" { #endif -extern IMG_IMPORT IMG_BOOL PVRGetBufferClassJTable(PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable); - #define BC_EXAMPLE_NUM_BUFFERS 3 -#define YUV420 1 -#ifdef YUV420 +#define NV12 1 +#ifdef NV12 #define BC_EXAMPLE_WIDTH (320) #define BC_EXAMPLE_HEIGHT (160) #define BC_EXAMPLE_STRIDE (320) #define BC_EXAMPLE_PIXELFORMAT (PVRSRV_PIXEL_FORMAT_NV12) +#else +#ifdef I420 + +#define BC_EXAMPLE_WIDTH (320) +#define BC_EXAMPLE_HEIGHT (160) +#define BC_EXAMPLE_STRIDE (320) +#define BC_EXAMPLE_PIXELFORMAT (PVRSRV_PIXEL_FORMAT_I420) + #else #ifdef YUV422 @@ -62,6 +68,7 @@ extern IMG_IMPORT IMG_BOOL PVRGetBufferClassJTable(PVRSRV_BC_BUFFER2SRV_KMJTABLE #define BC_EXAMPLE_STRIDE (320*2) #define BC_EXAMPLE_PIXELFORMAT (PVRSRV_PIXEL_FORMAT_RGB565) +#endif #endif #endif @@ -82,8 +89,12 @@ typedef struct BC_EXAMPLE_BUFFER_TAG - IMG_SYS_PHYADDR sSysAddr; +#if defined(BC_DISCONTIG_BUFFERS) + IMG_SYS_PHYADDR *psSysAddr; +#else + IMG_SYS_PHYADDR sSysAddr; IMG_SYS_PHYADDR sPageAlignSysAddr; +#endif IMG_CPU_VIRTADDR sCPUVAddr; PVRSRV_SYNC_DATA *psSyncData; @@ -156,6 +167,18 @@ BCE_ERROR BCClosePVRServices(BCE_HANDLE hPVRServices); void *BCAllocKernelMem(unsigned long ulSize); void BCFreeKernelMem(void *pvMem); +#if defined(BC_DISCONTIG_BUFFERS) +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); + +#else BCE_ERROR BCAllocContigMemory(unsigned long ulSize, BCE_HANDLE *phMemHandle, @@ -166,6 +189,7 @@ void BCFreeContigMemory(unsigned long ulSize, BCE_HANDLE hMemHandle, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr); +#endif IMG_SYS_PHYADDR CpuPAddrToSysPAddrBC(IMG_CPU_PHYADDR cpu_paddr); IMG_CPU_PHYADDR SysPAddrToCpuPAddrBC(IMG_SYS_PHYADDR sys_paddr); diff --git a/services4/3rdparty/bufferclass_example/bufferclass_example_linux.c b/services4/3rdparty/bufferclass_example/bufferclass_example_linux.c index e88764d..08a9072 100644 --- a/services4/3rdparty/bufferclass_example/bufferclass_example_linux.c +++ b/services4/3rdparty/bufferclass_example/bufferclass_example_linux.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,8 @@ #include "bufferclass_example.h" #include "bufferclass_example_linux.h" +#include "bufferclass_example_private.h" + #include "pvrmodule.h" #define DEVNAME "bc_example" @@ -56,8 +59,10 @@ MODULE_SUPPORTED_DEVICE(DEVNAME); int BC_Example_Bridge(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); -int FillBuffer(unsigned int uiBufferIndex); -int GetBufferCount(unsigned int *puiBufferCount); + +#if defined(LDM_PLATFORM) || defined(LDM_PCI) +static struct class *psPvrClass; +#endif static int AssignedMajorNumber; @@ -78,6 +83,8 @@ unsigned long g_ulMemCurrent = 0; #define VENDOR_ID_PVR 0x1010 #define DEVICE_ID_PVR 0x1CF1 +#define DEVICE_ID1_PVR 0x1CF2 + #define PVR_MEM_PCI_BASENUM 2 #endif @@ -85,6 +92,10 @@ unsigned long g_ulMemCurrent = 0; static int __init BC_Example_ModInit(void) { +#if defined(LDM_PLATFORM) || defined(LDM_PCI) + struct device *psDev; +#endif + #if defined(LMA) struct pci_dev *psPCIDev; int error; @@ -92,6 +103,12 @@ static int __init BC_Example_ModInit(void) #if defined(LMA) psPCIDev = pci_get_device(VENDOR_ID_PVR, DEVICE_ID_PVR, NULL); + if (psPCIDev == NULL) + { + + psPCIDev = pci_get_device(VENDOR_ID_PVR, DEVICE_ID1_PVR, NULL); + } + if (psPCIDev == NULL) { printk(KERN_ERR DRVNAME ": BC_Example_ModInit: pci_get_device failed\n"); @@ -119,6 +136,28 @@ static int __init BC_Example_ModInit(void) printk(KERN_ERR DRVNAME ": BC_Example_ModInit: major device %d\n", AssignedMajorNumber); #endif +#if defined(LDM_PLATFORM) || defined(LDM_PCI) + + psPvrClass = class_create(THIS_MODULE, "bc_example"); + + if (IS_ERR(psPvrClass)) + { + printk(KERN_ERR DRVNAME ": BC_Example_ModInit: unable to create class (%ld)", PTR_ERR(psPvrClass)); + goto ExitUnregister; + } + + psDev = device_create(psPvrClass, NULL, MKDEV(AssignedMajorNumber, 0), +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) + NULL, +#endif + DEVNAME); + if (IS_ERR(psDev)) + { + printk(KERN_ERR DRVNAME ": BC_Example_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; @@ -137,6 +176,10 @@ static int __init BC_Example_ModInit(void) return 0; +#if defined(LDM_PLATFORM) || defined(LDM_PCI) +ExitDestroyClass: + class_destroy(psPvrClass); +#endif ExitUnregister: unregister_chrdev(AssignedMajorNumber, DEVNAME); ExitDisable: @@ -149,6 +192,11 @@ ExitError: static void __exit BC_Example_ModCleanup(void) { +#if defined(LDM_PLATFORM) || defined(LDM_PCI) + device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0)); + class_destroy(psPvrClass); +#endif + unregister_chrdev(AssignedMajorNumber, DEVNAME); if(BC_Example_Deinit() != BCE_OK) @@ -169,6 +217,59 @@ void BCFreeKernelMem(void *pvMem) kfree(pvMem); } +#if defined(BC_DISCONTIG_BUFFERS) + +#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); +} +#else + BCE_ERROR BCAllocContigMemory(unsigned long ulSize, BCE_HANDLE unref__ *phMemHandle, IMG_CPU_VIRTADDR *pLinAddr, @@ -259,6 +360,7 @@ void BCFreeContigMemory(unsigned long ulSize, #endif #endif } +#endif IMG_SYS_PHYADDR CpuPAddrToSysPAddrBC(IMG_CPU_PHYADDR cpu_paddr) { @@ -310,9 +412,9 @@ int BC_Example_Bridge(struct inode *inode, struct file *file, unsigned int cmd, { int err = -EFAULT; int command = _IOC_NR(cmd); - BC_Example_ioctl_package *psBridge = (BC_Example_ioctl_package *)arg; + BC_Example_ioctl_package sBridge; - if(!access_ok(VERIFY_WRITE, psBridge, sizeof(BC_Example_ioctl_package))) + if (copy_from_user(&sBridge, (void *)arg, sizeof(sBridge)) != 0) { return err; } @@ -321,7 +423,7 @@ int BC_Example_Bridge(struct inode *inode, struct file *file, unsigned int cmd, { case _IOC_NR(BC_Example_ioctl_fill_buffer): { - if(FillBuffer(psBridge->inputparam) == -1) + if(FillBuffer(sBridge.inputparam) == -1) { return err; } @@ -329,7 +431,7 @@ int BC_Example_Bridge(struct inode *inode, struct file *file, unsigned int cmd, } case _IOC_NR(BC_Example_ioctl_get_buffer_count): { - if(GetBufferCount(&psBridge->outputparam) == -1) + if(GetBufferCount(&sBridge.outputparam) == -1) { return err; } @@ -339,6 +441,11 @@ int BC_Example_Bridge(struct inode *inode, struct file *file, unsigned int cmd, return err; } + if (copy_to_user((void *)arg, &sBridge, sizeof(sBridge)) != 0) + { + return err; + } + return 0; } diff --git a/services4/3rdparty/bufferclass_example/bufferclass_example_private.c b/services4/3rdparty/bufferclass_example/bufferclass_example_private.c index 721b825..9240170 100644 --- a/services4/3rdparty/bufferclass_example/bufferclass_example_private.c +++ b/services4/3rdparty/bufferclass_example/bufferclass_example_private.c @@ -25,10 +25,11 @@ ******************************************************************************/ #include "bufferclass_example.h" +#include "bufferclass_example_private.h" #define MIN(a,b) ((a)<(b)?(a):(b)) -void FillYUV420Image(void *pvDest, int width, int height, int bytestride) +static void FillNV12Image(void *pvDest, int width, int height, int bytestride) { static int iPhase = 0; int i, j; @@ -39,6 +40,9 @@ void FillYUV420Image(void *pvDest, int width, int height, int bytestride) for(j=0;j>6)%(2)==0)? 0x7f:0x00; @@ -47,11 +51,11 @@ void FillYUV420Image(void *pvDest, int width, int height, int bytestride) } } - pui16uv = (unsigned short *)((unsigned char *)pvDest + (width * height)); - count = 0; - for(j=0;j>6)%(2)==0)? 0x7f:0x00; + + pui8y[count++] = y; + } + } + + for(j=0;j>6)%(2)==0)? 0x7f:0x00; - - pui32yuv[count++] = (y1 << 24) | (v << 16) | (y0 << 8) | u; + switch(pixelformat) + { + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_VYUY: + pui32yuv[count++] = (y1 << 24) | (u << 16) | (y0 << 8) | v; + break; + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY: + pui32yuv[count++] = (y1 << 24) | (v << 16) | (y0 << 8) | u; + break; + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV: + pui32yuv[count++] = (v << 24) | (y1 << 16) | (u << 8) | y0; + break; + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YVYU: + pui32yuv[count++] = (u << 24) | (y1 << 16) | (v << 8) | y0; + break; + + default: + break; + + } } } @@ -92,7 +170,7 @@ void FillYUV422Image(void *pvDest, int width, int height, int bytestride) iPhase++; } -void FillRGB565Image(void *pvDest, int width, int height, int bytestride) +static void FillRGB565Image(void *pvDest, int width, int height, int bytestride) { int i, Count; unsigned long *pui32Addr = (unsigned long *)pvDest; @@ -174,14 +252,22 @@ int FillBuffer(unsigned int uiBufferIndex) FillRGB565Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE); break; } + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_VYUY: case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY: + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV: + case PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YVYU: { - FillYUV422Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE); + FillYUV422Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE, psBufferInfo->pixelformat); break; } case PVRSRV_PIXEL_FORMAT_NV12: { - FillYUV420Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE); + FillNV12Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE); + break; + } + case PVRSRV_PIXEL_FORMAT_I420: + { + FillI420Image(psBuffer->sCPUVAddr, BC_EXAMPLE_WIDTH, BC_EXAMPLE_HEIGHT, BC_EXAMPLE_STRIDE); break; } } @@ -190,6 +276,11 @@ int FillBuffer(unsigned int uiBufferIndex) if(psSyncData) { psSyncData->ui32WriteOpsComplete++; + + if (NULL != psDevInfo->sPVRJTable.pfnPVRSRVScheduleDevices) + { + (*psDevInfo->sPVRJTable.pfnPVRSRVScheduleDevices)(); + } } return 0; diff --git a/services4/3rdparty/bufferclass_example/bufferclass_example_private.h b/services4/3rdparty/bufferclass_example/bufferclass_example_private.h new file mode 100644 index 0000000..40ce1a2 --- /dev/null +++ b/services4/3rdparty/bufferclass_example/bufferclass_example_private.h @@ -0,0 +1,33 @@ +/********************************************************************** + * + * 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 _BUFFERCLASS_EXAMPLE_PRIVATE_H_ +#define _BUFFERCLASS_EXAMPLE_PRIVATE_H_ + +int FillBuffer(unsigned int uiBufferIndex); +int GetBufferCount(unsigned int *puiBufferCount); + +#endif diff --git a/services4/3rdparty/bufferclass_example/kbuild/Makefile b/services4/3rdparty/bufferclass_example/kbuild/Makefile index d0cbc45..7ab0f77 100644 --- a/services4/3rdparty/bufferclass_example/kbuild/Makefile +++ b/services4/3rdparty/bufferclass_example/kbuild/Makefile @@ -24,8 +24,6 @@ # # -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common - MODULE = bc_example INCLUDES = -I$(EURASIAROOT)/include4 \ @@ -39,4 +37,4 @@ SOURCES = ../bufferclass_example.c \ SYM_VERS_DEPS = $(EURASIAROOT)/services4/srvkm/env/linux - +include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/services4/3rdparty/bufferclass_ti/Kbuild b/services4/3rdparty/bufferclass_ti/Kbuild old mode 100755 new mode 100644 index 3dcf003..41efa47 --- a/services4/3rdparty/bufferclass_ti/Kbuild +++ b/services4/3rdparty/bufferclass_ti/Kbuild @@ -2,8 +2,8 @@ EXTRA_CFLAGS = -DLINUX \ -I$(PVR_BUILD_DIR)/include4 \ -I$(PVR_BUILD_DIR)/services4/include -ifeq ($(TI_PLATFORM),ti8168) -EXTRA_CFLAGS += -DPLAT_TI8168 +ifeq ($(TI_PLATFORM),ti81xx) +EXTRA_CFLAGS += -DPLAT_TI81xx endif obj-m := bufferclass_ti.o diff --git a/services4/3rdparty/bufferclass_ti/bc_cat.c b/services4/3rdparty/bufferclass_ti/bc_cat.c index b3786a1..79e7b85 100644 --- a/services4/3rdparty/bufferclass_ti/bc_cat.c +++ b/services4/3rdparty/bufferclass_ti/bc_cat.c @@ -35,14 +35,19 @@ #include #include #include "bc_cat.h" - #include - #include #define DEVNAME "bccat" #define DRVNAME DEVNAME #define DEVICE_COUNT 1 +#define BC_EXAMPLE_NUM_BUFFERS 3 +#define BUFFERCLASS_DEVICE_NAME "Example Bufferclass Device (SW)" + +#ifndef UNREFERENCED_PARAMETER +#define UNREFERENCED_PARAMETER(param) (param) = (param) +#endif + MODULE_SUPPORTED_DEVICE(DEVNAME); @@ -50,10 +55,15 @@ MODULE_SUPPORTED_DEVICE(DEVNAME); typedef struct BC_CAT_BUFFER_TAG { - IMG_UINT32 ui32Size; + unsigned long ulSize; IMG_HANDLE hMemHandle; +#if defined(BC_DISCONTIG_BUFFERS) + IMG_SYS_PHYADDR *psSysAddr; +#else + IMG_SYS_PHYADDR sSysAddr; IMG_SYS_PHYADDR sPageAlignSysAddr; +#endif IMG_CPU_VIRTADDR sCPUVAddr; PVRSRV_SYNC_DATA *psSyncData; struct BC_CAT_BUFFER_TAG *psNext; @@ -61,20 +71,36 @@ typedef struct BC_CAT_BUFFER_TAG typedef struct BC_CAT_DEVINFO_TAG -{ - int ref; - IMG_UINT32 ui32DeviceID; +{ + int ref; + unsigned long ulDeviceID; BC_CAT_BUFFER *psSystemBuffer; - BUFFER_INFO sBufferInfo; - IMG_UINT32 ui32NumBuffers; + unsigned long ulNumBuffers; PVRSRV_BC_BUFFER2SRV_KMJTABLE sPVRJTable; PVRSRV_BC_SRV2BUFFER_KMJTABLE sBCJTable; IMG_HANDLE hPVRServices; - IMG_UINT32 ui32RefCount; + unsigned long ulRefCount; + BUFFER_INFO sBufferInfo; enum BC_memory buf_type; } BC_CAT_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; + + + extern IMG_IMPORT IMG_BOOL PVRGetBufferClassJTable( PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable); @@ -84,7 +110,7 @@ static int bc_release(struct inode *i, struct file *f); static int bc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); #else -static long bc_ioctl(struct file *file, +static int bc_ioctl(struct file *file, unsigned int cmd, unsigned long arg); #endif static int bc_mmap(struct file *filp, struct vm_area_struct *vma); @@ -97,14 +123,14 @@ static PVRSRV_ERROR BC_Unregister(int id); static PVRSRV_ERROR BCOpenPVRServices(IMG_HANDLE *phPVRServices); static PVRSRV_ERROR BCClosePVRServices(IMG_HANDLE hPVRServices); -static IMG_VOID *BCAllocKernelMem(IMG_UINT32 ui32Size); +static IMG_VOID *BCAllocKernelMem(unsigned long ulSize); static IMG_VOID BCFreeKernelMem(IMG_VOID *pvMem); -static PVRSRV_ERROR BCAllocContigMemory(IMG_UINT32 ui32Size, +static PVRSRV_ERROR BCAllocContigMemory(unsigned long ulSize, IMG_HANDLE * phMemHandle, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr); -static IMG_VOID BCFreeContigMemory(IMG_UINT32 ui32Size, +static IMG_VOID BCFreeContigMemory(unsigned long ulSize, IMG_HANDLE hMemHandle, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr); @@ -132,7 +158,7 @@ static struct file_operations bc_cat_fops = { #else .unlocked_ioctl = bc_ioctl, #ifdef CONFIG_COMPAT - .compat_ioctl = bc_ioctl, + .compat_ioctl = bc_ioctl, #endif #endif .mmap = bc_mmap, @@ -169,9 +195,10 @@ static PVRSRV_ERROR OpenBCDevice(IMG_HANDLE *phDevice) #else #define OPEN_FXN(id) \ -static PVRSRV_ERROR OpenBCDevice##id(IMG_HANDLE *phDevice)\ +static PVRSRV_ERROR OpenBCDevice##id(IMG_UINT32 ui32DeviceID, IMG_HANDLE *phDevice)\ { \ BC_CAT_DEVINFO *psDevInfo; \ +UNREFERENCED_PARAMETER(ui32DeviceID); \ psDevInfo = GetAnchorPtr (id); \ *phDevice = (IMG_HANDLE) psDevInfo; \ return PVRSRV_OK; \ @@ -239,20 +266,30 @@ static PVRSRV_ERROR GetBCBufferAddr(IMG_HANDLE hDevice, IMG_UINT32 *pui32ByteSize, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMapInfo, - IMG_BOOL *pbIsContiguous) + IMG_BOOL *pbIsContiguous, + IMG_UINT32 *pui32TilingStride) { BC_CAT_BUFFER *psBuffer; + PVR_UNREFERENCED_PARAMETER(pui32TilingStride); if (!hDevice || !hBuffer || !ppsSysAddr || !pui32ByteSize) return PVRSRV_ERROR_INVALID_PARAMS; psBuffer = (BC_CAT_BUFFER *) hBuffer; - *ppsSysAddr = &psBuffer->sPageAlignSysAddr; - *ppvCpuVAddr = psBuffer->sCPUVAddr; - *pui32ByteSize = psBuffer->ui32Size; - *phOSMapInfo = IMG_NULL; - *pbIsContiguous = IMG_TRUE; + *ppvCpuVAddr = psBuffer->sCPUVAddr; + + *phOSMapInfo = IMG_NULL; + *pui32ByteSize = (IMG_UINT32)psBuffer->ulSize; + +#if defined(BC_DISCONTIG_BUFFERS) + *ppsSysAddr = psBuffer->psSysAddr; + *pbIsContiguous = IMG_FALSE; +#else + *ppsSysAddr = &psBuffer->sPageAlignSysAddr; + *pbIsContiguous = IMG_TRUE; +#endif + return PVRSRV_OK; } @@ -261,8 +298,11 @@ static PVRSRV_ERROR GetBCBufferAddr(IMG_HANDLE hDevice, static int BC_CreateBuffers(int id, bc_buf_params_t *p) { BC_CAT_DEVINFO *psDevInfo; +#if !defined(BC_DISCONTIG_BUFFERS) IMG_CPU_PHYADDR paddr; - IMG_UINT32 i, stride, size; +#endif + IMG_UINT32 i, stride; + unsigned long ulSize; PVRSRV_PIXEL_FORMAT pixel_fmt; if (p->count <= 0) @@ -296,11 +336,19 @@ static int BC_CreateBuffers(int id, bc_buf_params_t *p) if (p->type != BC_MEMORY_MMAP && p->type != BC_MEMORY_USERPTR) return -EINVAL; - if ((psDevInfo = GetAnchorPtr(id)) == IMG_NULL) - return -ENODEV; + psDevInfo = GetAnchorPtr(id); + if (psDevInfo == NULL) + { + + return (BCE_ERROR_DEVICE_REGISTER_FAILED); + } + if (psDevInfo->ulNumBuffers) + { + + return (BCE_ERROR_GENERIC); + } + - if (psDevInfo->ui32NumBuffers) - BC_DestroyBuffers(id); psDevInfo->buf_type = p->type; psDevInfo->psSystemBuffer = @@ -311,30 +359,44 @@ static int BC_CreateBuffers(int id, bc_buf_params_t *p) memset(psDevInfo->psSystemBuffer, 0, sizeof(BC_CAT_BUFFER) * p->count); - size = p->height * stride; + ulSize = p->height * stride; if (pixel_fmt == PVRSRV_PIXEL_FORMAT_NV12) - size += (stride >> 1) * (p->height >> 1) << 1; + ulSize += (stride >> 1) * (p->height >> 1) << 1; for (i=0; i < p->count; i++) { if (psDevInfo->buf_type == BC_MEMORY_MMAP) { - if (BCAllocContigMemory(size, + +#if defined(BC_DISCONTIG_BUFFERS) + if (BCAllocDiscontigMemory(ulSize, + &psDevInfo->psSystemBuffer[i].hMemHandle, + &psDevInfo->psSystemBuffer[i].sCPUVAddr, + &psDevInfo->psSystemBuffer[i].psSysAddr) != BCE_OK) + { + break; + } +#else + + if (BCAllocContigMemory(ulSize, &psDevInfo->psSystemBuffer[i].hMemHandle, &psDevInfo->psSystemBuffer[i].sCPUVAddr, - &paddr) != PVRSRV_OK) + &paddr) != BCE_OK) +{ /*TODO should free() and return failure*/ break; +} psDevInfo->psSystemBuffer[i].sSysAddr = CpuPAddrToSysPAddrBC(paddr); psDevInfo->psSystemBuffer[i].sPageAlignSysAddr.uiAddr = psDevInfo->psSystemBuffer[i].sSysAddr.uiAddr & 0xFFFFF000; } - psDevInfo->ui32NumBuffers++; - psDevInfo->psSystemBuffer[i].ui32Size = size; - psDevInfo->psSystemBuffer[i].psSyncData = IMG_NULL; +#endif + psDevInfo->ulNumBuffers++; + psDevInfo->psSystemBuffer[i].ulSize = ulSize; + psDevInfo->psSystemBuffer[i].psSyncData = NULL; } - p->count = psDevInfo->ui32NumBuffers; + p->count = psDevInfo->ulNumBuffers; - psDevInfo->sBufferInfo.ui32BufferCount = psDevInfo->ui32NumBuffers; + psDevInfo->sBufferInfo.ui32BufferCount = (IMG_UINT32)psDevInfo->ulNumBuffers; psDevInfo->sBufferInfo.pixelformat = pixel_fmt; psDevInfo->sBufferInfo.ui32Width = p->width; psDevInfo->sBufferInfo.ui32Height = p->height; @@ -342,7 +404,17 @@ static int BC_CreateBuffers(int id, bc_buf_params_t *p) psDevInfo->sBufferInfo.ui32BufferDeviceID = id; psDevInfo->sBufferInfo.ui32Flags = PVRSRV_BC_FLAGS_YUVCSC_FULL_RANGE | PVRSRV_BC_FLAGS_YUVCSC_BT601; - return 0; + +psDevInfo->sBCJTable.ui32TableSize = sizeof(PVRSRV_BC_SRV2BUFFER_KMJTABLE); + psDevInfo->sBCJTable.pfnOpenBCDevice = OpenBCDevice0; + psDevInfo->sBCJTable.pfnCloseBCDevice = CloseBCDevice; + psDevInfo->sBCJTable.pfnGetBCBuffer = GetBCBuffer; + psDevInfo->sBCJTable.pfnGetBCInfo = GetBCInfo; + psDevInfo->sBCJTable.pfnGetBufferAddr = GetBCBufferAddr; + + + return (BCE_OK); + } @@ -351,30 +423,42 @@ static PVRSRV_ERROR BC_DestroyBuffers(int id) BC_CAT_DEVINFO *psDevInfo; IMG_UINT32 i; - if ((psDevInfo = GetAnchorPtr(id)) == IMG_NULL) - return PVRSRV_ERROR_DEVICE_REGISTER_FAILED; - - if (!psDevInfo->ui32NumBuffers) - return PVRSRV_OK; + psDevInfo = GetAnchorPtr(id); + + + if (psDevInfo == NULL) + { + + + return (BCE_ERROR_DEVICE_REGISTER_FAILED); + } if (psDevInfo->buf_type == BC_MEMORY_MMAP) - for (i = 0; i < psDevInfo->ui32NumBuffers; i++) { - BCFreeContigMemory(psDevInfo->psSystemBuffer[i].ui32Size, + for (i = 0; i < psDevInfo->ulNumBuffers; i++) { +#if defined(BC_DISCONTIG_BUFFERS) + BCFreeDiscontigMemory(psDevInfo->psSystemBuffer[i].ulSize, + psDevInfo->psSystemBuffer[i].hMemHandle, + psDevInfo->psSystemBuffer[i].sCPUVAddr, + psDevInfo->psSystemBuffer[i].psSysAddr); +#else + + BCFreeContigMemory(psDevInfo->psSystemBuffer[i].ulSize, psDevInfo->psSystemBuffer[i].hMemHandle, psDevInfo->psSystemBuffer[i].sCPUVAddr, SysPAddrToCpuPAddrBC(psDevInfo->psSystemBuffer[i].sSysAddr)); +#endif } - BCFreeKernelMem(psDevInfo->psSystemBuffer); + // BCFreeKernelMem(psDevInfo->psSystemBuffer); - psDevInfo->ui32NumBuffers = 0; + 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->ui32NumBuffers; + psDevInfo->sBufferInfo.ui32BufferCount = (IMG_UINT32)psDevInfo->ulNumBuffers; return PVRSRV_OK; } @@ -384,20 +468,18 @@ static PVRSRV_ERROR BC_Register(id) { BC_CAT_DEVINFO *psDevInfo; - psDevInfo = GetAnchorPtr(id); - - if (psDevInfo) { - psDevInfo->ui32RefCount++; - return PVRSRV_OK; - } +//psDevInfo = GetAnchorPtr(); + psDevInfo = GetAnchorPtr(id); + if (psDevInfo == NULL) + { psDevInfo = (BC_CAT_DEVINFO *)BCAllocKernelMem(sizeof(BC_CAT_DEVINFO)); if (!psDevInfo) return PVRSRV_ERROR_OUT_OF_MEMORY; psDevInfo->ref = 0; - psDevInfo->ui32RefCount = 0; + psDevInfo->ulRefCount = 0; SetAnchorPtr(id, (IMG_VOID*)psDevInfo); if (BCOpenPVRServices(&psDevInfo->hPVRServices) != PVRSRV_OK) @@ -410,7 +492,9 @@ static PVRSRV_ERROR BC_Register(id) if (!(*pfnGetPVRJTable)(&psDevInfo->sPVRJTable)) return PVRSRV_ERROR_INIT_FAILURE; - psDevInfo->ui32NumBuffers = 0; + psDevInfo->ulNumBuffers = 0; + + psDevInfo->psSystemBuffer = BCAllocKernelMem(sizeof(BC_CAT_BUFFER) * BC_EXAMPLE_NUM_BUFFERS); psDevInfo->sBufferInfo.pixelformat = PVRSRV_PIXEL_FORMAT_UNKNOWN; psDevInfo->sBufferInfo.ui32Width = 0; @@ -418,9 +502,11 @@ static PVRSRV_ERROR BC_Register(id) psDevInfo->sBufferInfo.ui32ByteStride = 0; psDevInfo->sBufferInfo.ui32BufferDeviceID = id; psDevInfo->sBufferInfo.ui32Flags = 0; - psDevInfo->sBufferInfo.ui32BufferCount = psDevInfo->ui32NumBuffers; + psDevInfo->sBufferInfo.ui32BufferCount = (IMG_UINT32)psDevInfo->ulNumBuffers; psDevInfo->sBCJTable.ui32TableSize = sizeof(PVRSRV_BC_SRV2BUFFER_KMJTABLE); + +strncpy(psDevInfo->sBufferInfo.szDeviceName, BUFFERCLASS_DEVICE_NAME, MAX_BUFFER_DEVICE_NAME_SIZE); #if 0 psDevInfo->sBCJTable.pfnOpenBCDevice = OpenBCDevice; #else @@ -456,10 +542,10 @@ static PVRSRV_ERROR BC_Register(id) if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterBCDevice( &psDevInfo->sBCJTable, - &psDevInfo->ui32DeviceID) != PVRSRV_OK) + (IMG_UINT32*)&psDevInfo->ulDeviceID) != PVRSRV_OK) return PVRSRV_ERROR_DEVICE_REGISTER_FAILED; - - psDevInfo->ui32RefCount++; +} + psDevInfo->ulRefCount++; return PVRSRV_OK; } @@ -468,29 +554,40 @@ static PVRSRV_ERROR BC_Register(id) static PVRSRV_ERROR BC_Unregister(int id) { BC_CAT_DEVINFO *psDevInfo; - PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable; +// PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable; if ((psDevInfo = GetAnchorPtr(id)) == IMG_NULL) return PVRSRV_ERROR_DEVICE_REGISTER_FAILED; - psDevInfo->ui32RefCount--; + psDevInfo->ulRefCount--; - if (psDevInfo->ui32RefCount) + if (psDevInfo->ulRefCount) return PVRSRV_ERROR_RETRY; - psJTable = &psDevInfo->sPVRJTable; - - if (psJTable->pfnPVRSRVRemoveBCDevice(psDevInfo->ui32DeviceID) != PVRSRV_OK) - return PVRSRV_ERROR_GENERIC; + + if (psDevInfo->ulRefCount == 0) + { + + PVRSRV_BC_BUFFER2SRV_KMJTABLE *psJTable = &psDevInfo->sPVRJTable; + + + if (psJTable->pfnPVRSRVRemoveBCDevice(psDevInfo->ulDeviceID) != PVRSRV_OK) + //return PVRSRV_ERROR_GENERIC; + return 1; if (BCClosePVRServices(psDevInfo->hPVRServices) != PVRSRV_OK) { psDevInfo->hPVRServices = IMG_NULL; - return PVRSRV_ERROR_GENERIC; + //return PVRSRV_ERROR_GENERIC; + return 1; } +if (psDevInfo->psSystemBuffer) + { + BCFreeKernelMem(psDevInfo->psSystemBuffer); + } BCFreeKernelMem(psDevInfo); SetAnchorPtr(id, IMG_NULL); - +} return PVRSRV_OK; } @@ -502,11 +599,13 @@ static int __init bc_cat_init(void) /* texture buffer width should be multiple of 8 for OMAP3 ES3.x, * or 32 for ES2.x */ -#ifdef PLAT_TI8168 - width_align = 8; + +#ifdef PLAT_TI8168 + width_align = 8; #else - width_align = cpu_is_omap3530() && ( omap_rev() < OMAP3430_REV_ES3_0 ) ? 32 : 8; -#endif + width_align = cpu_is_omap3530() && ( omap_rev() < OMAP3430_REV_ES3_0 ) ? 32 : 8; +#endif + major = register_chrdev(0, DEVNAME, &bc_cat_fops); if (major <= 0) { @@ -554,9 +653,17 @@ ExitDisable: static void __exit bc_cat_cleanup(void) { - int id; + int id=0; for (id = 0; id < DEVICE_COUNT; id++) { +device_destroy(bc_class, MKDEV(major, id)); +} + + class_destroy(bc_class); + + unregister_chrdev(major, DEVNAME); + + for (id = 0; id < DEVICE_COUNT; id++) { if (BC_DestroyBuffers(id) != PVRSRV_OK) { printk(KERN_ERR DRVNAME ": can't free texture buffers\n"); return; @@ -565,16 +672,13 @@ static void __exit bc_cat_cleanup(void) printk(KERN_ERR DRVNAME ": can't un-register BC service\n"); return; } - device_destroy(bc_class, MKDEV(major, id)); } - class_destroy(bc_class); - unregister_chrdev(major, DEVNAME); } -static IMG_VOID *BCAllocKernelMem(IMG_UINT32 ui32Size) +static IMG_VOID *BCAllocKernelMem(unsigned long ulSize) { - return kmalloc(ui32Size, GFP_KERNEL); + return kmalloc(ulSize, GFP_KERNEL); } static IMG_VOID BCFreeKernelMem(IMG_VOID *pvMem) @@ -582,16 +686,105 @@ static IMG_VOID BCFreeKernelMem(IMG_VOID *pvMem) kfree(pvMem); } -static PVRSRV_ERROR BCAllocContigMemory(IMG_UINT32 ui32Size, +#if defined(BC_DISCONTIG_BUFFERS) + +#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); +} +#else + +PVRSRV_ERROR BCAllocContigMemory(unsigned long ulSize, IMG_HANDLE unref__ *phMemHandle, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr) { + +#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); + 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); + 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 +#if 0 IMG_VOID *pvLinAddr; gfp_t mask = GFP_KERNEL; pvLinAddr = alloc_pages_exact(ui32Size, mask); -/* printk("pvLinAddr=%p, ui32Size=%ld\n", pvLinAddr, ui32Size);*/ if (pvLinAddr == IMG_NULL) return PVRSRV_ERROR_OUT_OF_MEMORY; @@ -599,18 +792,34 @@ static PVRSRV_ERROR BCAllocContigMemory(IMG_UINT32 ui32Size, pPhysAddr->uiAddr = virt_to_phys(pvLinAddr); *pLinAddr = pvLinAddr; - - return PVRSRV_OK; +#endif + // return PVRSRV_OK; } -static IMG_VOID BCFreeContigMemory(IMG_UINT32 ui32Size, +static IMG_VOID BCFreeContigMemory(unsigned long ulSize, IMG_HANDLE unref__ hMemHandle, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr) { - free_pages_exact(LinAddr, ui32Size); + // free_pages_exact(LinAddr, ui32Size); +#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 static IMG_SYS_PHYADDR CpuPAddrToSysPAddrBC(IMG_CPU_PHYADDR cpu_paddr) { IMG_SYS_PHYADDR sys_paddr; @@ -679,6 +888,12 @@ static int bc_release(struct inode *i, struct file *f) if ((devinfo = GetAnchorPtr(id)) == IMG_NULL) return -ENODEV; + for (id = 0; id < DEVICE_COUNT; id++) { + if (BC_DestroyBuffers(id) != PVRSRV_OK) { + printk(KERN_ERR DRVNAME ": can't free texture buffer \n"); + } + } + if (devinfo->ref) devinfo->ref--; return 0; @@ -707,7 +922,7 @@ static int bc_mmap(struct file *filp, struct vm_area_struct *vma) static int bc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) #else -static long bc_ioctl(struct file *file, +static int bc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) #endif { @@ -737,7 +952,7 @@ static long bc_ioctl(struct file *file, return -EFAULT; idx = params->input; - if (idx < 0 || idx > devinfo->ui32NumBuffers) { + if (idx < 0 || idx > devinfo->ulNumBuffers) { printk(KERN_ERR DRVNAME ": BCIOGET_BUFFERADDR - idx out of range\n"); return -EINVAL; @@ -754,7 +969,7 @@ static long bc_ioctl(struct file *file, if (!access_ok(VERIFY_WRITE, params, sizeof(BCIO_package))) return -EFAULT; - for (idx = 0; idx < devinfo->ui32NumBuffers; idx++) { + for (idx = 0; idx < devinfo->ulNumBuffers; idx++) { buffer = &devinfo->psSystemBuffer[idx]; if (params->input == (int)buffer->sSysAddr.uiAddr) { @@ -784,7 +999,7 @@ static long bc_ioctl(struct file *file, if (copy_from_user(&p, (void __user *)arg, sizeof(p))) return -EFAULT; - if (p.index >= devinfo->ui32NumBuffers || !p.pa) + if (p.index >= devinfo->ulNumBuffers || !p.pa) return -EINVAL; /*TODO check buffer size*/ diff --git a/services4/3rdparty/dc_omap3_linux/Kbuild b/services4/3rdparty/dc_omap3430_linux/Kbuild old mode 100755 new mode 100644 similarity index 80% rename from services4/3rdparty/dc_omap3_linux/Kbuild rename to services4/3rdparty/dc_omap3430_linux/Kbuild index fb3602f..e867f83 --- a/services4/3rdparty/dc_omap3_linux/Kbuild +++ b/services4/3rdparty/dc_omap3430_linux/Kbuild @@ -1,10 +1,11 @@ SYS_USING_INTERRUPTS = 1 +SUPPORT_OMAP3430_OMAPFB3 =1 SUPPORT_TI_DSS_FW = 0 SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS +SYS_CFLAGS.$(SUPPORT_OMAP3430_OMAPFB3) += -DSUPPORT_OMAP3430_OMAPFB3 SYS_CFLAGS.$(SUPPORT_TI_DSS_FW) += -DSUPPORT_TI_DSS_FW - EXTRA_CFLAGS = -DLINUX \ -I$(PVR_BUILD_DIR)/include4 \ -I$(PVR_BUILD_DIR)/services4/include \ @@ -12,9 +13,5 @@ EXTRA_CFLAGS = -DLINUX \ -I$(PVR_BUILD_DIR)/services4/system/include \ $(SYS_CFLAGS.1) \ -ifeq ($(VERSION), 3) -export EXTRA_CFLAGS += -DAUTOCONF_INCLUDED -endif - obj-m := omaplfb.o omaplfb-y := omaplfb_displayclass.o omaplfb_linux.o diff --git a/services4/3rdparty/dc_omap3_linux/kbuild/Makefile b/services4/3rdparty/dc_omap3430_linux/kbuild/Makefile similarity index 99% rename from services4/3rdparty/dc_omap3_linux/kbuild/Makefile rename to services4/3rdparty/dc_omap3430_linux/kbuild/Makefile index 54139af..0b37436 100644 --- a/services4/3rdparty/dc_omap3_linux/kbuild/Makefile +++ b/services4/3rdparty/dc_omap3430_linux/kbuild/Makefile @@ -24,8 +24,6 @@ # # -include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common - MODULE = omaplfb INCLUDES = -I$(EURASIAROOT)/include4 \ @@ -38,6 +36,4 @@ SOURCES = ../omaplfb_displayclass.c \ SYM_VERS_DEPS = $(EURASIAROOT)/services4/srvkm/env/linux - - - +include $(EURASIAROOT)/eurasiacon/build/linux/kbuild/Makefile.kbuild_subdir_common diff --git a/services4/3rdparty/dc_omap3_linux/omaplfb.h b/services4/3rdparty/dc_omap3430_linux/omaplfb.h similarity index 68% rename from services4/3rdparty/dc_omap3_linux/omaplfb.h rename to services4/3rdparty/dc_omap3430_linux/omaplfb.h index a0a8369..d3ae4bc 100644 --- a/services4/3rdparty/dc_omap3_linux/omaplfb.h +++ b/services4/3rdparty/dc_omap3430_linux/omaplfb.h @@ -27,11 +27,42 @@ #ifndef __OMAPLFB_H__ #define __OMAPLFB_H__ -#if defined(SGX_EARLYSUSPEND) -#include -#endif - -extern IMG_BOOL PVRGetDisplayClassJTable(PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable); +#define OMAPLCD_IRQ 25 + +#define OMAPLCD_SYSCONFIG 0x0410 +#define OMAPLCD_CONFIG 0x0444 +#define OMAPLCD_DEFAULT_COLOR0 0x044C +#define OMAPLCD_TIMING_H 0x0464 +#define OMAPLCD_TIMING_V 0x0468 +#define OMAPLCD_POL_FREQ 0x046C +#define OMAPLCD_DIVISOR 0x0470 +#define OMAPLCD_SIZE_DIG 0x0478 +#define OMAPLCD_SIZE_LCD 0x047C +#define OMAPLCD_GFX_POSITION 0x0488 +#define OMAPLCD_GFX_SIZE 0x048C +#define OMAPLCD_GFX_ATTRIBUTES 0x04a0 +#define OMAPLCD_GFX_FIFO_THRESHOLD 0x04a4 +#define OMAPLCD_GFX_WINDOW_SKIP 0x04b4 + +#define OMAPLCD_IRQSTATUS 0x0418 +#define OMAPLCD_IRQENABLE 0x041c +#define OMAPLCD_CONTROL 0x0440 +#define OMAPLCD_GFX_BA0 0x0480 +#define OMAPLCD_GFX_BA1 0x0484 +#define OMAPLCD_GFX_ROW_INC 0x04ac +#define OMAPLCD_GFX_PIX_INC 0x04b0 +#define OMAPLCD_VID1_BA0 0x04bc +#define OMAPLCD_VID1_BA1 0x04c0 +#define OMAPLCD_VID1_ROW_INC 0x04d8 +#define OMAPLCD_VID1_PIX_INC 0x04dc + +#define OMAP_CONTROL_GODIGITAL (1 << 6) +#define OMAP_CONTROL_GOLCD (1 << 5) +#define OMAP_CONTROL_DIGITALENABLE (1 << 1) +#define OMAP_CONTROL_LCDENABLE (1 << 0) + +#define OMAPLCD_INTMASK_VSYNC (1 << 1) +#define OMAPLCD_INTMASK_OFF 0 typedef void * OMAP_HANDLE; @@ -93,6 +124,9 @@ typedef struct PVRPDP_SWAPCHAIN_TAG unsigned long ulRemoveIndex; + void *pvRegs; + + PVRSRV_DC_DISP2SRV_KMJTABLE *psPVRJTable; @@ -104,8 +138,8 @@ typedef struct PVRPDP_SWAPCHAIN_TAG OMAP_BOOL bBlanked; - - void* pvDevInfo; + + spinlock_t *psSwapChainLock; } OMAPLFB_SWAPCHAIN; typedef struct OMAPLFB_FBINFO_TAG @@ -116,21 +150,21 @@ typedef struct OMAPLFB_FBINFO_TAG unsigned long ulWidth; unsigned long ulHeight; unsigned long ulByteStride; + unsigned long ulPhysicalWidthmm; + unsigned long ulPhysicalHeightmm; + + IMG_SYS_PHYADDR sSysAddr; IMG_CPU_VIRTADDR sCPUVAddr; + PVRSRV_PIXEL_FORMAT ePixelFormat; - -#if defined(SGX_EARLYSUSPEND) - struct early_suspend early_suspend; -#endif - }OMAPLFB_FBINFO; typedef struct OMAPLFB_DEVINFO_TAG { - unsigned long ulDeviceID; + unsigned int uiDeviceID; OMAPLFB_BUFFER sSystemBuffer; @@ -155,25 +189,30 @@ typedef struct OMAPLFB_DEVINFO_TAG struct fb_info *psLINFBInfo; + struct notifier_block sLINNotifBlock; + OMAP_BOOL bDeviceSuspended; + + + spinlock_t sSwapChainLock; + - struct mutex sSwapChainLockMutex; + + IMG_DEV_VIRTADDR sDisplayDevVAddr; DISPLAY_INFO sDisplayInfo; + DISPLAY_FORMAT sDisplayFormat; + DISPLAY_DIMS sDisplayDim; - struct workqueue_struct *vsync_isr_wq; - - struct work_struct vsync_work; - } OMAPLFB_DEVINFO; #define OMAPLFB_PAGE_SIZE 4096 @@ -182,7 +221,7 @@ typedef struct OMAPLFB_DEVINFO_TAG #define OMAPLFB_PAGE_ROUNDUP(x) (((x) + OMAPLFB_PAGE_MASK) & OMAPLFB_PAGE_TRUNC) -#ifdef DEBUG_PVR +#ifdef DEBUG #define DEBUG_PRINTK(x) printk x #else #define DEBUG_PRINTK(x) @@ -222,13 +261,22 @@ void OMAPLFBDriverResume(void); void *OMAPLFBAllocKernelMem(unsigned long ulSize); void OMAPLFBFreeKernelMem(void *pvMem); OMAP_ERROR OMAPLFBGetLibFuncAddr(char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable); -void OMAPLFBWaitForVSync(void); +OMAP_ERROR OMAPLFBInstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain); +OMAP_ERROR OMAPLFBUninstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain); +OMAP_BOOL OMAPLFBVSyncIHandler(OMAPLFB_SWAPCHAIN *psSwapChain); +void OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain); +void OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain); +#if defined (SUPPORT_TI_DSS_FW) +void OMAPLFBEnableDisplayRegisterAccess(void); +void OMAPLFBDisableDisplayRegisterAccess(void); +void OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long aPhyAddr); +#endif #if defined (CONFIG_OMAP2_DSS) IMG_VOID OMAPLFBFlipDSS2(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr); + IMG_UINT32 aPhyAddr); #endif -void OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long aPhyAddr); -OMAPLFB_DEVINFO * GetAnchorPtr(void); +IMG_VOID OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, + IMG_UINT32 aPhyAddr); #endif diff --git a/services4/3rdparty/dc_omap3_linux/omaplfb_displayclass.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c similarity index 85% rename from services4/3rdparty/dc_omap3_linux/omaplfb_displayclass.c rename to services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c index 521de95..8b0f2ff 100644 --- a/services4/3rdparty/dc_omap3_linux/omaplfb_displayclass.c +++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c @@ -31,17 +31,13 @@ #include #include #include +#include #include "img_defs.h" #include "servicesext.h" #include "kerneldisplay.h" #include "omaplfb.h" -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) -#define acquire_console_sem console_lock -#define release_console_sem console_unlock -#endif - static void *gpvAnchor; static int fb_idx = 0; @@ -49,9 +45,8 @@ static int fb_idx = 0; #define OMAPLFB_COMMAND_COUNT 1 static PFN_DC_GET_PVRJTABLE pfnGetPVRJTable = 0; -static void OMAPLFBVSyncIHandler(struct work_struct*); -OMAPLFB_DEVINFO * GetAnchorPtr(void) +static OMAPLFB_DEVINFO * GetAnchorPtr(void) { return (OMAPLFB_DEVINFO *)gpvAnchor; } @@ -129,6 +124,7 @@ static void SetFlushStateInternalNoLock(OMAPLFB_DEVINFO* psDevInfo, { if (psSwapChain->ulSetFlushStateRefCount == 0) { + OMAPLFBDisableVSyncInterrupt(psSwapChain); psSwapChain->bFlushCommands = OMAP_TRUE; FlushInternalVSyncQueue(psSwapChain); } @@ -142,6 +138,7 @@ static void SetFlushStateInternalNoLock(OMAPLFB_DEVINFO* psDevInfo, if (psSwapChain->ulSetFlushStateRefCount == 0) { psSwapChain->bFlushCommands = OMAP_FALSE; + OMAPLFBEnableVSyncInterrupt(psSwapChain); } } } @@ -150,17 +147,21 @@ static void SetFlushStateInternalNoLock(OMAPLFB_DEVINFO* psDevInfo, static IMG_VOID SetFlushStateInternal(OMAPLFB_DEVINFO* psDevInfo, OMAP_BOOL bFlushState) { - mutex_lock(&psDevInfo->sSwapChainLockMutex); - + unsigned long ulLockFlags; + + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); + SetFlushStateInternalNoLock(psDevInfo, bFlushState); - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); } static void SetFlushStateExternal(OMAPLFB_DEVINFO* psDevInfo, OMAP_BOOL bFlushState) { - mutex_lock(&psDevInfo->sSwapChainLockMutex); + unsigned long ulLockFlags; + + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); if (psDevInfo->bFlushCommands != bFlushState) @@ -169,7 +170,7 @@ static void SetFlushStateExternal(OMAPLFB_DEVINFO* psDevInfo, SetFlushStateInternalNoLock(psDevInfo, bFlushState); } - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); } static IMG_VOID SetDCState(IMG_HANDLE hDevice, IMG_UINT32 ui32State) @@ -237,13 +238,14 @@ static OMAP_ERROR UnblankDisplay(OMAPLFB_DEVINFO *psDevInfo) acquire_console_sem(); res = fb_blank(psDevInfo->psLINFBInfo, 0); release_console_sem(); +#if !defined (CONFIG_OMAP2_DSS) if (res != 0 && res != -EINVAL) { printk(KERN_WARNING DRIVER_PREFIX ": fb_blank failed (%d)", res); return (OMAP_ERROR_GENERIC); } - +#endif return (OMAP_OK); } @@ -251,7 +253,7 @@ static OMAP_ERROR UnblankDisplay(OMAPLFB_DEVINFO *psDevInfo) #include struct wq_flip { struct fb_var_screeninfo var; - struct fb_info *psLINFBInfo; + struct fb_info *psLINFBInfo; struct work_struct work; }; struct wq_flip wq_flipdss2; @@ -268,20 +270,22 @@ static void dss2_pan_display (struct work_struct *work) } /* - Flip implementation for DSS2 using fb_pan_display -*/ + * Flip implementation for DSS2 using fb_pan_display + * */ IMG_VOID OMAPLFBFlipDSS2(OMAPLFB_SWAPCHAIN *psSwapChain, - IMG_UINT32 aPhyAddr) + IMG_UINT32 aPhyAddr) { - OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr (); - struct fb_info *psLINFBInfo = psDevInfo->psLINFBInfo; - memcpy ( &wq_flipdss2.var, &psLINFBInfo->var, sizeof(struct fb_var_screeninfo)); + OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr (); + struct fb_info *psLINFBInfo = psDevInfo->psLINFBInfo; + memcpy ( &wq_flipdss2.var, &psLINFBInfo->var, sizeof(struct fb_var_screeninfo)); wq_flipdss2.var.yoffset = (aPhyAddr-psLINFBInfo->fix.smem_start)/psLINFBInfo->fix.line_length; - wq_flipdss2.psLINFBInfo = psLINFBInfo; - schedule_work (&wq_flipdss2.work); + wq_flipdss2.psLINFBInfo = psLINFBInfo; + schedule_work (&wq_flipdss2.work); } #endif + + static OMAP_ERROR EnableLFBEventNotification(OMAPLFB_DEVINFO *psDevInfo) { int res; @@ -350,7 +354,7 @@ static PVRSRV_ERROR OpenDCDevice(IMG_UINT32 ui32DeviceID, { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": UnblankDisplay failed (%d)", eError)); - return (PVRSRV_ERROR_GENERIC); + return (PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED); } @@ -454,11 +458,14 @@ static PVRSRV_ERROR GetDCBufferAddr(IMG_HANDLE hDevice, IMG_UINT32 *pui32ByteSize, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMapInfo, - IMG_BOOL *pbIsContiguous) + IMG_BOOL *pbIsContiguous, + IMG_UINT32 *pui32TilingStride) { OMAPLFB_DEVINFO *psDevInfo; OMAPLFB_BUFFER *psSystemBuffer; + UNREFERENCED_PARAMETER(pui32TilingStride); + if(!hDevice) { return (PVRSRV_ERROR_INVALID_PARAMS); @@ -518,8 +525,10 @@ static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, OMAPLFB_BUFFER *psBuffer; OMAPLFB_VSYNC_FLIP_ITEM *psVSyncFlips; IMG_UINT32 i; - PVRSRV_ERROR eError = PVRSRV_ERROR_GENERIC; + PVRSRV_ERROR eError = PVRSRV_ERROR_NOT_SUPPORTED; + unsigned long ulLockFlags; IMG_UINT32 ui32BuffersToSkip; + UNREFERENCED_PARAMETER(ui32OEMFlags); UNREFERENCED_PARAMETER(pui32SwapChainID); @@ -610,11 +619,8 @@ static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, psSwapChain->ulInsertIndex = 0; psSwapChain->ulRemoveIndex = 0; psSwapChain->psPVRJTable = &psDevInfo->sPVRJTable; - psSwapChain->pvDevInfo = (void*)psDevInfo; + psSwapChain->psSwapChainLock = &psDevInfo->sSwapChainLock; - /* Init the workqueue and its own work */ - INIT_WORK(&psDevInfo->vsync_work, OMAPLFBVSyncIHandler); - psDevInfo->vsync_isr_wq = create_workqueue("pvr_vsync_wq"); for(i=0; isFBInfo.sSysAddr.uiAddr + ui32BufferOffset; psBuffer[i].sCPUVAddr = psDevInfo->sFBInfo.sCPUVAddr + ui32BufferOffset; } + for(i=0; isSwapChainLockMutex); + psSwapChain->pvRegs = ioremap(psDevInfo->psLINFBInfo->fix.mmio_start, psDevInfo->psLINFBInfo->fix.mmio_len); + if (psSwapChain->pvRegs == NULL) + { + eError = PVRSRV_ERROR_BAD_MAPPING; + printk(KERN_WARNING DRIVER_PREFIX ": Couldn't map registers needed for flipping\n"); + goto ErrorDisableDisplayRegisters; + } +#endif + if (OMAPLFBInstallVSyncISR(psSwapChain) != OMAP_OK) + { + eError = PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR; + printk(KERN_WARNING DRIVER_PREFIX ": ISR handler failed to register\n"); + goto ErrorUnmapRegisters; + } + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); + + psDevInfo->psSwapChain = psSwapChain; + psSwapChain->bFlushCommands = psDevInfo->bFlushCommands; @@ -655,14 +683,16 @@ static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, else { psSwapChain->ulSetFlushStateRefCount = 0; + OMAPLFBEnableVSyncInterrupt(psSwapChain); } - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); if (EnableLFBEventNotification(psDevInfo)!= OMAP_OK) { + eError = PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT; printk(KERN_WARNING DRIVER_PREFIX ": Couldn't enable framebuffer event notification\n"); - goto ErrorDisableDisplayRegisters; + goto ErrorUninstallVSyncInterrupt; } @@ -670,7 +700,17 @@ static PVRSRV_ERROR CreateDCSwapChain(IMG_HANDLE hDevice, return (PVRSRV_OK); +ErrorUninstallVSyncInterrupt: + if(OMAPLFBUninstallVSyncISR(psSwapChain) != OMAP_OK) + { + printk(KERN_WARNING DRIVER_PREFIX ": Couldn't uninstall VSync ISR\n"); + } +ErrorUnmapRegisters: +#if defined (SUPPORT_TI_DSS_FW) + iounmap(psSwapChain->pvRegs); ErrorDisableDisplayRegisters: + OMAPLFBDisableDisplayRegisterAccess(); +#endif OMAPLFBFreeKernelMem(psVSyncFlips); ErrorFreeBuffers: OMAPLFBFreeKernelMem(psBuffer); @@ -685,6 +725,7 @@ static PVRSRV_ERROR DestroyDCSwapChain(IMG_HANDLE hDevice, { OMAPLFB_DEVINFO *psDevInfo; OMAPLFB_SWAPCHAIN *psSwapChain; + unsigned long ulLockFlags; OMAP_ERROR eError; @@ -706,19 +747,32 @@ static PVRSRV_ERROR DestroyDCSwapChain(IMG_HANDLE hDevice, printk(KERN_WARNING DRIVER_PREFIX ": Couldn't disable framebuffer event notification\n"); } - mutex_lock(&psDevInfo->sSwapChainLockMutex); + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); + + OMAPLFBDisableVSyncInterrupt(psSwapChain); + FlushInternalVSyncQueue(psSwapChain); + OMAPLFBFlip(psSwapChain, (unsigned long)psDevInfo->sFBInfo.sSysAddr.uiAddr); + psDevInfo->psSwapChain = NULL; - - mutex_unlock(&psDevInfo->sSwapChainLockMutex); - /* Destroy the workqueue */ - flush_workqueue(psDevInfo->vsync_isr_wq); - destroy_workqueue(psDevInfo->vsync_isr_wq); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); + + if(OMAPLFBUninstallVSyncISR(psSwapChain) != OMAP_OK) + { + printk(KERN_WARNING DRIVER_PREFIX ": Couldn't uninstall VSync ISR\n"); + return (PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR); + } + +#if defined (SUPPORT_TI_DSS_FW) + iounmap(psSwapChain->pvRegs); + + OMAPLFBDisableDisplayRegisterAccess(); +#endif OMAPLFBFreeKernelMem(psSwapChain->psVSyncFlips); OMAPLFBFreeKernelMem(psSwapChain->psBuffer); @@ -847,6 +901,7 @@ static PVRSRV_ERROR SwapToDCSystem(IMG_HANDLE hDevice, { OMAPLFB_DEVINFO *psDevInfo; OMAPLFB_SWAPCHAIN *psSwapChain; + unsigned long ulLockFlags; if(!hDevice || !hSwapChain) { @@ -860,35 +915,36 @@ static PVRSRV_ERROR SwapToDCSystem(IMG_HANDLE hDevice, return (PVRSRV_ERROR_INVALID_PARAMS); } - mutex_lock(&psDevInfo->sSwapChainLockMutex); + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); + FlushInternalVSyncQueue(psSwapChain); + OMAPLFBFlip(psSwapChain, (unsigned long)psDevInfo->sFBInfo.sSysAddr.uiAddr); - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); return (PVRSRV_OK); } -static void OMAPLFBVSyncIHandler(struct work_struct *work) +OMAP_BOOL OMAPLFBVSyncIHandler(OMAPLFB_SWAPCHAIN *psSwapChain) { - OMAPLFB_DEVINFO *psDevInfo = container_of(work, OMAPLFB_DEVINFO, vsync_work); + OMAP_BOOL bStatus = OMAP_FALSE; OMAPLFB_VSYNC_FLIP_ITEM *psFlipItem; - OMAPLFB_SWAPCHAIN *psSwapChain; unsigned long ulMaxIndex; - - mutex_lock(&psDevInfo->sSwapChainLockMutex); - - psSwapChain = psDevInfo->psSwapChain; - if (!psSwapChain || psSwapChain->bFlushCommands) - goto ExitUnlock; + unsigned long ulLockFlags; psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; ulMaxIndex = psSwapChain->ulBufferCount - 1; + + spin_lock_irqsave(psSwapChain->psSwapChainLock, ulLockFlags); + - /* VSync with the display here */ - OMAPLFBWaitForVSync(); + if (psSwapChain->bFlushCommands) + { + goto ExitUnlock; + } while(psFlipItem->bValid) { @@ -928,33 +984,30 @@ static void OMAPLFBVSyncIHandler(struct work_struct *work) } else { - queue_work(psDevInfo->vsync_isr_wq, &psDevInfo->vsync_work); - goto ExitUnlock; + + break; } } else { OMAPLFBFlip(psSwapChain, (unsigned long)psFlipItem->sSysAddr); - + + psFlipItem->bFlipped = OMAP_TRUE; - - /* - * If the flip has been presented here then we need in the next - * VSYNC execute the command complete, schedule another work - */ - queue_work(psDevInfo->vsync_isr_wq, &psDevInfo->vsync_work); - - goto ExitUnlock; + + + break; } psFlipItem = &psSwapChain->psVSyncFlips[psSwapChain->ulRemoveIndex]; } - + ExitUnlock: - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(psSwapChain->psSwapChainLock, ulLockFlags); + return bStatus; } static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, @@ -968,6 +1021,8 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, #if defined(SYS_USING_INTERRUPTS) OMAPLFB_VSYNC_FLIP_ITEM* psFlipItem; #endif + unsigned long ulLockFlags; + if(!hCmdCookie || !pvData) { @@ -988,7 +1043,8 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, psBuffer = (OMAPLFB_BUFFER*)psFlipCmd->hExtBuffer; psSwapChain = (OMAPLFB_SWAPCHAIN*) psFlipCmd->hExtSwapChain; - mutex_lock(&psDevInfo->sSwapChainLockMutex); + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); + if (psDevInfo->bDeviceSuspended) { @@ -1020,7 +1076,7 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, if(psSwapChain->ulInsertIndex == psSwapChain->ulRemoveIndex) { - /* If both indexes are equal the queue is empty, present immediatly */ + OMAPLFBFlip(psSwapChain, (unsigned long)psBuffer->sSysAddr.uiAddr); psFlipItem->bFlipped = OMAP_TRUE; @@ -1030,7 +1086,6 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, psFlipItem->bFlipped = OMAP_FALSE; } - /* The buffer is queued here, must be consumed by the VSYNC workqueue */ psFlipItem->hCmdComplete = (OMAP_HANDLE)hCmdCookie; psFlipItem->ulSwapInterval = (unsigned long)psFlipCmd->ui32SwapInterval; psFlipItem->sSysAddr = &psBuffer->sSysAddr; @@ -1042,19 +1097,15 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie, psSwapChain->ulInsertIndex = 0; } - /* Give work to the workqueue to sync with the display */ - queue_work(psDevInfo->vsync_isr_wq, &psDevInfo->vsync_work); - goto ExitTrueUnlock; } - mutex_unlock(&psDevInfo->sSwapChainLockMutex); - + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); return IMG_FALSE; #endif ExitTrueUnlock: - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); return IMG_TRUE; } @@ -1140,12 +1191,12 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo) psPVRFBInfo->ulFBSize = FBSize; psPVRFBInfo->ulBufferSize = psPVRFBInfo->ulHeight * psPVRFBInfo->ulByteStride; -#ifdef CONFIG_OMAP2_DSS +#ifdef CONFIG_OMAP2_DSS psPVRFBInfo->ulRoundedBufferSize = psPVRFBInfo->ulBufferSize; #else + psPVRFBInfo->ulRoundedBufferSize = OMAPLFB_PAGE_ROUNDUP(psPVRFBInfo->ulBufferSize); #endif - if(psLINFBInfo->var.bits_per_pixel == 16) { if((psLINFBInfo->var.red.length == 5) && @@ -1185,14 +1236,18 @@ static OMAP_ERROR InitDev(OMAPLFB_DEVINFO *psDevInfo) printk("Unknown FB format\n"); } + psDevInfo->sFBInfo.ulPhysicalWidthmm = + ((int)psLINFBInfo->var.width > 0) ? psLINFBInfo->var.width : 90; + + psDevInfo->sFBInfo.ulPhysicalHeightmm = + ((int)psLINFBInfo->var.height > 0) ? psLINFBInfo->var.height : 54; + psDevInfo->sFBInfo.sSysAddr.uiAddr = psPVRFBInfo->sSysAddr.uiAddr; psDevInfo->sFBInfo.sCPUVAddr = psPVRFBInfo->sCPUVAddr; - #ifdef CONFIG_OMAP2_DSS - INIT_WORK (&wq_flipdss2.work, dss2_pan_display); + INIT_WORK (&wq_flipdss2.work, dss2_pan_display); #endif - eError = OMAP_OK; goto errRelSem; @@ -1266,7 +1321,8 @@ OMAP_ERROR OMAPLFBInit(void) return (OMAP_ERROR_INIT_FAILURE); } - mutex_init(&psDevInfo->sSwapChainLockMutex); + + spin_lock_init(&psDevInfo->sSwapChainLock); psDevInfo->psSwapChain = 0; psDevInfo->bFlushCommands = OMAP_FALSE; @@ -1274,10 +1330,12 @@ OMAP_ERROR OMAPLFBInit(void) psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = (IMG_UINT32)(psDevInfo->sFBInfo.ulFBSize / psDevInfo->sFBInfo.ulRoundedBufferSize); #if !defined (SUPPORT_TI_DSS_FW) - /* Limiting the ui32MaxSwapChainBuffers to 3 */ - if (psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers > 3) - psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = 3; + /* DSS2 have trouble with ui32MaxSwapChainBuffers > 3 */ + if (psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers > 3) + psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers = 3; #endif + + if (psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers == 0) { psDevInfo->sDisplayInfo.ui32MaxSwapChains = 0; @@ -1290,6 +1348,9 @@ OMAP_ERROR OMAPLFBInit(void) } psDevInfo->sDisplayInfo.ui32MinSwapInterval = 0; + psDevInfo->sDisplayInfo.ui32PhysicalWidthmm = psDevInfo->sFBInfo.ulPhysicalWidthmm; + psDevInfo->sDisplayInfo.ui32PhysicalHeightmm = psDevInfo->sFBInfo.ulPhysicalHeightmm; + strncpy(psDevInfo->sDisplayInfo.szDisplayName, DISPLAY_DEVICE_NAME, MAX_DISPLAY_NAME_SIZE); psDevInfo->sDisplayFormat.pixelformat = psDevInfo->sFBInfo.ePixelFormat; @@ -1298,7 +1359,7 @@ OMAP_ERROR OMAPLFBInit(void) psDevInfo->sDisplayDim.ui32ByteStride = (IMG_UINT32)psDevInfo->sFBInfo.ulByteStride; DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX - ": Maximum number of swap chain buffers: %lu\n", + ": Maximum number of swap chain buffers: %u\n", psDevInfo->sDisplayInfo.ui32MaxSwapChainBuffers)); @@ -1330,11 +1391,12 @@ OMAP_ERROR OMAPLFBInit(void) if(psDevInfo->sPVRJTable.pfnPVRSRVRegisterDCDevice ( &psDevInfo->sDCJTable, - &psDevInfo->ulDeviceID ) != PVRSRV_OK) + &psDevInfo->uiDeviceID ) != PVRSRV_OK) { return (OMAP_ERROR_DEVICE_REGISTER_FAILED); } - + + pfnCmdProcList[DC_FLIP_COMMAND] = ProcessFlip; @@ -1345,7 +1407,7 @@ OMAP_ERROR OMAPLFBInit(void) - if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterCmdProcList (psDevInfo->ulDeviceID, + if (psDevInfo->sPVRJTable.pfnPVRSRVRegisterCmdProcList (psDevInfo->uiDeviceID, &pfnCmdProcList[0], aui32SyncCountList, OMAPLFB_COMMAND_COUNT) != PVRSRV_OK) @@ -1385,17 +1447,17 @@ OMAP_ERROR OMAPLFBDeinit(void) PVRSRV_DC_DISP2SRV_KMJTABLE *psJTable = &psDevInfo->sPVRJTable; - if (psDevInfo->sPVRJTable.pfnPVRSRVRemoveCmdProcList (psDevInfo->ulDeviceID, OMAPLFB_COMMAND_COUNT) != PVRSRV_OK) + if (psDevInfo->sPVRJTable.pfnPVRSRVRemoveCmdProcList (psDevInfo->uiDeviceID, OMAPLFB_COMMAND_COUNT) != PVRSRV_OK) { return (OMAP_ERROR_GENERIC); } - if (psJTable->pfnPVRSRVRemoveDCDevice(psDevInfo->ulDeviceID) != PVRSRV_OK) + if (psJTable->pfnPVRSRVRemoveDCDevice(psDevInfo->uiDeviceID) != PVRSRV_OK) { return (OMAP_ERROR_GENERIC); } - + DeInitDev(psDevInfo); @@ -1414,8 +1476,9 @@ OMAP_ERROR OMAPLFBDeinit(void) void OMAPLFBDriverSuspend(void) { OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); + unsigned long ulLockFlags; - mutex_lock(&psDevInfo->sSwapChainLockMutex); + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); if (psDevInfo->bDeviceSuspended) { @@ -1426,30 +1489,43 @@ void OMAPLFBDriverSuspend(void) SetFlushStateInternalNoLock(psDevInfo, OMAP_TRUE); - mutex_unlock(&psDevInfo->sSwapChainLockMutex); - + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); + +#if defined (SUPPORT_TI_DSS_FW) + if (psDevInfo->psSwapChain != NULL) + { + OMAPLFBDisableDisplayRegisterAccess(); + } +#endif return; ExitUnlock: - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); } void OMAPLFBDriverResume(void) { OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); + unsigned long ulLockFlags; if (psDevInfo->bDeviceSuspended == OMAP_FALSE) { return; } +#if defined (SUPPORT_TI_DSS_FW) + if (psDevInfo->psSwapChain != NULL) + { + OMAPLFBEnableDisplayRegisterAccess(); + } +#endif + spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); - mutex_lock(&psDevInfo->sSwapChainLockMutex); SetFlushStateInternalNoLock(psDevInfo, OMAP_FALSE); psDevInfo->bDeviceSuspended = OMAP_FALSE; - mutex_unlock(&psDevInfo->sSwapChainLockMutex); + spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); } #endif diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c new file mode 100644 index 0000000..fa52836 --- /dev/null +++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c @@ -0,0 +1,445 @@ +/********************************************************************** + * + * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful but, except + * as otherwise stated in writing, without any warranty; without even the + * implied warranty of merchantability or fitness for a particular purpose. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information: + * Imagination Technologies Ltd. + * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK + * + ******************************************************************************/ + +#ifndef AUTOCONF_INCLUDED +#include +#endif + +#include +#include + +#include +#include +#include +#include +#include + +#if defined(LDM_PLATFORM) +#include +#endif + +#if defined (SUPPORT_TI_DSS_FW) +#include + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31)) +#include +#else +#include +#endif +#else +#include +#endif + +#else +#if !defined (CONFIG_OMAP2_DSS) +#define DISPC_IRQ_VSYNC 0x0002 +extern int omap_dispc_request_irq(unsigned long, void (*)(void *), void *); +extern void omap_dispc_free_irq(unsigned long, void (*)(void *), void *); +extern void omap_dispc_set_plane_base(int plane, IMG_UINT32 phys_addr); +#else +#include +#include +#include +static omap_dispc_isr_t *pOMAPLFBVSyncISRHandle = NULL; +#endif +#endif + + + +#include "img_defs.h" +#include "servicesext.h" +#include "kerneldisplay.h" +#include "omaplfb.h" +#include "pvrmodule.h" + +MODULE_SUPPORTED_DEVICE(DEVNAME); + +#define unref__ __attribute__ ((unused)) + +void *OMAPLFBAllocKernelMem(unsigned long ulSize) +{ + return kmalloc(ulSize, GFP_KERNEL); +} + +void OMAPLFBFreeKernelMem(void *pvMem) +{ + kfree(pvMem); +} + + +OMAP_ERROR OMAPLFBGetLibFuncAddr (char *szFunctionName, PFN_DC_GET_PVRJTABLE *ppfnFuncTable) +{ + if(strcmp("PVRGetDisplayClassJTable", szFunctionName) != 0) + { + return (OMAP_ERROR_INVALID_PARAMS); + } + + + *ppfnFuncTable = PVRGetDisplayClassJTable; + + return (OMAP_OK); +} + + +#if defined(SYS_USING_INTERRUPTS) + +#if defined(SUPPORT_OMAP3430_OMAPFB3) + +static void OMAPLFBVSyncISR(void *arg, u32 mask) +{ + OMAPLFB_SWAPCHAIN *psSwapChain= (OMAPLFB_SWAPCHAIN *)arg; + (void) OMAPLFBVSyncIHandler(psSwapChain); +} + +static inline int OMAPLFBRegisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ + return omap_dispc_register_isr(OMAPLFBVSyncISR, psSwapChain, + DISPC_IRQ_VSYNC); +} + +static inline int OMAPLFBUnregisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ + return omap_dispc_unregister_isr(OMAPLFBVSyncISR, psSwapChain, + DISPC_IRQ_VSYNC); +} + +#else + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) +static void OMAPLFBVSyncISR(void *arg) +#else +static void OMAPLFBVSyncISR(void *arg, struct pt_regs unref__ *regs) +#endif +{ + OMAPLFB_SWAPCHAIN *psSwapChain= (OMAPLFB_SWAPCHAIN *)arg; + (void) OMAPLFBVSyncIHandler(psSwapChain); +} + +static inline int OMAPLFBRegisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) + return omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); +#else + return omap2_disp_register_isr(OMAPLFBVSyncISR, psSwapChain, + DISPC_IRQSTATUS_VSYNC); +#endif +} + +static inline int OMAPLFBUnregisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) + omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); + return 0; +#else + return omap2_disp_unregister_isr(OMAPLFBVSyncISR); +#endif +} + +#endif + +#endif + +#if !defined (SUPPORT_TI_DSS_FW) + +IMG_VOID OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) +{ + if (pOMAPLFBVSyncISRHandle == NULL) + OMAPLFBInstallVSyncISR (psSwapChain); +} + +IMG_VOID OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) +{ + if (pOMAPLFBVSyncISRHandle != NULL) + OMAPLFBUninstallVSyncISR (psSwapChain); +} +#else + +static void OMAPLFBVSyncWriteReg(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long ulOffset, unsigned long ulValue) +{ + void *pvRegAddr = (void *)((char *)psSwapChain->pvRegs + ulOffset); + + + writel(ulValue, pvRegAddr); +} + +static unsigned long OMAPLFBVSyncReadReg(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long ulOffset) +{ + return readl((char *)psSwapChain->pvRegs + ulOffset); +} + +void OMAPLFBEnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if defined(SYS_USING_INTERRUPTS) + + unsigned long ulInterruptEnable = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_IRQENABLE); + ulInterruptEnable |= OMAPLCD_INTMASK_VSYNC; + OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_IRQENABLE, ulInterruptEnable ); +#endif +} + +void OMAPLFBDisableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if defined(SYS_USING_INTERRUPTS) + + unsigned long ulInterruptEnable = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_IRQENABLE); + ulInterruptEnable &= ~(OMAPLCD_INTMASK_VSYNC); + OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_IRQENABLE, ulInterruptEnable); +#endif +} +#endif + +#if !defined (SUPPORT_TI_DSS_FW) +OMAP_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if !defined (CONFIG_OMAP2_DSS) + if (omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain) != 0) +#else + pOMAPLFBVSyncISRHandle = omap_dispc_register_isr( + (omap_dispc_isr_t)OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC); + + if (pOMAPLFBVSyncISRHandle != NULL) +#endif + return PVRSRV_ERROR_OUT_OF_MEMORY; /* not worth a proper mapping */ + return OMAP_OK; +} + + +OMAP_ERROR OMAPLFBUninstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if !defined (CONFIG_OMAP2_DSS) + omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); +#else + omap_dispc_unregister_isr (OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC); +#endif + return OMAP_OK; +} + + +IMG_VOID OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, + IMG_UINT32 aPhyAddr) +{ +#if !defined (CONFIG_OMAP2_DSS) + omap_dispc_set_plane_base(0, aPhyAddr); +#else + OMAPLFBFlipDSS2 (psSwapChain, aPhyAddr); +#endif +} +#else + +OMAP_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if defined(SYS_USING_INTERRUPTS) + OMAPLFBDisableVSyncInterrupt(psSwapChain); + + if (OMAPLFBRegisterVSyncISR(psSwapChain)) + { + printk(KERN_INFO DRIVER_PREFIX ": OMAPLFBInstallVSyncISR: Request OMAPLCD IRQ failed\n"); + return (OMAP_ERROR_INIT_FAILURE); + } + +#endif + return (OMAP_OK); +} + + +OMAP_ERROR OMAPLFBUninstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain) +{ +#if defined(SYS_USING_INTERRUPTS) + OMAPLFBDisableVSyncInterrupt(psSwapChain); + + OMAPLFBUnregisterVSyncISR(psSwapChain); + +#endif + return (OMAP_OK); +} + +void OMAPLFBEnableDisplayRegisterAccess(void) +{ +#if !defined(SUPPORT_OMAP3430_OMAPFB3) + omap2_disp_get_dss(); +#endif +} + +void OMAPLFBDisableDisplayRegisterAccess(void) +{ +#if !defined(SUPPORT_OMAP3430_OMAPFB3) + omap2_disp_put_dss(); +#endif +} + + +void OMAPLFBFlip(OMAPLFB_SWAPCHAIN *psSwapChain, unsigned long aPhyAddr) +{ + unsigned long control; + + + OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_GFX_BA0, aPhyAddr); + OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_GFX_BA1, aPhyAddr); + + control = OMAPLFBVSyncReadReg(psSwapChain, OMAPLCD_CONTROL); + control |= OMAP_CONTROL_GOLCD; + OMAPLFBVSyncWriteReg(psSwapChain, OMAPLCD_CONTROL, control); +} +#endif + +#if defined(LDM_PLATFORM) + +static OMAP_BOOL bDeviceSuspended; + +static void OMAPLFBCommonSuspend(void) +{ + if (bDeviceSuspended) + { + return; + } + + OMAPLFBDriverSuspend(); + + bDeviceSuspended = OMAP_TRUE; +} + +static int OMAPLFBDriverSuspend_Entry(struct platform_device unref__ *pDevice, pm_message_t unref__ state) +{ + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverSuspend_Entry\n")); + + OMAPLFBCommonSuspend(); + + return 0; +} + +static int OMAPLFBDriverResume_Entry(struct platform_device unref__ *pDevice) +{ + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverResume_Entry\n")); + + OMAPLFBDriverResume(); + + bDeviceSuspended = OMAP_FALSE; + + return 0; +} + +static IMG_VOID OMAPLFBDriverShutdown_Entry(struct platform_device unref__ *pDevice) +{ + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverShutdown_Entry\n")); + + OMAPLFBCommonSuspend(); +} + +static struct platform_driver omaplfb_driver = { + .driver = { + .name = DRVNAME, + }, + .suspend = OMAPLFBDriverSuspend_Entry, + .resume = OMAPLFBDriverResume_Entry, + .shutdown = OMAPLFBDriverShutdown_Entry, +}; + +#if defined(MODULE) + +static void OMAPLFBDeviceRelease_Entry(struct device unref__ *pDevice) +{ + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": OMAPLFBDriverRelease_Entry\n")); + + OMAPLFBCommonSuspend(); +} + +static struct platform_device omaplfb_device = { + .name = DEVNAME, + .id = -1, + .dev = { + .release = OMAPLFBDeviceRelease_Entry + } +}; + +#endif + +#endif + +static int __init OMAPLFB_Init(void) +{ +#if defined(LDM_PLATFORM) + int error; +#endif + + if(OMAPLFBInit() != OMAP_OK) + { + printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: OMAPLFBInit failed\n"); + return -ENODEV; + } + +#if defined(LDM_PLATFORM) + if ((error = platform_driver_register(&omaplfb_driver)) != 0) + { + printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: Unable to register platform driver (%d)\n", error); + + goto ExitDeinit; + } + +#if defined(MODULE) + if ((error = platform_device_register(&omaplfb_device)) != 0) + { + platform_driver_unregister(&omaplfb_driver); + + printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: Unable to register platform device (%d)\n", error); + + goto ExitDeinit; + } +#endif + +#endif + + return 0; + +#if defined(LDM_PLATFORM) +ExitDeinit: + if(OMAPLFBDeinit() != OMAP_OK) + { + printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Init: OMAPLFBDeinit failed\n"); + } + + return -ENODEV; +#endif +} + +static IMG_VOID __exit OMAPLFB_Cleanup(IMG_VOID) +{ +#if defined (LDM_PLATFORM) +#if defined (MODULE) + platform_device_unregister(&omaplfb_device); +#endif + platform_driver_unregister(&omaplfb_driver); +#endif + + if(OMAPLFBDeinit() != OMAP_OK) + { + printk(KERN_WARNING DRIVER_PREFIX ": OMAPLFB_Cleanup: OMAPLFBDeinit failed\n"); + } +} + +module_init(OMAPLFB_Init); +module_exit(OMAPLFB_Cleanup); + diff --git a/services4/3rdparty/dc_omap3_linux/omaplfb_linux.c b/services4/3rdparty/dc_omap3_linux/omaplfb_linux.c deleted file mode 100644 index 4a80f1c..0000000 --- a/services4/3rdparty/dc_omap3_linux/omaplfb_linux.c +++ /dev/null @@ -1,328 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#ifndef AUTOCONF_INCLUDED -#include -#endif - -#include -#include - -#include -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29)) -#include -#else -#include -#endif -#include <../drivers/video/omap2/omapfb/omapfb.h> - -#if defined(LDM_PLATFORM) -#include -#endif - -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) -#include