Merge tag 'v3.10.66' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / android_pmem.h
1 /* include/linux/android_pmem.h
2 *
3 * Copyright (C) 2007 Google, Inc.
4 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16 #ifndef _ANDROID_PMEM_H_
17 #define _ANDROID_PMEM_H_
18
19 #define PMEM_IOCTL_MAGIC 'p'
20 #define PMEM_GET_PHYS _IOW(PMEM_IOCTL_MAGIC, 1, unsigned int)
21 #define PMEM_MAP _IOW(PMEM_IOCTL_MAGIC, 2, unsigned int)
22 #define PMEM_GET_SIZE _IOW(PMEM_IOCTL_MAGIC, 3, unsigned int)
23 #define PMEM_UNMAP _IOW(PMEM_IOCTL_MAGIC, 4, unsigned int)
24 /* This ioctl will allocate pmem space, backing the file, it will fail
25 * if the file already has an allocation, pass it the len as the argument
26 * to the ioctl */
27 #define PMEM_ALLOCATE _IOW(PMEM_IOCTL_MAGIC, 5, unsigned int)
28 /* This will connect a one pmem file to another, pass the file that is already
29 * backed in memory as the argument to the ioctl
30 */
31 #define PMEM_CONNECT _IOW(PMEM_IOCTL_MAGIC, 6, unsigned int)
32 /* Returns the total size of the pmem region it is sent to as a pmem_region
33 * struct (with offset set to 0).
34 */
35 #define PMEM_GET_TOTAL_SIZE _IOW(PMEM_IOCTL_MAGIC, 7, unsigned int)
36 #define PMEM_CACHE_FLUSH _IOW(PMEM_IOCTL_MAGIC, 8, unsigned int)
37
38 struct android_pmem_platform_data {
39 const char *name;
40 /* starting physical address of memory region */
41 unsigned long start;
42 /* size of memory region */
43 unsigned long size;
44 /* set to indicate the region should not be managed with an allocator */
45 unsigned no_allocator;
46 /* set to indicate maps of this region should be cached, if a mix of
47 * cached and uncached is desired, set this and open the device with
48 * O_SYNC to get an uncached region */
49 unsigned cached;
50 /* The MSM7k has bits to enable a write buffer in the bus controller */
51 unsigned buffered;
52 };
53
54 struct pmem_region {
55 unsigned long offset;
56 unsigned long len;
57 };
58
59 #ifdef CONFIG_ANDROID_PMEM
60 int is_pmem_file(struct file *file);
61 int get_pmem_file(int fd, unsigned long *start, unsigned long *vstart,
62 unsigned long *end, struct file **filp);
63 int get_pmem_user_addr(struct file *file, unsigned long *start, unsigned long *end);
64 void put_pmem_file(struct file *file);
65 void flush_pmem_file(struct file *file, unsigned long start, unsigned long len);
66 int pmem_setup(struct android_pmem_platform_data *pdata,
67 long (*ioctl) (struct file *, unsigned int, unsigned long),
68 int (*release) (struct inode *, struct file *));
69 int pmem_remap(struct pmem_region *region, struct file *file, unsigned operation);
70
71 #else
72 static inline int is_pmem_file(struct file *file)
73 {
74 return 0;
75 }
76
77 static inline int get_pmem_file(int fd, unsigned long *start,
78 unsigned long *vstart, unsigned long *end, struct file **filp)
79 {
80 return -ENOSYS;
81 }
82
83 static inline int get_pmem_user_addr(struct file *file, unsigned long *start, unsigned long *end)
84 {
85 return -ENOSYS;
86 }
87
88 static inline void put_pmem_file(struct file *file)
89 {
90 return;
91 }
92
93 static inline void flush_pmem_file(struct file *file, unsigned long start, unsigned long len)
94 {
95 return;
96 }
97
98 static inline int pmem_setup(struct android_pmem_platform_data *pdata,
99 long (*ioctl) (struct file *, unsigned int, unsigned long),
100 int (*release) (struct inode *, struct file *))
101 {
102 return -ENOSYS;
103 }
104
105 static inline int pmem_remap(struct pmem_region *region, struct file *file, unsigned operation)
106 {
107 return -ENOSYS;
108 }
109 #endif
110
111 #endif /* _ANDROID_PPP_H_ */