* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
-/* $XFree86: xc/lib/GL/mesa/src/drv/common/mm.c,v 1.4 2002/10/30 12:51:27 alanh Exp $ */
-
-#include <stdlib.h>
-#include <stdio.h>
#include "mm.h"
-void mmDumpMemInfo( memHeap_t *heap )
+void
+mmDumpMemInfo(const struct mem_block *heap)
{
- TMemBlock *p;
+ const struct mem_block *p;
fprintf(stderr, "Memory heap %p:\n", (void *)heap);
if (heap == 0) {
fprintf(stderr, " heap == 0\n");
} else {
- p = (TMemBlock *)heap;
+ p = (struct mem_block *)heap;
while (p) {
fprintf(stderr, " Offset:%08x, Size:%08x, %c%c\n",p->ofs,p->size,
p->free ? '.':'U',
fprintf(stderr, "End of memory blocks\n");
}
-memHeap_t *mmInit(int ofs,
- int size)
+struct mem_block *
+mmInit(int ofs, int size)
{
- PMemBlock blocks;
+ struct mem_block *blocks;
if (size <= 0) {
return NULL;
}
- blocks = (TMemBlock *) calloc(1,sizeof(TMemBlock));
+ blocks = (struct mem_block *) _mesa_calloc(sizeof(struct mem_block));
if (blocks) {
blocks->ofs = ofs;
blocks->size = size;
blocks->free = 1;
- return (memHeap_t *)blocks;
- } else
+ return (struct mem_block *)blocks;
+ }
+ else {
return NULL;
+ }
}
-static TMemBlock* SliceBlock(TMemBlock *p,
- int startofs, int size,
- int reserved, int alignment)
+static struct mem_block *
+SliceBlock(struct mem_block *p,
+ int startofs, int size,
+ int reserved, int alignment)
{
- TMemBlock *newblock;
+ struct mem_block *newblock;
/* break left */
if (startofs > p->ofs) {
- newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock));
+ newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block));
if (!newblock)
return NULL;
newblock->ofs = startofs;
/* break right */
if (size < p->size) {
- newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock));
+ newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block));
if (!newblock)
return NULL;
newblock->ofs = startofs + size;
return p;
}
-PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
+
+struct mem_block *
+mmAllocMem(struct mem_block *heap, int size, int align2, int startSearch)
{
- int mask,startofs,endofs;
- TMemBlock *p;
+ struct mem_block *p = heap;
+ int mask = (1 << align2)-1;
+ int startofs = 0;
+ int endofs;
if (!heap || align2 < 0 || size <= 0)
return NULL;
- mask = (1 << align2)-1;
- startofs = 0;
- p = (TMemBlock *)heap;
+
while (p) {
if ((p)->free) {
startofs = (p->ofs + mask) & ~mask;
return p;
}
-PMemBlock mmFindBlock( memHeap_t *heap, int start)
+
+struct mem_block *
+mmFindBlock(struct mem_block *heap, int start)
{
- TMemBlock *p = (TMemBlock *)heap;
+ struct mem_block *p = (struct mem_block *)heap;
while (p) {
if (p->ofs == start && p->free)
}
-static __inline__ int Join2Blocks(TMemBlock *p)
+static int
+Join2Blocks(struct mem_block *p)
{
+ /* XXX there should be some assertions here */
if (p->free && p->next && p->next->free) {
- TMemBlock *q = p->next;
+ struct mem_block *q = p->next;
p->size += q->size;
p->next = q->next;
- free(q);
+ _mesa_free(q);
return 1;
}
return 0;
}
-int mmFreeMem(PMemBlock b)
+int
+mmFreeMem(struct mem_block *b)
{
- TMemBlock *p,*prev;
+ struct mem_block *p,*prev;
if (!b)
return 0;
}
-void mmDestroy(memHeap_t *heap)
+void
+mmDestroy(struct mem_block *heap)
{
- TMemBlock *p,*q;
+ struct mem_block *p;
if (!heap)
return;
- p = (TMemBlock *)heap;
+
+ p = (struct mem_block *) heap;
while (p) {
- q = p->next;
- free(p);
- p = q;
+ struct mem_block *next = p->next;
+ _mesa_free(p);
+ p = next;
}
}