| /*************************************************************************/ /*! |
| @File |
| @Title PVR Common Bridge Init/Deinit Module (kernel side) |
| @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved |
| @Description Implements common PVR Bridge init/deinit code |
| @License Dual MIT/GPLv2 |
| |
| The contents of this file are subject to the MIT license as set out below. |
| |
| Permission is hereby granted, free of charge, to any person obtaining a copy |
| of this software and associated documentation files (the "Software"), to deal |
| in the Software without restriction, including without limitation the rights |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| copies of the Software, and to permit persons to whom the Software is |
| furnished to do so, subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be included in |
| all copies or substantial portions of the Software. |
| |
| Alternatively, the contents of this file may be used under the terms of |
| the GNU General Public License Version 2 ("GPL") in which case the provisions |
| of GPL are applicable instead of those above. |
| |
| If you wish to allow use of your version of this file only under the terms of |
| GPL, and not to allow others to use your version of this file under the terms |
| of the MIT license, indicate your decision by deleting the provisions above |
| and replace them with the notice and other provisions required by GPL as set |
| out in the file called "GPL-COPYING" included in this distribution. If you do |
| not delete the provisions above, a recipient may use your version of this file |
| under the terms of either the MIT license or GPL. |
| |
| This License is also included in this distribution in the file called |
| "MIT-COPYING". |
| |
| EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS |
| PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
| BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
| PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR |
| COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
| IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| */ /**************************************************************************/ |
| |
| #include "pvrsrv_bridge_init.h" |
| #include "srvcore.h" |
| |
| /* These will go when full bridge gen comes in */ |
| #if defined(PDUMP) |
| PVRSRV_ERROR InitPDUMPCTRLBridge(void); |
| PVRSRV_ERROR DeinitPDUMPCTRLBridge(void); |
| PVRSRV_ERROR InitPDUMPBridge(void); |
| PVRSRV_ERROR DeinitPDUMPBridge(void); |
| PVRSRV_ERROR InitRGXPDUMPBridge(void); |
| PVRSRV_ERROR DeinitRGXPDUMPBridge(void); |
| #endif |
| #if defined(SUPPORT_DISPLAY_CLASS) |
| PVRSRV_ERROR InitDCBridge(void); |
| PVRSRV_ERROR DeinitDCBridge(void); |
| #endif |
| PVRSRV_ERROR InitMMBridge(void); |
| PVRSRV_ERROR DeinitMMBridge(void); |
| #if !defined(EXCLUDE_CMM_BRIDGE) |
| PVRSRV_ERROR InitCMMBridge(void); |
| PVRSRV_ERROR DeinitCMMBridge(void); |
| #endif |
| PVRSRV_ERROR InitPDUMPMMBridge(void); |
| PVRSRV_ERROR DeinitPDUMPMMBridge(void); |
| PVRSRV_ERROR InitSRVCOREBridge(void); |
| PVRSRV_ERROR DeinitSRVCOREBridge(void); |
| PVRSRV_ERROR InitSYNCBridge(void); |
| PVRSRV_ERROR DeinitSYNCBridge(void); |
| |
| #if defined(SUPPORT_SERVER_SYNC) |
| #if defined(SUPPORT_INSECURE_EXPORT) |
| PVRSRV_ERROR InitSYNCEXPORTBridge(void); |
| PVRSRV_ERROR DeinitSYNCEXPORTBridge(void); |
| #endif |
| #if defined(SUPPORT_SECURE_EXPORT) |
| PVRSRV_ERROR InitSYNCSEXPORTBridge(void); |
| PVRSRV_ERROR DeinitSYNCSEXPORTBridge(void); |
| #endif |
| #endif /* defined(SUPPORT_SERVER_SYNC) */ |
| |
| #if defined (SUPPORT_RGX) |
| PVRSRV_ERROR InitRGXTA3DBridge(void); |
| PVRSRV_ERROR DeinitRGXTA3DBridge(void); |
| PVRSRV_ERROR InitRGXTQBridge(void); |
| PVRSRV_ERROR DeinitRGXTQBridge(void); |
| PVRSRV_ERROR InitRGXTQ2Bridge(void); |
| PVRSRV_ERROR DeinitRGXTQ2Bridge(void); |
| PVRSRV_ERROR InitRGXCMPBridge(void); |
| PVRSRV_ERROR DeinitRGXCMPBridge(void); |
| #if !defined(EXCLUDE_RGXBREAKPOINT_BRIDGE) |
| PVRSRV_ERROR InitRGXBREAKPOINTBridge(void); |
| PVRSRV_ERROR DeinitRGXBREAKPOINTBridge(void); |
| #endif |
| PVRSRV_ERROR InitRGXFWDBGBridge(void); |
| PVRSRV_ERROR DeinitRGXFWDBGBridge(void); |
| PVRSRV_ERROR InitRGXHWPERFBridge(void); |
| PVRSRV_ERROR DeinitRGXHWPERFBridge(void); |
| #if !defined(EXCLUDE_RGXREGCONFIG_BRIDGE) |
| PVRSRV_ERROR InitRGXREGCONFIGBridge(void); |
| PVRSRV_ERROR DeinitRGXREGCONFIGBridge(void); |
| #endif |
| PVRSRV_ERROR InitRGXKICKSYNCBridge(void); |
| PVRSRV_ERROR DeinitRGXKICKSYNCBridge(void); |
| PVRSRV_ERROR InitRGXSIGNALSBridge(void); |
| PVRSRV_ERROR DeinitRGXSIGNALSBridge(void); |
| #endif /* SUPPORT_RGX */ |
| PVRSRV_ERROR InitCACHEBridge(void); |
| PVRSRV_ERROR DeinitCACHEBridge(void); |
| #if defined(SUPPORT_SECURE_EXPORT) |
| PVRSRV_ERROR InitSMMBridge(void); |
| PVRSRV_ERROR DeinitSMMBridge(void); |
| #endif |
| #if !defined(EXCLUDE_HTBUFFER_BRIDGE) |
| PVRSRV_ERROR InitHTBUFFERBridge(void); |
| PVRSRV_ERROR DeinitHTBUFFERBridge(void); |
| #endif |
| PVRSRV_ERROR InitPVRTLBridge(void); |
| PVRSRV_ERROR DeinitPVRTLBridge(void); |
| #if defined(PVRSRV_ENABLE_GPU_MEMORY_INFO) |
| PVRSRV_ERROR InitRIBridge(void); |
| PVRSRV_ERROR DeinitRIBridge(void); |
| #endif |
| PVRSRV_ERROR InitDEVICEMEMHISTORYBridge(void); |
| PVRSRV_ERROR DeinitDEVICEMEMHISTORYBridge(void); |
| #if defined(SUPPORT_VALIDATION_BRIDGE) |
| PVRSRV_ERROR InitVALIDATIONBridge(void); |
| PVRSRV_ERROR DeinitVALIDATIONBridge(void); |
| #endif |
| #if defined(PVR_TESTING_UTILS) |
| PVRSRV_ERROR InitTUTILSBridge(void); |
| PVRSRV_ERROR DeinitTUTILSBridge(void); |
| #endif |
| PVRSRV_ERROR InitSYNCTRACKINGBridge(void); |
| PVRSRV_ERROR DeinitSYNCTRACKINGBridge(void); |
| #if defined(SUPPORT_WRAP_EXTMEM) |
| PVRSRV_ERROR InitMMEXTMEMBridge(void); |
| PVRSRV_ERROR DeinitMMEXTMEMBridge(void); |
| #endif |
| #if defined(SUPPORT_FALLBACK_FENCE_SYNC) |
| PVRSRV_ERROR InitSYNCFALLBACKBridge(void); |
| PVRSRV_ERROR DeinitSYNCFALLBACKBridge(void); |
| #endif |
| |
| |
| PVRSRV_ERROR |
| ServerBridgeInit(void) |
| { |
| PVRSRV_ERROR eError; |
| |
| BridgeDispatchTableStartOffsetsInit(); |
| |
| eError = InitSRVCOREBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSRVCOREBridge"); |
| |
| eError = InitSYNCBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSYNCBridge"); |
| |
| #if defined(SUPPORT_SERVER_SYNC) |
| #if defined(SUPPORT_INSECURE_EXPORT) |
| eError = InitSYNCEXPORTBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSYNCEXPORTBridge"); |
| #endif |
| #if defined(SUPPORT_SECURE_EXPORT) |
| eError = InitSYNCSEXPORTBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSYNCSEXPORTBridge"); |
| #endif |
| #endif /* defined(SUPPORT_SERVER_SYNC) */ |
| |
| #if defined(PDUMP) |
| eError = InitPDUMPCTRLBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitPDUMPCTRLBridge"); |
| #endif |
| |
| eError = InitMMBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitMMBridge"); |
| |
| #if !defined(EXCLUDE_CMM_BRIDGE) |
| eError = InitCMMBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitCMMBridge"); |
| #endif |
| |
| #if defined(PDUMP) |
| eError = InitPDUMPMMBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitPDUMPMMBridge"); |
| |
| eError = InitPDUMPBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitPDUMPBridge"); |
| #endif |
| |
| #if defined(SUPPORT_DISPLAY_CLASS) |
| eError = InitDCBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitDCBridge"); |
| #endif |
| |
| eError = InitCACHEBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitCACHEBridge"); |
| |
| #if defined(SUPPORT_SECURE_EXPORT) |
| eError = InitSMMBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSMMBridge"); |
| #endif |
| |
| #if !defined(EXCLUDE_HTBUFFER_BRIDGE) |
| eError = InitHTBUFFERBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitHTBUFFERBridge"); |
| #endif |
| |
| eError = InitPVRTLBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitPVRTLBridge"); |
| |
| #if defined(PVRSRV_ENABLE_GPU_MEMORY_INFO) |
| eError = InitRIBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRIBridge"); |
| #endif |
| |
| #if defined(SUPPORT_VALIDATION_BRIDGE) |
| eError = InitVALIDATIONBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitVALIDATIONBridge"); |
| #endif |
| |
| #if defined(PVR_TESTING_UTILS) |
| eError = InitTUTILSBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitTUTILSBridge"); |
| #endif |
| |
| eError = InitDEVICEMEMHISTORYBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitDEVICEMEMHISTORYBridge"); |
| |
| eError = InitSYNCTRACKINGBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSYNCTRACKINGBridge"); |
| |
| #if defined (SUPPORT_RGX) |
| |
| eError = InitRGXTQBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXTQBridge"); |
| |
| eError = InitRGXTA3DBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXTA3DBridge"); |
| |
| #if !defined(EXCLUDE_RGXBREAKPOINT_BRIDGE) |
| eError = InitRGXBREAKPOINTBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXBREAKPOINTBridge"); |
| #endif |
| |
| eError = InitRGXFWDBGBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXFWDBGBridge"); |
| |
| #if defined(PDUMP) |
| eError = InitRGXPDUMPBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXPDUMPBridge"); |
| #endif |
| |
| eError = InitRGXHWPERFBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXHWPERFBridge"); |
| |
| #if !defined(EXCLUDE_RGXREGCONFIG_BRIDGE) |
| eError = InitRGXREGCONFIGBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXREGCONFIGBridge"); |
| #endif |
| |
| eError = InitRGXKICKSYNCBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitRGXKICKSYNCBridge"); |
| |
| #endif /* SUPPORT_RGX */ |
| |
| #if defined(SUPPORT_WRAP_EXTMEM) |
| eError = InitMMEXTMEMBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitMMEXTMEMBridge"); |
| #endif |
| |
| #if defined(SUPPORT_FALLBACK_FENCE_SYNC) |
| eError = InitSYNCFALLBACKBridge(); |
| PVR_LOG_IF_ERROR(eError, "InitSYNCFALLBACKBridge"); |
| #endif |
| |
| eError = OSPlatformBridgeInit(); |
| PVR_LOG_IF_ERROR(eError, "OSPlatformBridgeInit"); |
| |
| return eError; |
| } |
| |
| PVRSRV_ERROR |
| ServerBridgeDeInit(void) |
| { |
| PVRSRV_ERROR eError; |
| |
| eError = OSPlatformBridgeDeInit(); |
| PVR_LOG_IF_ERROR(eError, "OSPlatformBridgeDeInit"); |
| |
| #if defined(SUPPORT_FALLBACK_FENCE_SYNC) |
| eError = DeinitSYNCFALLBACKBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSYNCFALLBACKBridge"); |
| #endif |
| |
| #if defined(SUPPORT_WRAP_EXTMEM) |
| eError = DeinitMMEXTMEMBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitMMEXTMEMBridge"); |
| #endif |
| |
| eError = DeinitSRVCOREBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSRVCOREBridge"); |
| |
| eError = DeinitSYNCBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSYNCBridge"); |
| |
| #if defined(SUPPORT_SERVER_SYNC) |
| #if defined(SUPPORT_INSECURE_EXPORT) |
| eError = DeinitSYNCEXPORTBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSYNCEXPORTBridge"); |
| #endif |
| |
| #if defined(SUPPORT_SECURE_EXPORT) |
| eError = DeinitSYNCSEXPORTBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSYNCSEXPORTBridge"); |
| #endif |
| #endif /* defined(SUPPORT_SERVER_SYNC) */ |
| |
| #if defined(PDUMP) |
| eError = DeinitPDUMPCTRLBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitPDUMPCTRLBridge"); |
| #endif |
| |
| eError = DeinitMMBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitMMBridge"); |
| |
| #if !defined(EXCLUDE_CMM_BRIDGE) |
| eError = DeinitCMMBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitCMMBridge"); |
| #endif |
| |
| #if defined(PDUMP) |
| eError = DeinitPDUMPMMBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitPDUMPMMBridge"); |
| |
| eError = DeinitPDUMPBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitPDUMPBridge"); |
| #endif |
| |
| #if defined(PVR_TESTING_UTILS) |
| eError = DeinitTUTILSBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitTUTILSBridge"); |
| #endif |
| |
| #if defined(SUPPORT_DISPLAY_CLASS) |
| eError = DeinitDCBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitDCBridge"); |
| #endif |
| |
| eError = DeinitCACHEBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitCACHEBridge"); |
| |
| #if defined(SUPPORT_SECURE_EXPORT) |
| eError = DeinitSMMBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSMMBridge"); |
| #endif |
| |
| #if !defined(EXCLUDE_HTBUFFER_BRIDGE) |
| eError = DeinitHTBUFFERBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitHTBUFFERBridge"); |
| #endif |
| |
| eError = DeinitPVRTLBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitPVRTLBridge"); |
| |
| #if defined(SUPPORT_VALIDATION_BRIDGE) |
| eError = DeinitVALIDATIONBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitVALIDATIONBridge"); |
| #endif |
| |
| #if defined(PVRSRV_ENABLE_GPU_MEMORY_INFO) |
| eError = DeinitRIBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRIBridge"); |
| #endif |
| |
| eError = DeinitDEVICEMEMHISTORYBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitDEVICEMEMHISTORYBridge"); |
| |
| eError = DeinitSYNCTRACKINGBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitSYNCTRACKINGBridge"); |
| |
| #if defined (SUPPORT_RGX) |
| |
| eError = DeinitRGXTQBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXTQBridge"); |
| |
| eError = DeinitRGXTA3DBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXTA3DBridge"); |
| |
| #if !defined(EXCLUDE_RGXBREAKPOINT_BRIDGE) |
| eError = DeinitRGXBREAKPOINTBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXBREAKPOINTBridge"); |
| #endif |
| |
| eError = DeinitRGXFWDBGBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXFWDBGBridge"); |
| |
| #if defined(PDUMP) |
| eError = DeinitRGXPDUMPBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXPDUMPBridge"); |
| #endif |
| |
| eError = DeinitRGXHWPERFBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXHWPERFBridge"); |
| |
| #if !defined(EXCLUDE_RGXREGCONFIG_BRIDGE) |
| eError = DeinitRGXREGCONFIGBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXREGCONFIGBridge"); |
| #endif |
| |
| eError = DeinitRGXKICKSYNCBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXKICKSYNCBridge"); |
| |
| #endif /* SUPPORT_RGX */ |
| |
| return eError; |
| } |
| |
| #if defined(SUPPORT_RGX) |
| PVRSRV_ERROR |
| DeviceDepBridgeInit(IMG_UINT64 ui64Features) |
| { |
| PVRSRV_ERROR eError; |
| |
| if (ui64Features & RGX_FEATURE_COMPUTE_BIT_MASK) |
| { |
| eError = InitRGXCMPBridge(); |
| PVR_LOGR_IF_ERROR(eError, "InitRGXCMPBridge"); |
| } |
| |
| if (ui64Features & RGX_FEATURE_SIGNAL_SNOOPING_BIT_MASK) |
| { |
| eError = InitRGXSIGNALSBridge(); |
| PVR_LOGR_IF_ERROR(eError, "InitRGXCMPBridge"); |
| } |
| |
| if (ui64Features & RGX_FEATURE_FASTRENDER_DM_BIT_MASK) |
| { |
| eError = InitRGXTQ2Bridge(); |
| PVR_LOGR_IF_ERROR(eError, "InitRGXTQ2Bridge"); |
| } |
| |
| return PVRSRV_OK; |
| } |
| |
| PVRSRV_ERROR |
| DeviceDepBridgeDeInit(IMG_UINT64 ui64Features) |
| { |
| PVRSRV_ERROR eError; |
| |
| if (ui64Features & RGX_FEATURE_COMPUTE_BIT_MASK) |
| { |
| eError = DeinitRGXCMPBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXCMPBridge"); |
| } |
| |
| if (ui64Features & RGX_FEATURE_SIGNAL_SNOOPING_BIT_MASK) |
| { |
| eError = DeinitRGXSIGNALSBridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXSIGNALSBridge"); |
| } |
| |
| if (ui64Features & RGX_FEATURE_FASTRENDER_DM_BIT_MASK) |
| { |
| eError = DeinitRGXTQ2Bridge(); |
| PVR_LOGR_IF_ERROR(eError, "DeinitRGXTQ2Bridge"); |
| } |
| |
| return PVRSRV_OK; |
| } |
| #endif /* SUPPORT_RGX */ |
| |
| |