diff options
Diffstat (limited to 'drivers/gpu/pvr/handle.c')
-rw-r--r-- | drivers/gpu/pvr/handle.c | 292 |
1 files changed, 221 insertions, 71 deletions
diff --git a/drivers/gpu/pvr/handle.c b/drivers/gpu/pvr/handle.c index 5e34af5b280..de80394384c 100644 --- a/drivers/gpu/pvr/handle.c +++ b/drivers/gpu/pvr/handle.c | |||
@@ -24,7 +24,7 @@ | |||
24 | * | 24 | * |
25 | ******************************************************************************/ | 25 | ******************************************************************************/ |
26 | 26 | ||
27 | #ifdef PVR_SECURE_HANDLES | 27 | #if defined(PVR_SECURE_HANDLES) || defined (SUPPORT_SID_INTERFACE) |
28 | #include <stddef.h> | 28 | #include <stddef.h> |
29 | 29 | ||
30 | #include "services_headers.h" | 30 | #include "services_headers.h" |
@@ -47,8 +47,14 @@ | |||
47 | 47 | ||
48 | #define INDEX_IS_VALID(psBase, i) ((i) < (psBase)->ui32TotalHandCount) | 48 | #define INDEX_IS_VALID(psBase, i) ((i) < (psBase)->ui32TotalHandCount) |
49 | 49 | ||
50 | #define INDEX_TO_HANDLE(i) ((IMG_HANDLE)((i) + 1)) | 50 | #if defined (SUPPORT_SID_INTERFACE) |
51 | #define INDEX_TO_HANDLE(i) ((IMG_SID)((i) + 1)) | ||
51 | #define HANDLE_TO_INDEX(h) ((IMG_UINT32)(h) - 1) | 52 | #define HANDLE_TO_INDEX(h) ((IMG_UINT32)(h) - 1) |
53 | #else | ||
54 | #define INDEX_TO_HANDLE(i) ((IMG_HANDLE)((IMG_UINTPTR_T)(i) + 1)) | ||
55 | #define HANDLE_TO_INDEX(h) ((IMG_UINT32)(IMG_UINTPTR_T)(h) - 1) | ||
56 | |||
57 | #endif | ||
52 | 58 | ||
53 | #define INDEX_TO_BLOCK_INDEX(i) DIVIDE_BY_BLOCK_SIZE(i) | 59 | #define INDEX_TO_BLOCK_INDEX(i) DIVIDE_BY_BLOCK_SIZE(i) |
54 | #define BLOCK_INDEX_TO_INDEX(i) MULTIPLY_BY_BLOCK_SIZE(i) | 60 | #define BLOCK_INDEX_TO_INDEX(i) MULTIPLY_BY_BLOCK_SIZE(i) |
@@ -108,7 +114,11 @@ struct sHandleList | |||
108 | { | 114 | { |
109 | IMG_UINT32 ui32Prev; | 115 | IMG_UINT32 ui32Prev; |
110 | IMG_UINT32 ui32Next; | 116 | IMG_UINT32 ui32Next; |
117 | #if defined (SUPPORT_SID_INTERFACE) | ||
118 | IMG_SID hParent; | ||
119 | #else | ||
111 | IMG_HANDLE hParent; | 120 | IMG_HANDLE hParent; |
121 | #endif | ||
112 | }; | 122 | }; |
113 | 123 | ||
114 | enum ePVRSRVInternalHandleFlag | 124 | enum ePVRSRVInternalHandleFlag |
@@ -217,7 +227,11 @@ typedef IMG_UINTPTR_T HAND_KEY[HAND_KEY_LEN]; | |||
217 | #pragma inline(HandleListInit) | 227 | #pragma inline(HandleListInit) |
218 | #endif | 228 | #endif |
219 | static INLINE | 229 | static INLINE |
230 | #if defined (SUPPORT_SID_INTERFACE) | ||
231 | IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_SID hParent) | ||
232 | #else | ||
220 | IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_HANDLE hParent) | 233 | IMG_VOID HandleListInit(IMG_UINT32 ui32Index, struct sHandleList *psList, IMG_HANDLE hParent) |
234 | #endif | ||
221 | { | 235 | { |
222 | psList->ui32Next = ui32Index; | 236 | psList->ui32Next = ui32Index; |
223 | psList->ui32Prev = ui32Index; | 237 | psList->ui32Prev = ui32Index; |
@@ -259,7 +273,7 @@ IMG_BOOL HandleListIsEmpty(IMG_UINT32 ui32Index, struct sHandleList *psList) | |||
259 | IMG_BOOL bIsEmpty2; | 273 | IMG_BOOL bIsEmpty2; |
260 | 274 | ||
261 | bIsEmpty2 = (IMG_BOOL)(psList->ui32Prev == ui32Index); | 275 | bIsEmpty2 = (IMG_BOOL)(psList->ui32Prev == ui32Index); |
262 | PVR_ASSERT(bIsEmpty == bIsEmpty2); | 276 | PVR_ASSERT(bIsEmpty == bIsEmpty2) |
263 | } | 277 | } |
264 | #endif | 278 | #endif |
265 | 279 | ||
@@ -273,7 +287,7 @@ IMG_BOOL HandleListIsEmpty(IMG_UINT32 ui32Index, struct sHandleList *psList) | |||
273 | static INLINE | 287 | static INLINE |
274 | IMG_BOOL NoChildren(struct sHandle *psHandle) | 288 | IMG_BOOL NoChildren(struct sHandle *psHandle) |
275 | { | 289 | { |
276 | PVR_ASSERT(psHandle->sChildren.hParent == HANDLE_PTR_TO_HANDLE(psHandle)); | 290 | PVR_ASSERT(psHandle->sChildren.hParent == HANDLE_PTR_TO_HANDLE(psHandle)) |
277 | 291 | ||
278 | return HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sChildren); | 292 | return HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sChildren); |
279 | } | 293 | } |
@@ -286,13 +300,13 @@ IMG_BOOL NoParent(struct sHandle *psHandle) | |||
286 | { | 300 | { |
287 | if (HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings)) | 301 | if (HandleListIsEmpty(HANDLE_PTR_TO_INDEX(psHandle), &psHandle->sSiblings)) |
288 | { | 302 | { |
289 | PVR_ASSERT(psHandle->sSiblings.hParent == IMG_NULL); | 303 | PVR_ASSERT(psHandle->sSiblings.hParent == IMG_NULL) |
290 | 304 | ||
291 | return IMG_TRUE; | 305 | return IMG_TRUE; |
292 | } | 306 | } |
293 | else | 307 | else |
294 | { | 308 | { |
295 | PVR_ASSERT(psHandle->sSiblings.hParent != IMG_NULL); | 309 | PVR_ASSERT(psHandle->sSiblings.hParent != IMG_NULL) |
296 | } | 310 | } |
297 | return IMG_FALSE; | 311 | return IMG_FALSE; |
298 | } | 312 | } |
@@ -301,7 +315,11 @@ IMG_BOOL NoParent(struct sHandle *psHandle) | |||
301 | #pragma inline(ParentHandle) | 315 | #pragma inline(ParentHandle) |
302 | #endif | 316 | #endif |
303 | static INLINE | 317 | static INLINE |
318 | #if defined (SUPPORT_SID_INTERFACE) | ||
319 | IMG_SID ParentHandle(struct sHandle *psHandle) | ||
320 | #else | ||
304 | IMG_HANDLE ParentHandle(struct sHandle *psHandle) | 321 | IMG_HANDLE ParentHandle(struct sHandle *psHandle) |
322 | #endif | ||
305 | { | 323 | { |
306 | return psHandle->sSiblings.hParent; | 324 | return psHandle->sSiblings.hParent; |
307 | } | 325 | } |
@@ -318,9 +336,9 @@ IMG_VOID HandleListInsertBefore(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32InsIn | |||
318 | 336 | ||
319 | struct sHandleList *psPrevIns = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psIns->ui32Prev, ui32ParentIndex, uiParentOffset, uiEntryOffset); | 337 | struct sHandleList *psPrevIns = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psIns->ui32Prev, ui32ParentIndex, uiParentOffset, uiEntryOffset); |
320 | 338 | ||
321 | PVR_ASSERT(psEntry->hParent == IMG_NULL); | 339 | PVR_ASSERT(psEntry->hParent == IMG_NULL) |
322 | PVR_ASSERT(ui32InsIndex == psPrevIns->ui32Next); | 340 | PVR_ASSERT(ui32InsIndex == psPrevIns->ui32Next) |
323 | PVR_ASSERT(LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32ParentIndex, ui32ParentIndex, uiParentOffset, uiParentOffset)->hParent == INDEX_TO_HANDLE(ui32ParentIndex)); | 341 | PVR_ASSERT(LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32ParentIndex, ui32ParentIndex, uiParentOffset, uiParentOffset)->hParent == INDEX_TO_HANDLE(ui32ParentIndex)) |
324 | 342 | ||
325 | psEntry->ui32Prev = psIns->ui32Prev; | 343 | psEntry->ui32Prev = psIns->ui32Prev; |
326 | psIns->ui32Prev = ui32EntryIndex; | 344 | psIns->ui32Prev = ui32EntryIndex; |
@@ -338,7 +356,7 @@ IMG_VOID AdoptChild(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psParent, struct | |||
338 | { | 356 | { |
339 | IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psParent->sChildren.hParent); | 357 | IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psParent->sChildren.hParent); |
340 | 358 | ||
341 | PVR_ASSERT(ui32Parent == HANDLE_PTR_TO_INDEX(psParent)); | 359 | PVR_ASSERT(ui32Parent == HANDLE_PTR_TO_INDEX(psParent)) |
342 | 360 | ||
343 | HandleListInsertBefore(psBase, ui32Parent, &psParent->sChildren, offsetof(struct sHandle, sChildren), HANDLE_PTR_TO_INDEX(psChild), &psChild->sSiblings, offsetof(struct sHandle, sSiblings), ui32Parent); | 361 | HandleListInsertBefore(psBase, ui32Parent, &psParent->sChildren, offsetof(struct sHandle, sChildren), HANDLE_PTR_TO_INDEX(psChild), &psChild->sSiblings, offsetof(struct sHandle, sSiblings), ui32Parent); |
344 | 362 | ||
@@ -357,7 +375,7 @@ IMG_VOID HandleListRemove(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32EntryIndex, | |||
357 | struct sHandleList *psNext = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psEntry->ui32Next, HANDLE_TO_INDEX(psEntry->hParent), uiParentOffset, uiEntryOffset); | 375 | struct sHandleList *psNext = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, psEntry->ui32Next, HANDLE_TO_INDEX(psEntry->hParent), uiParentOffset, uiEntryOffset); |
358 | 376 | ||
359 | 377 | ||
360 | PVR_ASSERT(psEntry->hParent != IMG_NULL); | 378 | PVR_ASSERT(psEntry->hParent != IMG_NULL) |
361 | 379 | ||
362 | psPrev->ui32Next = psEntry->ui32Next; | 380 | psPrev->ui32Next = psEntry->ui32Next; |
363 | psNext->ui32Prev = psEntry->ui32Prev; | 381 | psNext->ui32Prev = psEntry->ui32Prev; |
@@ -384,7 +402,7 @@ PVRSRV_ERROR HandleListIterate(PVRSRV_HANDLE_BASE *psBase, struct sHandleList *p | |||
384 | IMG_UINT32 ui32Index; | 402 | IMG_UINT32 ui32Index; |
385 | IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psHead->hParent); | 403 | IMG_UINT32 ui32Parent = HANDLE_TO_INDEX(psHead->hParent); |
386 | 404 | ||
387 | PVR_ASSERT(psHead->hParent != IMG_NULL); | 405 | PVR_ASSERT(psHead->hParent != IMG_NULL) |
388 | 406 | ||
389 | 407 | ||
390 | for(ui32Index = psHead->ui32Next; ui32Index != ui32Parent; ) | 408 | for(ui32Index = psHead->ui32Next; ui32Index != ui32Parent; ) |
@@ -394,7 +412,7 @@ PVRSRV_ERROR HandleListIterate(PVRSRV_HANDLE_BASE *psBase, struct sHandleList *p | |||
394 | struct sHandleList *psEntry = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32Index, ui32Parent, uiParentOffset, uiEntryOffset); | 412 | struct sHandleList *psEntry = LIST_PTR_FROM_INDEX_AND_OFFSET(psBase, ui32Index, ui32Parent, uiParentOffset, uiEntryOffset); |
395 | PVRSRV_ERROR eError; | 413 | PVRSRV_ERROR eError; |
396 | 414 | ||
397 | PVR_ASSERT(psEntry->hParent == psHead->hParent); | 415 | PVR_ASSERT(psEntry->hParent == psHead->hParent) |
398 | 416 | ||
399 | ui32Index = psEntry->ui32Next; | 417 | ui32Index = psEntry->ui32Next; |
400 | 418 | ||
@@ -421,7 +439,11 @@ PVRSRV_ERROR IterateOverChildren(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psP | |||
421 | #pragma inline(GetHandleStructure) | 439 | #pragma inline(GetHandleStructure) |
422 | #endif | 440 | #endif |
423 | static INLINE | 441 | static INLINE |
442 | #if defined (SUPPORT_SID_INTERFACE) | ||
443 | PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) | ||
444 | #else | ||
424 | PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) | 445 | PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **ppsHandle, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) |
446 | #endif | ||
425 | { | 447 | { |
426 | IMG_UINT32 ui32Index = HANDLE_TO_INDEX(hHandle); | 448 | IMG_UINT32 ui32Index = HANDLE_TO_INDEX(hHandle); |
427 | struct sHandle *psHandle; | 449 | struct sHandle *psHandle; |
@@ -430,6 +452,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps | |||
430 | if (!INDEX_IS_VALID(psBase, ui32Index)) | 452 | if (!INDEX_IS_VALID(psBase, ui32Index)) |
431 | { | 453 | { |
432 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle index out of range (%u >= %u)", ui32Index, psBase->ui32TotalHandCount)); | 454 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle index out of range (%u >= %u)", ui32Index, psBase->ui32TotalHandCount)); |
455 | #if defined (SUPPORT_SID_INTERFACE) | ||
456 | PVR_DBG_BREAK | ||
457 | #endif | ||
433 | return PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE; | 458 | return PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE; |
434 | } | 459 | } |
435 | 460 | ||
@@ -437,6 +462,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps | |||
437 | if (psHandle->eType == PVRSRV_HANDLE_TYPE_NONE) | 462 | if (psHandle->eType == PVRSRV_HANDLE_TYPE_NONE) |
438 | { | 463 | { |
439 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle not allocated (index: %u)", ui32Index)); | 464 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle not allocated (index: %u)", ui32Index)); |
465 | #if defined (SUPPORT_SID_INTERFACE) | ||
466 | PVR_DBG_BREAK | ||
467 | #endif | ||
440 | return PVRSRV_ERROR_HANDLE_NOT_ALLOCATED; | 468 | return PVRSRV_ERROR_HANDLE_NOT_ALLOCATED; |
441 | } | 469 | } |
442 | 470 | ||
@@ -444,6 +472,9 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps | |||
444 | if (eType != PVRSRV_HANDLE_TYPE_NONE && eType != psHandle->eType) | 472 | if (eType != PVRSRV_HANDLE_TYPE_NONE && eType != psHandle->eType) |
445 | { | 473 | { |
446 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle type mismatch (%d != %d)", eType, psHandle->eType)); | 474 | PVR_DPF((PVR_DBG_ERROR, "GetHandleStructure: Handle type mismatch (%d != %d)", eType, psHandle->eType)); |
475 | #if defined (SUPPORT_SID_INTERFACE) | ||
476 | PVR_DBG_BREAK | ||
477 | #endif | ||
447 | return PVRSRV_ERROR_HANDLE_TYPE_MISMATCH; | 478 | return PVRSRV_ERROR_HANDLE_TYPE_MISMATCH; |
448 | } | 479 | } |
449 | 480 | ||
@@ -457,7 +488,11 @@ PVRSRV_ERROR GetHandleStructure(PVRSRV_HANDLE_BASE *psBase, struct sHandle **pps | |||
457 | #pragma inline(ParentIfPrivate) | 488 | #pragma inline(ParentIfPrivate) |
458 | #endif | 489 | #endif |
459 | static INLINE | 490 | static INLINE |
491 | #if defined (SUPPORT_SID_INTERFACE) | ||
492 | IMG_SID ParentIfPrivate(struct sHandle *psHandle) | ||
493 | #else | ||
460 | IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) | 494 | IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) |
495 | #endif | ||
461 | { | 496 | { |
462 | return TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? | 497 | return TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? |
463 | ParentHandle(psHandle) : IMG_NULL; | 498 | ParentHandle(psHandle) : IMG_NULL; |
@@ -467,7 +502,11 @@ IMG_HANDLE ParentIfPrivate(struct sHandle *psHandle) | |||
467 | #pragma inline(InitKey) | 502 | #pragma inline(InitKey) |
468 | #endif | 503 | #endif |
469 | static INLINE | 504 | static INLINE |
505 | #if defined (SUPPORT_SID_INTERFACE) | ||
506 | IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) | ||
507 | #else | ||
470 | IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) | 508 | IMG_VOID InitKey(HAND_KEY aKey, PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) |
509 | #endif | ||
471 | { | 510 | { |
472 | PVR_UNREFERENCED_PARAMETER(psBase); | 511 | PVR_UNREFERENCED_PARAMETER(psBase); |
473 | 512 | ||
@@ -502,8 +541,8 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo | |||
502 | if (((ui32OldCount % HANDLE_BLOCK_SIZE) != 0) || | 541 | if (((ui32OldCount % HANDLE_BLOCK_SIZE) != 0) || |
503 | ((ui32NewCount % HANDLE_BLOCK_SIZE) != 0)) | 542 | ((ui32NewCount % HANDLE_BLOCK_SIZE) != 0)) |
504 | { | 543 | { |
505 | PVR_ASSERT((ui32OldCount % HANDLE_BLOCK_SIZE) == 0); | 544 | PVR_ASSERT((ui32OldCount % HANDLE_BLOCK_SIZE) == 0) |
506 | PVR_ASSERT((ui32NewCount % HANDLE_BLOCK_SIZE) == 0); | 545 | PVR_ASSERT((ui32NewCount % HANDLE_BLOCK_SIZE) == 0) |
507 | 546 | ||
508 | return PVRSRV_ERROR_INVALID_PARAMS; | 547 | return PVRSRV_ERROR_INVALID_PARAMS; |
509 | } | 548 | } |
@@ -511,7 +550,7 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo | |||
511 | if (ui32NewCount != 0) | 550 | if (ui32NewCount != 0) |
512 | { | 551 | { |
513 | 552 | ||
514 | eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, | 553 | eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, |
515 | HANDLE_ARRAY_SIZE(ui32NewCount) * sizeof(struct sHandleIndex), | 554 | HANDLE_ARRAY_SIZE(ui32NewCount) * sizeof(struct sHandleIndex), |
516 | (IMG_VOID **)&psNewArray, | 555 | (IMG_VOID **)&psNewArray, |
517 | &hNewArrayBlockAlloc, | 556 | &hNewArrayBlockAlloc, |
@@ -550,7 +589,7 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo | |||
550 | 589 | ||
551 | struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psNewArray, ui32Index); | 590 | struct sHandleIndex *psIndex = INDEX_TO_INDEX_STRUCT_PTR(psNewArray, ui32Index); |
552 | 591 | ||
553 | eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, | 592 | eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, |
554 | sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, | 593 | sizeof(struct sHandle) * HANDLE_BLOCK_SIZE, |
555 | (IMG_VOID **)&psIndex->psHandle, | 594 | (IMG_VOID **)&psIndex->psHandle, |
556 | &psIndex->hBlockAlloc, | 595 | &psIndex->hBlockAlloc, |
@@ -658,12 +697,12 @@ PVRSRV_ERROR ReallocHandleArray(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32NewCo | |||
658 | } | 697 | } |
659 | } | 698 | } |
660 | 699 | ||
661 | PVR_ASSERT(psBase->ui32FirstFreeIndex <= psBase->ui32TotalHandCount); | 700 | PVR_ASSERT(psBase->ui32FirstFreeIndex <= psBase->ui32TotalHandCount) |
662 | 701 | ||
663 | return PVRSRV_OK; | 702 | return PVRSRV_OK; |
664 | 703 | ||
665 | error: | 704 | error: |
666 | PVR_ASSERT(eReturn != PVRSRV_OK); | 705 | PVR_ASSERT(eReturn != PVRSRV_OK) |
667 | 706 | ||
668 | if (psNewArray != IMG_NULL) | 707 | if (psNewArray != IMG_NULL) |
669 | { | 708 | { |
@@ -714,11 +753,17 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan | |||
714 | 753 | ||
715 | if (!TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_MULTI) && !BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) | 754 | if (!TEST_ALLOC_FLAG(psHandle, PVRSRV_HANDLE_ALLOC_FLAG_MULTI) && !BATCHED_HANDLE_PARTIALLY_FREE(psHandle)) |
716 | { | 755 | { |
756 | #if defined (SUPPORT_SID_INTERFACE) | ||
757 | IMG_SID hHandle; | ||
758 | hHandle = (IMG_SID) HASH_Remove_Extended(psBase->psHashTab, aKey); | ||
759 | #else | ||
717 | IMG_HANDLE hHandle; | 760 | IMG_HANDLE hHandle; |
718 | hHandle = (IMG_HANDLE) HASH_Remove_Extended(psBase->psHashTab, aKey); | 761 | hHandle = (IMG_HANDLE) HASH_Remove_Extended(psBase->psHashTab, aKey); |
719 | 762 | ||
720 | PVR_ASSERT(hHandle != IMG_NULL); | 763 | #endif |
721 | PVR_ASSERT(hHandle == INDEX_TO_HANDLE(ui32Index)); | 764 | |
765 | PVR_ASSERT(hHandle != IMG_NULL) | ||
766 | PVR_ASSERT(hHandle == INDEX_TO_HANDLE(ui32Index)) | ||
722 | PVR_UNREFERENCED_PARAMETER(hHandle); | 767 | PVR_UNREFERENCED_PARAMETER(hHandle); |
723 | } | 768 | } |
724 | 769 | ||
@@ -749,20 +794,20 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan | |||
749 | { | 794 | { |
750 | if (psBase->ui32FreeHandCount == 0) | 795 | if (psBase->ui32FreeHandCount == 0) |
751 | { | 796 | { |
752 | PVR_ASSERT(psBase->ui32FirstFreeIndex == 0); | 797 | PVR_ASSERT(psBase->ui32FirstFreeIndex == 0) |
753 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0); | 798 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == 0) |
754 | 799 | ||
755 | psBase->ui32FirstFreeIndex = ui32Index; | 800 | psBase->ui32FirstFreeIndex = ui32Index; |
756 | } | 801 | } |
757 | else | 802 | else |
758 | { | 803 | { |
759 | 804 | ||
760 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0); | 805 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne != 0) |
761 | PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0); | 806 | PVR_ASSERT(INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne == 0) |
762 | INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne = ui32Index + 1; | 807 | INDEX_TO_HANDLE_STRUCT_PTR(psBase, psBase->ui32LastFreeIndexPlusOne - 1)->ui32NextIndexPlusOne = ui32Index + 1; |
763 | } | 808 | } |
764 | 809 | ||
765 | PVR_ASSERT(psHandle->ui32NextIndexPlusOne == 0); | 810 | PVR_ASSERT(psHandle->ui32NextIndexPlusOne == 0) |
766 | 811 | ||
767 | 812 | ||
768 | psBase->ui32LastFreeIndexPlusOne = ui32Index + 1; | 813 | psBase->ui32LastFreeIndexPlusOne = ui32Index + 1; |
@@ -771,7 +816,7 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan | |||
771 | psBase->ui32FreeHandCount++; | 816 | psBase->ui32FreeHandCount++; |
772 | INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)++; | 817 | INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)++; |
773 | 818 | ||
774 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)<= HANDLE_BLOCK_SIZE); | 819 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32Index)<= HANDLE_BLOCK_SIZE) |
775 | 820 | ||
776 | #ifdef DEBUG | 821 | #ifdef DEBUG |
777 | { | 822 | { |
@@ -783,7 +828,7 @@ static PVRSRV_ERROR FreeHandle(PVRSRV_HANDLE_BASE *psBase, struct sHandle *psHan | |||
783 | ui32FreeHandCount += INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32BlockedIndex); | 828 | ui32FreeHandCount += INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32BlockedIndex); |
784 | } | 829 | } |
785 | 830 | ||
786 | PVR_ASSERT(ui32FreeHandCount == psBase->ui32FreeHandCount); | 831 | PVR_ASSERT(ui32FreeHandCount == psBase->ui32FreeHandCount) |
787 | } | 832 | } |
788 | #endif | 833 | #endif |
789 | 834 | ||
@@ -875,15 +920,23 @@ static PVRSRV_ERROR FreeHandleBase(PVRSRV_HANDLE_BASE *psBase) | |||
875 | #pragma inline(FindHandle) | 920 | #pragma inline(FindHandle) |
876 | #endif | 921 | #endif |
877 | static INLINE | 922 | static INLINE |
923 | #if defined (SUPPORT_SID_INTERFACE) | ||
924 | IMG_SID FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_SID hParent) | ||
925 | #else | ||
878 | IMG_HANDLE FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) | 926 | IMG_HANDLE FindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hParent) |
927 | #endif | ||
879 | { | 928 | { |
880 | HAND_KEY aKey; | 929 | HAND_KEY aKey; |
881 | 930 | ||
882 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 931 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
883 | 932 | ||
884 | InitKey(aKey, psBase, pvData, eType, hParent); | 933 | InitKey(aKey, psBase, pvData, eType, hParent); |
885 | 934 | ||
935 | #if defined (SUPPORT_SID_INTERFACE) | ||
936 | return (IMG_SID) HASH_Retrieve_Extended(psBase->psHashTab, aKey); | ||
937 | #else | ||
886 | return (IMG_HANDLE) HASH_Retrieve_Extended(psBase->psHashTab, aKey); | 938 | return (IMG_HANDLE) HASH_Retrieve_Extended(psBase->psHashTab, aKey); |
939 | #endif | ||
887 | } | 940 | } |
888 | 941 | ||
889 | static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Delta) | 942 | static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Delta) |
@@ -893,7 +946,7 @@ static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT | |||
893 | IMG_UINT32 ui32NewTotalHandCount = psBase->ui32TotalHandCount + ui32DeltaAdjusted; | 946 | IMG_UINT32 ui32NewTotalHandCount = psBase->ui32TotalHandCount + ui32DeltaAdjusted; |
894 | ; | 947 | ; |
895 | 948 | ||
896 | PVR_ASSERT(ui32Delta != 0); | 949 | PVR_ASSERT(ui32Delta != 0) |
897 | 950 | ||
898 | 951 | ||
899 | if (ui32NewTotalHandCount > psBase->ui32MaxIndexPlusOne || ui32NewTotalHandCount <= psBase->ui32TotalHandCount) | 952 | if (ui32NewTotalHandCount > psBase->ui32MaxIndexPlusOne || ui32NewTotalHandCount <= psBase->ui32TotalHandCount) |
@@ -909,7 +962,7 @@ static PVRSRV_ERROR IncreaseHandleArraySize(PVRSRV_HANDLE_BASE *psBase, IMG_UINT | |||
909 | } | 962 | } |
910 | } | 963 | } |
911 | 964 | ||
912 | PVR_ASSERT(ui32DeltaAdjusted >= ui32Delta); | 965 | PVR_ASSERT(ui32DeltaAdjusted >= ui32Delta) |
913 | 966 | ||
914 | 967 | ||
915 | eError = ReallocHandleArray(psBase, ui32NewTotalHandCount); | 968 | eError = ReallocHandleArray(psBase, ui32NewTotalHandCount); |
@@ -941,28 +994,36 @@ static PVRSRV_ERROR EnsureFreeHandles(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui3 | |||
941 | return PVRSRV_OK; | 994 | return PVRSRV_OK; |
942 | } | 995 | } |
943 | 996 | ||
997 | #if defined (SUPPORT_SID_INTERFACE) | ||
998 | static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) | ||
999 | #else | ||
944 | static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) | 1000 | static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) |
1001 | #endif | ||
945 | { | 1002 | { |
946 | IMG_UINT32 ui32NewIndex = DEFAULT_MAX_INDEX_PLUS_ONE; | 1003 | IMG_UINT32 ui32NewIndex = DEFAULT_MAX_INDEX_PLUS_ONE; |
947 | struct sHandle *psNewHandle = IMG_NULL; | 1004 | struct sHandle *psNewHandle = IMG_NULL; |
1005 | #if defined (SUPPORT_SID_INTERFACE) | ||
1006 | IMG_SID hHandle; | ||
1007 | #else | ||
948 | IMG_HANDLE hHandle; | 1008 | IMG_HANDLE hHandle; |
1009 | #endif | ||
949 | HAND_KEY aKey; | 1010 | HAND_KEY aKey; |
950 | PVRSRV_ERROR eError; | 1011 | PVRSRV_ERROR eError; |
951 | 1012 | ||
952 | 1013 | ||
953 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1014 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
954 | PVR_ASSERT(psBase != IMG_NULL); | 1015 | PVR_ASSERT(psBase != IMG_NULL) |
955 | PVR_ASSERT(psBase->psHashTab != IMG_NULL); | 1016 | PVR_ASSERT(psBase->psHashTab != IMG_NULL) |
956 | 1017 | ||
957 | if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) | 1018 | if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) |
958 | { | 1019 | { |
959 | 1020 | ||
960 | PVR_ASSERT(FindHandle(psBase, pvData, eType, hParent) == IMG_NULL); | 1021 | PVR_ASSERT(FindHandle(psBase, pvData, eType, hParent) == IMG_NULL) |
961 | } | 1022 | } |
962 | 1023 | ||
963 | if (psBase->ui32FreeHandCount == 0 && HANDLES_BATCHED(psBase)) | 1024 | if (psBase->ui32FreeHandCount == 0 && HANDLES_BATCHED(psBase)) |
964 | { | 1025 | { |
965 | PVR_DPF((PVR_DBG_WARNING, "AllocHandle: Handle batch size (%u) was too small, allocating additional space", psBase->ui32HandBatchSize)); | 1026 | PVR_DPF((PVR_DBG_WARNING, "AllocHandle: Handle batch size (%u) was too small, allocating additional space", psBase->ui32HandBatchSize)); |
966 | } | 1027 | } |
967 | 1028 | ||
968 | 1029 | ||
@@ -988,7 +1049,7 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
988 | 1049 | ||
989 | 1050 | ||
990 | 1051 | ||
991 | PVR_ASSERT((psBase->ui32FirstFreeIndex % HANDLE_BLOCK_SIZE) == 0); | 1052 | PVR_ASSERT((psBase->ui32FirstFreeIndex % HANDLE_BLOCK_SIZE) == 0) |
992 | 1053 | ||
993 | for (ui32BlockedIndex = ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(psBase->ui32FirstFreeIndex); ui32BlockedIndex < psBase->ui32TotalHandCount; ui32BlockedIndex += HANDLE_BLOCK_SIZE) | 1054 | for (ui32BlockedIndex = ROUND_DOWN_TO_MULTIPLE_OF_BLOCK_SIZE(psBase->ui32FirstFreeIndex); ui32BlockedIndex < psBase->ui32TotalHandCount; ui32BlockedIndex += HANDLE_BLOCK_SIZE) |
994 | { | 1055 | { |
@@ -1009,9 +1070,9 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1009 | } | 1070 | } |
1010 | } | 1071 | } |
1011 | psBase->ui32FirstFreeIndex = 0; | 1072 | psBase->ui32FirstFreeIndex = 0; |
1012 | PVR_ASSERT(ui32NewIndex < psBase->ui32TotalHandCount); | 1073 | PVR_ASSERT(ui32NewIndex < psBase->ui32TotalHandCount) |
1013 | } | 1074 | } |
1014 | PVR_ASSERT(psNewHandle != IMG_NULL); | 1075 | PVR_ASSERT(psNewHandle != IMG_NULL) |
1015 | 1076 | ||
1016 | 1077 | ||
1017 | hHandle = INDEX_TO_HANDLE(ui32NewIndex); | 1078 | hHandle = INDEX_TO_HANDLE(ui32NewIndex); |
@@ -1033,8 +1094,8 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1033 | 1094 | ||
1034 | psBase->ui32FreeHandCount--; | 1095 | psBase->ui32FreeHandCount--; |
1035 | 1096 | ||
1036 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) <= HANDLE_BLOCK_SIZE); | 1097 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) <= HANDLE_BLOCK_SIZE) |
1037 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) > 0); | 1098 | PVR_ASSERT(INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex) > 0) |
1038 | 1099 | ||
1039 | INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex)--; | 1100 | INDEX_TO_FREE_HAND_BLOCK_COUNT(psBase, ui32NewIndex)--; |
1040 | 1101 | ||
@@ -1044,8 +1105,8 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1044 | 1105 | ||
1045 | if (psBase->ui32FreeHandCount == 0) | 1106 | if (psBase->ui32FreeHandCount == 0) |
1046 | { | 1107 | { |
1047 | PVR_ASSERT(psBase->ui32FirstFreeIndex == ui32NewIndex); | 1108 | PVR_ASSERT(psBase->ui32FirstFreeIndex == ui32NewIndex) |
1048 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == (ui32NewIndex + 1)); | 1109 | PVR_ASSERT(psBase->ui32LastFreeIndexPlusOne == (ui32NewIndex + 1)) |
1049 | 1110 | ||
1050 | psBase->ui32LastFreeIndexPlusOne = 0; | 1111 | psBase->ui32LastFreeIndexPlusOne = 0; |
1051 | psBase->ui32FirstFreeIndex = 0; | 1112 | psBase->ui32FirstFreeIndex = 0; |
@@ -1060,7 +1121,7 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1060 | } | 1121 | } |
1061 | 1122 | ||
1062 | 1123 | ||
1063 | PVR_ASSERT(psNewHandle->ui32Index == ui32NewIndex); | 1124 | PVR_ASSERT(psNewHandle->ui32Index == ui32NewIndex) |
1064 | 1125 | ||
1065 | 1126 | ||
1066 | psNewHandle->eType = eType; | 1127 | psNewHandle->eType = eType; |
@@ -1070,12 +1131,12 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1070 | 1131 | ||
1071 | InitParentList(psNewHandle); | 1132 | InitParentList(psNewHandle); |
1072 | #if defined(DEBUG) | 1133 | #if defined(DEBUG) |
1073 | PVR_ASSERT(NoChildren(psNewHandle)); | 1134 | PVR_ASSERT(NoChildren(psNewHandle)) |
1074 | #endif | 1135 | #endif |
1075 | 1136 | ||
1076 | InitChildEntry(psNewHandle); | 1137 | InitChildEntry(psNewHandle); |
1077 | #if defined(DEBUG) | 1138 | #if defined(DEBUG) |
1078 | PVR_ASSERT(NoParent(psNewHandle)); | 1139 | PVR_ASSERT(NoParent(psNewHandle)) |
1079 | #endif | 1140 | #endif |
1080 | 1141 | ||
1081 | if (HANDLES_BATCHED(psBase)) | 1142 | if (HANDLES_BATCHED(psBase)) |
@@ -1099,12 +1160,24 @@ static PVRSRV_ERROR AllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle | |||
1099 | return PVRSRV_OK; | 1160 | return PVRSRV_OK; |
1100 | } | 1161 | } |
1101 | 1162 | ||
1163 | #if defined (SUPPORT_SID_INTERFACE) | ||
1164 | PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) | ||
1165 | #else | ||
1102 | PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) | 1166 | PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag) |
1167 | #endif | ||
1103 | { | 1168 | { |
1169 | #if defined (SUPPORT_SID_INTERFACE) | ||
1170 | IMG_SID hHandle; | ||
1171 | #else | ||
1104 | IMG_HANDLE hHandle; | 1172 | IMG_HANDLE hHandle; |
1173 | #endif | ||
1105 | PVRSRV_ERROR eError; | 1174 | PVRSRV_ERROR eError; |
1106 | 1175 | ||
1176 | #if defined (SUPPORT_SID_INTERFACE) | ||
1177 | *phHandle = 0; | ||
1178 | #else | ||
1107 | *phHandle = IMG_NULL; | 1179 | *phHandle = IMG_NULL; |
1180 | #endif | ||
1108 | 1181 | ||
1109 | if (HANDLES_BATCHED(psBase)) | 1182 | if (HANDLES_BATCHED(psBase)) |
1110 | { | 1183 | { |
@@ -1113,13 +1186,17 @@ PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, | |||
1113 | } | 1186 | } |
1114 | 1187 | ||
1115 | 1188 | ||
1116 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1189 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1117 | 1190 | ||
1118 | if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) | 1191 | if (!TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_MULTI)) |
1119 | { | 1192 | { |
1120 | 1193 | ||
1121 | hHandle = FindHandle(psBase, pvData, eType, IMG_NULL); | 1194 | hHandle = FindHandle(psBase, pvData, eType, IMG_NULL); |
1195 | #if defined (SUPPORT_SID_INTERFACE) | ||
1196 | if (hHandle != 0) | ||
1197 | #else | ||
1122 | if (hHandle != IMG_NULL) | 1198 | if (hHandle != IMG_NULL) |
1199 | #endif | ||
1123 | { | 1200 | { |
1124 | struct sHandle *psHandle; | 1201 | struct sHandle *psHandle; |
1125 | 1202 | ||
@@ -1137,12 +1214,16 @@ PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, | |||
1137 | eError = PVRSRV_OK; | 1214 | eError = PVRSRV_OK; |
1138 | goto exit_ok; | 1215 | goto exit_ok; |
1139 | } | 1216 | } |
1217 | |||
1218 | #if defined (SUPPORT_SID_INTERFACE) | ||
1219 | PVR_DBG_BREAK | ||
1220 | #endif | ||
1140 | return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; | 1221 | return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; |
1141 | } | 1222 | } |
1142 | } | 1223 | } |
1143 | 1224 | ||
1144 | eError = AllocHandle(psBase, phHandle, pvData, eType, eFlag, IMG_NULL); | 1225 | eError = AllocHandle(psBase, phHandle, pvData, eType, eFlag, IMG_NULL); |
1145 | 1226 | ||
1146 | exit_ok: | 1227 | exit_ok: |
1147 | if (HANDLES_BATCHED(psBase) && (eError == PVRSRV_OK)) | 1228 | if (HANDLES_BATCHED(psBase) && (eError == PVRSRV_OK)) |
1148 | { | 1229 | { |
@@ -1152,15 +1233,26 @@ exit_ok: | |||
1152 | return eError; | 1233 | return eError; |
1153 | } | 1234 | } |
1154 | 1235 | ||
1236 | #if defined (SUPPORT_SID_INTERFACE) | ||
1237 | PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_SID hParent) | ||
1238 | #else | ||
1155 | PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) | 1239 | PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent) |
1240 | #endif | ||
1156 | { | 1241 | { |
1157 | struct sHandle *psPHand; | 1242 | struct sHandle *psPHand; |
1158 | struct sHandle *psCHand; | 1243 | struct sHandle *psCHand; |
1159 | PVRSRV_ERROR eError; | 1244 | PVRSRV_ERROR eError; |
1245 | #if defined (SUPPORT_SID_INTERFACE) | ||
1246 | IMG_SID hParentKey; | ||
1247 | IMG_SID hHandle; | ||
1248 | |||
1249 | *phHandle = 0; | ||
1250 | #else | ||
1160 | IMG_HANDLE hParentKey; | 1251 | IMG_HANDLE hParentKey; |
1161 | IMG_HANDLE hHandle; | 1252 | IMG_HANDLE hHandle; |
1162 | 1253 | ||
1163 | *phHandle = IMG_NULL; | 1254 | *phHandle = IMG_NULL; |
1255 | #endif | ||
1164 | 1256 | ||
1165 | if (HANDLES_BATCHED(psBase)) | 1257 | if (HANDLES_BATCHED(psBase)) |
1166 | { | 1258 | { |
@@ -1169,7 +1261,7 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand | |||
1169 | } | 1261 | } |
1170 | 1262 | ||
1171 | 1263 | ||
1172 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1264 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1173 | 1265 | ||
1174 | hParentKey = TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? | 1266 | hParentKey = TEST_FLAG(eFlag, PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE) ? |
1175 | hParent : IMG_NULL; | 1267 | hParent : IMG_NULL; |
@@ -1185,7 +1277,11 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand | |||
1185 | { | 1277 | { |
1186 | 1278 | ||
1187 | hHandle = FindHandle(psBase, pvData, eType, hParentKey); | 1279 | hHandle = FindHandle(psBase, pvData, eType, hParentKey); |
1280 | #if defined (SUPPORT_SID_INTERFACE) | ||
1281 | if (hHandle != 0) | ||
1282 | #else | ||
1188 | if (hHandle != IMG_NULL) | 1283 | if (hHandle != IMG_NULL) |
1284 | #endif | ||
1189 | { | 1285 | { |
1190 | struct sHandle *psCHandle; | 1286 | struct sHandle *psCHandle; |
1191 | PVRSRV_ERROR eErr; | 1287 | PVRSRV_ERROR eErr; |
@@ -1197,7 +1293,7 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand | |||
1197 | return eErr; | 1293 | return eErr; |
1198 | } | 1294 | } |
1199 | 1295 | ||
1200 | PVR_ASSERT(hParentKey != IMG_NULL && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent); | 1296 | PVR_ASSERT(hParentKey != IMG_NULL && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) |
1201 | 1297 | ||
1202 | 1298 | ||
1203 | if (TEST_FLAG(psCHandle->eFlag & eFlag, PVRSRV_HANDLE_ALLOC_FLAG_SHARED) && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) | 1299 | if (TEST_FLAG(psCHandle->eFlag & eFlag, PVRSRV_HANDLE_ALLOC_FLAG_SHARED) && ParentHandle(HANDLE_TO_HANDLE_STRUCT_PTR(psBase, hHandle)) == hParent) |
@@ -1205,6 +1301,9 @@ PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHand | |||
1205 | *phHandle = hHandle; | 1301 | *phHandle = hHandle; |
1206 | goto exit_ok; | 1302 | goto exit_ok; |
1207 | } | 1303 | } |
1304 | #if defined (SUPPORT_SID_INTERFACE) | ||
1305 | PVR_DBG_BREAK | ||
1306 | #endif | ||
1208 | return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; | 1307 | return PVRSRV_ERROR_HANDLE_NOT_SHAREABLE; |
1209 | } | 1308 | } |
1210 | } | 1309 | } |
@@ -1233,14 +1332,26 @@ exit_ok: | |||
1233 | return PVRSRV_OK; | 1332 | return PVRSRV_OK; |
1234 | } | 1333 | } |
1235 | 1334 | ||
1335 | #if defined (SUPPORT_SID_INTERFACE) | ||
1336 | PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) | ||
1337 | #else | ||
1236 | PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) | 1338 | PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType) |
1339 | #endif | ||
1237 | { | 1340 | { |
1341 | #if defined (SUPPORT_SID_INTERFACE) | ||
1342 | IMG_SID hHandle; | ||
1343 | #else | ||
1238 | IMG_HANDLE hHandle; | 1344 | IMG_HANDLE hHandle; |
1345 | #endif | ||
1239 | 1346 | ||
1240 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1347 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1241 | 1348 | ||
1242 | 1349 | ||
1350 | #if defined (SUPPORT_SID_INTERFACE) | ||
1351 | hHandle = (IMG_SID) FindHandle(psBase, pvData, eType, IMG_NULL); | ||
1352 | #else | ||
1243 | hHandle = (IMG_HANDLE) FindHandle(psBase, pvData, eType, IMG_NULL); | 1353 | hHandle = (IMG_HANDLE) FindHandle(psBase, pvData, eType, IMG_NULL); |
1354 | #endif | ||
1244 | if (hHandle == IMG_NULL) | 1355 | if (hHandle == IMG_NULL) |
1245 | { | 1356 | { |
1246 | return PVRSRV_ERROR_HANDLE_NOT_FOUND; | 1357 | return PVRSRV_ERROR_HANDLE_NOT_FOUND; |
@@ -1251,7 +1362,11 @@ PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, | |||
1251 | return PVRSRV_OK; | 1362 | return PVRSRV_OK; |
1252 | } | 1363 | } |
1253 | 1364 | ||
1365 | #if defined (SUPPORT_SID_INTERFACE) | ||
1366 | PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_SID hHandle) | ||
1367 | #else | ||
1254 | PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle) | 1368 | PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle) |
1369 | #endif | ||
1255 | { | 1370 | { |
1256 | struct sHandle *psHandle; | 1371 | struct sHandle *psHandle; |
1257 | PVRSRV_ERROR eError; | 1372 | PVRSRV_ERROR eError; |
@@ -1260,6 +1375,9 @@ PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *pp | |||
1260 | if (eError != PVRSRV_OK) | 1375 | if (eError != PVRSRV_OK) |
1261 | { | 1376 | { |
1262 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandleAnyType: Error looking up handle (%d)", eError)); | 1377 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandleAnyType: Error looking up handle (%d)", eError)); |
1378 | #if defined (SUPPORT_SID_INTERFACE) | ||
1379 | PVR_DBG_BREAK | ||
1380 | #endif | ||
1263 | return eError; | 1381 | return eError; |
1264 | } | 1382 | } |
1265 | 1383 | ||
@@ -1269,17 +1387,27 @@ PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *pp | |||
1269 | return PVRSRV_OK; | 1387 | return PVRSRV_OK; |
1270 | } | 1388 | } |
1271 | 1389 | ||
1390 | #if defined (SUPPORT_SID_INTERFACE) | ||
1391 | PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) | ||
1392 | #else | ||
1272 | PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) | 1393 | PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) |
1394 | #endif | ||
1273 | { | 1395 | { |
1274 | struct sHandle *psHandle; | 1396 | struct sHandle *psHandle; |
1275 | PVRSRV_ERROR eError; | 1397 | PVRSRV_ERROR eError; |
1276 | 1398 | ||
1277 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1399 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1400 | #if defined (SUPPORT_SID_INTERFACE) | ||
1401 | PVR_ASSERT(hHandle != 0) | ||
1402 | #endif | ||
1278 | 1403 | ||
1279 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); | 1404 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); |
1280 | if (eError != PVRSRV_OK) | 1405 | if (eError != PVRSRV_OK) |
1281 | { | 1406 | { |
1282 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandle: Error looking up handle (%d)", eError)); | 1407 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupHandle: Error looking up handle (%d)", eError)); |
1408 | #if defined (SUPPORT_SID_INTERFACE) | ||
1409 | PVR_DBG_BREAK | ||
1410 | #endif | ||
1283 | return eError; | 1411 | return eError; |
1284 | } | 1412 | } |
1285 | 1413 | ||
@@ -1288,13 +1416,20 @@ PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, | |||
1288 | return PVRSRV_OK; | 1416 | return PVRSRV_OK; |
1289 | } | 1417 | } |
1290 | 1418 | ||
1419 | #if defined (SUPPORT_SID_INTERFACE) | ||
1420 | PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType, IMG_SID hAncestor) | ||
1421 | #else | ||
1291 | PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor) | 1422 | PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor) |
1423 | #endif | ||
1292 | { | 1424 | { |
1293 | struct sHandle *psPHand; | 1425 | struct sHandle *psPHand; |
1294 | struct sHandle *psCHand; | 1426 | struct sHandle *psCHand; |
1295 | PVRSRV_ERROR eError; | 1427 | PVRSRV_ERROR eError; |
1296 | 1428 | ||
1297 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1429 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1430 | #if defined (SUPPORT_SID_INTERFACE) | ||
1431 | PVR_ASSERT(hHandle != 0) | ||
1432 | #endif | ||
1298 | 1433 | ||
1299 | eError = GetHandleStructure(psBase, &psCHand, hHandle, eType); | 1434 | eError = GetHandleStructure(psBase, &psCHand, hHandle, eType); |
1300 | if (eError != PVRSRV_OK) | 1435 | if (eError != PVRSRV_OK) |
@@ -1319,12 +1454,16 @@ PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvDat | |||
1319 | return PVRSRV_OK; | 1454 | return PVRSRV_OK; |
1320 | } | 1455 | } |
1321 | 1456 | ||
1457 | #if defined (SUPPORT_SID_INTERFACE) | ||
1458 | PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID *phParent, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) | ||
1459 | #else | ||
1322 | PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) | 1460 | PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) |
1461 | #endif | ||
1323 | { | 1462 | { |
1324 | struct sHandle *psHandle; | 1463 | struct sHandle *psHandle; |
1325 | PVRSRV_ERROR eError; | 1464 | PVRSRV_ERROR eError; |
1326 | 1465 | ||
1327 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1466 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1328 | 1467 | ||
1329 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); | 1468 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); |
1330 | if (eError != PVRSRV_OK) | 1469 | if (eError != PVRSRV_OK) |
@@ -1338,17 +1477,24 @@ PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phPare | |||
1338 | return PVRSRV_OK; | 1477 | return PVRSRV_OK; |
1339 | } | 1478 | } |
1340 | 1479 | ||
1480 | #if defined (SUPPORT_SID_INTERFACE) | ||
1481 | PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) | ||
1482 | #else | ||
1341 | PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) | 1483 | PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) |
1484 | #endif | ||
1342 | { | 1485 | { |
1343 | struct sHandle *psHandle; | 1486 | struct sHandle *psHandle; |
1344 | PVRSRV_ERROR eError; | 1487 | PVRSRV_ERROR eError; |
1345 | 1488 | ||
1346 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1489 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1347 | 1490 | ||
1348 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); | 1491 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); |
1349 | if (eError != PVRSRV_OK) | 1492 | if (eError != PVRSRV_OK) |
1350 | { | 1493 | { |
1351 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupAndReleaseHandle: Error looking up handle (%d)", eError)); | 1494 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVLookupAndReleaseHandle: Error looking up handle (%d)", eError)); |
1495 | #if defined (SUPPORT_SID_INTERFACE) | ||
1496 | PVR_DBG_BREAK | ||
1497 | #endif | ||
1352 | return eError; | 1498 | return eError; |
1353 | } | 1499 | } |
1354 | 1500 | ||
@@ -1359,12 +1505,16 @@ PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID | |||
1359 | return eError; | 1505 | return eError; |
1360 | } | 1506 | } |
1361 | 1507 | ||
1508 | #if defined (SUPPORT_SID_INTERFACE) | ||
1509 | PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_SID hHandle, PVRSRV_HANDLE_TYPE eType) | ||
1510 | #else | ||
1362 | PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) | 1511 | PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType) |
1512 | #endif | ||
1363 | { | 1513 | { |
1364 | struct sHandle *psHandle; | 1514 | struct sHandle *psHandle; |
1365 | PVRSRV_ERROR eError; | 1515 | PVRSRV_ERROR eError; |
1366 | 1516 | ||
1367 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE); | 1517 | PVR_ASSERT(eType != PVRSRV_HANDLE_TYPE_NONE) |
1368 | 1518 | ||
1369 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); | 1519 | eError = GetHandleStructure(psBase, &psHandle, hHandle, eType); |
1370 | if (eError != PVRSRV_OK) | 1520 | if (eError != PVRSRV_OK) |
@@ -1406,11 +1556,11 @@ PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32Bat | |||
1406 | 1556 | ||
1407 | psBase->ui32TotalHandCountPreBatch = psBase->ui32TotalHandCount; | 1557 | psBase->ui32TotalHandCountPreBatch = psBase->ui32TotalHandCount; |
1408 | 1558 | ||
1409 | PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0); | 1559 | PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0) |
1410 | 1560 | ||
1411 | PVR_ASSERT(psBase->ui32FirstBatchIndexPlusOne == 0); | 1561 | PVR_ASSERT(psBase->ui32FirstBatchIndexPlusOne == 0) |
1412 | 1562 | ||
1413 | PVR_ASSERT(HANDLES_BATCHED(psBase)); | 1563 | PVR_ASSERT(HANDLES_BATCHED(psBase)) |
1414 | 1564 | ||
1415 | return PVRSRV_OK; | 1565 | return PVRSRV_OK; |
1416 | } | 1566 | } |
@@ -1437,14 +1587,14 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, | |||
1437 | bCommitBatch = IMG_FALSE; | 1587 | bCommitBatch = IMG_FALSE; |
1438 | } | 1588 | } |
1439 | 1589 | ||
1440 | PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0 || !bCommit); | 1590 | PVR_ASSERT(psBase->ui32BatchHandAllocFailures == 0 || !bCommit) |
1441 | 1591 | ||
1442 | ui32IndexPlusOne = psBase->ui32FirstBatchIndexPlusOne; | 1592 | ui32IndexPlusOne = psBase->ui32FirstBatchIndexPlusOne; |
1443 | while(ui32IndexPlusOne != 0) | 1593 | while(ui32IndexPlusOne != 0) |
1444 | { | 1594 | { |
1445 | struct sHandle *psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32IndexPlusOne - 1); | 1595 | struct sHandle *psHandle = INDEX_TO_HANDLE_STRUCT_PTR(psBase, ui32IndexPlusOne - 1); |
1446 | IMG_UINT32 ui32NextIndexPlusOne = psHandle->ui32NextIndexPlusOne; | 1596 | IMG_UINT32 ui32NextIndexPlusOne = psHandle->ui32NextIndexPlusOne; |
1447 | PVR_ASSERT(BATCHED_HANDLE(psHandle)); | 1597 | PVR_ASSERT(BATCHED_HANDLE(psHandle)) |
1448 | 1598 | ||
1449 | psHandle->ui32NextIndexPlusOne = 0; | 1599 | psHandle->ui32NextIndexPlusOne = 0; |
1450 | 1600 | ||
@@ -1464,7 +1614,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, | |||
1464 | { | 1614 | { |
1465 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: Error freeing handle (%d)", eError)); | 1615 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVHandleBatchCommitOrRelease: Error freeing handle (%d)", eError)); |
1466 | } | 1616 | } |
1467 | PVR_ASSERT(eError == PVRSRV_OK); | 1617 | PVR_ASSERT(eError == PVRSRV_OK) |
1468 | } | 1618 | } |
1469 | else | 1619 | else |
1470 | { | 1620 | { |
@@ -1480,7 +1630,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, | |||
1480 | { | 1630 | { |
1481 | IMG_UINT32 ui32Delta = psBase->ui32TotalHandCount - psBase->ui32TotalHandCountPreBatch; | 1631 | IMG_UINT32 ui32Delta = psBase->ui32TotalHandCount - psBase->ui32TotalHandCountPreBatch; |
1482 | 1632 | ||
1483 | PVR_ASSERT(psBase->ui32TotalHandCount > psBase->ui32TotalHandCountPreBatch); | 1633 | PVR_ASSERT(psBase->ui32TotalHandCount > psBase->ui32TotalHandCountPreBatch) |
1484 | 1634 | ||
1485 | PVR_DPF((PVR_DBG_WARNING, "PVRSRVHandleBatchCommitOrRelease: The batch size was too small. Batch size was %u, but needs to be %u", psBase->ui32HandBatchSize, psBase->ui32HandBatchSize + ui32Delta)); | 1635 | PVR_DPF((PVR_DBG_WARNING, "PVRSRVHandleBatchCommitOrRelease: The batch size was too small. Batch size was %u, but needs to be %u", psBase->ui32HandBatchSize, psBase->ui32HandBatchSize + ui32Delta)); |
1486 | 1636 | ||
@@ -1494,7 +1644,7 @@ static PVRSRV_ERROR PVRSRVHandleBatchCommitOrRelease(PVRSRV_HANDLE_BASE *psBase, | |||
1494 | 1644 | ||
1495 | if (psBase->ui32BatchHandAllocFailures != 0 && bCommit) | 1645 | if (psBase->ui32BatchHandAllocFailures != 0 && bCommit) |
1496 | { | 1646 | { |
1497 | PVR_ASSERT(!bCommitBatch); | 1647 | PVR_ASSERT(!bCommitBatch) |
1498 | 1648 | ||
1499 | return PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE; | 1649 | return PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE; |
1500 | } | 1650 | } |
@@ -1546,9 +1696,9 @@ PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHa | |||
1546 | psBase->ui32MaxIndexPlusOne = ui32MaxHandleRounded; | 1696 | psBase->ui32MaxIndexPlusOne = ui32MaxHandleRounded; |
1547 | } | 1697 | } |
1548 | 1698 | ||
1549 | PVR_ASSERT(psBase->ui32MaxIndexPlusOne != 0); | 1699 | PVR_ASSERT(psBase->ui32MaxIndexPlusOne != 0) |
1550 | PVR_ASSERT(psBase->ui32MaxIndexPlusOne <= DEFAULT_MAX_INDEX_PLUS_ONE); | 1700 | PVR_ASSERT(psBase->ui32MaxIndexPlusOne <= DEFAULT_MAX_INDEX_PLUS_ONE) |
1551 | PVR_ASSERT((psBase->ui32MaxIndexPlusOne % HANDLE_BLOCK_SIZE) == 0); | 1701 | PVR_ASSERT((psBase->ui32MaxIndexPlusOne % HANDLE_BLOCK_SIZE) == 0) |
1552 | 1702 | ||
1553 | return PVRSRV_OK; | 1703 | return PVRSRV_OK; |
1554 | } | 1704 | } |
@@ -1595,7 +1745,7 @@ PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase) | |||
1595 | return PVRSRV_ERROR_INVALID_PARAMS; | 1745 | return PVRSRV_ERROR_INVALID_PARAMS; |
1596 | } | 1746 | } |
1597 | 1747 | ||
1598 | PVR_ASSERT((psBase->ui32TotalHandCount % HANDLE_BLOCK_SIZE) == 0); | 1748 | PVR_ASSERT((psBase->ui32TotalHandCount % HANDLE_BLOCK_SIZE) == 0) |
1599 | 1749 | ||
1600 | for (ui32BlockIndex = INDEX_TO_BLOCK_INDEX(psBase->ui32TotalHandCount); ui32BlockIndex != 0; ui32BlockIndex--) | 1750 | for (ui32BlockIndex = INDEX_TO_BLOCK_INDEX(psBase->ui32TotalHandCount); ui32BlockIndex != 0; ui32BlockIndex--) |
1601 | { | 1751 | { |
@@ -1629,7 +1779,7 @@ PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase) | |||
1629 | IMG_HANDLE hBlockAlloc; | 1779 | IMG_HANDLE hBlockAlloc; |
1630 | PVRSRV_ERROR eError; | 1780 | PVRSRV_ERROR eError; |
1631 | 1781 | ||
1632 | eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, | 1782 | eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, |
1633 | sizeof(*psBase), | 1783 | sizeof(*psBase), |
1634 | (IMG_PVOID *)&psBase, | 1784 | (IMG_PVOID *)&psBase, |
1635 | &hBlockAlloc, | 1785 | &hBlockAlloc, |
@@ -1663,7 +1813,7 @@ PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase) | |||
1663 | { | 1813 | { |
1664 | PVRSRV_ERROR eError; | 1814 | PVRSRV_ERROR eError; |
1665 | 1815 | ||
1666 | PVR_ASSERT(psBase != gpsKernelHandleBase); | 1816 | PVR_ASSERT(psBase != gpsKernelHandleBase) |
1667 | 1817 | ||
1668 | eError = FreeHandleBase(psBase); | 1818 | eError = FreeHandleBase(psBase); |
1669 | if (eError != PVRSRV_OK) | 1819 | if (eError != PVRSRV_OK) |
@@ -1678,7 +1828,7 @@ PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) | |||
1678 | { | 1828 | { |
1679 | PVRSRV_ERROR eError; | 1829 | PVRSRV_ERROR eError; |
1680 | 1830 | ||
1681 | PVR_ASSERT(gpsKernelHandleBase == IMG_NULL); | 1831 | PVR_ASSERT(gpsKernelHandleBase == IMG_NULL) |
1682 | 1832 | ||
1683 | eError = PVRSRVAllocHandleBase(&gpsKernelHandleBase); | 1833 | eError = PVRSRVAllocHandleBase(&gpsKernelHandleBase); |
1684 | if (eError != PVRSRV_OK) | 1834 | if (eError != PVRSRV_OK) |