| 394 | } |
| 395 | |
| 396 | vm_offset_t |
| 397 | pmap_steal_memory(vm_size_t size) |
| 398 | { |
| 399 | vm_paddr_t bank_size, pa; |
| 400 | vm_offset_t va; |
| 401 | |
| 402 | size = round_page(size); |
| 403 | bank_size = phys_avail[1] - phys_avail[0]; |
| 404 | while (size > bank_size) { |
| 405 | int i; |
| 406 | |
| 407 | for (i = 0; phys_avail[i + 2]; i += 2) { |
| 408 | phys_avail[i] = phys_avail[i + 2]; |
| 409 | phys_avail[i + 1] = phys_avail[i + 3]; |
| 410 | } |
| 411 | phys_avail[i] = 0; |
| 412 | phys_avail[i + 1] = 0; |
| 413 | if (!phys_avail[0]) |
| 414 | panic("pmap_steal_memory: out of memory"); |
| 415 | bank_size = phys_avail[1] - phys_avail[0]; |
| 416 | } |
| 417 | |
| 418 | pa = phys_avail[0]; |
| 419 | phys_avail[0] += size; |
| 420 | if (MIPS_DIRECT_MAPPABLE(pa) == 0) |
| 421 | panic("Out of memory below 512Meg?"); |
| 422 | va = MIPS_PHYS_TO_DIRECT(pa); |
| 423 | bzero((caddr_t)va, size); |
| 424 | return (va); |
| 425 | } |
| 426 | |
| 427 | /* |
| 428 | * Bootstrap the system enough to run with virtual memory. This |
no test coverage detected