1 /*************************************************************************/ /*!
3 @Title Server bridge for sync
4 @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved
5 @Description Implements the server side of the bridge for sync
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 "sync_server.h"
53 #include "common_sync_bridge.h"
56 #include "pvr_debug.h"
57 #include "connection_server.h"
58 #include "pvr_bridge.h"
59 #include "rgx_bridge.h"
63 #if defined (SUPPORT_AUTH)
67 #include <linux/slab.h>
72 /* ***************************************************************************
73 * Server-side bridge entry points
77 PVRSRVBridgeAllocSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
78 PVRSRV_BRIDGE_IN_ALLOCSYNCPRIMITIVEBLOCK *psAllocSyncPrimitiveBlockIN,
79 PVRSRV_BRIDGE_OUT_ALLOCSYNCPRIMITIVEBLOCK *psAllocSyncPrimitiveBlockOUT,
80 CONNECTION_DATA *psConnection)
82 IMG_HANDLE hDevNodeInt = IMG_NULL;
83 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
84 DEVMEM_EXPORTCOOKIE * psExportCookieInt = IMG_NULL;
88 psAllocSyncPrimitiveBlockOUT->hSyncHandle = IMG_NULL;
94 /* Look up the address from the handle */
95 psAllocSyncPrimitiveBlockOUT->eError =
96 PVRSRVLookupHandle(psConnection->psHandleBase,
97 (IMG_VOID **) &hDevNodeInt,
98 psAllocSyncPrimitiveBlockIN->hDevNode,
99 PVRSRV_HANDLE_TYPE_DEV_NODE);
100 if(psAllocSyncPrimitiveBlockOUT->eError != PVRSRV_OK)
102 goto AllocSyncPrimitiveBlock_exit;
107 psAllocSyncPrimitiveBlockOUT->eError =
108 PVRSRVAllocSyncPrimitiveBlockKM(psConnection,
111 &psAllocSyncPrimitiveBlockOUT->ui32SyncPrimVAddr,
112 &psAllocSyncPrimitiveBlockOUT->ui32SyncPrimBlockSize,
114 /* Exit early if bridged call fails */
115 if(psAllocSyncPrimitiveBlockOUT->eError != PVRSRV_OK)
117 goto AllocSyncPrimitiveBlock_exit;
121 psAllocSyncPrimitiveBlockOUT->eError = PVRSRVAllocHandle(psConnection->psHandleBase,
122 &psAllocSyncPrimitiveBlockOUT->hSyncHandle,
123 (IMG_VOID *) psSyncHandleInt,
124 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK,
125 PVRSRV_HANDLE_ALLOC_FLAG_MULTI
126 ,(PFN_HANDLE_RELEASE)&PVRSRVFreeSyncPrimitiveBlockKM);
127 if (psAllocSyncPrimitiveBlockOUT->eError != PVRSRV_OK)
129 goto AllocSyncPrimitiveBlock_exit;
133 psAllocSyncPrimitiveBlockOUT->eError = PVRSRVAllocSubHandle(psConnection->psHandleBase,
134 &psAllocSyncPrimitiveBlockOUT->hExportCookie,
135 (IMG_VOID *) psExportCookieInt,
136 PVRSRV_HANDLE_TYPE_SERVER_EXPORTCOOKIE,
137 PVRSRV_HANDLE_ALLOC_FLAG_NONE
138 ,psAllocSyncPrimitiveBlockOUT->hSyncHandle);
139 if (psAllocSyncPrimitiveBlockOUT->eError != PVRSRV_OK)
141 goto AllocSyncPrimitiveBlock_exit;
147 AllocSyncPrimitiveBlock_exit:
148 if (psAllocSyncPrimitiveBlockOUT->eError != PVRSRV_OK)
150 if (psAllocSyncPrimitiveBlockOUT->hSyncHandle)
152 PVRSRV_ERROR eError = PVRSRVReleaseHandle(psConnection->psHandleBase,
153 (IMG_HANDLE) psAllocSyncPrimitiveBlockOUT->hSyncHandle,
154 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
156 /* Releasing the handle should free/destroy/release the resource. This should never fail... */
157 PVR_ASSERT((eError == PVRSRV_OK) || (eError == PVRSRV_ERROR_RETRY));
159 /* Avoid freeing/destroying/releasing the resource a second time below */
160 psSyncHandleInt = IMG_NULL;
166 PVRSRVFreeSyncPrimitiveBlockKM(psSyncHandleInt);
175 PVRSRVBridgeFreeSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
176 PVRSRV_BRIDGE_IN_FREESYNCPRIMITIVEBLOCK *psFreeSyncPrimitiveBlockIN,
177 PVRSRV_BRIDGE_OUT_FREESYNCPRIMITIVEBLOCK *psFreeSyncPrimitiveBlockOUT,
178 CONNECTION_DATA *psConnection)
189 psFreeSyncPrimitiveBlockOUT->eError =
190 PVRSRVReleaseHandle(psConnection->psHandleBase,
191 (IMG_HANDLE) psFreeSyncPrimitiveBlockIN->hSyncHandle,
192 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
193 if ((psFreeSyncPrimitiveBlockOUT->eError != PVRSRV_OK) && (psFreeSyncPrimitiveBlockOUT->eError != PVRSRV_ERROR_RETRY))
196 goto FreeSyncPrimitiveBlock_exit;
201 FreeSyncPrimitiveBlock_exit:
207 PVRSRVBridgeSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
208 PVRSRV_BRIDGE_IN_SYNCPRIMSET *psSyncPrimSetIN,
209 PVRSRV_BRIDGE_OUT_SYNCPRIMSET *psSyncPrimSetOUT,
210 CONNECTION_DATA *psConnection)
212 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
221 /* Look up the address from the handle */
222 psSyncPrimSetOUT->eError =
223 PVRSRVLookupHandle(psConnection->psHandleBase,
224 (IMG_VOID **) &psSyncHandleInt,
225 psSyncPrimSetIN->hSyncHandle,
226 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
227 if(psSyncPrimSetOUT->eError != PVRSRV_OK)
229 goto SyncPrimSet_exit;
234 psSyncPrimSetOUT->eError =
237 psSyncPrimSetIN->ui32Index,
238 psSyncPrimSetIN->ui32Value);
249 PVRSRVBridgeServerSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
250 PVRSRV_BRIDGE_IN_SERVERSYNCPRIMSET *psServerSyncPrimSetIN,
251 PVRSRV_BRIDGE_OUT_SERVERSYNCPRIMSET *psServerSyncPrimSetOUT,
252 CONNECTION_DATA *psConnection)
254 SERVER_SYNC_PRIMITIVE * psSyncHandleInt = IMG_NULL;
263 /* Look up the address from the handle */
264 psServerSyncPrimSetOUT->eError =
265 PVRSRVLookupHandle(psConnection->psHandleBase,
266 (IMG_VOID **) &psSyncHandleInt,
267 psServerSyncPrimSetIN->hSyncHandle,
268 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
269 if(psServerSyncPrimSetOUT->eError != PVRSRV_OK)
271 goto ServerSyncPrimSet_exit;
276 psServerSyncPrimSetOUT->eError =
277 PVRSRVServerSyncPrimSetKM(
279 psServerSyncPrimSetIN->ui32Value);
284 ServerSyncPrimSet_exit:
290 PVRSRVBridgeSyncRecordRemoveByHandle(IMG_UINT32 ui32DispatchTableEntry,
291 PVRSRV_BRIDGE_IN_SYNCRECORDREMOVEBYHANDLE *psSyncRecordRemoveByHandleIN,
292 PVRSRV_BRIDGE_OUT_SYNCRECORDREMOVEBYHANDLE *psSyncRecordRemoveByHandleOUT,
293 CONNECTION_DATA *psConnection)
304 psSyncRecordRemoveByHandleOUT->eError =
305 PVRSRVReleaseHandle(psConnection->psHandleBase,
306 (IMG_HANDLE) psSyncRecordRemoveByHandleIN->hhRecord,
307 PVRSRV_HANDLE_TYPE_SYNC_RECORD_HANDLE);
308 if ((psSyncRecordRemoveByHandleOUT->eError != PVRSRV_OK) && (psSyncRecordRemoveByHandleOUT->eError != PVRSRV_ERROR_RETRY))
311 goto SyncRecordRemoveByHandle_exit;
316 SyncRecordRemoveByHandle_exit:
322 PVRSRVBridgeSyncRecordAdd(IMG_UINT32 ui32DispatchTableEntry,
323 PVRSRV_BRIDGE_IN_SYNCRECORDADD *psSyncRecordAddIN,
324 PVRSRV_BRIDGE_OUT_SYNCRECORDADD *psSyncRecordAddOUT,
325 CONNECTION_DATA *psConnection)
327 SYNC_RECORD_HANDLE pshRecordInt = IMG_NULL;
328 SYNC_PRIMITIVE_BLOCK * pshServerSyncPrimBlockInt = IMG_NULL;
329 IMG_CHAR *uiClassNameInt = IMG_NULL;
334 if (psSyncRecordAddIN->ui32ClassNameSize != 0)
336 uiClassNameInt = OSAllocMem(psSyncRecordAddIN->ui32ClassNameSize * sizeof(IMG_CHAR));
339 psSyncRecordAddOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
341 goto SyncRecordAdd_exit;
345 /* Copy the data over */
346 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncRecordAddIN->puiClassName, psSyncRecordAddIN->ui32ClassNameSize * sizeof(IMG_CHAR))
347 || (OSCopyFromUser(NULL, uiClassNameInt, psSyncRecordAddIN->puiClassName,
348 psSyncRecordAddIN->ui32ClassNameSize * sizeof(IMG_CHAR)) != PVRSRV_OK) )
350 psSyncRecordAddOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
352 goto SyncRecordAdd_exit;
358 /* Look up the address from the handle */
359 psSyncRecordAddOUT->eError =
360 PVRSRVLookupHandle(psConnection->psHandleBase,
361 (IMG_VOID **) &pshServerSyncPrimBlockInt,
362 psSyncRecordAddIN->hhServerSyncPrimBlock,
363 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
364 if(psSyncRecordAddOUT->eError != PVRSRV_OK)
366 goto SyncRecordAdd_exit;
371 psSyncRecordAddOUT->eError =
372 PVRSRVSyncRecordAddKM(
374 pshServerSyncPrimBlockInt,
375 psSyncRecordAddIN->ui32ui32FwBlockAddr,
376 psSyncRecordAddIN->ui32ui32SyncOffset,
377 psSyncRecordAddIN->bbServerSync,
378 psSyncRecordAddIN->ui32ClassNameSize,
380 /* Exit early if bridged call fails */
381 if(psSyncRecordAddOUT->eError != PVRSRV_OK)
383 goto SyncRecordAdd_exit;
387 psSyncRecordAddOUT->eError = PVRSRVAllocHandle(psConnection->psHandleBase,
388 &psSyncRecordAddOUT->hhRecord,
389 (IMG_VOID *) pshRecordInt,
390 PVRSRV_HANDLE_TYPE_SYNC_RECORD_HANDLE,
391 PVRSRV_HANDLE_ALLOC_FLAG_NONE
392 ,(PFN_HANDLE_RELEASE)&PVRSRVSyncRecordRemoveByHandleKM);
393 if (psSyncRecordAddOUT->eError != PVRSRV_OK)
395 goto SyncRecordAdd_exit;
402 if (psSyncRecordAddOUT->eError != PVRSRV_OK)
406 PVRSRVSyncRecordRemoveByHandleKM(pshRecordInt);
411 OSFreeMem(uiClassNameInt);
417 PVRSRVBridgeServerSyncAlloc(IMG_UINT32 ui32DispatchTableEntry,
418 PVRSRV_BRIDGE_IN_SERVERSYNCALLOC *psServerSyncAllocIN,
419 PVRSRV_BRIDGE_OUT_SERVERSYNCALLOC *psServerSyncAllocOUT,
420 CONNECTION_DATA *psConnection)
422 IMG_HANDLE hDevNodeInt = IMG_NULL;
423 SERVER_SYNC_PRIMITIVE * psSyncHandleInt = IMG_NULL;
424 IMG_CHAR *uiClassNameInt = IMG_NULL;
429 if (psServerSyncAllocIN->ui32ClassNameSize != 0)
431 uiClassNameInt = OSAllocMem(psServerSyncAllocIN->ui32ClassNameSize * sizeof(IMG_CHAR));
434 psServerSyncAllocOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
436 goto ServerSyncAlloc_exit;
440 /* Copy the data over */
441 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psServerSyncAllocIN->puiClassName, psServerSyncAllocIN->ui32ClassNameSize * sizeof(IMG_CHAR))
442 || (OSCopyFromUser(NULL, uiClassNameInt, psServerSyncAllocIN->puiClassName,
443 psServerSyncAllocIN->ui32ClassNameSize * sizeof(IMG_CHAR)) != PVRSRV_OK) )
445 psServerSyncAllocOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
447 goto ServerSyncAlloc_exit;
453 /* Look up the address from the handle */
454 psServerSyncAllocOUT->eError =
455 PVRSRVLookupHandle(psConnection->psHandleBase,
456 (IMG_VOID **) &hDevNodeInt,
457 psServerSyncAllocIN->hDevNode,
458 PVRSRV_HANDLE_TYPE_DEV_NODE);
459 if(psServerSyncAllocOUT->eError != PVRSRV_OK)
461 goto ServerSyncAlloc_exit;
466 psServerSyncAllocOUT->eError =
467 PVRSRVServerSyncAllocKM(
470 &psServerSyncAllocOUT->ui32SyncPrimVAddr,
471 psServerSyncAllocIN->ui32ClassNameSize,
473 /* Exit early if bridged call fails */
474 if(psServerSyncAllocOUT->eError != PVRSRV_OK)
476 goto ServerSyncAlloc_exit;
480 psServerSyncAllocOUT->eError = PVRSRVAllocHandle(psConnection->psHandleBase,
481 &psServerSyncAllocOUT->hSyncHandle,
482 (IMG_VOID *) psSyncHandleInt,
483 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE,
484 PVRSRV_HANDLE_ALLOC_FLAG_MULTI
485 ,(PFN_HANDLE_RELEASE)&PVRSRVServerSyncFreeKM);
486 if (psServerSyncAllocOUT->eError != PVRSRV_OK)
488 goto ServerSyncAlloc_exit;
494 ServerSyncAlloc_exit:
495 if (psServerSyncAllocOUT->eError != PVRSRV_OK)
499 PVRSRVServerSyncFreeKM(psSyncHandleInt);
504 OSFreeMem(uiClassNameInt);
510 PVRSRVBridgeServerSyncFree(IMG_UINT32 ui32DispatchTableEntry,
511 PVRSRV_BRIDGE_IN_SERVERSYNCFREE *psServerSyncFreeIN,
512 PVRSRV_BRIDGE_OUT_SERVERSYNCFREE *psServerSyncFreeOUT,
513 CONNECTION_DATA *psConnection)
524 psServerSyncFreeOUT->eError =
525 PVRSRVReleaseHandle(psConnection->psHandleBase,
526 (IMG_HANDLE) psServerSyncFreeIN->hSyncHandle,
527 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
528 if ((psServerSyncFreeOUT->eError != PVRSRV_OK) && (psServerSyncFreeOUT->eError != PVRSRV_ERROR_RETRY))
531 goto ServerSyncFree_exit;
542 PVRSRVBridgeServerSyncQueueHWOp(IMG_UINT32 ui32DispatchTableEntry,
543 PVRSRV_BRIDGE_IN_SERVERSYNCQUEUEHWOP *psServerSyncQueueHWOpIN,
544 PVRSRV_BRIDGE_OUT_SERVERSYNCQUEUEHWOP *psServerSyncQueueHWOpOUT,
545 CONNECTION_DATA *psConnection)
547 SERVER_SYNC_PRIMITIVE * psSyncHandleInt = IMG_NULL;
556 /* Look up the address from the handle */
557 psServerSyncQueueHWOpOUT->eError =
558 PVRSRVLookupHandle(psConnection->psHandleBase,
559 (IMG_VOID **) &psSyncHandleInt,
560 psServerSyncQueueHWOpIN->hSyncHandle,
561 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
562 if(psServerSyncQueueHWOpOUT->eError != PVRSRV_OK)
564 goto ServerSyncQueueHWOp_exit;
569 psServerSyncQueueHWOpOUT->eError =
570 PVRSRVServerSyncQueueHWOpKM(
572 psServerSyncQueueHWOpIN->bbUpdate,
573 &psServerSyncQueueHWOpOUT->ui32FenceValue,
574 &psServerSyncQueueHWOpOUT->ui32UpdateValue);
579 ServerSyncQueueHWOp_exit:
585 PVRSRVBridgeServerSyncGetStatus(IMG_UINT32 ui32DispatchTableEntry,
586 PVRSRV_BRIDGE_IN_SERVERSYNCGETSTATUS *psServerSyncGetStatusIN,
587 PVRSRV_BRIDGE_OUT_SERVERSYNCGETSTATUS *psServerSyncGetStatusOUT,
588 CONNECTION_DATA *psConnection)
590 SERVER_SYNC_PRIMITIVE * *psSyncHandleInt = IMG_NULL;
591 IMG_HANDLE *hSyncHandleInt2 = IMG_NULL;
592 IMG_UINT32 *pui32UIDInt = IMG_NULL;
593 IMG_UINT32 *pui32FWAddrInt = IMG_NULL;
594 IMG_UINT32 *pui32CurrentOpInt = IMG_NULL;
595 IMG_UINT32 *pui32NextOpInt = IMG_NULL;
598 psServerSyncGetStatusOUT->pui32UID = psServerSyncGetStatusIN->pui32UID;
599 psServerSyncGetStatusOUT->pui32FWAddr = psServerSyncGetStatusIN->pui32FWAddr;
600 psServerSyncGetStatusOUT->pui32CurrentOp = psServerSyncGetStatusIN->pui32CurrentOp;
601 psServerSyncGetStatusOUT->pui32NextOp = psServerSyncGetStatusIN->pui32NextOp;
604 if (psServerSyncGetStatusIN->ui32SyncCount != 0)
606 psSyncHandleInt = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(SERVER_SYNC_PRIMITIVE *));
607 if (!psSyncHandleInt)
609 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
611 goto ServerSyncGetStatus_exit;
613 hSyncHandleInt2 = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_HANDLE));
614 if (!hSyncHandleInt2)
616 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
618 goto ServerSyncGetStatus_exit;
622 /* Copy the data over */
623 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psServerSyncGetStatusIN->phSyncHandle, psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_HANDLE))
624 || (OSCopyFromUser(NULL, hSyncHandleInt2, psServerSyncGetStatusIN->phSyncHandle,
625 psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
627 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
629 goto ServerSyncGetStatus_exit;
631 if (psServerSyncGetStatusIN->ui32SyncCount != 0)
633 pui32UIDInt = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32));
636 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
638 goto ServerSyncGetStatus_exit;
642 if (psServerSyncGetStatusIN->ui32SyncCount != 0)
644 pui32FWAddrInt = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32));
647 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
649 goto ServerSyncGetStatus_exit;
653 if (psServerSyncGetStatusIN->ui32SyncCount != 0)
655 pui32CurrentOpInt = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32));
656 if (!pui32CurrentOpInt)
658 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
660 goto ServerSyncGetStatus_exit;
664 if (psServerSyncGetStatusIN->ui32SyncCount != 0)
666 pui32NextOpInt = OSAllocMem(psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32));
669 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
671 goto ServerSyncGetStatus_exit;
681 for (i=0;i<psServerSyncGetStatusIN->ui32SyncCount;i++)
684 /* Look up the address from the handle */
685 psServerSyncGetStatusOUT->eError =
686 PVRSRVLookupHandle(psConnection->psHandleBase,
687 (IMG_VOID **) &psSyncHandleInt[i],
689 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
690 if(psServerSyncGetStatusOUT->eError != PVRSRV_OK)
692 goto ServerSyncGetStatus_exit;
699 psServerSyncGetStatusOUT->eError =
700 PVRSRVServerSyncGetStatusKM(
701 psServerSyncGetStatusIN->ui32SyncCount,
710 if ( !OSAccessOK(PVR_VERIFY_WRITE, (IMG_VOID*) psServerSyncGetStatusOUT->pui32UID, (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32)))
711 || (OSCopyToUser(NULL, psServerSyncGetStatusOUT->pui32UID, pui32UIDInt,
712 (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32))) != PVRSRV_OK) )
714 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
716 goto ServerSyncGetStatus_exit;
719 if ( !OSAccessOK(PVR_VERIFY_WRITE, (IMG_VOID*) psServerSyncGetStatusOUT->pui32FWAddr, (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32)))
720 || (OSCopyToUser(NULL, psServerSyncGetStatusOUT->pui32FWAddr, pui32FWAddrInt,
721 (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32))) != PVRSRV_OK) )
723 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
725 goto ServerSyncGetStatus_exit;
728 if ( !OSAccessOK(PVR_VERIFY_WRITE, (IMG_VOID*) psServerSyncGetStatusOUT->pui32CurrentOp, (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32)))
729 || (OSCopyToUser(NULL, psServerSyncGetStatusOUT->pui32CurrentOp, pui32CurrentOpInt,
730 (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32))) != PVRSRV_OK) )
732 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
734 goto ServerSyncGetStatus_exit;
737 if ( !OSAccessOK(PVR_VERIFY_WRITE, (IMG_VOID*) psServerSyncGetStatusOUT->pui32NextOp, (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32)))
738 || (OSCopyToUser(NULL, psServerSyncGetStatusOUT->pui32NextOp, pui32NextOpInt,
739 (psServerSyncGetStatusIN->ui32SyncCount * sizeof(IMG_UINT32))) != PVRSRV_OK) )
741 psServerSyncGetStatusOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
743 goto ServerSyncGetStatus_exit;
747 ServerSyncGetStatus_exit:
749 OSFreeMem(psSyncHandleInt);
751 OSFreeMem(hSyncHandleInt2);
753 OSFreeMem(pui32UIDInt);
755 OSFreeMem(pui32FWAddrInt);
756 if (pui32CurrentOpInt)
757 OSFreeMem(pui32CurrentOpInt);
759 OSFreeMem(pui32NextOpInt);
765 PVRSRVBridgeSyncPrimOpCreate(IMG_UINT32 ui32DispatchTableEntry,
766 PVRSRV_BRIDGE_IN_SYNCPRIMOPCREATE *psSyncPrimOpCreateIN,
767 PVRSRV_BRIDGE_OUT_SYNCPRIMOPCREATE *psSyncPrimOpCreateOUT,
768 CONNECTION_DATA *psConnection)
770 SYNC_PRIMITIVE_BLOCK * *psBlockListInt = IMG_NULL;
771 IMG_HANDLE *hBlockListInt2 = IMG_NULL;
772 IMG_UINT32 *ui32SyncBlockIndexInt = IMG_NULL;
773 IMG_UINT32 *ui32IndexInt = IMG_NULL;
774 SERVER_SYNC_PRIMITIVE * *psServerSyncInt = IMG_NULL;
775 IMG_HANDLE *hServerSyncInt2 = IMG_NULL;
776 SERVER_OP_COOKIE * psServerCookieInt = IMG_NULL;
781 if (psSyncPrimOpCreateIN->ui32SyncBlockCount != 0)
783 psBlockListInt = OSAllocMem(psSyncPrimOpCreateIN->ui32SyncBlockCount * sizeof(SYNC_PRIMITIVE_BLOCK *));
786 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
788 goto SyncPrimOpCreate_exit;
790 hBlockListInt2 = OSAllocMem(psSyncPrimOpCreateIN->ui32SyncBlockCount * sizeof(IMG_HANDLE));
793 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
795 goto SyncPrimOpCreate_exit;
799 /* Copy the data over */
800 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpCreateIN->phBlockList, psSyncPrimOpCreateIN->ui32SyncBlockCount * sizeof(IMG_HANDLE))
801 || (OSCopyFromUser(NULL, hBlockListInt2, psSyncPrimOpCreateIN->phBlockList,
802 psSyncPrimOpCreateIN->ui32SyncBlockCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
804 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
806 goto SyncPrimOpCreate_exit;
808 if (psSyncPrimOpCreateIN->ui32ClientSyncCount != 0)
810 ui32SyncBlockIndexInt = OSAllocMem(psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32));
811 if (!ui32SyncBlockIndexInt)
813 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
815 goto SyncPrimOpCreate_exit;
819 /* Copy the data over */
820 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpCreateIN->pui32SyncBlockIndex, psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32))
821 || (OSCopyFromUser(NULL, ui32SyncBlockIndexInt, psSyncPrimOpCreateIN->pui32SyncBlockIndex,
822 psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
824 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
826 goto SyncPrimOpCreate_exit;
828 if (psSyncPrimOpCreateIN->ui32ClientSyncCount != 0)
830 ui32IndexInt = OSAllocMem(psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32));
833 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
835 goto SyncPrimOpCreate_exit;
839 /* Copy the data over */
840 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpCreateIN->pui32Index, psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32))
841 || (OSCopyFromUser(NULL, ui32IndexInt, psSyncPrimOpCreateIN->pui32Index,
842 psSyncPrimOpCreateIN->ui32ClientSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
844 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
846 goto SyncPrimOpCreate_exit;
848 if (psSyncPrimOpCreateIN->ui32ServerSyncCount != 0)
850 psServerSyncInt = OSAllocMem(psSyncPrimOpCreateIN->ui32ServerSyncCount * sizeof(SERVER_SYNC_PRIMITIVE *));
851 if (!psServerSyncInt)
853 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
855 goto SyncPrimOpCreate_exit;
857 hServerSyncInt2 = OSAllocMem(psSyncPrimOpCreateIN->ui32ServerSyncCount * sizeof(IMG_HANDLE));
858 if (!hServerSyncInt2)
860 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
862 goto SyncPrimOpCreate_exit;
866 /* Copy the data over */
867 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpCreateIN->phServerSync, psSyncPrimOpCreateIN->ui32ServerSyncCount * sizeof(IMG_HANDLE))
868 || (OSCopyFromUser(NULL, hServerSyncInt2, psSyncPrimOpCreateIN->phServerSync,
869 psSyncPrimOpCreateIN->ui32ServerSyncCount * sizeof(IMG_HANDLE)) != PVRSRV_OK) )
871 psSyncPrimOpCreateOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
873 goto SyncPrimOpCreate_exit;
881 for (i=0;i<psSyncPrimOpCreateIN->ui32SyncBlockCount;i++)
884 /* Look up the address from the handle */
885 psSyncPrimOpCreateOUT->eError =
886 PVRSRVLookupHandle(psConnection->psHandleBase,
887 (IMG_VOID **) &psBlockListInt[i],
889 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
890 if(psSyncPrimOpCreateOUT->eError != PVRSRV_OK)
892 goto SyncPrimOpCreate_exit;
902 for (i=0;i<psSyncPrimOpCreateIN->ui32ServerSyncCount;i++)
905 /* Look up the address from the handle */
906 psSyncPrimOpCreateOUT->eError =
907 PVRSRVLookupHandle(psConnection->psHandleBase,
908 (IMG_VOID **) &psServerSyncInt[i],
910 PVRSRV_HANDLE_TYPE_SERVER_SYNC_PRIMITIVE);
911 if(psSyncPrimOpCreateOUT->eError != PVRSRV_OK)
913 goto SyncPrimOpCreate_exit;
920 psSyncPrimOpCreateOUT->eError =
921 PVRSRVSyncPrimOpCreateKM(
922 psSyncPrimOpCreateIN->ui32SyncBlockCount,
924 psSyncPrimOpCreateIN->ui32ClientSyncCount,
925 ui32SyncBlockIndexInt,
927 psSyncPrimOpCreateIN->ui32ServerSyncCount,
930 /* Exit early if bridged call fails */
931 if(psSyncPrimOpCreateOUT->eError != PVRSRV_OK)
933 goto SyncPrimOpCreate_exit;
937 psSyncPrimOpCreateOUT->eError = PVRSRVAllocHandle(psConnection->psHandleBase,
938 &psSyncPrimOpCreateOUT->hServerCookie,
939 (IMG_VOID *) psServerCookieInt,
940 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE,
941 PVRSRV_HANDLE_ALLOC_FLAG_MULTI
942 ,(PFN_HANDLE_RELEASE)&PVRSRVSyncPrimOpDestroyKM);
943 if (psSyncPrimOpCreateOUT->eError != PVRSRV_OK)
945 goto SyncPrimOpCreate_exit;
951 SyncPrimOpCreate_exit:
952 if (psSyncPrimOpCreateOUT->eError != PVRSRV_OK)
954 if (psServerCookieInt)
956 PVRSRVSyncPrimOpDestroyKM(psServerCookieInt);
961 OSFreeMem(psBlockListInt);
963 OSFreeMem(hBlockListInt2);
964 if (ui32SyncBlockIndexInt)
965 OSFreeMem(ui32SyncBlockIndexInt);
967 OSFreeMem(ui32IndexInt);
969 OSFreeMem(psServerSyncInt);
971 OSFreeMem(hServerSyncInt2);
977 PVRSRVBridgeSyncPrimOpTake(IMG_UINT32 ui32DispatchTableEntry,
978 PVRSRV_BRIDGE_IN_SYNCPRIMOPTAKE *psSyncPrimOpTakeIN,
979 PVRSRV_BRIDGE_OUT_SYNCPRIMOPTAKE *psSyncPrimOpTakeOUT,
980 CONNECTION_DATA *psConnection)
982 SERVER_OP_COOKIE * psServerCookieInt = IMG_NULL;
983 IMG_UINT32 *ui32FlagsInt = IMG_NULL;
984 IMG_UINT32 *ui32FenceValueInt = IMG_NULL;
985 IMG_UINT32 *ui32UpdateValueInt = IMG_NULL;
986 IMG_UINT32 *ui32ServerFlagsInt = IMG_NULL;
991 if (psSyncPrimOpTakeIN->ui32ClientSyncCount != 0)
993 ui32FlagsInt = OSAllocMem(psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32));
996 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
998 goto SyncPrimOpTake_exit;
1002 /* Copy the data over */
1003 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpTakeIN->pui32Flags, psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32))
1004 || (OSCopyFromUser(NULL, ui32FlagsInt, psSyncPrimOpTakeIN->pui32Flags,
1005 psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
1007 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
1009 goto SyncPrimOpTake_exit;
1011 if (psSyncPrimOpTakeIN->ui32ClientSyncCount != 0)
1013 ui32FenceValueInt = OSAllocMem(psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32));
1014 if (!ui32FenceValueInt)
1016 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
1018 goto SyncPrimOpTake_exit;
1022 /* Copy the data over */
1023 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpTakeIN->pui32FenceValue, psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32))
1024 || (OSCopyFromUser(NULL, ui32FenceValueInt, psSyncPrimOpTakeIN->pui32FenceValue,
1025 psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
1027 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
1029 goto SyncPrimOpTake_exit;
1031 if (psSyncPrimOpTakeIN->ui32ClientSyncCount != 0)
1033 ui32UpdateValueInt = OSAllocMem(psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32));
1034 if (!ui32UpdateValueInt)
1036 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
1038 goto SyncPrimOpTake_exit;
1042 /* Copy the data over */
1043 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpTakeIN->pui32UpdateValue, psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32))
1044 || (OSCopyFromUser(NULL, ui32UpdateValueInt, psSyncPrimOpTakeIN->pui32UpdateValue,
1045 psSyncPrimOpTakeIN->ui32ClientSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
1047 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
1049 goto SyncPrimOpTake_exit;
1051 if (psSyncPrimOpTakeIN->ui32ServerSyncCount != 0)
1053 ui32ServerFlagsInt = OSAllocMem(psSyncPrimOpTakeIN->ui32ServerSyncCount * sizeof(IMG_UINT32));
1054 if (!ui32ServerFlagsInt)
1056 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
1058 goto SyncPrimOpTake_exit;
1062 /* Copy the data over */
1063 if ( !OSAccessOK(PVR_VERIFY_READ, (IMG_VOID*) psSyncPrimOpTakeIN->pui32ServerFlags, psSyncPrimOpTakeIN->ui32ServerSyncCount * sizeof(IMG_UINT32))
1064 || (OSCopyFromUser(NULL, ui32ServerFlagsInt, psSyncPrimOpTakeIN->pui32ServerFlags,
1065 psSyncPrimOpTakeIN->ui32ServerSyncCount * sizeof(IMG_UINT32)) != PVRSRV_OK) )
1067 psSyncPrimOpTakeOUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
1069 goto SyncPrimOpTake_exit;
1075 /* Look up the address from the handle */
1076 psSyncPrimOpTakeOUT->eError =
1077 PVRSRVLookupHandle(psConnection->psHandleBase,
1078 (IMG_VOID **) &psServerCookieInt,
1079 psSyncPrimOpTakeIN->hServerCookie,
1080 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE);
1081 if(psSyncPrimOpTakeOUT->eError != PVRSRV_OK)
1083 goto SyncPrimOpTake_exit;
1088 psSyncPrimOpTakeOUT->eError =
1089 PVRSRVSyncPrimOpTakeKM(
1091 psSyncPrimOpTakeIN->ui32ClientSyncCount,
1095 psSyncPrimOpTakeIN->ui32ServerSyncCount,
1096 ui32ServerFlagsInt);
1101 SyncPrimOpTake_exit:
1103 OSFreeMem(ui32FlagsInt);
1104 if (ui32FenceValueInt)
1105 OSFreeMem(ui32FenceValueInt);
1106 if (ui32UpdateValueInt)
1107 OSFreeMem(ui32UpdateValueInt);
1108 if (ui32ServerFlagsInt)
1109 OSFreeMem(ui32ServerFlagsInt);
1115 PVRSRVBridgeSyncPrimOpReady(IMG_UINT32 ui32DispatchTableEntry,
1116 PVRSRV_BRIDGE_IN_SYNCPRIMOPREADY *psSyncPrimOpReadyIN,
1117 PVRSRV_BRIDGE_OUT_SYNCPRIMOPREADY *psSyncPrimOpReadyOUT,
1118 CONNECTION_DATA *psConnection)
1120 SERVER_OP_COOKIE * psServerCookieInt = IMG_NULL;
1129 /* Look up the address from the handle */
1130 psSyncPrimOpReadyOUT->eError =
1131 PVRSRVLookupHandle(psConnection->psHandleBase,
1132 (IMG_VOID **) &psServerCookieInt,
1133 psSyncPrimOpReadyIN->hServerCookie,
1134 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE);
1135 if(psSyncPrimOpReadyOUT->eError != PVRSRV_OK)
1137 goto SyncPrimOpReady_exit;
1142 psSyncPrimOpReadyOUT->eError =
1143 PVRSRVSyncPrimOpReadyKM(
1145 &psSyncPrimOpReadyOUT->bReady);
1150 SyncPrimOpReady_exit:
1156 PVRSRVBridgeSyncPrimOpComplete(IMG_UINT32 ui32DispatchTableEntry,
1157 PVRSRV_BRIDGE_IN_SYNCPRIMOPCOMPLETE *psSyncPrimOpCompleteIN,
1158 PVRSRV_BRIDGE_OUT_SYNCPRIMOPCOMPLETE *psSyncPrimOpCompleteOUT,
1159 CONNECTION_DATA *psConnection)
1161 SERVER_OP_COOKIE * psServerCookieInt = IMG_NULL;
1170 /* Look up the address from the handle */
1171 psSyncPrimOpCompleteOUT->eError =
1172 PVRSRVLookupHandle(psConnection->psHandleBase,
1173 (IMG_VOID **) &psServerCookieInt,
1174 psSyncPrimOpCompleteIN->hServerCookie,
1175 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE);
1176 if(psSyncPrimOpCompleteOUT->eError != PVRSRV_OK)
1178 goto SyncPrimOpComplete_exit;
1183 psSyncPrimOpCompleteOUT->eError =
1184 PVRSRVSyncPrimOpCompleteKM(
1190 SyncPrimOpComplete_exit:
1196 PVRSRVBridgeSyncPrimOpDestroy(IMG_UINT32 ui32DispatchTableEntry,
1197 PVRSRV_BRIDGE_IN_SYNCPRIMOPDESTROY *psSyncPrimOpDestroyIN,
1198 PVRSRV_BRIDGE_OUT_SYNCPRIMOPDESTROY *psSyncPrimOpDestroyOUT,
1199 CONNECTION_DATA *psConnection)
1210 psSyncPrimOpDestroyOUT->eError =
1211 PVRSRVReleaseHandle(psConnection->psHandleBase,
1212 (IMG_HANDLE) psSyncPrimOpDestroyIN->hServerCookie,
1213 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE);
1214 if ((psSyncPrimOpDestroyOUT->eError != PVRSRV_OK) && (psSyncPrimOpDestroyOUT->eError != PVRSRV_ERROR_RETRY))
1217 goto SyncPrimOpDestroy_exit;
1222 SyncPrimOpDestroy_exit:
1228 PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
1229 PVRSRV_BRIDGE_IN_SYNCPRIMPDUMP *psSyncPrimPDumpIN,
1230 PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMP *psSyncPrimPDumpOUT,
1231 CONNECTION_DATA *psConnection)
1233 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
1242 /* Look up the address from the handle */
1243 psSyncPrimPDumpOUT->eError =
1244 PVRSRVLookupHandle(psConnection->psHandleBase,
1245 (IMG_VOID **) &psSyncHandleInt,
1246 psSyncPrimPDumpIN->hSyncHandle,
1247 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1248 if(psSyncPrimPDumpOUT->eError != PVRSRV_OK)
1250 goto SyncPrimPDump_exit;
1255 psSyncPrimPDumpOUT->eError =
1256 PVRSRVSyncPrimPDumpKM(
1258 psSyncPrimPDumpIN->ui32Offset);
1269 PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
1270 PVRSRV_BRIDGE_IN_SYNCPRIMPDUMPVALUE *psSyncPrimPDumpValueIN,
1271 PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPVALUE *psSyncPrimPDumpValueOUT,
1272 CONNECTION_DATA *psConnection)
1274 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
1283 /* Look up the address from the handle */
1284 psSyncPrimPDumpValueOUT->eError =
1285 PVRSRVLookupHandle(psConnection->psHandleBase,
1286 (IMG_VOID **) &psSyncHandleInt,
1287 psSyncPrimPDumpValueIN->hSyncHandle,
1288 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1289 if(psSyncPrimPDumpValueOUT->eError != PVRSRV_OK)
1291 goto SyncPrimPDumpValue_exit;
1296 psSyncPrimPDumpValueOUT->eError =
1297 PVRSRVSyncPrimPDumpValueKM(
1299 psSyncPrimPDumpValueIN->ui32Offset,
1300 psSyncPrimPDumpValueIN->ui32Value);
1305 SyncPrimPDumpValue_exit:
1311 PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
1312 PVRSRV_BRIDGE_IN_SYNCPRIMPDUMPPOL *psSyncPrimPDumpPolIN,
1313 PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPPOL *psSyncPrimPDumpPolOUT,
1314 CONNECTION_DATA *psConnection)
1316 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
1325 /* Look up the address from the handle */
1326 psSyncPrimPDumpPolOUT->eError =
1327 PVRSRVLookupHandle(psConnection->psHandleBase,
1328 (IMG_VOID **) &psSyncHandleInt,
1329 psSyncPrimPDumpPolIN->hSyncHandle,
1330 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1331 if(psSyncPrimPDumpPolOUT->eError != PVRSRV_OK)
1333 goto SyncPrimPDumpPol_exit;
1338 psSyncPrimPDumpPolOUT->eError =
1339 PVRSRVSyncPrimPDumpPolKM(
1341 psSyncPrimPDumpPolIN->ui32Offset,
1342 psSyncPrimPDumpPolIN->ui32Value,
1343 psSyncPrimPDumpPolIN->ui32Mask,
1344 psSyncPrimPDumpPolIN->eOperator,
1345 psSyncPrimPDumpPolIN->uiPDumpFlags);
1350 SyncPrimPDumpPol_exit:
1356 PVRSRVBridgeSyncPrimOpPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
1357 PVRSRV_BRIDGE_IN_SYNCPRIMOPPDUMPPOL *psSyncPrimOpPDumpPolIN,
1358 PVRSRV_BRIDGE_OUT_SYNCPRIMOPPDUMPPOL *psSyncPrimOpPDumpPolOUT,
1359 CONNECTION_DATA *psConnection)
1361 SERVER_OP_COOKIE * psServerCookieInt = IMG_NULL;
1370 /* Look up the address from the handle */
1371 psSyncPrimOpPDumpPolOUT->eError =
1372 PVRSRVLookupHandle(psConnection->psHandleBase,
1373 (IMG_VOID **) &psServerCookieInt,
1374 psSyncPrimOpPDumpPolIN->hServerCookie,
1375 PVRSRV_HANDLE_TYPE_SERVER_OP_COOKIE);
1376 if(psSyncPrimOpPDumpPolOUT->eError != PVRSRV_OK)
1378 goto SyncPrimOpPDumpPol_exit;
1383 psSyncPrimOpPDumpPolOUT->eError =
1384 PVRSRVSyncPrimOpPDumpPolKM(
1386 psSyncPrimOpPDumpPolIN->eOperator,
1387 psSyncPrimOpPDumpPolIN->uiPDumpFlags);
1392 SyncPrimOpPDumpPol_exit:
1398 PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
1399 PVRSRV_BRIDGE_IN_SYNCPRIMPDUMPCBP *psSyncPrimPDumpCBPIN,
1400 PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPCBP *psSyncPrimPDumpCBPOUT,
1401 CONNECTION_DATA *psConnection)
1403 SYNC_PRIMITIVE_BLOCK * psSyncHandleInt = IMG_NULL;
1412 /* Look up the address from the handle */
1413 psSyncPrimPDumpCBPOUT->eError =
1414 PVRSRVLookupHandle(psConnection->psHandleBase,
1415 (IMG_VOID **) &psSyncHandleInt,
1416 psSyncPrimPDumpCBPIN->hSyncHandle,
1417 PVRSRV_HANDLE_TYPE_SYNC_PRIMITIVE_BLOCK);
1418 if(psSyncPrimPDumpCBPOUT->eError != PVRSRV_OK)
1420 goto SyncPrimPDumpCBP_exit;
1425 psSyncPrimPDumpCBPOUT->eError =
1426 PVRSRVSyncPrimPDumpCBPKM(
1428 psSyncPrimPDumpCBPIN->ui32Offset,
1429 psSyncPrimPDumpCBPIN->uiWriteOffset,
1430 psSyncPrimPDumpCBPIN->uiPacketSize,
1431 psSyncPrimPDumpCBPIN->uiBufferSize);
1436 SyncPrimPDumpCBP_exit:
1443 /* ***************************************************************************
1444 * Server bridge dispatch related glue
1448 PVRSRV_ERROR InitSYNCBridge(IMG_VOID);
1449 PVRSRV_ERROR DeinitSYNCBridge(IMG_VOID);
1452 * Register all SYNC functions with services
1454 PVRSRV_ERROR InitSYNCBridge(IMG_VOID)
1457 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_ALLOCSYNCPRIMITIVEBLOCK, PVRSRVBridgeAllocSyncPrimitiveBlock,
1461 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_FREESYNCPRIMITIVEBLOCK, PVRSRVBridgeFreeSyncPrimitiveBlock,
1465 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMSET, PVRSRVBridgeSyncPrimSet,
1469 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SERVERSYNCPRIMSET, PVRSRVBridgeServerSyncPrimSet,
1473 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCRECORDREMOVEBYHANDLE, PVRSRVBridgeSyncRecordRemoveByHandle,
1477 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCRECORDADD, PVRSRVBridgeSyncRecordAdd,
1481 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SERVERSYNCALLOC, PVRSRVBridgeServerSyncAlloc,
1485 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SERVERSYNCFREE, PVRSRVBridgeServerSyncFree,
1489 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SERVERSYNCQUEUEHWOP, PVRSRVBridgeServerSyncQueueHWOp,
1493 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SERVERSYNCGETSTATUS, PVRSRVBridgeServerSyncGetStatus,
1497 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPCREATE, PVRSRVBridgeSyncPrimOpCreate,
1501 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPTAKE, PVRSRVBridgeSyncPrimOpTake,
1505 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPREADY, PVRSRVBridgeSyncPrimOpReady,
1509 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPCOMPLETE, PVRSRVBridgeSyncPrimOpComplete,
1513 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPDESTROY, PVRSRVBridgeSyncPrimOpDestroy,
1517 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMPDUMP, PVRSRVBridgeSyncPrimPDump,
1521 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMPDUMPVALUE, PVRSRVBridgeSyncPrimPDumpValue,
1525 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMPDUMPPOL, PVRSRVBridgeSyncPrimPDumpPol,
1529 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMOPPDUMPPOL, PVRSRVBridgeSyncPrimOpPDumpPol,
1533 SetDispatchTableEntry(PVRSRV_BRIDGE_SYNC, PVRSRV_BRIDGE_SYNC_SYNCPRIMPDUMPCBP, PVRSRVBridgeSyncPrimPDumpCBP,
1542 * Unregister all sync functions with services
1544 PVRSRV_ERROR DeinitSYNCBridge(IMG_VOID)