video: tegra: host: refactor for upstreaming
[linux-2.6.git] / include / linux / ion.h
index 4282315..9a32243 100644 (file)
 struct ion_handle;
 /**
  * enum ion_heap_types - list of all possible types of heaps
- * @ION_HEAP_SYSTEM:           memory allocated via vmalloc
- * @ION_HEAP_SYSTEM_CONTIG:    memory allocated via kmalloc
- * @ION_HEAP_CARVEOUT:         memory allocated from a prereserved
- *                             carveout heap, allocations are physically
- *                             contiguous
- * @ION_HEAP_END:              helper for iterating over heaps
+ * @ION_HEAP_TYPE_SYSTEM:       memory allocated via vmalloc
+ * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc
+ * @ION_HEAP_TYPE_CARVEOUT:     memory allocated from a prereserved
+ *                              carveout heap, allocations are physically
+ *                              contiguous
+ * @ION_HEAP_END:               helper for iterating over heaps
  */
 enum ion_heap_type {
        ION_HEAP_TYPE_SYSTEM,
        ION_HEAP_TYPE_SYSTEM_CONTIG,
        ION_HEAP_TYPE_CARVEOUT,
+       ION_HEAP_TYPE_IOMMU,
        ION_HEAP_TYPE_CUSTOM, /* must be last so device specific heaps always
                                 are at the end of this enum */
        ION_NUM_HEAPS,
 };
 
-#define ION_HEAP_SYSTEM_MASK           (1 << ION_HEAP_SYSTEM)
-#define ION_HEAP_SYSTEM_CONTIG_MASK    (1 << ION_HEAP_SYSTEM_CONTIG)
-#define ION_HEAP_CARVEOUT_MASK         (1 << ION_HEAP_CARVEOUT)
+#define ION_HEAP_SYSTEM_MASK           (1 << ION_HEAP_TYPE_SYSTEM)
+#define ION_HEAP_SYSTEM_CONTIG_MASK    (1 << ION_HEAP_TYPE_SYSTEM_CONTIG)
+#define ION_HEAP_CARVEOUT_MASK         (1 << ION_HEAP_TYPE_CARVEOUT)
 
 #ifdef __KERNEL__
 struct ion_device;
@@ -63,6 +64,7 @@ struct ion_buffer;
  * @name:      used for debug purposes
  * @base:      base address of heap in physical memory if applicable
  * @size:      size of the heap in bytes if applicable
+ * @priv:      heap specific data
  *
  * Provided by the board file.
  */
@@ -72,6 +74,7 @@ struct ion_platform_heap {
        const char *name;
        ion_phys_addr_t base;
        size_t size;
+       void *priv;
 };
 
 /**
@@ -186,9 +189,14 @@ void ion_unmap_dma(struct ion_client *client, struct ion_handle *handle);
  * @client:    the client
  * @handle:    the handle to share
  *
- * Given a handle, return a buffer which exists in a global name
- * space and can be passed to other clients.  Should be passed into ion_import
+ * Given a handle, return a buffer, which exists in a global name
+ * space, and can be passed to other clients.  Should be passed into ion_import
  * to obtain a new handle for this buffer.
+ *
+ * NOTE: This function does do not an extra reference.  The burden is on the
+ * caller to make sure the buffer doesn't go away while it's being passed to
+ * another client.  That is, ion_free should not be called on this handle until
+ * the buffer has been imported into the other client.
  */
 struct ion_buffer *ion_share(struct ion_client *client,
                             struct ion_handle *handle);