Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}