X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=alloc.c;h=6f463e4324e4e03199672ecaa6d321ef39f0ec25;hb=496ea4aee6c10fb6fa4d799df0df7ae34b4deb0b;hp=358939ac1d957bdb5b8f6d44d80115bf16ffd086;hpb=d38858b0a1d960e82104939c810e6d4f30cbe6b0;p=debian%2Felilo diff --git a/alloc.c b/alloc.c index 358939a..6f463e4 100644 --- a/alloc.c +++ b/alloc.c @@ -105,13 +105,13 @@ alloc(UINTN size, EFI_MEMORY_TYPE type) status = uefi_call_wrapper(BS->AllocatePool, 3, type, size, &tmp); if (EFI_ERROR(status)) { - ERR_PRT((L"allocator: AllocatePool(%d, %d, 0x%x) failed (%r)\n", type, size, status)); + ERR_PRT((L"allocator: AllocatePool(%d, %d) failed (%r)\n", type, size, status)); return NULL; } alloc_add(tmp, size, ALLOC_POOL); - - DBG_PRT((L"alloc: allocated %d bytes @[0x%lx-0x%lx]\n", size, tmp, tmp+size)); - +#ifdef DEBUG_MEM + DBG_PRT((L"alloc: allocated %d bytes @[" PTR_FMT "-" PTR_FMT "]\n", size, tmp, tmp+size)); +#endif return tmp; } @@ -158,13 +158,14 @@ free(VOID *addr) if (p->addr == addr) goto found; } /* not found */ - VERB_PRT(1, Print(L"allocator: invalid free @ 0x%lx\n", addr)); + VERB_PRT(1, Print(L"allocator: invalid free @ " PTR_FMT "\n", addr)); return; found: - DBG_PRT((L"free: %s @0x%lx size=%ld\n", +#ifdef DEBUG_MEM + DBG_PRT((L"free: %s @" PTR_FMT " size=%d\n", p->type == ALLOC_POOL ? L"Pool": L"Page", addr, p->size)); - +#endif if (p->type == ALLOC_POOL) uefi_call_wrapper(BS->FreePool, 1, addr); else @@ -194,9 +195,9 @@ free_all(VOID) alloc_entry_t *tmp; while(used_allocs) { - - DBG_PRT((L"free_all %a @ 0x%lx\n", used_allocs->type == ALLOC_POOL ? "pool" : "pages", used_allocs->addr)); - +#ifdef DEBUG_MEM + DBG_PRT((L"free_all %a @ " PTR_FMT "\n", used_allocs->type == ALLOC_POOL ? "pool" : "pages", used_allocs->addr)); +#endif if (used_allocs->type == ALLOC_POOL) uefi_call_wrapper(BS->FreePool, 1, used_allocs->addr); else @@ -212,6 +213,19 @@ free_all(VOID) } } +INTN +alloc_kmem_anywhere(VOID **start_addr, UINTN pgcnt) +{ + void * tmp; + if ((tmp = alloc_pages(pgcnt, EfiLoaderData, AllocateAnyPages, *start_addr)) == 0) return -1; + + kmem_addr = tmp; + kmem_pgcnt = pgcnt; + *start_addr = tmp; + + return 0; +} + INTN alloc_kmem(VOID *start_addr, UINTN pgcnt) { @@ -226,13 +240,17 @@ alloc_kmem(VOID *start_addr, UINTN pgcnt) VOID free_kmem(VOID) { - DBG_PRT((L"free_kmem before (%lx, %ld)\n", kmem_addr, kmem_pgcnt)); +#ifdef DEBUG_MEM + DBG_PRT((L"free_kmem before (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); +#endif if (kmem_addr && kmem_pgcnt != 0) { free(kmem_addr); kmem_addr = NULL; kmem_pgcnt = 0; } - DBG_PRT((L"free_kmem after (%lx, %ld)\n", kmem_addr, kmem_pgcnt)); +#ifdef DEBUG_MEM + DBG_PRT((L"free_kmem after (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); +#endif } VOID