-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds the Android pmem driver to the staging tree. [At this point in time, it is dependent on the ARM platform, due to some build issues that require it. - gregkh] Signed-off-by: Rebecca Schultz <rschultz@google.com> Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com> Signed-off-by: Dima Zavin <dima@android.com> Signed-off-by: Jamie Gennis <jgennis@google.com> Cc: Brian Swetland <swetland@google.com> Cc: Arve Hjønnevåg <arve@android.com> Cc: Colin Cross <ccross@android.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
- Loading branch information
Rebecca Schultz
authored and
Greg Kroah-Hartman
committed
Dec 16, 2011
1 parent
c001dff
commit b6aba85
Showing
4 changed files
with
1,443 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/* 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_ | ||
|
Oops, something went wrong.