mirror of
https://github.com/torvalds/linux.git
synced 2024-12-20 18:11:47 +00:00
staging: android: add pmem driver
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>
This commit is contained in:
parent
c001dff0f6
commit
b6aba85c35
@ -90,6 +90,10 @@ config ANDROID_LOW_MEMORY_KILLER
|
||||
---help---
|
||||
Register processes to be killed when memory is low
|
||||
|
||||
config ANDROID_PMEM
|
||||
bool "Android pmem allocator"
|
||||
depends on ARM
|
||||
|
||||
source "drivers/staging/android/switch/Kconfig"
|
||||
|
||||
endif # if ANDROID
|
||||
|
@ -4,4 +4,5 @@ obj-$(CONFIG_ANDROID_RAM_CONSOLE) += ram_console.o
|
||||
obj-$(CONFIG_ANDROID_TIMED_OUTPUT) += timed_output.o
|
||||
obj-$(CONFIG_ANDROID_TIMED_GPIO) += timed_gpio.o
|
||||
obj-$(CONFIG_ANDROID_LOW_MEMORY_KILLER) += lowmemorykiller.o
|
||||
obj-$(CONFIG_ANDROID_PMEM) += pmem.o
|
||||
obj-$(CONFIG_ANDROID_SWITCH) += switch/
|
||||
|
93
drivers/staging/android/android_pmem.h
Normal file
93
drivers/staging/android/android_pmem.h
Normal file
@ -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_
|
||||
|
1345
drivers/staging/android/pmem.c
Normal file
1345
drivers/staging/android/pmem.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user