static struct BT *_InsertResource(struct RA_ARENA *pArena, u32 base, size_t uSize) { struct BT *pBT; PVR_ASSERT(pArena != NULL); if (pArena == NULL) { PVR_DPF(PVR_DBG_ERROR, "_InsertResource: invalid parameter - pArena"); return NULL; } pBT = _BuildBT(base, uSize); if (pBT != NULL) { if (_SegmentListInsert(pArena, pBT) != PVRSRV_OK) { PVR_DPF(PVR_DBG_ERROR, "_InsertResource: call to _SegmentListInsert failed"); return NULL; } _FreeListInsert(pArena, pBT); #ifdef RA_STATS pArena->sStatistics.uTotalResourceCount += uSize; pArena->sStatistics.uFreeResourceCount += uSize; pArena->sStatistics.uSpanCount++; #endif } return pBT; }
static BT * _InsertResource (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize) { BT *pBT; PVR_ASSERT (pArena!=IMG_NULL); if (pArena == IMG_NULL) { PVR_DPF ((PVR_DBG_ERROR,"_InsertResource: invalid parameter - pArena")); return IMG_NULL; } pBT = _BuildBT (base, uSize); if (pBT != IMG_NULL) { #if defined(VALIDATE_ARENA_TEST) pBT->eResourceSpan = RESOURCE_SPAN_FREE; pBT->eResourceType = NON_IMPORTED_RESOURCE_TYPE; #endif if (_SegmentListInsert (pArena, pBT) != PVRSRV_OK) { PVR_DPF ((PVR_DBG_ERROR,"_InsertResource: call to _SegmentListInsert failed")); return IMG_NULL; } _FreeListInsert (pArena, pBT); #ifdef RA_STATS pArena->sStatistics.uTotalResourceCount+=uSize; pArena->sStatistics.uFreeResourceCount+=uSize; pArena->sStatistics.uSpanCount++; #endif } return pBT; }
static struct BT *_InsertResourceSpan(struct RA_ARENA *pArena, u32 base, size_t uSize) { enum PVRSRV_ERROR eError; struct BT *pSpanStart; struct BT *pSpanEnd; struct BT *pBT; PVR_ASSERT(pArena != NULL); if (pArena == NULL) { PVR_DPF(PVR_DBG_ERROR, "_InsertResourceSpan: invalid parameter - pArena"); return NULL; } PVR_DPF(PVR_DBG_MESSAGE, "RA_InsertResourceSpan: arena='%s', base=0x%x, size=0x%x", pArena->name, base, uSize); pSpanStart = _BuildSpanMarker(base, uSize); if (pSpanStart == NULL) goto fail_start; pSpanEnd = _BuildSpanMarker(base + uSize, 0); if (pSpanEnd == NULL) goto fail_end; pBT = _BuildBT(base, uSize); if (pBT == NULL) goto fail_bt; eError = _SegmentListInsert(pArena, pSpanStart); if (eError != PVRSRV_OK) goto fail_SegListInsert; eError = _SegmentListInsertAfter(pArena, pSpanStart, pBT); if (eError != PVRSRV_OK) goto fail_SegListInsert; _FreeListInsert(pArena, pBT); eError = _SegmentListInsertAfter(pArena, pBT, pSpanEnd); if (eError != PVRSRV_OK) goto fail_SegListInsert; #ifdef RA_STATS pArena->sStatistics.uTotalResourceCount += uSize; #endif return pBT; fail_SegListInsert: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(struct BT), pBT, NULL); fail_bt: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(struct BT), pSpanEnd, NULL); fail_end: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(struct BT), pSpanStart, NULL); fail_start: return NULL; }
static BT * _InsertResourceSpan (RA_ARENA *pArena, IMG_UINTPTR_T base, IMG_SIZE_T uSize) { PVRSRV_ERROR eError; BT *pSpanStart; BT *pSpanEnd; BT *pBT; PVR_ASSERT (pArena != IMG_NULL); if (pArena == IMG_NULL) { PVR_DPF ((PVR_DBG_ERROR,"_InsertResourceSpan: invalid parameter - pArena")); return IMG_NULL; } PVR_DPF ((PVR_DBG_MESSAGE, "RA_InsertResourceSpan: arena='%s', base=0x%x, size=0x%x", pArena->name, base, uSize)); pSpanStart = _BuildSpanMarker (base, uSize); if (pSpanStart == IMG_NULL) { goto fail_start; } #if defined(VALIDATE_ARENA_TEST) pSpanStart->eResourceSpan = IMPORTED_RESOURCE_SPAN_START; pSpanStart->eResourceType = IMPORTED_RESOURCE_TYPE; #endif pSpanEnd = _BuildSpanMarker (base + uSize, 0); if (pSpanEnd == IMG_NULL) { goto fail_end; } #if defined(VALIDATE_ARENA_TEST) pSpanEnd->eResourceSpan = IMPORTED_RESOURCE_SPAN_END; pSpanEnd->eResourceType = IMPORTED_RESOURCE_TYPE; #endif pBT = _BuildBT (base, uSize); if (pBT == IMG_NULL) { goto fail_bt; } #if defined(VALIDATE_ARENA_TEST) pBT->eResourceSpan = IMPORTED_RESOURCE_SPAN_FREE; pBT->eResourceType = IMPORTED_RESOURCE_TYPE; #endif eError = _SegmentListInsert (pArena, pSpanStart); if (eError != PVRSRV_OK) { goto fail_SegListInsert; } eError = _SegmentListInsertAfter (pArena, pSpanStart, pBT); if (eError != PVRSRV_OK) { goto fail_SegListInsert; } _FreeListInsert (pArena, pBT); eError = _SegmentListInsertAfter (pArena, pBT, pSpanEnd); if (eError != PVRSRV_OK) { goto fail_SegListInsert; } #ifdef RA_STATS pArena->sStatistics.uTotalResourceCount+=uSize; #endif return pBT; fail_SegListInsert: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pBT, IMG_NULL); fail_bt: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pSpanEnd, IMG_NULL); fail_end: OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(BT), pSpanStart, IMG_NULL); fail_start: return IMG_NULL; }