1 /* Copyright (c) 2008, Sandia National Laboratories */
7 * Physical memory types.
10 PMEM_TYPE_BOOTMEM = 0, /* memory allocated at boot-time */
11 PMEM_TYPE_BIGPHYSAREA = 1, /* memory set-aside for a device/driver */
12 PMEM_TYPE_INITRD = 2, /* initrd image provided by bootloader */
13 PMEM_TYPE_INIT_TASK = 3, /* memory used by the initial task */
14 PMEM_TYPE_KMEM = 4, /* memory managed by the kernel */
15 PMEM_TYPE_UMEM = 5, /* memory managed by user-space */
19 * Defines a physical memory region.
22 paddr_t start; /* region occupies: [start, end) */
25 bool type_is_set; /* type field is set? */
26 pmem_type_t type; /* physical memory type */
28 bool lgroup_is_set; /* lgroup field is set? */
29 lgroup_t lgroup; /* locality group region is in */
31 bool allocated_is_set; /* allocated field set? */
32 bool allocated; /* region is allocated? */
34 bool name_is_set; /* name field is set? */
35 char name[32]; /* human-readable name of region */
40 * Core physical memory management functions.
42 int pmem_add(const struct pmem_region *rgn);
43 int pmem_update(const struct pmem_region *update);
44 int pmem_query(const struct pmem_region *query, struct pmem_region *result);
45 int pmem_alloc(size_t size, size_t alignment,
46 const struct pmem_region *constraint,
47 struct pmem_region *result);
50 * Convenience functions.
52 void pmem_region_unset_all(struct pmem_region *rgn);
53 const char *pmem_type_to_string(pmem_type_t type);
54 int pmem_alloc_umem(size_t size, size_t alignment, struct pmem_region *rgn);
55 bool pmem_is_umem(paddr_t start, size_t extent);
60 * System call handlers.
62 int sys_pmem_add(const struct pmem_region __user * rgn);
63 int sys_pmem_update(const struct pmem_region __user * update);
64 int sys_pmem_query(const struct pmem_region __user * query,
65 struct pmem_region __user * result);
66 int sys_pmem_alloc(size_t size, size_t alignment,
67 const struct pmem_region __user *constraint,
68 struct pmem_region __user *result);