blob: 2b523e0136d06f0c6ff4fb93ae548315b7b7aa69 [file] [log] [blame]
Gurchetan Singh46faf6b2016-08-05 14:40:07 -07001/*
2 * Copyright (c) 2016 The Chromium OS Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7#ifndef DRV_H_
8#define DRV_H_
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include <stdint.h>
15
16#define DRV_MAX_PLANES 4
17
18/* Vendor ids and mod_code fourcc function must match gbm.h */
19#define DRV_FORMAT_MOD_NONE 0
20#define DRV_FORMAT_MOD_VENDOR_INTEL 0x01
21#define DRV_FORMAT_MOD_VENDOR_AMD 0x02
22#define DRV_FORMAT_MOD_VENDOR_NV 0x03
23#define DRV_FORMAT_MOD_VENDOR_SAMSUNG 0x04
24#define DRV_FORMAT_MOD_VENDOR_QCOM 0x05
25
26#define drv_fourcc_mod_code(vendor, val) \
27 ((((__u64)DRV_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL))
28
29/* Use flags */
30#define DRV_BO_USE_NONE 0
31#define DRV_BO_USE_SCANOUT (1ull << 0)
32#define DRV_BO_USE_CURSOR (1ull << 1)
33#define DRV_BO_USE_CURSOR_64X64 DRV_BO_USE_CURSOR
34#define DRV_BO_USE_RENDERING (1ull << 2)
35#define DRV_BO_USE_LINEAR (1ull << 3)
36
37typedef enum {
38 DRV_FORMAT_NONE,
39 DRV_FORMAT_C8,
40 DRV_FORMAT_R8,
41 DRV_FORMAT_RG88,
42 DRV_FORMAT_GR88,
43 DRV_FORMAT_RGB332,
44 DRV_FORMAT_BGR233,
45 DRV_FORMAT_XRGB4444,
46 DRV_FORMAT_XBGR4444,
47 DRV_FORMAT_RGBX4444,
48 DRV_FORMAT_BGRX4444,
49 DRV_FORMAT_ARGB4444,
50 DRV_FORMAT_ABGR4444,
51 DRV_FORMAT_RGBA4444,
52 DRV_FORMAT_BGRA4444,
53 DRV_FORMAT_XRGB1555,
54 DRV_FORMAT_XBGR1555,
55 DRV_FORMAT_RGBX5551,
56 DRV_FORMAT_BGRX5551,
57 DRV_FORMAT_ARGB1555,
58 DRV_FORMAT_ABGR1555,
59 DRV_FORMAT_RGBA5551,
60 DRV_FORMAT_BGRA5551,
61 DRV_FORMAT_RGB565,
62 DRV_FORMAT_BGR565,
63 DRV_FORMAT_RGB888,
64 DRV_FORMAT_BGR888,
65 DRV_FORMAT_XRGB8888,
66 DRV_FORMAT_XBGR8888,
67 DRV_FORMAT_RGBX8888,
68 DRV_FORMAT_BGRX8888,
69 DRV_FORMAT_ARGB8888,
70 DRV_FORMAT_ABGR8888,
71 DRV_FORMAT_RGBA8888,
72 DRV_FORMAT_BGRA8888,
73 DRV_FORMAT_XRGB2101010,
74 DRV_FORMAT_XBGR2101010,
75 DRV_FORMAT_RGBX1010102,
76 DRV_FORMAT_BGRX1010102,
77 DRV_FORMAT_ARGB2101010,
78 DRV_FORMAT_ABGR2101010,
79 DRV_FORMAT_RGBA1010102,
80 DRV_FORMAT_BGRA1010102,
81 DRV_FORMAT_YUYV,
82 DRV_FORMAT_YVYU,
83 DRV_FORMAT_UYVY,
84 DRV_FORMAT_VYUY,
85 DRV_FORMAT_AYUV,
86 DRV_FORMAT_NV12,
87 DRV_FORMAT_NV21,
88 DRV_FORMAT_NV16,
89 DRV_FORMAT_NV61,
90 DRV_FORMAT_YUV410,
91 DRV_FORMAT_YVU410,
92 DRV_FORMAT_YUV411,
93 DRV_FORMAT_YVU411,
94 DRV_FORMAT_YUV420,
95 DRV_FORMAT_YVU420,
96 DRV_FORMAT_YUV422,
97 DRV_FORMAT_YVU422,
98 DRV_FORMAT_YUV444,
99 DRV_FORMAT_YVU444,
100} drv_format_t;
101
102struct driver;
103struct bo;
104
105union bo_handle {
106 void *ptr;
107 int32_t s32;
108 uint32_t u32;
109 int64_t s64;
110 uint64_t u64;
111};
112
113struct drv_import_fd_data {
114 int fd;
115 uint32_t width;
116 uint32_t height;
117 uint32_t stride;
118 drv_format_t format;
119};
120
121struct driver *
122drv_create(int fd);
123
124void
125drv_destroy(struct driver *drv);
126
127int
128drv_get_fd(struct driver *drv);
129
130const char *
131drv_get_name(struct driver *drv);
132
133int
134drv_is_format_supported(struct driver *drv, drv_format_t format,
135 uint64_t usage);
136
137struct bo *
138drv_bo_new(struct driver *drv, uint32_t width, uint32_t height,
139 drv_format_t format);
140
141struct bo *
142drv_bo_create(struct driver *drv, uint32_t width, uint32_t height,
143 drv_format_t format, uint64_t flags);
144
145void
146drv_bo_destroy(struct bo *bo);
147
148struct bo *
149drv_bo_import(struct driver *drv, struct drv_import_fd_data *data);
150
151uint32_t
152drv_bo_get_width(struct bo *bo);
153
154uint32_t
155drv_bo_get_height(struct bo *bo);
156
157uint32_t
158drv_bo_get_stride_or_tiling(struct bo *bo);
159
160size_t
161drv_bo_get_num_planes(struct bo *bo);
162
163union bo_handle
164drv_bo_get_plane_handle(struct bo *bo, size_t plane);
165
166int
167drv_bo_get_plane_fd(struct bo *bo, size_t plane);
168
169uint32_t
170drv_bo_get_plane_offset(struct bo *bo, size_t plane);
171
172uint32_t
173drv_bo_get_plane_size(struct bo *bo, size_t plane);
174
175uint32_t
176drv_bo_get_plane_stride(struct bo *bo, size_t plane);
177
178uint64_t
179drv_bo_get_plane_format_modifier(struct bo *bo, size_t plane);
180
181#ifdef __cplusplus
182}
183#endif
184
185#endif
186