- added some memory optimizations from htc-msm-2.6.32 - some memory problems still present
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 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_
 | 
						|
 |