Initial KMS backend implementation.
[platform/upstream/libgbm.git] / gbm_kmsint.h
1 /*
2  * Copyright (c) 2013 Renesas Solutions Corp.
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,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  *
24  * Authors:
25  *    Takanari Hayama <taki@igel.co.jp>
26  */
27
28 #ifndef __gbm_kmsint_h__
29 #define __gbm_kmsint_h__
30
31 #include <libkms.h>
32
33 #include "gbmint.h"
34 #include "common_drm.h"
35
36 struct gbm_kms_device {
37         struct gbm_drm_device base;
38         struct kms_driver *kms;
39 };
40
41 struct gbm_kms_bo {
42         struct gbm_bo base;
43         struct kms_bo *bo;
44         void *addr;
45         int fd;                 // FD for export
46         int locked;
47
48         int size;
49 };
50
51 struct gbm_kms_surface {
52         struct gbm_surface base;
53         struct gbm_kms_bo *bo[2];
54         int front;
55 };
56
57 /* Internal API */
58 static inline struct gbm_kms_surface *gbm_kms_surface(struct gbm_surface *surface)
59 {
60         return (struct gbm_kms_surface*)surface;
61 }
62
63 static inline void gbm_kms_set_front(struct gbm_kms_surface *surface, int front)
64 {
65         surface->front = front;
66 }
67
68 static inline int gbm_kms_is_bo_locked(struct gbm_kms_bo *bo)
69 {
70         return bo->locked;
71 }
72
73 #endif