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