lkml.org 
[lkml]   [2013]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 083/115] ion: move userspace api into uapi/ion.h
    Date
    From: Colin Cross <ccross@android.com>

    Split the userspace api out of drivers/staging/android/ion/ion.h
    into drivers/staging/android/uapi/ion.h

    Signed-off-by: Colin Cross <ccross@android.com>
    Signed-off-by: John Stultz <john.stultz@linaro.org>
    ---
    drivers/staging/android/ion/compat_ion.c | 2 +-
    drivers/staging/android/ion/ion.h | 176 +--------------------------
    drivers/staging/android/uapi/ion.h | 196 +++++++++++++++++++++++++++++++
    3 files changed, 198 insertions(+), 176 deletions(-)
    create mode 100644 drivers/staging/android/uapi/ion.h

    diff --git a/drivers/staging/android/ion/compat_ion.c b/drivers/staging/android/ion/compat_ion.c
    index 83842a6..d4a33c7 100644
    --- a/drivers/staging/android/ion/compat_ion.c
    +++ b/drivers/staging/android/ion/compat_ion.c
    @@ -21,7 +21,7 @@
    #include "ion.h"
    #include "compat_ion.h"

    -/* See drivers/staging/android/ion/ion.h for the definition of these structs */
    +/* See drivers/staging/android/uapi/ion.h for the definition of these structs */
    struct compat_ion_allocation_data {
    compat_size_t len;
    compat_size_t align;
    diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h
    index d979890..962e1c5 100644
    --- a/drivers/staging/android/ion/ion.h
    +++ b/drivers/staging/android/ion/ion.h
    @@ -19,51 +19,8 @@

    #include <linux/types.h>

    -typedef int ion_user_handle_t;
    +#include "../uapi/ion.h"

    -/**
    - * enum ion_heap_types - list of all possible types of 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_TYPE_DMA: memory allocated via DMA API
    - * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask
    - * is used to identify the heaps, so only 32
    - * total heap types are supported
    - */
    -enum ion_heap_type {
    - ION_HEAP_TYPE_SYSTEM,
    - ION_HEAP_TYPE_SYSTEM_CONTIG,
    - ION_HEAP_TYPE_CARVEOUT,
    - ION_HEAP_TYPE_CHUNK,
    - ION_HEAP_TYPE_DMA,
    - 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_TYPE_SYSTEM)
    -#define ION_HEAP_SYSTEM_CONTIG_MASK (1 << ION_HEAP_TYPE_SYSTEM_CONTIG)
    -#define ION_HEAP_CARVEOUT_MASK (1 << ION_HEAP_TYPE_CARVEOUT)
    -#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA)
    -
    -#define ION_NUM_HEAP_IDS sizeof(unsigned int) * 8
    -
    -/**
    - * allocation flags - the lower 16 bits are used by core ion, the upper 16
    - * bits are reserved for use by the heaps themselves.
    - */
    -#define ION_FLAG_CACHED 1 /* mappings of this buffer should be
    - cached, ion will do cache
    - maintenance when the buffer is
    - mapped for dma */
    -#define ION_FLAG_CACHED_NEEDS_SYNC 2 /* mappings of this buffer will created
    - at mmap time, if this is set
    - caches must be managed manually */
    -
    -#ifdef __KERNEL__
    struct ion_handle;
    struct ion_device;
    struct ion_heap;
    @@ -244,135 +201,4 @@ int ion_share_dma_buf_fd(struct ion_client *client, struct ion_handle *handle);
    */
    struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd);

    -#endif /* __KERNEL__ */
    -
    -/**
    - * DOC: Ion Userspace API
    - *
    - * create a client by opening /dev/ion
    - * most operations handled via following ioctls
    - *
    - */
    -
    -/**
    - * struct ion_allocation_data - metadata passed from userspace for allocations
    - * @len: size of the allocation
    - * @align: required alignment of the allocation
    - * @heap_id_mask: mask of heap ids to allocate from
    - * @flags: flags passed to heap
    - * @handle: pointer that will be populated with a cookie to use to
    - * refer to this allocation
    - *
    - * Provided by userspace as an argument to the ioctl
    - */
    -struct ion_allocation_data {
    - size_t len;
    - size_t align;
    - unsigned int heap_id_mask;
    - unsigned int flags;
    - ion_user_handle_t handle;
    -};
    -
    -/**
    - * struct ion_fd_data - metadata passed to/from userspace for a handle/fd pair
    - * @handle: a handle
    - * @fd: a file descriptor representing that handle
    - *
    - * For ION_IOC_SHARE or ION_IOC_MAP userspace populates the handle field with
    - * the handle returned from ion alloc, and the kernel returns the file
    - * descriptor to share or map in the fd field. For ION_IOC_IMPORT, userspace
    - * provides the file descriptor and the kernel returns the handle.
    - */
    -struct ion_fd_data {
    - ion_user_handle_t handle;
    - int fd;
    -};
    -
    -/**
    - * struct ion_handle_data - a handle passed to/from the kernel
    - * @handle: a handle
    - */
    -struct ion_handle_data {
    - ion_user_handle_t handle;
    -};
    -
    -/**
    - * struct ion_custom_data - metadata passed to/from userspace for a custom ioctl
    - * @cmd: the custom ioctl function to call
    - * @arg: additional data to pass to the custom ioctl, typically a user
    - * pointer to a predefined structure
    - *
    - * This works just like the regular cmd and arg fields of an ioctl.
    - */
    -struct ion_custom_data {
    - unsigned int cmd;
    - unsigned long arg;
    -};
    -
    -#define ION_IOC_MAGIC 'I'
    -
    -/**
    - * DOC: ION_IOC_ALLOC - allocate memory
    - *
    - * Takes an ion_allocation_data struct and returns it with the handle field
    - * populated with the opaque handle for the allocation.
    - */
    -#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \
    - struct ion_allocation_data)
    -
    -/**
    - * DOC: ION_IOC_FREE - free memory
    - *
    - * Takes an ion_handle_data struct and frees the handle.
    - */
    -#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data)
    -
    -/**
    - * DOC: ION_IOC_MAP - get a file descriptor to mmap
    - *
    - * Takes an ion_fd_data struct with the handle field populated with a valid
    - * opaque handle. Returns the struct with the fd field set to a file
    - * descriptor open in the current address space. This file descriptor
    - * can then be used as an argument to mmap.
    - */
    -#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data)
    -
    -/**
    - * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation
    - *
    - * Takes an ion_fd_data struct with the handle field populated with a valid
    - * opaque handle. Returns the struct with the fd field set to a file
    - * descriptor open in the current address space. This file descriptor
    - * can then be passed to another process. The corresponding opaque handle can
    - * be retrieved via ION_IOC_IMPORT.
    - */
    -#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data)
    -
    -/**
    - * DOC: ION_IOC_IMPORT - imports a shared file descriptor
    - *
    - * Takes an ion_fd_data struct with the fd field populated with a valid file
    - * descriptor obtained from ION_IOC_SHARE and returns the struct with the handle
    - * filed set to the corresponding opaque handle.
    - */
    -#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data)
    -
    -/**
    - * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory
    - *
    - * Deprecated in favor of using the dma_buf api's correctly (syncing
    - * will happend automatically when the buffer is mapped to a device).
    - * If necessary should be used after touching a cached buffer from the cpu,
    - * this will make the buffer in memory coherent.
    - */
    -#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data)
    -
    -/**
    - * DOC: ION_IOC_CUSTOM - call architecture specific ion ioctl
    - *
    - * Takes the argument of the architecture specific ioctl to call and
    - * passes appropriate userdata for that ioctl
    - */
    -#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
    -
    #endif /* _LINUX_ION_H */
    diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h
    new file mode 100644
    index 0000000..f09e7c1
    --- /dev/null
    +++ b/drivers/staging/android/uapi/ion.h
    @@ -0,0 +1,196 @@
    +/*
    + * drivers/staging/android/uapi/ion.h
    + *
    + * Copyright (C) 2011 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 _UAPI_LINUX_ION_H
    +#define _UAPI_LINUX_ION_H
    +
    +#include <linux/ioctl.h>
    +#include <linux/types.h>
    +
    +typedef int ion_user_handle_t;
    +
    +/**
    + * enum ion_heap_types - list of all possible types of 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_TYPE_DMA: memory allocated via DMA API
    + * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask
    + * is used to identify the heaps, so only 32
    + * total heap types are supported
    + */
    +enum ion_heap_type {
    + ION_HEAP_TYPE_SYSTEM,
    + ION_HEAP_TYPE_SYSTEM_CONTIG,
    + ION_HEAP_TYPE_CARVEOUT,
    + ION_HEAP_TYPE_CHUNK,
    + ION_HEAP_TYPE_DMA,
    + ION_HEAP_TYPE_CUSTOM, /* must be last so device specific heaps always
    + are at the end of this enum */
    + ION_NUM_HEAPS = 16,
    +};
    +
    +#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)
    +#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA)
    +
    +#define ION_NUM_HEAP_IDS sizeof(unsigned int) * 8
    +
    +/**
    + * allocation flags - the lower 16 bits are used by core ion, the upper 16
    + * bits are reserved for use by the heaps themselves.
    + */
    +#define ION_FLAG_CACHED 1 /* mappings of this buffer should be
    + cached, ion will do cache
    + maintenance when the buffer is
    + mapped for dma */
    +#define ION_FLAG_CACHED_NEEDS_SYNC 2 /* mappings of this buffer will created
    + at mmap time, if this is set
    + caches must be managed manually */
    +
    +/**
    + * DOC: Ion Userspace API
    + *
    + * create a client by opening /dev/ion
    + * most operations handled via following ioctls
    + *
    + */
    +
    +/**
    + * struct ion_allocation_data - metadata passed from userspace for allocations
    + * @len: size of the allocation
    + * @align: required alignment of the allocation
    + * @heap_id_mask: mask of heap ids to allocate from
    + * @flags: flags passed to heap
    + * @handle: pointer that will be populated with a cookie to use to
    + * refer to this allocation
    + *
    + * Provided by userspace as an argument to the ioctl
    + */
    +struct ion_allocation_data {
    + size_t len;
    + size_t align;
    + unsigned int heap_id_mask;
    + unsigned int flags;
    + ion_user_handle_t handle;
    +};
    +
    +/**
    + * struct ion_fd_data - metadata passed to/from userspace for a handle/fd pair
    + * @handle: a handle
    + * @fd: a file descriptor representing that handle
    + *
    + * For ION_IOC_SHARE or ION_IOC_MAP userspace populates the handle field with
    + * the handle returned from ion alloc, and the kernel returns the file
    + * descriptor to share or map in the fd field. For ION_IOC_IMPORT, userspace
    + * provides the file descriptor and the kernel returns the handle.
    + */
    +struct ion_fd_data {
    + ion_user_handle_t handle;
    + int fd;
    +};
    +
    +/**
    + * struct ion_handle_data - a handle passed to/from the kernel
    + * @handle: a handle
    + */
    +struct ion_handle_data {
    + ion_user_handle_t handle;
    +};
    +
    +/**
    + * struct ion_custom_data - metadata passed to/from userspace for a custom ioctl
    + * @cmd: the custom ioctl function to call
    + * @arg: additional data to pass to the custom ioctl, typically a user
    + * pointer to a predefined structure
    + *
    + * This works just like the regular cmd and arg fields of an ioctl.
    + */
    +struct ion_custom_data {
    + unsigned int cmd;
    + unsigned long arg;
    +};
    +
    +#define ION_IOC_MAGIC 'I'
    +
    +/**
    + * DOC: ION_IOC_ALLOC - allocate memory
    + *
    + * Takes an ion_allocation_data struct and returns it with the handle field
    + * populated with the opaque handle for the allocation.
    + */
    +#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \
    + struct ion_allocation_data)
    +
    +/**
    + * DOC: ION_IOC_FREE - free memory
    + *
    + * Takes an ion_handle_data struct and frees the handle.
    + */
    +#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data)
    +
    +/**
    + * DOC: ION_IOC_MAP - get a file descriptor to mmap
    + *
    + * Takes an ion_fd_data struct with the handle field populated with a valid
    + * opaque handle. Returns the struct with the fd field set to a file
    + * descriptor open in the current address space. This file descriptor
    + * can then be used as an argument to mmap.
    + */
    +#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data)
    +
    +/**
    + * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation
    + *
    + * Takes an ion_fd_data struct with the handle field populated with a valid
    + * opaque handle. Returns the struct with the fd field set to a file
    + * descriptor open in the current address space. This file descriptor
    + * can then be passed to another process. The corresponding opaque handle can
    + * be retrieved via ION_IOC_IMPORT.
    + */
    +#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data)
    +
    +/**
    + * DOC: ION_IOC_IMPORT - imports a shared file descriptor
    + *
    + * Takes an ion_fd_data struct with the fd field populated with a valid file
    + * descriptor obtained from ION_IOC_SHARE and returns the struct with the handle
    + * filed set to the corresponding opaque handle.
    + */
    +#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data)
    +
    +/**
    + * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory
    + *
    + * Deprecated in favor of using the dma_buf api's correctly (syncing
    + * will happend automatically when the buffer is mapped to a device).
    + * If necessary should be used after touching a cached buffer from the cpu,
    + * this will make the buffer in memory coherent.
    + */
    +#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data)
    +
    +/**
    + * DOC: ION_IOC_CUSTOM - call architecture specific ion ioctl
    + *
    + * Takes the argument of the architecture specific ioctl to call and
    + * passes appropriate userdata for that ioctl
    + */
    +#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
    +
    +#endif /* _UAPI_LINUX_ION_H */
    --
    1.8.3.2


    \
     
     \ /
      Last update: 2013-12-14 00:21    [W:3.580 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site