/* include/linux/android_pmem.h * * Copyright (C) 2007 Google, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _ANDROID_PMEM_H_ #define _ANDROID_PMEM_H_ #define PMEM_IOCTL_MAGIC 'p' #define PMEM_GET_PHYS _IOW(PMEM_IOCTL_MAGIC, 1, unsigned int) #define PMEM_MAP _IOW(PMEM_IOCTL_MAGIC, 2, unsigned int) #define PMEM_GET_SIZE _IOW(PMEM_IOCTL_MAGIC, 3, unsigned int) #define PMEM_UNMAP _IOW(PMEM_IOCTL_MAGIC, 4, unsigned int) /* This ioctl will allocate pmem space, backing the file, it will fail * if the file already has an allocation, pass it the len as the argument * to the ioctl */ #define PMEM_ALLOCATE _IOW(PMEM_IOCTL_MAGIC, 5, unsigned int) /* This will connect a one pmem file to another, pass the file that is already * backed in memory as the argument to the ioctl */ #define PMEM_CONNECT _IOW(PMEM_IOCTL_MAGIC, 6, unsigned int) /* Returns the total size of the pmem region it is sent to as a pmem_region * struct (with offset set to 0). */ #define PMEM_GET_TOTAL_SIZE _IOW(PMEM_IOCTL_MAGIC, 7, unsigned int) #define PMEM_CACHE_FLUSH _IOW(PMEM_IOCTL_MAGIC, 8, unsigned int) struct android_pmem_platform_data { const char* name; /* starting physical address of memory region */ unsigned long start; /* size of memory region */ unsigned long size; /* set to indicate the region should not be managed with an allocator */ unsigned no_allocator; /* set to indicate maps of this region should be cached, if a mix of * cached and uncached is desired, set this and open the device with * O_SYNC to get an uncached region */ unsigned cached; /* The MSM7k has bits to enable a write buffer in the bus controller*/ unsigned buffered; }; struct pmem_region { unsigned long offset; unsigned long len; }; #ifdef CONFIG_ANDROID_PMEM int is_pmem_file(struct file *file); int get_pmem_file(int fd, unsigned long *start, unsigned long *vstart, unsigned long *end, struct file **filp); int get_pmem_user_addr(struct file *file, unsigned long *start, unsigned long *end); void put_pmem_file(struct file* file); void flush_pmem_file(struct file *file, unsigned long start, unsigned long len); int pmem_setup(struct android_pmem_platform_data *pdata, long (*ioctl)(struct file *, unsigned int, unsigned long), int (*release)(struct inode *, struct file *)); int pmem_remap(struct pmem_region *region, struct file *file, unsigned operation); #else static inline int is_pmem_file(struct file *file) { return 0; } static inline int get_pmem_file(int fd, unsigned long *start, unsigned long *vstart, unsigned long *end, struct file **filp) { return -ENOSYS; } static inline int get_pmem_user_addr(struct file *file, unsigned long *start, unsigned long *end) { return -ENOSYS; } static inline void put_pmem_file(struct file* file) { return; } static inline void flush_pmem_file(struct file *file, unsigned long start, unsigned long len) { return; } static inline int pmem_setup(struct android_pmem_platform_data *pdata, long (*ioctl)(struct file *, unsigned int, unsigned long), int (*release)(struct inode *, struct file *)) { return -ENOSYS; } static inline int pmem_remap(struct pmem_region *region, struct file *file, unsigned operation) { return -ENOSYS; } #endif #endif //_ANDROID_PPP_H_