1 /*************************************************************************/ /*!
3 @Title Server bridge for rgxcmp
4 @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved
5 @Description Implements the server side of the bridge for rgxcmp
6 @License Dual MIT/GPLv2
8 The contents of this file are subject to the MIT license as set out below.
10 Permission is hereby granted, free of charge, to any person obtaining a copy
11 of this software and associated documentation files (the "Software"), to deal
12 in the Software without restriction, including without limitation the rights
13 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 copies of the Software, and to permit persons to whom the Software is
15 furnished to do so, subject to the following conditions:
17 The above copyright notice and this permission notice shall be included in
18 all copies or substantial portions of the Software.
20 Alternatively, the contents of this file may be used under the terms of
21 the GNU General Public License Version 2 ("GPL") in which case the provisions
22 of GPL are applicable instead of those above.
24 If you wish to allow use of your version of this file only under the terms of
25 GPL, and not to allow others to use your version of this file under the terms
26 of the MIT license, indicate your decision by deleting the provisions above
27 and replace them with the notice and other provisions required by GPL as set
28 out in the file called "GPL-COPYING" included in this distribution. If you do
29 not delete the provisions above, a recipient may use your version of this file
30 under the terms of either the MIT license or GPL.
32 This License is also included in this distribution in the file called
35 EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
36 PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
37 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
38 PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
39 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
40 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
41 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
42 */ /**************************************************************************/
45 #include <asm/uaccess.h>
49 #include "rgxcompute.h"
52 #include "common_rgxcmp_bridge.h"
55 #include "pvr_debug.h"
56 #include "connection_server.h"
57 #include "pvr_bridge.h"
58 #include "rgx_bridge.h"
62 #if defined (SUPPORT_AUTH)
66 #include <linux/slab.h>
68 /* ***************************************************************************
69 * Bridge proxy functions
73 RGXDestroyComputeContextResManProxy(IMG_HANDLE hResmanItem)
77 eError = ResManFreeResByPtr(hResmanItem);
79 /* Freeing a resource should never fail... */
80 PVR_ASSERT((eError == PVRSRV_OK) || (eError == PVRSRV_ERROR_RETRY));
87 /* ***************************************************************************
88 * Server-side bridge entry points
92 PVRSRVBridgeRGXCreateComputeContext(IMG_UINT32 ui32BridgeID,
93 PVRSRV_BRIDGE_IN_RGXCREATECOMPUTECONTEXT *psRGXCreateComputeContextIN,
94 PVRSRV_BRIDGE_OUT_RGXCREATECOMPUTECONTEXT *psRGXCreateComputeContextOUT,
95 CONNECTION_DATA *psConnection)
97 IMG_HANDLE hDevNodeInt = IMG_NULL;
98 IMG_BYTE *psFrameworkCmdInt = IMG_NULL;
99 IMG_HANDLE hPrivDataInt = IMG_NULL;
100 RGX_SERVER_COMPUTE_CONTEXT * psComputeContextInt = IMG_NULL;
101 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
103 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXCREATECOMPUTECONTEXT);
108 if (psRGXCreateComputeContextIN->ui32FrameworkCmdize != 0)
110 psFrameworkCmdInt = OSAllocMem(psRGXCreateComputeContextIN->ui32FrameworkCmdize * sizeof(IMG_BYTE));
111 if (!psFrameworkCmdInt)
113 psRGXCreateComputeContextOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
115 goto RGXCreateComputeContext_exit;
119 /* Copy the data over */
120 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXCreateComputeContextIN->psFrameworkCmd, psRGXCreateComputeContextIN->ui32FrameworkCmdize * sizeof(IMG_BYTE))
121 || (OSCopyFromUser(NULL, psFrameworkCmdInt, psRGXCreateComputeContextIN->psFrameworkCmd,
122 psRGXCreateComputeContextIN->ui32FrameworkCmdize * sizeof(IMG_BYTE)) != PVRSRV_OK) )
124 psRGXCreateComputeContextOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
126 goto RGXCreateComputeContext_exit;
130 /* Look up the address from the handle */
131 psRGXCreateComputeContextOUT->eError =
132 PVRSRVLookupHandle(psConnection->psHandleBase,
133 (IMG_HANDLE *) &hDevNodeInt,
134 psRGXCreateComputeContextIN->hDevNode,
135 PVRSRV_HANDLE_TYPE_DEV_NODE);
136 if(psRGXCreateComputeContextOUT->eError != PVRSRV_OK)
138 goto RGXCreateComputeContext_exit;
144 /* Look up the address from the handle */
145 psRGXCreateComputeContextOUT->eError =
146 PVRSRVLookupHandle(psConnection->psHandleBase,
147 (IMG_HANDLE *) &hPrivDataInt,
148 psRGXCreateComputeContextIN->hPrivData,
149 PVRSRV_HANDLE_TYPE_DEV_PRIV_DATA);
150 if(psRGXCreateComputeContextOUT->eError != PVRSRV_OK)
152 goto RGXCreateComputeContext_exit;
157 psRGXCreateComputeContextOUT->eError =
158 PVRSRVRGXCreateComputeContextKM(psConnection,
160 psRGXCreateComputeContextIN->ui32Priority,
161 psRGXCreateComputeContextIN->sMCUFenceAddr,
162 psRGXCreateComputeContextIN->ui32FrameworkCmdize,
165 &psComputeContextInt);
166 /* Exit early if bridged call fails */
167 if(psRGXCreateComputeContextOUT->eError != PVRSRV_OK)
169 goto RGXCreateComputeContext_exit;
172 /* Create a resman item and overwrite the handle with it */
173 hComputeContextInt2 = ResManRegisterRes(psConnection->hResManContext,
174 RESMAN_TYPE_RGX_SERVER_COMPUTE_CONTEXT,
176 (RESMAN_FREE_FN)&PVRSRVRGXDestroyComputeContextKM);
177 if (hComputeContextInt2 == IMG_NULL)
179 psRGXCreateComputeContextOUT->eError = PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE;
180 goto RGXCreateComputeContext_exit;
182 psRGXCreateComputeContextOUT->eError = PVRSRVAllocHandle(psConnection->psHandleBase,
183 &psRGXCreateComputeContextOUT->hComputeContext,
184 (IMG_HANDLE) hComputeContextInt2,
185 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT,
186 PVRSRV_HANDLE_ALLOC_FLAG_NONE
188 if (psRGXCreateComputeContextOUT->eError != PVRSRV_OK)
190 goto RGXCreateComputeContext_exit;
194 RGXCreateComputeContext_exit:
195 if (psRGXCreateComputeContextOUT->eError != PVRSRV_OK)
197 /* If we have a valid resman item we should undo the bridge function by freeing the resman item */
198 if (hComputeContextInt2)
200 PVRSRV_ERROR eError = ResManFreeResByPtr(hComputeContextInt2);
202 /* Freeing a resource should never fail... */
203 PVR_ASSERT((eError == PVRSRV_OK) || (eError == PVRSRV_ERROR_RETRY));
205 else if (psComputeContextInt)
207 PVRSRVRGXDestroyComputeContextKM(psComputeContextInt);
211 if (psFrameworkCmdInt)
212 OSFreeMem(psFrameworkCmdInt);
218 PVRSRVBridgeRGXDestroyComputeContext(IMG_UINT32 ui32BridgeID,
219 PVRSRV_BRIDGE_IN_RGXDESTROYCOMPUTECONTEXT *psRGXDestroyComputeContextIN,
220 PVRSRV_BRIDGE_OUT_RGXDESTROYCOMPUTECONTEXT *psRGXDestroyComputeContextOUT,
221 CONNECTION_DATA *psConnection)
223 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
225 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXDESTROYCOMPUTECONTEXT);
232 /* Look up the address from the handle */
233 psRGXDestroyComputeContextOUT->eError =
234 PVRSRVLookupHandle(psConnection->psHandleBase,
235 (IMG_HANDLE *) &hComputeContextInt2,
236 psRGXDestroyComputeContextIN->hComputeContext,
237 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
238 if(psRGXDestroyComputeContextOUT->eError != PVRSRV_OK)
240 goto RGXDestroyComputeContext_exit;
245 psRGXDestroyComputeContextOUT->eError = RGXDestroyComputeContextResManProxy(hComputeContextInt2);
246 /* Exit early if bridged call fails */
247 if(psRGXDestroyComputeContextOUT->eError != PVRSRV_OK)
249 goto RGXDestroyComputeContext_exit;
252 psRGXDestroyComputeContextOUT->eError =
253 PVRSRVReleaseHandle(psConnection->psHandleBase,
254 (IMG_HANDLE) psRGXDestroyComputeContextIN->hComputeContext,
255 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
258 RGXDestroyComputeContext_exit:
264 PVRSRVBridgeRGXKickCDM(IMG_UINT32 ui32BridgeID,
265 PVRSRV_BRIDGE_IN_RGXKICKCDM *psRGXKickCDMIN,
266 PVRSRV_BRIDGE_OUT_RGXKICKCDM *psRGXKickCDMOUT,
267 CONNECTION_DATA *psConnection)
269 RGX_SERVER_COMPUTE_CONTEXT * psComputeContextInt = IMG_NULL;
270 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
271 SYNC_PRIMITIVE_BLOCK * *psClientFenceUFOSyncPrimBlockInt = IMG_NULL;
272 IMG_HANDLE *hClientFenceUFOSyncPrimBlockInt2 = IMG_NULL;
273 IMG_UINT32 *ui32ClientFenceSyncOffsetInt = IMG_NULL;
274 IMG_UINT32 *ui32ClientFenceValueInt = IMG_NULL;
275 SYNC_PRIMITIVE_BLOCK * *psClientUpdateUFOSyncPrimBlockInt = IMG_NULL;
276 IMG_HANDLE *hClientUpdateUFOSyncPrimBlockInt2 = IMG_NULL;
277 IMG_UINT32 *ui32ClientUpdateSyncOffsetInt = IMG_NULL;
278 IMG_UINT32 *ui32ClientUpdateValueInt = IMG_NULL;
279 IMG_UINT32 *ui32ServerSyncFlagsInt = IMG_NULL;
280 SERVER_SYNC_PRIMITIVE * *psServerSyncsInt = IMG_NULL;
281 IMG_HANDLE *hServerSyncsInt2 = IMG_NULL;
282 IMG_BYTE *psDMCmdInt = IMG_NULL;
284 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXKICKCDM);
289 if (psRGXKickCDMIN->ui32ClientFenceCount != 0)
291 psClientFenceUFOSyncPrimBlockInt = OSAllocMem(psRGXKickCDMIN->ui32ClientFenceCount * sizeof(SYNC_PRIMITIVE_BLOCK *));
292 if (!psClientFenceUFOSyncPrimBlockInt)
294 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
296 goto RGXKickCDM_exit;
298 hClientFenceUFOSyncPrimBlockInt2 = OSAllocMem(psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE));
299 if (!hClientFenceUFOSyncPrimBlockInt2)
301 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
303 goto RGXKickCDM_exit;
307 /* Copy the data over */
308 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->phClientFenceUFOSyncPrimBlock, psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE))
309 || (OSCopyFromUser(NULL, hClientFenceUFOSyncPrimBlockInt2, psRGXKickCDMIN->phClientFenceUFOSyncPrimBlock,
310 psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
312 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
314 goto RGXKickCDM_exit;
316 if (psRGXKickCDMIN->ui32ClientFenceCount != 0)
318 ui32ClientFenceSyncOffsetInt = OSAllocMem(psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32));
319 if (!ui32ClientFenceSyncOffsetInt)
321 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
323 goto RGXKickCDM_exit;
327 /* Copy the data over */
328 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->pui32ClientFenceSyncOffset, psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32))
329 || (OSCopyFromUser(NULL, ui32ClientFenceSyncOffsetInt, psRGXKickCDMIN->pui32ClientFenceSyncOffset,
330 psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
332 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
334 goto RGXKickCDM_exit;
336 if (psRGXKickCDMIN->ui32ClientFenceCount != 0)
338 ui32ClientFenceValueInt = OSAllocMem(psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32));
339 if (!ui32ClientFenceValueInt)
341 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
343 goto RGXKickCDM_exit;
347 /* Copy the data over */
348 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->pui32ClientFenceValue, psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32))
349 || (OSCopyFromUser(NULL, ui32ClientFenceValueInt, psRGXKickCDMIN->pui32ClientFenceValue,
350 psRGXKickCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
352 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
354 goto RGXKickCDM_exit;
356 if (psRGXKickCDMIN->ui32ClientUpdateCount != 0)
358 psClientUpdateUFOSyncPrimBlockInt = OSAllocMem(psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(SYNC_PRIMITIVE_BLOCK *));
359 if (!psClientUpdateUFOSyncPrimBlockInt)
361 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
363 goto RGXKickCDM_exit;
365 hClientUpdateUFOSyncPrimBlockInt2 = OSAllocMem(psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE));
366 if (!hClientUpdateUFOSyncPrimBlockInt2)
368 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
370 goto RGXKickCDM_exit;
374 /* Copy the data over */
375 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->phClientUpdateUFOSyncPrimBlock, psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE))
376 || (OSCopyFromUser(NULL, hClientUpdateUFOSyncPrimBlockInt2, psRGXKickCDMIN->phClientUpdateUFOSyncPrimBlock,
377 psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
379 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
381 goto RGXKickCDM_exit;
383 if (psRGXKickCDMIN->ui32ClientUpdateCount != 0)
385 ui32ClientUpdateSyncOffsetInt = OSAllocMem(psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32));
386 if (!ui32ClientUpdateSyncOffsetInt)
388 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
390 goto RGXKickCDM_exit;
394 /* Copy the data over */
395 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->pui32ClientUpdateSyncOffset, psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32))
396 || (OSCopyFromUser(NULL, ui32ClientUpdateSyncOffsetInt, psRGXKickCDMIN->pui32ClientUpdateSyncOffset,
397 psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
399 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
401 goto RGXKickCDM_exit;
403 if (psRGXKickCDMIN->ui32ClientUpdateCount != 0)
405 ui32ClientUpdateValueInt = OSAllocMem(psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32));
406 if (!ui32ClientUpdateValueInt)
408 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
410 goto RGXKickCDM_exit;
414 /* Copy the data over */
415 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->pui32ClientUpdateValue, psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32))
416 || (OSCopyFromUser(NULL, ui32ClientUpdateValueInt, psRGXKickCDMIN->pui32ClientUpdateValue,
417 psRGXKickCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
419 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
421 goto RGXKickCDM_exit;
423 if (psRGXKickCDMIN->ui32ServerSyncCount != 0)
425 ui32ServerSyncFlagsInt = OSAllocMem(psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32));
426 if (!ui32ServerSyncFlagsInt)
428 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
430 goto RGXKickCDM_exit;
434 /* Copy the data over */
435 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->pui32ServerSyncFlags, psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32))
436 || (OSCopyFromUser(NULL, ui32ServerSyncFlagsInt, psRGXKickCDMIN->pui32ServerSyncFlags,
437 psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
439 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
441 goto RGXKickCDM_exit;
443 if (psRGXKickCDMIN->ui32ServerSyncCount != 0)
445 psServerSyncsInt = OSAllocMem(psRGXKickCDMIN->ui32ServerSyncCount * sizeof(SERVER_SYNC_PRIMITIVE *));
446 if (!psServerSyncsInt)
448 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
450 goto RGXKickCDM_exit;
452 hServerSyncsInt2 = OSAllocMem(psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE));
453 if (!hServerSyncsInt2)
455 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
457 goto RGXKickCDM_exit;
461 /* Copy the data over */
462 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->phServerSyncs, psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE))
463 || (OSCopyFromUser(NULL, hServerSyncsInt2, psRGXKickCDMIN->phServerSyncs,
464 psRGXKickCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
466 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
468 goto RGXKickCDM_exit;
470 if (psRGXKickCDMIN->ui32CmdSize != 0)
472 psDMCmdInt = OSAllocMem(psRGXKickCDMIN->ui32CmdSize * sizeof(IMG_BYTE));
475 psRGXKickCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
477 goto RGXKickCDM_exit;
481 /* Copy the data over */
482 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickCDMIN->psDMCmd, psRGXKickCDMIN->ui32CmdSize * sizeof(IMG_BYTE))
483 || (OSCopyFromUser(NULL, psDMCmdInt, psRGXKickCDMIN->psDMCmd,
484 psRGXKickCDMIN->ui32CmdSize * sizeof(IMG_BYTE)) != PVRSRV_OK) )
486 psRGXKickCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
488 goto RGXKickCDM_exit;
492 /* Look up the address from the handle */
493 psRGXKickCDMOUT->eError =
494 PVRSRVLookupHandle(psConnection->psHandleBase,
495 (IMG_HANDLE *) &hComputeContextInt2,
496 psRGXKickCDMIN->hComputeContext,
497 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
498 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
500 goto RGXKickCDM_exit;
503 /* Look up the data from the resman address */
504 psRGXKickCDMOUT->eError = ResManFindPrivateDataByPtr(hComputeContextInt2, (IMG_VOID **) &psComputeContextInt);
506 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
508 goto RGXKickCDM_exit;
515 for (i=0;i<psRGXKickCDMIN->ui32ClientFenceCount;i++)
518 /* Look up the address from the handle */
519 psRGXKickCDMOUT->eError =
520 PVRSRVLookupHandle(psConnection->psHandleBase,
521 (IMG_HANDLE *) &hClientFenceUFOSyncPrimBlockInt2[i],
522 hClientFenceUFOSyncPrimBlockInt2[i],
523 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
524 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
526 goto RGXKickCDM_exit;
529 /* Look up the data from the resman address */
530 psRGXKickCDMOUT->eError = ResManFindPrivateDataByPtr(hClientFenceUFOSyncPrimBlockInt2[i], (IMG_VOID **) &psClientFenceUFOSyncPrimBlockInt[i]);
532 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
534 goto RGXKickCDM_exit;
543 for (i=0;i<psRGXKickCDMIN->ui32ClientUpdateCount;i++)
546 /* Look up the address from the handle */
547 psRGXKickCDMOUT->eError =
548 PVRSRVLookupHandle(psConnection->psHandleBase,
549 (IMG_HANDLE *) &hClientUpdateUFOSyncPrimBlockInt2[i],
550 hClientUpdateUFOSyncPrimBlockInt2[i],
551 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
552 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
554 goto RGXKickCDM_exit;
557 /* Look up the data from the resman address */
558 psRGXKickCDMOUT->eError = ResManFindPrivateDataByPtr(hClientUpdateUFOSyncPrimBlockInt2[i], (IMG_VOID **) &psClientUpdateUFOSyncPrimBlockInt[i]);
560 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
562 goto RGXKickCDM_exit;
571 for (i=0;i<psRGXKickCDMIN->ui32ServerSyncCount;i++)
574 /* Look up the address from the handle */
575 psRGXKickCDMOUT->eError =
576 PVRSRVLookupHandle(psConnection->psHandleBase,
577 (IMG_HANDLE *) &hServerSyncsInt2[i],
579 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
580 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
582 goto RGXKickCDM_exit;
585 /* Look up the data from the resman address */
586 psRGXKickCDMOUT->eError = ResManFindPrivateDataByPtr(hServerSyncsInt2[i], (IMG_VOID **) &psServerSyncsInt[i]);
588 if(psRGXKickCDMOUT->eError != PVRSRV_OK)
590 goto RGXKickCDM_exit;
596 psRGXKickCDMOUT->eError =
599 psRGXKickCDMIN->ui32ClientFenceCount,
600 psClientFenceUFOSyncPrimBlockInt,
601 ui32ClientFenceSyncOffsetInt,
602 ui32ClientFenceValueInt,
603 psRGXKickCDMIN->ui32ClientUpdateCount,
604 psClientUpdateUFOSyncPrimBlockInt,
605 ui32ClientUpdateSyncOffsetInt,
606 ui32ClientUpdateValueInt,
607 psRGXKickCDMIN->ui32ServerSyncCount,
608 ui32ServerSyncFlagsInt,
610 psRGXKickCDMIN->ui32CmdSize,
612 psRGXKickCDMIN->bbPDumpContinuous,
613 psRGXKickCDMIN->ui32ExternalJobReference,
614 psRGXKickCDMIN->ui32InternalJobReference);
619 if (psClientFenceUFOSyncPrimBlockInt)
620 OSFreeMem(psClientFenceUFOSyncPrimBlockInt);
621 if (hClientFenceUFOSyncPrimBlockInt2)
622 OSFreeMem(hClientFenceUFOSyncPrimBlockInt2);
623 if (ui32ClientFenceSyncOffsetInt)
624 OSFreeMem(ui32ClientFenceSyncOffsetInt);
625 if (ui32ClientFenceValueInt)
626 OSFreeMem(ui32ClientFenceValueInt);
627 if (psClientUpdateUFOSyncPrimBlockInt)
628 OSFreeMem(psClientUpdateUFOSyncPrimBlockInt);
629 if (hClientUpdateUFOSyncPrimBlockInt2)
630 OSFreeMem(hClientUpdateUFOSyncPrimBlockInt2);
631 if (ui32ClientUpdateSyncOffsetInt)
632 OSFreeMem(ui32ClientUpdateSyncOffsetInt);
633 if (ui32ClientUpdateValueInt)
634 OSFreeMem(ui32ClientUpdateValueInt);
635 if (ui32ServerSyncFlagsInt)
636 OSFreeMem(ui32ServerSyncFlagsInt);
637 if (psServerSyncsInt)
638 OSFreeMem(psServerSyncsInt);
639 if (hServerSyncsInt2)
640 OSFreeMem(hServerSyncsInt2);
642 OSFreeMem(psDMCmdInt);
648 PVRSRVBridgeRGXFlushComputeData(IMG_UINT32 ui32BridgeID,
649 PVRSRV_BRIDGE_IN_RGXFLUSHCOMPUTEDATA *psRGXFlushComputeDataIN,
650 PVRSRV_BRIDGE_OUT_RGXFLUSHCOMPUTEDATA *psRGXFlushComputeDataOUT,
651 CONNECTION_DATA *psConnection)
653 RGX_SERVER_COMPUTE_CONTEXT * psComputeContextInt = IMG_NULL;
654 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
656 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXFLUSHCOMPUTEDATA);
663 /* Look up the address from the handle */
664 psRGXFlushComputeDataOUT->eError =
665 PVRSRVLookupHandle(psConnection->psHandleBase,
666 (IMG_HANDLE *) &hComputeContextInt2,
667 psRGXFlushComputeDataIN->hComputeContext,
668 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
669 if(psRGXFlushComputeDataOUT->eError != PVRSRV_OK)
671 goto RGXFlushComputeData_exit;
674 /* Look up the data from the resman address */
675 psRGXFlushComputeDataOUT->eError = ResManFindPrivateDataByPtr(hComputeContextInt2, (IMG_VOID **) &psComputeContextInt);
677 if(psRGXFlushComputeDataOUT->eError != PVRSRV_OK)
679 goto RGXFlushComputeData_exit;
683 psRGXFlushComputeDataOUT->eError =
684 PVRSRVRGXFlushComputeDataKM(
685 psComputeContextInt);
689 RGXFlushComputeData_exit:
695 PVRSRVBridgeRGXSetComputeContextPriority(IMG_UINT32 ui32BridgeID,
696 PVRSRV_BRIDGE_IN_RGXSETCOMPUTECONTEXTPRIORITY *psRGXSetComputeContextPriorityIN,
697 PVRSRV_BRIDGE_OUT_RGXSETCOMPUTECONTEXTPRIORITY *psRGXSetComputeContextPriorityOUT,
698 CONNECTION_DATA *psConnection)
700 RGX_SERVER_COMPUTE_CONTEXT * psComputeContextInt = IMG_NULL;
701 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
703 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXSETCOMPUTECONTEXTPRIORITY);
710 /* Look up the address from the handle */
711 psRGXSetComputeContextPriorityOUT->eError =
712 PVRSRVLookupHandle(psConnection->psHandleBase,
713 (IMG_HANDLE *) &hComputeContextInt2,
714 psRGXSetComputeContextPriorityIN->hComputeContext,
715 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
716 if(psRGXSetComputeContextPriorityOUT->eError != PVRSRV_OK)
718 goto RGXSetComputeContextPriority_exit;
721 /* Look up the data from the resman address */
722 psRGXSetComputeContextPriorityOUT->eError = ResManFindPrivateDataByPtr(hComputeContextInt2, (IMG_VOID **) &psComputeContextInt);
724 if(psRGXSetComputeContextPriorityOUT->eError != PVRSRV_OK)
726 goto RGXSetComputeContextPriority_exit;
730 psRGXSetComputeContextPriorityOUT->eError =
731 PVRSRVRGXSetComputeContextPriorityKM(psConnection,
733 psRGXSetComputeContextPriorityIN->ui32Priority);
737 RGXSetComputeContextPriority_exit:
743 PVRSRVBridgeRGXKickSyncCDM(IMG_UINT32 ui32BridgeID,
744 PVRSRV_BRIDGE_IN_RGXKICKSYNCCDM *psRGXKickSyncCDMIN,
745 PVRSRV_BRIDGE_OUT_RGXKICKSYNCCDM *psRGXKickSyncCDMOUT,
746 CONNECTION_DATA *psConnection)
748 RGX_SERVER_COMPUTE_CONTEXT * psComputeContextInt = IMG_NULL;
749 IMG_HANDLE hComputeContextInt2 = IMG_NULL;
750 SYNC_PRIMITIVE_BLOCK * *psClientFenceUFOSyncPrimBlockInt = IMG_NULL;
751 IMG_HANDLE *hClientFenceUFOSyncPrimBlockInt2 = IMG_NULL;
752 IMG_UINT32 *ui32ClientFenceSyncOffsetInt = IMG_NULL;
753 IMG_UINT32 *ui32ClientFenceValueInt = IMG_NULL;
754 SYNC_PRIMITIVE_BLOCK * *psClientUpdateUFOSyncPrimBlockInt = IMG_NULL;
755 IMG_HANDLE *hClientUpdateUFOSyncPrimBlockInt2 = IMG_NULL;
756 IMG_UINT32 *ui32ClientUpdateSyncOffsetInt = IMG_NULL;
757 IMG_UINT32 *ui32ClientUpdateValueInt = IMG_NULL;
758 IMG_UINT32 *ui32ServerSyncFlagsInt = IMG_NULL;
759 SERVER_SYNC_PRIMITIVE * *psServerSyncsInt = IMG_NULL;
760 IMG_HANDLE *hServerSyncsInt2 = IMG_NULL;
761 IMG_INT32 *i32FenceFDsInt = IMG_NULL;
763 PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_RGXCMP_RGXKICKSYNCCDM);
768 if (psRGXKickSyncCDMIN->ui32ClientFenceCount != 0)
770 psClientFenceUFOSyncPrimBlockInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(SYNC_PRIMITIVE_BLOCK *));
771 if (!psClientFenceUFOSyncPrimBlockInt)
773 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
775 goto RGXKickSyncCDM_exit;
777 hClientFenceUFOSyncPrimBlockInt2 = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE));
778 if (!hClientFenceUFOSyncPrimBlockInt2)
780 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
782 goto RGXKickSyncCDM_exit;
786 /* Copy the data over */
787 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->phClientFenceUFOSyncPrimBlock, psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE))
788 || (OSCopyFromUser(NULL, hClientFenceUFOSyncPrimBlockInt2, psRGXKickSyncCDMIN->phClientFenceUFOSyncPrimBlock,
789 psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
791 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
793 goto RGXKickSyncCDM_exit;
795 if (psRGXKickSyncCDMIN->ui32ClientFenceCount != 0)
797 ui32ClientFenceSyncOffsetInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32));
798 if (!ui32ClientFenceSyncOffsetInt)
800 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
802 goto RGXKickSyncCDM_exit;
806 /* Copy the data over */
807 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pui32ClientFenceSyncOffset, psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32))
808 || (OSCopyFromUser(NULL, ui32ClientFenceSyncOffsetInt, psRGXKickSyncCDMIN->pui32ClientFenceSyncOffset,
809 psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
811 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
813 goto RGXKickSyncCDM_exit;
815 if (psRGXKickSyncCDMIN->ui32ClientFenceCount != 0)
817 ui32ClientFenceValueInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32));
818 if (!ui32ClientFenceValueInt)
820 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
822 goto RGXKickSyncCDM_exit;
826 /* Copy the data over */
827 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pui32ClientFenceValue, psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32))
828 || (OSCopyFromUser(NULL, ui32ClientFenceValueInt, psRGXKickSyncCDMIN->pui32ClientFenceValue,
829 psRGXKickSyncCDMIN->ui32ClientFenceCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
831 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
833 goto RGXKickSyncCDM_exit;
835 if (psRGXKickSyncCDMIN->ui32ClientUpdateCount != 0)
837 psClientUpdateUFOSyncPrimBlockInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(SYNC_PRIMITIVE_BLOCK *));
838 if (!psClientUpdateUFOSyncPrimBlockInt)
840 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
842 goto RGXKickSyncCDM_exit;
844 hClientUpdateUFOSyncPrimBlockInt2 = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE));
845 if (!hClientUpdateUFOSyncPrimBlockInt2)
847 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
849 goto RGXKickSyncCDM_exit;
853 /* Copy the data over */
854 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->phClientUpdateUFOSyncPrimBlock, psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE))
855 || (OSCopyFromUser(NULL, hClientUpdateUFOSyncPrimBlockInt2, psRGXKickSyncCDMIN->phClientUpdateUFOSyncPrimBlock,
856 psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
858 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
860 goto RGXKickSyncCDM_exit;
862 if (psRGXKickSyncCDMIN->ui32ClientUpdateCount != 0)
864 ui32ClientUpdateSyncOffsetInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32));
865 if (!ui32ClientUpdateSyncOffsetInt)
867 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
869 goto RGXKickSyncCDM_exit;
873 /* Copy the data over */
874 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pui32ClientUpdateSyncOffset, psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32))
875 || (OSCopyFromUser(NULL, ui32ClientUpdateSyncOffsetInt, psRGXKickSyncCDMIN->pui32ClientUpdateSyncOffset,
876 psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
878 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
880 goto RGXKickSyncCDM_exit;
882 if (psRGXKickSyncCDMIN->ui32ClientUpdateCount != 0)
884 ui32ClientUpdateValueInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32));
885 if (!ui32ClientUpdateValueInt)
887 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
889 goto RGXKickSyncCDM_exit;
893 /* Copy the data over */
894 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pui32ClientUpdateValue, psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32))
895 || (OSCopyFromUser(NULL, ui32ClientUpdateValueInt, psRGXKickSyncCDMIN->pui32ClientUpdateValue,
896 psRGXKickSyncCDMIN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
898 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
900 goto RGXKickSyncCDM_exit;
902 if (psRGXKickSyncCDMIN->ui32ServerSyncCount != 0)
904 ui32ServerSyncFlagsInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32));
905 if (!ui32ServerSyncFlagsInt)
907 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
909 goto RGXKickSyncCDM_exit;
913 /* Copy the data over */
914 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pui32ServerSyncFlags, psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32))
915 || (OSCopyFromUser(NULL, ui32ServerSyncFlagsInt, psRGXKickSyncCDMIN->pui32ServerSyncFlags,
916 psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
918 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
920 goto RGXKickSyncCDM_exit;
922 if (psRGXKickSyncCDMIN->ui32ServerSyncCount != 0)
924 psServerSyncsInt = OSAllocMem(psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(SERVER_SYNC_PRIMITIVE *));
925 if (!psServerSyncsInt)
927 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
929 goto RGXKickSyncCDM_exit;
931 hServerSyncsInt2 = OSAllocMem(psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE));
932 if (!hServerSyncsInt2)
934 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
936 goto RGXKickSyncCDM_exit;
940 /* Copy the data over */
941 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->phServerSyncs, psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE))
942 || (OSCopyFromUser(NULL, hServerSyncsInt2, psRGXKickSyncCDMIN->phServerSyncs,
943 psRGXKickSyncCDMIN->ui32ServerSyncCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
945 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
947 goto RGXKickSyncCDM_exit;
949 if (psRGXKickSyncCDMIN->ui32NumFenceFDs != 0)
951 i32FenceFDsInt = OSAllocMem(psRGXKickSyncCDMIN->ui32NumFenceFDs * sizeof(IMG_INT32));
954 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
956 goto RGXKickSyncCDM_exit;
960 /* Copy the data over */
961 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psRGXKickSyncCDMIN->pi32FenceFDs, psRGXKickSyncCDMIN->ui32NumFenceFDs * sizeof(IMG_INT32))
962 || (OSCopyFromUser(NULL, i32FenceFDsInt, psRGXKickSyncCDMIN->pi32FenceFDs,
963 psRGXKickSyncCDMIN->ui32NumFenceFDs * sizeof(IMG_INT32)) != PVRSRV_OK) )
965 psRGXKickSyncCDMOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
967 goto RGXKickSyncCDM_exit;
971 /* Look up the address from the handle */
972 psRGXKickSyncCDMOUT->eError =
973 PVRSRVLookupHandle(psConnection->psHandleBase,
974 (IMG_HANDLE *) &hComputeContextInt2,
975 psRGXKickSyncCDMIN->hComputeContext,
976 PVRSRV_HANDLE_TYPE_RGX_SERVER_COMPUTE_CONTEXT);
977 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
979 goto RGXKickSyncCDM_exit;
982 /* Look up the data from the resman address */
983 psRGXKickSyncCDMOUT->eError = ResManFindPrivateDataByPtr(hComputeContextInt2, (IMG_VOID **) &psComputeContextInt);
985 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
987 goto RGXKickSyncCDM_exit;
994 for (i=0;i<psRGXKickSyncCDMIN->ui32ClientFenceCount;i++)
997 /* Look up the address from the handle */
998 psRGXKickSyncCDMOUT->eError =
999 PVRSRVLookupHandle(psConnection->psHandleBase,
1000 (IMG_HANDLE *) &hClientFenceUFOSyncPrimBlockInt2[i],
1001 hClientFenceUFOSyncPrimBlockInt2[i],
1002 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1003 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1005 goto RGXKickSyncCDM_exit;
1008 /* Look up the data from the resman address */
1009 psRGXKickSyncCDMOUT->eError = ResManFindPrivateDataByPtr(hClientFenceUFOSyncPrimBlockInt2[i], (IMG_VOID **) &psClientFenceUFOSyncPrimBlockInt[i]);
1011 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1013 goto RGXKickSyncCDM_exit;
1022 for (i=0;i<psRGXKickSyncCDMIN->ui32ClientUpdateCount;i++)
1025 /* Look up the address from the handle */
1026 psRGXKickSyncCDMOUT->eError =
1027 PVRSRVLookupHandle(psConnection->psHandleBase,
1028 (IMG_HANDLE *) &hClientUpdateUFOSyncPrimBlockInt2[i],
1029 hClientUpdateUFOSyncPrimBlockInt2[i],
1030 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1031 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1033 goto RGXKickSyncCDM_exit;
1036 /* Look up the data from the resman address */
1037 psRGXKickSyncCDMOUT->eError = ResManFindPrivateDataByPtr(hClientUpdateUFOSyncPrimBlockInt2[i], (IMG_VOID **) &psClientUpdateUFOSyncPrimBlockInt[i]);
1039 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1041 goto RGXKickSyncCDM_exit;
1050 for (i=0;i<psRGXKickSyncCDMIN->ui32ServerSyncCount;i++)
1053 /* Look up the address from the handle */
1054 psRGXKickSyncCDMOUT->eError =
1055 PVRSRVLookupHandle(psConnection->psHandleBase,
1056 (IMG_HANDLE *) &hServerSyncsInt2[i],
1057 hServerSyncsInt2[i],
1058 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
1059 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1061 goto RGXKickSyncCDM_exit;
1064 /* Look up the data from the resman address */
1065 psRGXKickSyncCDMOUT->eError = ResManFindPrivateDataByPtr(hServerSyncsInt2[i], (IMG_VOID **) &psServerSyncsInt[i]);
1067 if(psRGXKickSyncCDMOUT->eError != PVRSRV_OK)
1069 goto RGXKickSyncCDM_exit;
1075 psRGXKickSyncCDMOUT->eError =
1076 PVRSRVRGXKickSyncCDMKM(
1077 psComputeContextInt,
1078 psRGXKickSyncCDMIN->ui32ClientFenceCount,
1079 psClientFenceUFOSyncPrimBlockInt,
1080 ui32ClientFenceSyncOffsetInt,
1081 ui32ClientFenceValueInt,
1082 psRGXKickSyncCDMIN->ui32ClientUpdateCount,
1083 psClientUpdateUFOSyncPrimBlockInt,
1084 ui32ClientUpdateSyncOffsetInt,
1085 ui32ClientUpdateValueInt,
1086 psRGXKickSyncCDMIN->ui32ServerSyncCount,
1087 ui32ServerSyncFlagsInt,
1089 psRGXKickSyncCDMIN->ui32NumFenceFDs,
1091 psRGXKickSyncCDMIN->bbPDumpContinuous);
1095 RGXKickSyncCDM_exit:
1096 if (psClientFenceUFOSyncPrimBlockInt)
1097 OSFreeMem(psClientFenceUFOSyncPrimBlockInt);
1098 if (hClientFenceUFOSyncPrimBlockInt2)
1099 OSFreeMem(hClientFenceUFOSyncPrimBlockInt2);
1100 if (ui32ClientFenceSyncOffsetInt)
1101 OSFreeMem(ui32ClientFenceSyncOffsetInt);
1102 if (ui32ClientFenceValueInt)
1103 OSFreeMem(ui32ClientFenceValueInt);
1104 if (psClientUpdateUFOSyncPrimBlockInt)
1105 OSFreeMem(psClientUpdateUFOSyncPrimBlockInt);
1106 if (hClientUpdateUFOSyncPrimBlockInt2)
1107 OSFreeMem(hClientUpdateUFOSyncPrimBlockInt2);
1108 if (ui32ClientUpdateSyncOffsetInt)
1109 OSFreeMem(ui32ClientUpdateSyncOffsetInt);
1110 if (ui32ClientUpdateValueInt)
1111 OSFreeMem(ui32ClientUpdateValueInt);
1112 if (ui32ServerSyncFlagsInt)
1113 OSFreeMem(ui32ServerSyncFlagsInt);
1114 if (psServerSyncsInt)
1115 OSFreeMem(psServerSyncsInt);
1116 if (hServerSyncsInt2)
1117 OSFreeMem(hServerSyncsInt2);
1119 OSFreeMem(i32FenceFDsInt);
1126 /* ***************************************************************************
1127 * Server bridge dispatch related glue
1130 PVRSRV_ERROR RegisterRGXCMPFunctions(IMG_VOID);
1131 IMG_VOID UnregisterRGXCMPFunctions(IMG_VOID);
1134 * Register all RGXCMP functions with services
1136 PVRSRV_ERROR RegisterRGXCMPFunctions(IMG_VOID)
1138 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXCREATECOMPUTECONTEXT, PVRSRVBridgeRGXCreateComputeContext);
1139 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXDESTROYCOMPUTECONTEXT, PVRSRVBridgeRGXDestroyComputeContext);
1140 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXKICKCDM, PVRSRVBridgeRGXKickCDM);
1141 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXFLUSHCOMPUTEDATA, PVRSRVBridgeRGXFlushComputeData);
1142 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXSETCOMPUTECONTEXTPRIORITY, PVRSRVBridgeRGXSetComputeContextPriority);
1143 SetDispatchTableEntry(PVRSRV_BRIDGE_RGXCMP_RGXKICKSYNCCDM, PVRSRVBridgeRGXKickSyncCDM);
1149 * Unregister all rgxcmp functions with services
1151 IMG_VOID UnregisterRGXCMPFunctions(IMG_VOID)