# Copyright 2022 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-heap.h>

resource fd_dma_heap[fd]

openat$dma_heap(fd const[AT_FDCWD], file ptr[in, string["/dev/dma_heap/system"]], flags flags[open_flags], mode const[0]) fd_dma_heap

ioctl$DMA_HEAP_IOCTL_ALLOC(fd fd_dma_heap, cmd const[DMA_HEAP_IOCTL_ALLOC], arg ptr[inout, dma_heap_allocation_data])

dma_open_flags = O_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR

resource fd_dma_heap_alloc[fd]

dma_heap_allocation_data {
	len		int64	(in)
	fd		fd_dma_heap_alloc	(out)
	fd_flags	flags[dma_open_flags, int32]	(in)
	heap_flags	const[0, int64]	(in)
}
