Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / include / lwk / pmem.h
1 /* Copyright (c) 2008, Sandia National Laboratories */
2
3 #ifndef _LWK_PMEM_H
4 #define _LWK_PMEM_H
5
6 /**
7  * Physical memory types.
8  */
9 typedef enum {
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 */
16 } pmem_type_t;
17
18 /**
19  * Defines a physical memory region.
20  */
21 struct pmem_region {
22         paddr_t         start;             /* region occupies: [start, end) */
23         paddr_t         end;
24
25         bool            type_is_set;       /* type field is set? */
26         pmem_type_t     type;              /* physical memory type */
27
28         bool            lgroup_is_set;     /* lgroup field is set? */
29         lgroup_t        lgroup;            /* locality group region is in */
30
31         bool            allocated_is_set;  /* allocated field set? */
32         bool            allocated;         /* region is allocated? */ 
33
34         bool            name_is_set;       /* name field is set? */
35         char            name[32];          /* human-readable name of region */
36
37 };
38
39 /**
40  * Core physical memory management functions.
41  */
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);
48
49 /**
50  * Convenience functions.
51  */
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);
56
57 #ifdef __KERNEL__
58
59 /**
60  * System call handlers.
61  */
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);
69
70 #endif
71 #endif