1 /* Copyright (c) 2008, Sandia National Laboratories */
3 #include <lwk/liblwk.h>
6 pmem_type_to_string(pmem_type_t type)
9 case PMEM_TYPE_BOOTMEM: return "BOOTMEM"; break;
10 case PMEM_TYPE_BIGPHYSAREA: return "BIGPHYSAREA"; break;
11 case PMEM_TYPE_INITRD: return "INITRD"; break;
12 case PMEM_TYPE_INIT_TASK: return "INIT_TASK"; break;
13 case PMEM_TYPE_KMEM: return "KMEM"; break;
14 case PMEM_TYPE_UMEM: return "UMEM"; break;
20 pmem_region_unset_all(struct pmem_region *rgn)
22 rgn->type_is_set = false;
23 rgn->lgroup_is_set = false;
24 rgn->allocated_is_set = false;
25 rgn->name_is_set = false;
29 pmem_alloc_umem(size_t size, size_t alignment, struct pmem_region *rgn)
31 struct pmem_region constraint, result;
33 /* Find and allocate a chunk of PMEM_TYPE_UMEM physical memory */
34 pmem_region_unset_all(&constraint);
36 constraint.end = (paddr_t)(-1);
37 constraint.type = PMEM_TYPE_UMEM; constraint.type_is_set = true;
38 constraint.allocated = false; constraint.allocated_is_set = true;
40 if (pmem_alloc(size, alignment, &constraint, &result))
48 pmem_is_umem(paddr_t start, size_t extent)
50 struct pmem_region query, result;
53 pmem_region_unset_all(&query);
55 query.end = start + extent;
56 query.type = PMEM_TYPE_UMEM; query.type_is_set = true;
59 while ((status = pmem_query(&query, &result)) == 0) {
60 if (result.start != query.start)
62 if (result.end == query.end)
64 query.start = result.end;
66 return (status) ? false : true;