hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * drivers/staging/android/uapi/ion.h (This is the ION Uapi prior kernel 4.12)
 *
 * 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_OLD_H
#define _UAPI_LINUX_ION_OLD_H
 
/* All ION resources are prefixed ION0_ to ditinguish from companion new API */
 
#include <linux/ioctl.h>
#include <linux/types.h>
 
typedef int ion0_user_handle_t;
 
/**
 * struct ion0_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 ion0_allocation_data {
   size_t len;
   size_t align;
   unsigned int heap_id_mask;
   unsigned int flags;
   ion0_user_handle_t handle;
};
 
/**
 * struct ion0_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 ion0_fd_data {
   ion0_user_handle_t handle;
   int fd;
};
 
/**
 * struct ion0_handle_data - a handle passed to/from the kernel
 * @handle:    a handle
 */
struct ion0_handle_data {
   ion0_user_handle_t handle;
};
 
/**
 * struct ion0_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 ion0_custom_data {
   unsigned int cmd;
   unsigned long arg;
};
 
/**
 * 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 ION0_IOC_ALLOC        _IOWR(ION_IOC_MAGIC, 0, \
                     struct ion0_allocation_data)
/**
 * DOC: ION_IOC_FREE - free memory
 *
 * Takes an ion_handle_data struct and frees the handle.
 */
#define ION0_IOC_FREE        _IOWR(ION_IOC_MAGIC, 1, struct ion0_handle_data)
 
/**
 * DOC: ION_IOC_MAP - get a file descriptor to mmap
 *
 * Takes an ion0_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 ION0_IOC_MAP        _IOWR(ION_IOC_MAGIC, 2, struct ion0_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 ION0_IOC_SHARE        _IOWR(ION_IOC_MAGIC, 4, struct ion0_fd_data)
 
/**
 * DOC: ION_IOC_IMPORT - imports a shared file descriptor
 *
 * Takes an ion0_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 ION0_IOC_IMPORT        _IOWR(ION_IOC_MAGIC, 5, struct ion0_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 happen 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 ION0_IOC_SYNC        _IOWR(ION_IOC_MAGIC, 7, struct ion0_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 ION0_IOC_CUSTOM        _IOWR(ION_IOC_MAGIC, 6, struct ion0_custom_data)
 
#endif /* _UAPI_LINUX_ION_OLD_H */