# SPDX-License-Identifier: GPL-2.0-only
menu "DMABUF options"

config SYNC_FILE
	bool "Explicit Synchronization Framework"
	default n
	select DMA_SHARED_BUFFER
	help
	  The Sync File Framework adds explicit synchronization via
	  userspace. It enables send/receive 'struct dma_fence' objects to/from
	  userspace via Sync File fds for synchronization between drivers via
	  userspace components. It has been ported from Android.

	  The first and main user for this is graphics in which a fence is
	  associated with a buffer. When a job is submitted to the GPU a fence
	  is attached to the buffer and is transferred via userspace, using Sync
	  Files fds, to the DRM driver for example. More details at
	  Documentation/driver-api/sync_file.rst.

config SW_SYNC
	bool "Sync File Validation Framework"
	default n
	depends on SYNC_FILE
	depends on DEBUG_FS
	help
	  A sync object driver that uses a 32bit counter to coordinate
	  synchronization.  Useful when there is no hardware primitive backing
	  the synchronization.

	  WARNING: improper use of this can result in deadlocking kernel
	  drivers from userspace. Intended for test and debug only.

config UDMABUF
	bool "userspace dmabuf misc driver"
	default n
	depends on DMA_SHARED_BUFFER
	depends on MEMFD_CREATE || COMPILE_TEST
	help
	  A driver to let userspace turn memfd regions into dma-bufs.
	  Qemu can use this to create host dmabufs for guest framebuffers.

config DMABUF_MOVE_NOTIFY
	bool "Move notify between drivers (EXPERIMENTAL)"
	default n
	depends on DMA_SHARED_BUFFER
	help
	  Don't pin buffers if the dynamic DMA-buf interface is available on
	  both the exporter as well as the importer. This fixes a security
	  problem where userspace is able to pin unrestricted amounts of memory
	  through DMA-buf.
	  This is marked experimental because we don't yet have a consistent
	  execution context and memory management between drivers.

config DMABUF_DEBUG
	bool "DMA-BUF debug checks"
	depends on DMA_SHARED_BUFFER
	default y if DMA_API_DEBUG
	help
	  This option enables additional checks for DMA-BUF importers and
	  exporters. Specifically it validates that importers do not peek at the
	  underlying struct page when they import a buffer.

config DMABUF_SELFTESTS
	tristate "Selftests for the dma-buf interfaces"
	default n
	depends on DMA_SHARED_BUFFER

menuconfig DMABUF_HEAPS
	bool "DMA-BUF Userland Memory Heaps"
	select DMA_SHARED_BUFFER
	help
	  Choose this option to enable the DMA-BUF userland memory heaps.
	  This options creates per heap chardevs in /dev/dma_heap/ which
	  allows userspace to allocate dma-bufs that can be shared
	  between drivers.

menuconfig DMABUF_SYSFS_STATS
	bool "DMA-BUF sysfs statistics"
	depends on DMA_SHARED_BUFFER
	help
	   Choose this option to enable DMA-BUF sysfs statistics
	   in location /sys/kernel/dmabuf/buffers.

	   /sys/kernel/dmabuf/buffers/<inode_number> will contain
	   statistics for the DMA-BUF with the unique inode number
	   <inode_number>.

source "drivers/dma-buf/heaps/Kconfig"

endmenu