/* -*- mode: c; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* vi: set ts=8 sw=8 sts=8: */
/*************************************************************************/ /*!
@File
@Title          PDP DRM definitions shared between kernel and user space.
@Codingstyle    LinuxKernel
@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
@License        Dual MIT/GPLv2

The contents of this file are subject to the MIT license as set out below.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

Alternatively, the contents of this file may be used under the terms of
the GNU General Public License Version 2 ("GPL") in which case the provisions
of GPL are applicable instead of those above.

If you wish to allow use of your version of this file only under the terms of
GPL, and not to allow others to use your version of this file under the terms
of the MIT license, indicate your decision by deleting the provisions above
and replace them with the notice and other provisions required by GPL as set
out in the file called "GPL-COPYING" included in this distribution. If you do
not delete the provisions above, a recipient may use your version of this file
under the terms of either the MIT license or GPL.

This License is also included in this distribution in the file called
"MIT-COPYING".

EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ /**************************************************************************/

#if !defined(__PDP_DRM_H__)
#define __PDP_DRM_H__

#if defined(__KERNEL__)
#include <drm/drm.h>
#else
#include <drm.h>
#endif

struct drm_pdp_gem_create {
	__u64 size;	/* in */
	__u32 flags;	/* in */
	__u32 handle;	/* out */
};

struct drm_pdp_gem_mmap {
	__u32 handle;	/* in */
	__u32 pad;
	__u64 offset;	/* out */
};

#define PDP_GEM_CPU_PREP_READ	(1 << 0)
#define PDP_GEM_CPU_PREP_WRITE	(1 << 1)
#define PDP_GEM_CPU_PREP_NOWAIT	(1 << 2)

struct drm_pdp_gem_cpu_prep {
	__u32 handle;	/* in */
	__u32 flags;	/* in */
};

struct drm_pdp_gem_cpu_fini {
	__u32 handle;	/* in */
	__u32 pad;
};

/*
 * DRM command numbers, relative to DRM_COMMAND_BASE.
 * These defines must be prefixed with "DRM_".
 */
#define DRM_PDP_GEM_CREATE		0x00
#define DRM_PDP_GEM_MMAP		0x01
#define DRM_PDP_GEM_CPU_PREP		0x02
#define DRM_PDP_GEM_CPU_FINI		0x03

/* These defines must be prefixed with "DRM_IOCTL_". */
#define DRM_IOCTL_PDP_GEM_CREATE \
	DRM_IOWR(DRM_COMMAND_BASE + DRM_PDP_GEM_CREATE, \
		 struct drm_pdp_gem_create)

#define DRM_IOCTL_PDP_GEM_MMAP\
	DRM_IOWR(DRM_COMMAND_BASE + DRM_PDP_GEM_MMAP, \
		 struct drm_pdp_gem_mmap)

#define DRM_IOCTL_PDP_GEM_CPU_PREP \
	DRM_IOW(DRM_COMMAND_BASE + DRM_PDP_GEM_CPU_PREP, \
		struct drm_pdp_gem_cpu_prep)

#define DRM_IOCTL_PDP_GEM_CPU_FINI \
	DRM_IOW(DRM_COMMAND_BASE + DRM_PDP_GEM_CPU_FINI, \
		struct drm_pdp_gem_cpu_fini)

#endif /* defined(__PDP_DRM_H__) */
