version 1.6, 2007/10/26 11:59:12 |
version 1.8, 2007/11/09 16:22:16 |
|
|
int32_t n; |
int32_t n; |
uint8_t *bytep; |
uint8_t *bytep; |
|
|
|
#ifdef ARCH_SAM7S64 |
|
/* XXX UGLY HACK */ |
|
brkaddr = 0x00203800; |
|
#else |
/* set break address */ |
/* set break address */ |
brkaddr = physmem - (physmem / 16); /* XXX top 2MB in testarm */ |
brkaddr = physmem - (physmem / 16); /* XXX top 2MB in testarm */ |
|
#endif |
/* bytes needed to hold bitmap */ |
/* bytes needed to hold bitmap */ |
membmaplen = ((brkaddr - KMEM_HEAPBEGIN) / KMEM_PAGESIZE) / 8; |
membmaplen = ((brkaddr - KMEM_HEAPBEGIN) / KMEM_PAGESIZE) / 8; |
|
|
|
|
/* rewind pointer to the first byte */ |
/* rewind pointer to the first byte */ |
firstpageptr = lastpageptr - ((npages - 1)); |
firstpageptr = lastpageptr - ((npages - 1)); |
|
|
offbits = nmbmbits; |
|
/* fill this (npages pages) region with zeroes */ |
/* fill this (npages pages) region with zeroes */ |
while(firstpageptr <= lastpageptr) { |
while(firstpageptr <= lastpageptr) { |
|
|
/* TODO invalidate page in membmap */ |
/* TODO invalidate page in membmap */ |
offbytes = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE * 8); |
offbytes = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE * 8); |
// printf("offbytes=%d\n", offbytes); |
offbits = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE); |
|
|
|
if (offbits > 7) |
|
offbits -= 8 * (offbits / 8); |
|
|
// printf("membmap[%d] |= 1 << %d\n", offbytes, offbits); |
// printf("membmap[%d] |= 1 << %d\n", offbytes, offbits); |
membmap[offbytes] |= 1 << offbits; |
membmap[offbytes] |= 1 << offbits; |
|
|
|
|
firstpageptr = lastpageptr - ((npages - 1)); |
firstpageptr = lastpageptr - ((npages - 1)); |
|
|
/* got it */ |
/* got it */ |
DPRINTF("allocated, addr=0x%x len=0x%x [0x%x-0x%x]\n", firstpageptr, npages * KMEM_PAGESIZE, firstpageptr, lastpageptr); |
DPRINTF("allocated, addr=0x%x len=%d [0x%x-0x%x]\n", firstpageptr, npages * KMEM_PAGESIZE, firstpageptr, lastpageptr); |
|
|
/* decrement system free pages */ |
/* decrement system free pages */ |
freepages -= npages; |
freepages -= npages; |