fmem: Add support for reusable virtual mappings

Instead of just keeping the entire heap mapped all the
time, reserve the virtual area and map as needed.

Change-Id: Id9a253541f1462379f3f81611aec92cd760e71c8
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
diff --git a/include/linux/fmem.h b/include/linux/fmem.h
index a88c674..d91f4c1 100644
--- a/include/linux/fmem.h
+++ b/include/linux/fmem.h
@@ -15,6 +15,8 @@
 #ifndef _FMEM_H_
 #define _FMEM_H_
 
+#include <linux/vmalloc.h>
+
 struct fmem_platform_data {
 	unsigned long phys;
 	unsigned long size;
@@ -23,6 +25,7 @@
 struct fmem_data {
 	unsigned long phys;
 	void *virt;
+	struct vm_struct *area;
 	unsigned long size;
 };
 
@@ -38,11 +41,15 @@
 int fmem_set_state(enum fmem_state);
 void lock_fmem_state(void);
 void unlock_fmem_state(void);
+void *fmem_map_virtual_area(int cacheability);
+void fmem_unmap_virtual_area(void);
 #else
 static inline struct fmem_data *fmem_get_info(void) { return NULL; }
 static inline int fmem_set_state(enum fmem_state f) { return -ENODEV; }
 static inline void lock_fmem_state(void) { return; }
 static inline void unlock_fmem_state(void) { return; }
+static inline void *fmem_map_virtual_area(int cacheability) { return NULL; }
+static inline void fmem_unmap_virtual_area(void) { return; }
 #endif