aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/hash.c')
-rw-r--r--drivers/gpu/pvr/hash.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/gpu/pvr/hash.c b/drivers/gpu/pvr/hash.c
index 32b0779d456..488bf1b20e6 100644
--- a/drivers/gpu/pvr/hash.c
+++ b/drivers/gpu/pvr/hash.c
@@ -80,7 +80,7 @@ IMG_UINT32
80HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen) 80HASH_Func_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey, IMG_UINT32 uHashTabLen)
81{ 81{
82 IMG_UINTPTR_T *p = (IMG_UINTPTR_T *)pKey; 82 IMG_UINTPTR_T *p = (IMG_UINTPTR_T *)pKey;
83 IMG_UINT32 uKeyLen = uKeySize / sizeof(IMG_UINTPTR_T); 83 IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T));
84 IMG_UINT32 ui; 84 IMG_UINT32 ui;
85 IMG_UINT32 uHashKey = 0; 85 IMG_UINT32 uHashKey = 0;
86 86
@@ -112,7 +112,7 @@ HASH_Key_Comp_Default (IMG_SIZE_T uKeySize, IMG_VOID *pKey1, IMG_VOID *pKey2)
112{ 112{
113 IMG_UINTPTR_T *p1 = (IMG_UINTPTR_T *)pKey1; 113 IMG_UINTPTR_T *p1 = (IMG_UINTPTR_T *)pKey1;
114 IMG_UINTPTR_T *p2 = (IMG_UINTPTR_T *)pKey2; 114 IMG_UINTPTR_T *p2 = (IMG_UINTPTR_T *)pKey2;
115 IMG_UINT32 uKeyLen = uKeySize / sizeof(IMG_UINTPTR_T); 115 IMG_UINT32 uKeyLen = (IMG_UINT32)(uKeySize / sizeof(IMG_UINTPTR_T));
116 IMG_UINT32 ui; 116 IMG_UINT32 ui;
117 117
118 PVR_ASSERT((uKeySize % sizeof(IMG_UINTPTR_T)) == 0); 118 PVR_ASSERT((uKeySize % sizeof(IMG_UINTPTR_T)) == 0);
@@ -228,7 +228,7 @@ HASH_TABLE * HASH_Create_Extended (IMG_UINT32 uInitialLen, IMG_SIZE_T uKeySize,
228 pHash->uCount = 0; 228 pHash->uCount = 0;
229 pHash->uSize = uInitialLen; 229 pHash->uSize = uInitialLen;
230 pHash->uMinimumSize = uInitialLen; 230 pHash->uMinimumSize = uInitialLen;
231 pHash->uKeySize = uKeySize; 231 pHash->uKeySize = (IMG_UINT32)uKeySize;
232 pHash->pfnHashFunc = pfnHashFunc; 232 pHash->pfnHashFunc = pfnHashFunc;
233 pHash->pfnKeyComp = pfnKeyComp; 233 pHash->pfnKeyComp = pfnKeyComp;
234 234
@@ -305,6 +305,9 @@ HASH_Insert_Extended (HASH_TABLE *pHash, IMG_VOID *pKey, IMG_UINTPTR_T v)
305 OSMemCopy(pBucket->k, pKey, pHash->uKeySize); 305 OSMemCopy(pBucket->k, pKey, pHash->uKeySize);
306 if (_ChainInsert (pHash, pBucket, pHash->ppBucketTable, pHash->uSize) != PVRSRV_OK) 306 if (_ChainInsert (pHash, pBucket, pHash->ppBucketTable, pHash->uSize) != PVRSRV_OK)
307 { 307 {
308 OSFreeMem(PVRSRV_PAGEABLE_SELECT,
309 sizeof(BUCKET) + pHash->uKeySize,
310 pBucket, IMG_NULL);
308 return IMG_FALSE; 311 return IMG_FALSE;
309 } 312 }
310 313
@@ -444,6 +447,31 @@ HASH_Retrieve (HASH_TABLE *pHash, IMG_UINTPTR_T k)
444 return HASH_Retrieve_Extended(pHash, &k); 447 return HASH_Retrieve_Extended(pHash, &k);
445} 448}
446 449
450PVRSRV_ERROR
451HASH_Iterate(HASH_TABLE *pHash, HASH_pfnCallback pfnCallback)
452{
453 IMG_UINT32 uIndex;
454 for (uIndex=0; uIndex < pHash->uSize; uIndex++)
455 {
456 BUCKET *pBucket;
457 pBucket = pHash->ppBucketTable[uIndex];
458 while (pBucket != IMG_NULL)
459 {
460 PVRSRV_ERROR eError;
461 BUCKET *pNextBucket = pBucket->pNext;
462
463 eError = pfnCallback((IMG_UINTPTR_T) ((IMG_VOID *) *(pBucket->k)), (IMG_UINTPTR_T) pBucket->v);
464
465
466 if (eError != PVRSRV_OK)
467 return eError;
468
469 pBucket = pNextBucket;
470 }
471 }
472 return PVRSRV_OK;
473}
474
447#ifdef HASH_TRACE 475#ifdef HASH_TRACE
448IMG_VOID 476IMG_VOID
449HASH_Dump (HASH_TABLE *pHash) 477HASH_Dump (HASH_TABLE *pHash)