/* -*- 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.
@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
@License        MIT

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.

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__) */
