1e07b650662ea0529d99741691c47856ef1034c9cInki Dae/*
2e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Copyright (C) 2012 Samsung Electronics Co., Ltd.
3e07b650662ea0529d99741691c47856ef1034c9cInki Dae *
4e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Permission is hereby granted, free of charge, to any person obtaining a
5e07b650662ea0529d99741691c47856ef1034c9cInki Dae * copy of this software and associated documentation files (the "Software"),
6e07b650662ea0529d99741691c47856ef1034c9cInki Dae * to deal in the Software without restriction, including without limitation
7e07b650662ea0529d99741691c47856ef1034c9cInki Dae * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8e07b650662ea0529d99741691c47856ef1034c9cInki Dae * and/or sell copies of the Software, and to permit persons to whom the
9e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Software is furnished to do so, subject to the following conditions:
10e07b650662ea0529d99741691c47856ef1034c9cInki Dae *
11e07b650662ea0529d99741691c47856ef1034c9cInki Dae * The above copyright notice and this permission notice (including the next
12e07b650662ea0529d99741691c47856ef1034c9cInki Dae * paragraph) shall be included in all copies or substantial portions of the
13e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Software.
14e07b650662ea0529d99741691c47856ef1034c9cInki Dae *
15e07b650662ea0529d99741691c47856ef1034c9cInki Dae * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16e07b650662ea0529d99741691c47856ef1034c9cInki Dae * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17e07b650662ea0529d99741691c47856ef1034c9cInki Dae * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18e07b650662ea0529d99741691c47856ef1034c9cInki Dae * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19e07b650662ea0529d99741691c47856ef1034c9cInki Dae * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20e07b650662ea0529d99741691c47856ef1034c9cInki Dae * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21e07b650662ea0529d99741691c47856ef1034c9cInki Dae * SOFTWARE.
22e07b650662ea0529d99741691c47856ef1034c9cInki Dae *
23e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Authors:
24e07b650662ea0529d99741691c47856ef1034c9cInki Dae *    Inki Dae <inki.dae@samsung.com>
25e07b650662ea0529d99741691c47856ef1034c9cInki Dae */
26e07b650662ea0529d99741691c47856ef1034c9cInki Dae
27e07b650662ea0529d99741691c47856ef1034c9cInki Dae#ifndef EXYNOS_DRMIF_H_
28e07b650662ea0529d99741691c47856ef1034c9cInki Dae#define EXYNOS_DRMIF_H_
29e07b650662ea0529d99741691c47856ef1034c9cInki Dae
30e07b650662ea0529d99741691c47856ef1034c9cInki Dae#include <xf86drm.h>
31e07b650662ea0529d99741691c47856ef1034c9cInki Dae#include <stdint.h>
32e07b650662ea0529d99741691c47856ef1034c9cInki Dae#include "exynos_drm.h"
33e07b650662ea0529d99741691c47856ef1034c9cInki Dae
34e07b650662ea0529d99741691c47856ef1034c9cInki Daestruct exynos_device {
35e07b650662ea0529d99741691c47856ef1034c9cInki Dae	int fd;
36e07b650662ea0529d99741691c47856ef1034c9cInki Dae};
37e07b650662ea0529d99741691c47856ef1034c9cInki Dae
38e07b650662ea0529d99741691c47856ef1034c9cInki Dae/*
39e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Exynos Buffer Object structure.
40e07b650662ea0529d99741691c47856ef1034c9cInki Dae *
41e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @dev: exynos device object allocated.
42e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @handle: a gem handle to gem object created.
43e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @flags: indicate memory allocation and cache attribute types.
44e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @size: size to the buffer created.
45e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @vaddr: user space address to a gem buffer mmaped.
46e07b650662ea0529d99741691c47856ef1034c9cInki Dae * @name: a gem global handle from flink request.
47e07b650662ea0529d99741691c47856ef1034c9cInki Dae */
48e07b650662ea0529d99741691c47856ef1034c9cInki Daestruct exynos_bo {
49e07b650662ea0529d99741691c47856ef1034c9cInki Dae	struct exynos_device	*dev;
50e07b650662ea0529d99741691c47856ef1034c9cInki Dae	uint32_t		handle;
51e07b650662ea0529d99741691c47856ef1034c9cInki Dae	uint32_t		flags;
52e07b650662ea0529d99741691c47856ef1034c9cInki Dae	size_t			size;
53e07b650662ea0529d99741691c47856ef1034c9cInki Dae	void			*vaddr;
54e07b650662ea0529d99741691c47856ef1034c9cInki Dae	uint32_t		name;
55e07b650662ea0529d99741691c47856ef1034c9cInki Dae};
56e07b650662ea0529d99741691c47856ef1034c9cInki Dae
57e07b650662ea0529d99741691c47856ef1034c9cInki Dae/*
58e07b650662ea0529d99741691c47856ef1034c9cInki Dae * device related functions:
59e07b650662ea0529d99741691c47856ef1034c9cInki Dae */
60e07b650662ea0529d99741691c47856ef1034c9cInki Daestruct exynos_device * exynos_device_create(int fd);
61e07b650662ea0529d99741691c47856ef1034c9cInki Daevoid exynos_device_destroy(struct exynos_device *dev);
62e07b650662ea0529d99741691c47856ef1034c9cInki Dae
63e07b650662ea0529d99741691c47856ef1034c9cInki Dae/*
64e07b650662ea0529d99741691c47856ef1034c9cInki Dae * buffer-object related functions:
65e07b650662ea0529d99741691c47856ef1034c9cInki Dae */
66e07b650662ea0529d99741691c47856ef1034c9cInki Daestruct exynos_bo * exynos_bo_create(struct exynos_device *dev,
67e07b650662ea0529d99741691c47856ef1034c9cInki Dae		size_t size, uint32_t flags);
68e07b650662ea0529d99741691c47856ef1034c9cInki Daeint exynos_bo_get_info(struct exynos_device *dev, uint32_t handle,
69e07b650662ea0529d99741691c47856ef1034c9cInki Dae			size_t *size, uint32_t *flags);
70e07b650662ea0529d99741691c47856ef1034c9cInki Daevoid exynos_bo_destroy(struct exynos_bo *bo);
71e07b650662ea0529d99741691c47856ef1034c9cInki Daestruct exynos_bo * exynos_bo_from_name(struct exynos_device *dev, uint32_t name);
72e07b650662ea0529d99741691c47856ef1034c9cInki Daeint exynos_bo_get_name(struct exynos_bo *bo, uint32_t *name);
73e07b650662ea0529d99741691c47856ef1034c9cInki Daeuint32_t exynos_bo_handle(struct exynos_bo *bo);
74e07b650662ea0529d99741691c47856ef1034c9cInki Daevoid * exynos_bo_map(struct exynos_bo *bo);
75e07b650662ea0529d99741691c47856ef1034c9cInki Daeint exynos_prime_handle_to_fd(struct exynos_device *dev, uint32_t handle,
76e07b650662ea0529d99741691c47856ef1034c9cInki Dae					int *fd);
77e07b650662ea0529d99741691c47856ef1034c9cInki Daeint exynos_prime_fd_to_handle(struct exynos_device *dev, int fd,
78e07b650662ea0529d99741691c47856ef1034c9cInki Dae					uint32_t *handle);
79e07b650662ea0529d99741691c47856ef1034c9cInki Dae
80e07b650662ea0529d99741691c47856ef1034c9cInki Dae/*
81e07b650662ea0529d99741691c47856ef1034c9cInki Dae * Virtual Display related functions:
82e07b650662ea0529d99741691c47856ef1034c9cInki Dae */
83e07b650662ea0529d99741691c47856ef1034c9cInki Daeint exynos_vidi_connection(struct exynos_device *dev, uint32_t connect,
84e07b650662ea0529d99741691c47856ef1034c9cInki Dae				uint32_t ext, void *edid);
85e07b650662ea0529d99741691c47856ef1034c9cInki Dae
86e07b650662ea0529d99741691c47856ef1034c9cInki Dae#endif /* EXYNOS_DRMIF_H_ */
87