/********************************************************************** * * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful but, except * as otherwise stated in writing, without any warranty; without even the * implied warranty of merchantability or fitness for a particular purpose. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. * * The full GNU General Public License is included in this distribution in * the file called "COPYING". * * Contact Information: * Imagination Technologies Ltd. * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK * ******************************************************************************/ #if !defined(__SYSLOCAL_H__) #define __SYSLOCAL_H__ #if defined(__linux__) #include #include #if defined(PVR_LINUX_USING_WORKQUEUES) #include #else #include #endif #include #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)) #include #include #else #include #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)) #include #endif #endif #endif #if defined (__cplusplus) extern "C" { #endif IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion); IMG_VOID DisableSystemClocks(SYS_DATA *psSysData); PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData); IMG_VOID DisableSGXClocks(SYS_DATA *psSysData); PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData); #define SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS 0x00000001 #define SYS_SPECIFIC_DATA_ENABLE_LISR 0x00000002 #define SYS_SPECIFIC_DATA_ENABLE_MISR 0x00000004 #define SYS_SPECIFIC_DATA_ENABLE_ENVDATA 0x00000008 #define SYS_SPECIFIC_DATA_ENABLE_LOCDEV 0x00000010 #define SYS_SPECIFIC_DATA_ENABLE_REGDEV 0x00000020 #define SYS_SPECIFIC_DATA_ENABLE_PDUMPINIT 0x00000040 #define SYS_SPECIFIC_DATA_ENABLE_INITDEV 0x00000080 #define SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV 0x00000100 #define SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR 0x00000200 #define SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS 0x00000400 #define SYS_SPECIFIC_DATA_ENABLE_OCPREGS 0x00000800 #define SYS_SPECIFIC_DATA_SET(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData |= (flag))) #define SYS_SPECIFIC_DATA_CLEAR(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData &= ~(flag))) #define SYS_SPECIFIC_DATA_TEST(psSysSpecData, flag) (((psSysSpecData)->ui32SysSpecificData & (flag)) != 0) typedef struct _SYS_SPECIFIC_DATA_TAG_ { IMG_UINT32 ui32SysSpecificData; PVRSRV_DEVICE_NODE *psSGXDevNode; IMG_BOOL bSGXInitComplete; #if !defined(__linux__) IMG_BOOL bSGXClocksEnabled; #endif IMG_UINT32 ui32SrcClockDiv; #if defined(__linux__) IMG_BOOL bSysClocksOneTimeInit; atomic_t sSGXClocksEnabled; #if defined(PVR_LINUX_USING_WORKQUEUES) struct mutex sPowerLock; #else IMG_BOOL bConstraintNotificationsEnabled; spinlock_t sPowerLock; atomic_t sPowerLockCPU; spinlock_t sNotifyLock; atomic_t sNotifyLockCPU; IMG_BOOL bCallVDD2PostFunc; #endif struct clk *psCORE_CK; struct clk *psSGX_FCK; struct clk *psSGX_ICK; struct clk *psMPU_CK; #if defined(DEBUG) || defined(TIMING) struct clk *psGPT11_FCK; struct clk *psGPT11_ICK; #endif #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)) struct constraint_handle *pVdd2Handle; #endif #endif } SYS_SPECIFIC_DATA; extern SYS_SPECIFIC_DATA *gpsSysSpecificData; #if defined(SYS_CUSTOM_POWERLOCK_WRAP) IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); #endif #if defined(__cplusplus) } #endif #endif