1 /**********************************************************************
2 Copyright (c) Imagination Technologies Ltd.
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 ******************************************************************************/
23 #if !defined (__SGXINFO_H__)
26 #include "sgxscript.h"
27 #include "servicesint.h"
29 #include "sgxapi_km.h"
30 #include "sgx_mkif_km.h"
33 #define SGX_MAX_DEV_DATA 24
34 #define SGX_MAX_INIT_MEM_HANDLES 16
37 typedef struct _SGX_BRIDGE_INFO_FOR_SRVINIT
39 IMG_DEV_PHYADDR sPDDevPAddr;
40 PVRSRV_HEAP_INFO asHeapInfo[PVRSRV_MAX_CLIENT_HEAPS];
41 } SGX_BRIDGE_INFO_FOR_SRVINIT;
44 typedef enum _SGXMKIF_CMD_TYPE_
47 SGXMKIF_CMD_TRANSFER = 1,
49 SGXMKIF_CMD_POWER = 3,
50 SGXMKIF_CMD_CLEANUP = 4,
51 SGXMKIF_CMD_GETMISCINFO = 5,
52 SGXMKIF_CMD_PROCESS_QUEUES = 6,
55 SGXMKIF_CMD_FORCE_I32 = -1,
60 typedef struct _SGX_BRIDGE_INIT_INFO_
62 IMG_HANDLE hKernelCCBMemInfo;
63 IMG_HANDLE hKernelCCBCtlMemInfo;
64 IMG_HANDLE hKernelCCBEventKickerMemInfo;
65 IMG_HANDLE hKernelSGXHostCtlMemInfo;
66 IMG_HANDLE hKernelSGXTA3DCtlMemInfo;
67 IMG_HANDLE hKernelSGXMiscMemInfo;
69 IMG_UINT32 aui32HostKickAddr[SGXMKIF_CMD_MAX];
71 SGX_INIT_SCRIPTS sScripts;
73 IMG_UINT32 ui32ClientBuildOptions;
74 SGX_MISCINFO_STRUCT_SIZES sSGXStructSizes;
76 #if defined(SGX_SUPPORT_HWPROFILING)
77 IMG_HANDLE hKernelHWProfilingMemInfo;
79 #if defined(SUPPORT_SGX_HWPERF)
80 IMG_HANDLE hKernelHWPerfCBMemInfo;
82 #if defined(PVRSRV_USSE_EDM_STATUS_DEBUG)
83 IMG_HANDLE hKernelEDMStatusBufferMemInfo;
85 #if defined(SGX_FEATURE_OVERLAPPED_SPM)
86 IMG_HANDLE hKernelTmpRgnHeaderMemInfo;
88 #if defined(SGX_FEATURE_SPM_MODE_0)
89 IMG_HANDLE hKernelTmpDPMStateMemInfo;
92 IMG_UINT32 ui32EDMTaskReg0;
93 IMG_UINT32 ui32EDMTaskReg1;
95 IMG_UINT32 ui32ClkGateStatusReg;
96 IMG_UINT32 ui32ClkGateStatusMask;
97 #if defined(SGX_FEATURE_MP)
98 IMG_UINT32 ui32MasterClkGateStatusReg;
99 IMG_UINT32 ui32MasterClkGateStatusMask;
102 IMG_UINT32 ui32CacheControl;
104 IMG_UINT32 asInitDevData[SGX_MAX_DEV_DATA];
105 IMG_HANDLE asInitMemHandles[SGX_MAX_INIT_MEM_HANDLES];
107 } SGX_BRIDGE_INIT_INFO;
110 typedef struct _SGX_DEVICE_SYNC_LIST_
112 PSGXMKIF_HWDEVICE_SYNC_LIST psHWDeviceSyncList;
114 IMG_HANDLE hKernelHWSyncListMemInfo;
115 PVRSRV_CLIENT_MEM_INFO *psHWDeviceSyncListClientMemInfo;
116 PVRSRV_CLIENT_MEM_INFO *psAccessResourceClientMemInfo;
118 volatile IMG_UINT32 *pui32Lock;
120 struct _SGX_DEVICE_SYNC_LIST_ *psNext;
123 IMG_UINT32 ui32NumSyncObjects;
124 IMG_HANDLE ahSyncHandles[1];
125 } SGX_DEVICE_SYNC_LIST, *PSGX_DEVICE_SYNC_LIST;
128 typedef struct _SGX_INTERNEL_STATUS_UPDATE_
130 CTL_STATUS sCtlStatus;
131 IMG_HANDLE hKernelMemInfo;
133 IMG_UINT32 ui32LastStatusUpdateDumpVal;
134 } SGX_INTERNEL_STATUS_UPDATE;
137 typedef struct _SGX_CCB_KICK_
139 SGXMKIF_COMMAND sCommand;
140 IMG_HANDLE hCCBKernelMemInfo;
142 IMG_UINT32 ui32NumDstSyncObjects;
143 IMG_HANDLE hKernelHWSyncListMemInfo;
146 IMG_HANDLE *pahDstSyncHandles;
148 IMG_UINT32 ui32NumTAStatusVals;
149 IMG_UINT32 ui32Num3DStatusVals;
151 #if defined(SUPPORT_SGX_NEW_STATUS_VALS)
152 SGX_INTERNEL_STATUS_UPDATE asTAStatusUpdate[SGX_MAX_TA_STATUS_VALS];
153 SGX_INTERNEL_STATUS_UPDATE as3DStatusUpdate[SGX_MAX_3D_STATUS_VALS];
155 IMG_HANDLE ahTAStatusSyncInfo[SGX_MAX_TA_STATUS_VALS];
156 IMG_HANDLE ah3DStatusSyncInfo[SGX_MAX_3D_STATUS_VALS];
159 IMG_BOOL bFirstKickOrResume;
160 #if (defined(NO_HARDWARE) || defined(PDUMP))
161 IMG_BOOL bTerminateOrAbort;
163 #if defined(SUPPORT_SGX_HWPERF)
164 IMG_BOOL bKickRender;
168 IMG_UINT32 ui32CCBOffset;
170 #if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS)
172 IMG_UINT32 ui32NumTASrcSyncs;
173 IMG_HANDLE ahTASrcKernelSyncInfo[SGX_MAX_TA_SRC_SYNCS];
174 IMG_UINT32 ui32NumTADstSyncs;
175 IMG_HANDLE ahTADstKernelSyncInfo[SGX_MAX_TA_DST_SYNCS];
176 IMG_UINT32 ui32Num3DSrcSyncs;
177 IMG_HANDLE ah3DSrcKernelSyncInfo[SGX_MAX_3D_SRC_SYNCS];
180 IMG_UINT32 ui32NumSrcSyncs;
181 IMG_HANDLE ahSrcKernelSyncInfo[SGX_MAX_SRC_SYNCS];
185 IMG_BOOL bTADependency;
186 IMG_HANDLE hTA3DSyncInfo;
188 IMG_HANDLE hTASyncInfo;
189 IMG_HANDLE h3DSyncInfo;
191 IMG_UINT32 ui32CCBDumpWOff;
193 #if defined(NO_HARDWARE)
194 IMG_UINT32 ui32WriteOpsPendingVal;
199 #define SGX_KERNEL_USE_CODE_BASE_INDEX 15
202 typedef struct _SGX_CLIENT_INFO_
204 IMG_UINT32 ui32ProcessID;
206 PVRSRV_MISC_INFO sMiscInfo;
208 IMG_UINT32 asDevData[SGX_MAX_DEV_DATA];
212 typedef struct _SGX_INTERNAL_DEVINFO_
214 IMG_UINT32 ui32Flags;
215 IMG_HANDLE hHostCtlKernelMemInfoHandle;
216 IMG_BOOL bForcePTOff;
217 } SGX_INTERNAL_DEVINFO;
220 #if defined(TRANSFER_QUEUE)
221 typedef struct _PVRSRV_TRANSFER_SGX_KICK_
223 IMG_HANDLE hCCBMemInfo;
224 IMG_UINT32 ui32SharedCmdCCBOffset;
226 IMG_DEV_VIRTADDR sHWTransferContextDevVAddr;
228 IMG_HANDLE hTASyncInfo;
229 IMG_HANDLE h3DSyncInfo;
231 IMG_UINT32 ui32NumSrcSync;
232 IMG_HANDLE ahSrcSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS];
234 IMG_UINT32 ui32NumDstSync;
235 IMG_HANDLE ahDstSyncInfo[SGX_MAX_TRANSFER_SYNC_OPS];
237 IMG_UINT32 ui32Flags;
239 IMG_UINT32 ui32PDumpFlags;
241 IMG_UINT32 ui32CCBDumpWOff;
247 } PVRSRV_TRANSFER_SGX_KICK, *PPVRSRV_TRANSFER_SGX_KICK;
249 #if defined(SGX_FEATURE_2D_HARDWARE)
250 typedef struct _PVRSRV_2D_SGX_KICK_
252 IMG_HANDLE hCCBMemInfo;
253 IMG_UINT32 ui32SharedCmdCCBOffset;
255 IMG_DEV_VIRTADDR sHW2DContextDevVAddr;
257 IMG_UINT32 ui32NumSrcSync;
258 IMG_HANDLE ahSrcSyncInfo[SGX_MAX_2D_SRC_SYNC_OPS];
261 IMG_HANDLE hDstSyncInfo;
264 IMG_HANDLE hTASyncInfo;
267 IMG_HANDLE h3DSyncInfo;
269 IMG_UINT32 ui32PDumpFlags;
271 IMG_UINT32 ui32CCBDumpWOff;
273 } PVRSRV_2D_SGX_KICK, *PPVRSRV_2D_SGX_KICK;
277 #define PVRSRV_SGX_DIFF_NUM_COUNTERS 9
279 typedef struct _PVRSRV_SGXDEV_DIFF_INFO_
281 IMG_UINT32 aui32Counters[PVRSRV_SGX_DIFF_NUM_COUNTERS];
282 IMG_UINT32 ui32Time[3];
283 IMG_UINT32 ui32Marker[2];
284 } PVRSRV_SGXDEV_DIFF_INFO, *PPVRSRV_SGXDEV_DIFF_INFO;