# Copyright 2017 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
include <asm/ioctl.h>
include <uapi/linux/fcntl.h>
include <uapi/linux/dma-buf.h>
include <drivers/staging/android/uapi/ion.h>
resource fd_ion[fd]
resource fd_dma_buf[fd]
openat$ion(fd const[AT_FDCWD], file ptr[in, string["/dev/ion"]], flags flags[open_flags], mode const[0]) fd_ion
ioctl$ION_IOC_ALLOC(fd fd_ion, cmd const[ION_IOC_ALLOC], arg ptr[inout, ion_allocation_data])
ioctl$ION_IOC_HEAP_QUERY(fd fd_ion, cmd const[ION_IOC_HEAP_QUERY], arg ptr[inout, ion_heap_query])
ioctl$DMA_BUF_IOCTL_SYNC(fd fd_dma_buf, cmd const[DMA_BUF_IOCTL_SYNC], arg ptr[in, flags[dma_buf_sync_flags, int64]])
ion_allocation_data {
len int64
heap_id_mask flags[ion_heap_mask, int32]
flags flags[ion_alloc_flags, int32]
fd fd_dma_buf[opt]
unused const[0, int32]
}
ion_heap_query {
cnt len[heaps, int32]
reserved0 const[0, int32]
heaps ptr64[out, ion_heap_data]
reserved1 const[0, int32]
reserved2 const[0, int32]
}
ion_heap_data {
name string["name", MAX_HEAP_NAME]
type int32
heap_id int32
reserved0 int32
reserved1 int32
reserved2 int32
}
ion_alloc_flags = ION_FLAG_CACHED
ion_heap_mask = ION_HEAP_TYPE_SYSTEM_BIT, ION_HEAP_TYPE_SYSTEM_CONTIG_BIT, ION_HEAP_TYPE_CARVEOUT_BIT, ION_HEAP_TYPE_CHUNK_BIT, ION_HEAP_TYPE_DMA_BIT, ION_HEAP_TYPE_CUSTOM_BIT
dma_buf_sync_flags = DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, DMA_BUF_SYNC_END
define ION_HEAP_TYPE_SYSTEM_BIT 1 << ION_HEAP_TYPE_SYSTEM
define ION_HEAP_TYPE_SYSTEM_CONTIG_BIT 1 << ION_HEAP_TYPE_SYSTEM_CONTIG
define ION_HEAP_TYPE_CARVEOUT_BIT 1 << ION_HEAP_TYPE_CARVEOUT
define ION_HEAP_TYPE_CHUNK_BIT 1 << ION_HEAP_TYPE_CHUNK
define ION_HEAP_TYPE_DMA_BIT 1 << ION_HEAP_TYPE_DMA
define ION_HEAP_TYPE_CUSTOM_BIT 1 << ION_HEAP_TYPE_CUSTOM