summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/include/mach/iovmm.h
diff options
context:
space:
mode:
authorScott Williams <scwilliams@nvidia.com>2010-12-07 11:19:20 -0800
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:42:02 -0800
commit816ab05de4f2171e20171db01fa916634ed7bee6 (patch)
tree963ce2c1724c63598deb279d9f6ed54cfc93d1e3 /arch/arm/mach-tegra/include/mach/iovmm.h
parent7d8324d8f3dfc27407d7514fcbd605649c9bd210 (diff)
[ARM/tegra] Add Tegra3 support
Bug 764354 Original-Change-Id: I8a390eb4dae87dceacb97461f23d13554868b046 Reviewed-on: http://git-master/r/12228 Reviewed-by: Scott Williams <scwilliams@nvidia.com> Tested-by: Scott Williams <scwilliams@nvidia.com> Original-Change-Id: I8e6b8303898796419fb5a759cd16edff9aeac081 Rebase-Id: R2866240384c6c24f46bd7ef54bc3dc9140d9e96b
Diffstat (limited to 'arch/arm/mach-tegra/include/mach/iovmm.h')
-rw-r--r--arch/arm/mach-tegra/include/mach/iovmm.h26
1 files changed, 14 insertions, 12 deletions
diff --git a/arch/arm/mach-tegra/include/mach/iovmm.h b/arch/arm/mach-tegra/include/mach/iovmm.h
index 98c9888163fd..77ec3875f9b5 100644
--- a/arch/arm/mach-tegra/include/mach/iovmm.h
+++ b/arch/arm/mach-tegra/include/mach/iovmm.h
@@ -20,6 +20,7 @@
#include <linux/list.h>
#include <linux/platform_device.h>
+#include <linux/miscdevice.h>
#include <linux/rbtree.h>
#include <linux/rwsem.h>
#include <linux/spinlock.h>
@@ -28,7 +29,7 @@
#ifndef _MACH_TEGRA_IOVMM_H_
#define _MACH_TEGRA_IOVMM_H_
-#if defined(CONFIG_ARCH_TEGRA_2x_SOC)
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
typedef u32 tegra_iovmm_addr_t;
#else
#error "Unsupported tegra architecture family"
@@ -73,6 +74,7 @@ struct tegra_iovmm_client {
unsigned long flags;
struct iovmm_share_group *group;
struct tegra_iovmm_domain *domain;
+ struct miscdevice *misc_dev;
struct list_head list;
};
@@ -90,28 +92,28 @@ struct tegra_iovmm_area {
struct tegra_iovmm_device_ops {
/* maps a VMA using the page residency functions provided by the VMA */
- int (*map)(struct tegra_iovmm_device *dev,
+ int (*map)(struct tegra_iovmm_domain *domain,
struct tegra_iovmm_area *io_vma);
/* marks all PTEs in a VMA as invalid; decommits the virtual addres
* space (potentially freeing PDEs when decommit is true.) */
- void (*unmap)(struct tegra_iovmm_device *dev,
+ void (*unmap)(struct tegra_iovmm_domain *domain,
struct tegra_iovmm_area *io_vma, bool decommit);
- void (*map_pfn)(struct tegra_iovmm_device *dev,
+ void (*map_pfn)(struct tegra_iovmm_domain *domain,
struct tegra_iovmm_area *io_vma,
tegra_iovmm_addr_t offs, unsigned long pfn);
/* ensures that a domain is resident in the hardware's mapping region
* so that it may be used by a client */
- int (*lock_domain)(struct tegra_iovmm_device *dev,
- struct tegra_iovmm_domain *domain);
- void (*unlock_domain)(struct tegra_iovmm_device *dev,
- struct tegra_iovmm_domain *domain);
+ int (*lock_domain)(struct tegra_iovmm_domain *domain,
+ struct tegra_iovmm_client *client);
+ void (*unlock_domain)(struct tegra_iovmm_domain *domain,
+ struct tegra_iovmm_client *client);
/* allocates a vmm_domain for the specified client; may return the same
* domain for multiple clients */
struct tegra_iovmm_domain* (*alloc_domain)(
struct tegra_iovmm_device *dev,
struct tegra_iovmm_client *client);
- void (*free_domain)(struct tegra_iovmm_device *dev,
- struct tegra_iovmm_domain *domain);
+ void (*free_domain)(struct tegra_iovmm_domain *domain,
+ struct tegra_iovmm_client *client);
int (*suspend)(struct tegra_iovmm_device *dev);
void (*resume)(struct tegra_iovmm_device *dev);
};
@@ -131,7 +133,7 @@ struct tegra_iovmm_area_ops {
/* called by clients to allocate an I/O VMM client mapping context which
* will be shared by all clients in the same share_group */
struct tegra_iovmm_client *tegra_iovmm_alloc_client(const char *name,
- const char *share_group);
+ const char *share_group, struct miscdevice *misc_dev);
size_t tegra_iovmm_get_vm_size(struct tegra_iovmm_client *client);
@@ -195,7 +197,7 @@ int tegra_iovmm_unregister(struct tegra_iovmm_device *dev);
#else /* CONFIG_TEGRA_IOVMM */
static inline struct tegra_iovmm_client *tegra_iovmm_alloc_client(
- const char *name, const char *share_group)
+ const char *name, const char *share_group, struct miscdevice *misc_dev)
{
return NULL;
}