Allows application-specific event handling (XCC)
[akaros.git] / kern / include / mm.h
index d4425d3..313422a 100644 (file)
@@ -35,7 +35,7 @@ struct vm_region {
        //struct mm                                     *vm_mm;         /* owning address space */
        uintptr_t                                       vm_base;
        uintptr_t                                       vm_end;
-       int                                                     vm_perm;        
+       int                                                     vm_prot;        
        int                                                     vm_flags;       
        struct file                                     *vm_file;
        size_t                                          vm_foff;
@@ -50,28 +50,32 @@ void vmr_init(void);
 struct vm_region *create_vmr(struct proc *p, uintptr_t va, size_t len);
 struct vm_region *split_vmr(struct vm_region *vmr, uintptr_t va);
 int merge_vmr(struct vm_region *first, struct vm_region *second);
+struct vm_region *merge_me(struct vm_region *vmr);
 int grow_vmr(struct vm_region *vmr, uintptr_t va);
 int shrink_vmr(struct vm_region *vmr, uintptr_t va);
 void destroy_vmr(struct vm_region *vmr);
 struct vm_region *find_vmr(struct proc *p, uintptr_t va);
 struct vm_region *find_first_vmr(struct proc *p, uintptr_t va);
 void isolate_vmrs(struct proc *p, uintptr_t va, size_t len);
+void destroy_vmrs(struct proc *p);
 void duplicate_vmrs(struct proc *p, struct proc *new_p);
 void print_vmrs(struct proc *p);
 
 /* mmap() related functions.  These manipulate VMRs and change the hardware page
- * tables. */
+ * tables.  Any requests below the LOWEST_VA will silently be upped.  This may
+ * be a dynamic proc-specific variable later. */
+#define MMAP_LOWEST_VA 0x00001000
 void *mmap(struct proc *p, uintptr_t addr, size_t len, int prot, int flags,
            int fd, size_t offset);
 void *do_mmap(struct proc *p, uintptr_t addr, size_t len, int prot, int flags,
-             struct file *f, size_t offset);
+              struct file *f, size_t offset);
 int mprotect(struct proc *p, uintptr_t addr, size_t len, int prot);
 int munmap(struct proc *p, uintptr_t addr, size_t len);
 int handle_page_fault(struct proc *p, uintptr_t va, int prot);
 
 /* These assume the memory/proc_lock is held already */
 void *__do_mmap(struct proc *p, uintptr_t addr, size_t len, int prot, int flags,
-               struct file *f, size_t offset);
+                struct file *f, size_t offset);
 int __do_mprotect(struct proc *p, uintptr_t addr, size_t len, int prot);
 int __do_munmap(struct proc *p, uintptr_t addr, size_t len);
 int __handle_page_fault(struct proc* p, uintptr_t va, int prot);