Lines Matching refs:pBlock

134    VBGLPHYSHEAPBLOCK *pBlock = g_vbgldata.pAllocBlocksHead;
136 while (pBlock)
139 pBlock, pBlock->pNext, pBlock->pPrev, pBlock->u32Signature, pBlock->cbDataSize, pBlock->fu32Flags, pBlock->pChunk));
141 pBlock = pBlock->pNext;
146 pBlock = g_vbgldata.pFreeBlocksHead;
148 while (pBlock)
151 pBlock, pBlock->pNext, pBlock->pPrev, pBlock->u32Signature, pBlock->cbDataSize, pBlock->fu32Flags, pBlock->pChunk));
153 pBlock = pBlock->pNext;
161 DECLINLINE(void *) vbglPhysHeapBlock2Data (VBGLPHYSHEAPBLOCK *pBlock)
163 return (void *)(pBlock? (char *)pBlock + sizeof (VBGLPHYSHEAPBLOCK): NULL);
168 VBGLPHYSHEAPBLOCK *pBlock = (VBGLPHYSHEAPBLOCK *)(p? (char *)p - sizeof (VBGLPHYSHEAPBLOCK): NULL);
170 VBGL_PH_ASSERTMsg(pBlock == NULL || pBlock->u32Signature == VBGL_PH_BLOCKSIGNATURE,
171 ("pBlock->u32Signature = %08X\n", pBlock->u32Signature));
173 return pBlock;
192 static void vbglPhysHeapInitBlock (VBGLPHYSHEAPBLOCK *pBlock, VBGLPHYSHEAPCHUNK *pChunk, uint32_t cbDataSize)
194 VBGL_PH_ASSERT(pBlock != NULL);
197 pBlock->u32Signature = VBGL_PH_BLOCKSIGNATURE;
198 pBlock->cbDataSize = cbDataSize;
199 pBlock->fu32Flags = 0;
200 pBlock->pNext = NULL;
201 pBlock->pPrev = NULL;
202 pBlock->pChunk = pChunk;
206 static void vbglPhysHeapInsertBlock (VBGLPHYSHEAPBLOCK *pInsertAfter, VBGLPHYSHEAPBLOCK *pBlock)
208 VBGL_PH_ASSERTMsg(pBlock->pNext == NULL,
209 ("pBlock->pNext = %p\n", pBlock->pNext));
210 VBGL_PH_ASSERTMsg(pBlock->pPrev == NULL,
211 ("pBlock->pPrev = %p\n", pBlock->pPrev));
215 pBlock->pNext = pInsertAfter->pNext;
216 pBlock->pPrev = pInsertAfter;
220 pInsertAfter->pNext->pPrev = pBlock;
223 pInsertAfter->pNext = pBlock;
228 pBlock->pPrev = NULL;
230 if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED)
232 pBlock->pNext = g_vbgldata.pAllocBlocksHead;
236 g_vbgldata.pAllocBlocksHead->pPrev = pBlock;
239 g_vbgldata.pAllocBlocksHead = pBlock;
243 pBlock->pNext = g_vbgldata.pFreeBlocksHead;
247 g_vbgldata.pFreeBlocksHead->pPrev = pBlock;
250 g_vbgldata.pFreeBlocksHead = pBlock;
255 static void vbglPhysHeapExcludeBlock (VBGLPHYSHEAPBLOCK *pBlock)
257 if (pBlock->pNext)
259 pBlock->pNext->pPrev = pBlock->pPrev;
269 if (pBlock->pPrev)
271 pBlock->pPrev->pNext = pBlock->pNext;
276 if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED)
278 g_vbgldata.pAllocBlocksHead = pBlock->pNext;
282 g_vbgldata.pFreeBlocksHead = pBlock->pNext;
286 pBlock->pNext = NULL;
287 pBlock->pPrev = NULL;
294 VBGLPHYSHEAPBLOCK *pBlock;
331 pBlock = (VBGLPHYSHEAPBLOCK *)((char *)pChunk + sizeof (VBGLPHYSHEAPCHUNK));
333 vbglPhysHeapInitBlock (pBlock, pChunk, cbSize - sizeof (VBGLPHYSHEAPCHUNK) - sizeof (VBGLPHYSHEAPBLOCK));
335 vbglPhysHeapInsertBlock (NULL, pBlock);
339 VBGL_PH_dprintf(("Allocated chunk %p, block = %p size=%x\n", pChunk, pBlock, cbSize));
341 return pBlock;
360 VBGLPHYSHEAPBLOCK *pBlock = (VBGLPHYSHEAPBLOCK *)p;
362 p += pBlock->cbDataSize + sizeof (VBGLPHYSHEAPBLOCK);
364 vbglPhysHeapExcludeBlock (pBlock);
398 VBGLPHYSHEAPBLOCK *pBlock, *iter;
406 pBlock = NULL;
420 pBlock = iter;
427 if (pBlock)
429 if (iter->cbDataSize < pBlock->cbDataSize)
431 pBlock = iter;
436 pBlock = iter;
443 if (!pBlock)
449 pBlock = vbglPhysHeapChunkAlloc (cbSize);
452 if (pBlock)
454 VBGL_PH_ASSERTMsg(pBlock->u32Signature == VBGL_PH_BLOCKSIGNATURE,
455 ("pBlock = %p, pBlock->u32Signature = %08X\n", pBlock, pBlock->u32Signature));
456 VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) == 0,
457 ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags));
461 if (pBlock->cbDataSize > 2*(cbSize + sizeof (VBGLPHYSHEAPBLOCK)))
466 iter = (VBGLPHYSHEAPBLOCK *)((char *)pBlock + sizeof (VBGLPHYSHEAPBLOCK) + cbSize);
469 vbglPhysHeapInitBlock (iter, pBlock->pChunk, pBlock->cbDataSize - cbSize - sizeof (VBGLPHYSHEAPBLOCK));
471 pBlock->cbDataSize = cbSize;
473 /* Insert the new 'iter' block after the 'pBlock' in the free list */
474 vbglPhysHeapInsertBlock (pBlock, iter);
477 /* Exclude pBlock from free list */
478 vbglPhysHeapExcludeBlock (pBlock);
481 pBlock->fu32Flags |= VBGL_PH_BF_ALLOCATED;
484 vbglPhysHeapInsertBlock (NULL, pBlock);
487 pBlock->pChunk->cAllocatedBlocks++;
493 VBGL_PH_dprintf(("VbglPhysHeapAlloc %x size %x\n", vbglPhysHeapBlock2Data (pBlock), pBlock->cbDataSize));
495 return vbglPhysHeapBlock2Data (pBlock);
501 VBGLPHYSHEAPBLOCK *pBlock = vbglPhysHeapData2Block (p);
503 if (pBlock)
505 VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) != 0,
506 ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags));
508 if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED)
509 physAddr = pBlock->pChunk->physAddr + (uint32_t)((uintptr_t)p - (uintptr_t)pBlock->pChunk);
517 VBGLPHYSHEAPBLOCK *pBlock;
526 pBlock = vbglPhysHeapData2Block (p);
528 if (!pBlock)
534 VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) != 0,
535 ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags));
538 vbglPhysHeapExcludeBlock (pBlock);
542 VBGL_PH_dprintf(("VbglPhysHeapFree %x size %x\n", p, pBlock->cbDataSize));
545 pBlock->fu32Flags &= ~VBGL_PH_BF_ALLOCATED;
548 vbglPhysHeapInsertBlock (NULL, pBlock);
553 pBlock->pChunk->cAllocatedBlocks--;
555 VBGL_PH_ASSERT(pBlock->pChunk->cAllocatedBlocks >= 0);
564 pNeighbour = (VBGLPHYSHEAPBLOCK *)((char *)p + pBlock->cbDataSize);
566 if ((char *)pNeighbour < (char *)pBlock->pChunk + pBlock->pChunk->cbSize
572 pBlock->cbDataSize += pNeighbour->cbDataSize + sizeof (VBGLPHYSHEAPBLOCK);
581 if (pBlock->pChunk->cAllocatedBlocks == 0)
600 * remaining in the chunk from the free list, so the pBlock
603 vbglPhysHeapChunkDelete (pBlock->pChunk);
617 VBGLPHYSHEAPBLOCK *pBlock = vbglPhysHeapChunkAlloc (0);
619 if (!pBlock)