blob: 4b70d58f54241e8358d14ad79e3d855bb9e817c7 [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)
Gurchetan Singhbfba8c22016-08-16 17:57:10 -070036#define DRV_BO_USE_SW_READ_NEVER (1ull << 4)
37#define DRV_BO_USE_SW_READ_RARELY (1ull << 5)
38#define DRV_BO_USE_SW_READ_OFTEN (1ull << 6)
39#define DRV_BO_USE_SW_WRITE_NEVER (1ull << 7)
40#define DRV_BO_USE_SW_WRITE_RARELY (1ull << 8)
41#define DRV_BO_USE_SW_WRITE_OFTEN (1ull << 9)
Gurchetan Singh56662da2016-09-12 16:21:29 -070042#define DRV_BO_USE_EXTERNAL_DISP (1ull << 10)
43#define DRV_BO_USE_PROTECTED (1ull << 11)
44#define DRV_BO_USE_HW_VIDEO_ENCODER (1ull << 12)
45#define DRV_BO_USE_HW_CAMERA_WRITE (1ull << 13)
46#define DRV_BO_USE_HW_CAMERA_READ (1ull << 14)
47#define DRV_BO_USE_HW_CAMERA_ZSL (1ull << 15)
48#define DRV_BO_USE_RENDERSCRIPT (1ull << 16)
Gurchetan Singh46faf6b2016-08-05 14:40:07 -070049
50typedef enum {
51 DRV_FORMAT_NONE,
52 DRV_FORMAT_C8,
53 DRV_FORMAT_R8,
54 DRV_FORMAT_RG88,
55 DRV_FORMAT_GR88,
56 DRV_FORMAT_RGB332,
57 DRV_FORMAT_BGR233,
58 DRV_FORMAT_XRGB4444,
59 DRV_FORMAT_XBGR4444,
60 DRV_FORMAT_RGBX4444,
61 DRV_FORMAT_BGRX4444,
62 DRV_FORMAT_ARGB4444,
63 DRV_FORMAT_ABGR4444,
64 DRV_FORMAT_RGBA4444,
65 DRV_FORMAT_BGRA4444,
66 DRV_FORMAT_XRGB1555,
67 DRV_FORMAT_XBGR1555,
68 DRV_FORMAT_RGBX5551,
69 DRV_FORMAT_BGRX5551,
70 DRV_FORMAT_ARGB1555,
71 DRV_FORMAT_ABGR1555,
72 DRV_FORMAT_RGBA5551,
73 DRV_FORMAT_BGRA5551,
74 DRV_FORMAT_RGB565,
75 DRV_FORMAT_BGR565,
76 DRV_FORMAT_RGB888,
77 DRV_FORMAT_BGR888,
78 DRV_FORMAT_XRGB8888,
79 DRV_FORMAT_XBGR8888,
80 DRV_FORMAT_RGBX8888,
81 DRV_FORMAT_BGRX8888,
82 DRV_FORMAT_ARGB8888,
83 DRV_FORMAT_ABGR8888,
84 DRV_FORMAT_RGBA8888,
85 DRV_FORMAT_BGRA8888,
86 DRV_FORMAT_XRGB2101010,
87 DRV_FORMAT_XBGR2101010,
88 DRV_FORMAT_RGBX1010102,
89 DRV_FORMAT_BGRX1010102,
90 DRV_FORMAT_ARGB2101010,
91 DRV_FORMAT_ABGR2101010,
92 DRV_FORMAT_RGBA1010102,
93 DRV_FORMAT_BGRA1010102,
94 DRV_FORMAT_YUYV,
95 DRV_FORMAT_YVYU,
96 DRV_FORMAT_UYVY,
97 DRV_FORMAT_VYUY,
98 DRV_FORMAT_AYUV,
99 DRV_FORMAT_NV12,
100 DRV_FORMAT_NV21,
101 DRV_FORMAT_NV16,
102 DRV_FORMAT_NV61,
103 DRV_FORMAT_YUV410,
104 DRV_FORMAT_YVU410,
105 DRV_FORMAT_YUV411,
106 DRV_FORMAT_YVU411,
107 DRV_FORMAT_YUV420,
108 DRV_FORMAT_YVU420,
109 DRV_FORMAT_YUV422,
110 DRV_FORMAT_YVU422,
111 DRV_FORMAT_YUV444,
112 DRV_FORMAT_YVU444,
Gurchetan Singhbfba8c22016-08-16 17:57:10 -0700113 DRV_FORMAT_FLEX_IMPLEMENTATION_DEFINED,
114 DRV_FORMAT_FLEX_YCbCr_420_888,
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700115} drv_format_t;
116
117struct driver;
118struct bo;
119
120union bo_handle {
Gurchetan Singhb72badb2016-08-19 16:26:46 -0700121 void *ptr;
122 int32_t s32;
123 uint32_t u32;
124 int64_t s64;
125 uint64_t u64;
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700126};
127
128struct drv_import_fd_data {
Gurchetan Singhb72badb2016-08-19 16:26:46 -0700129 int fds[DRV_MAX_PLANES];
130 uint32_t strides[DRV_MAX_PLANES];
131 uint32_t offsets[DRV_MAX_PLANES];
132 uint32_t sizes[DRV_MAX_PLANES];
Kristian H. Kristensen33459772016-09-16 11:14:16 -0700133 uint64_t format_modifiers[DRV_MAX_PLANES];
Gurchetan Singhb72badb2016-08-19 16:26:46 -0700134 uint32_t width;
135 uint32_t height;
136 drv_format_t format;
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700137};
138
139struct driver *
140drv_create(int fd);
141
142void
143drv_destroy(struct driver *drv);
144
145int
146drv_get_fd(struct driver *drv);
147
148const char *
149drv_get_name(struct driver *drv);
150
151int
152drv_is_format_supported(struct driver *drv, drv_format_t format,
153 uint64_t usage);
154
155struct bo *
156drv_bo_new(struct driver *drv, uint32_t width, uint32_t height,
157 drv_format_t format);
158
159struct bo *
160drv_bo_create(struct driver *drv, uint32_t width, uint32_t height,
161 drv_format_t format, uint64_t flags);
162
163void
164drv_bo_destroy(struct bo *bo);
165
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700166struct bo *
167drv_bo_import(struct driver *drv, struct drv_import_fd_data *data);
168
Gurchetan Singh1a31e602016-10-06 10:58:00 -0700169void *
170drv_bo_map(struct bo *bo, uint32_t x, uint32_t y, uint32_t width,
171 uint32_t height, uint32_t flags, void **map_data, size_t plane);
172
173int
174drv_bo_unmap(struct bo *bo, void *map_data);
175
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700176uint32_t
177drv_bo_get_width(struct bo *bo);
178
179uint32_t
180drv_bo_get_height(struct bo *bo);
181
182uint32_t
183drv_bo_get_stride_or_tiling(struct bo *bo);
184
185size_t
186drv_bo_get_num_planes(struct bo *bo);
187
188union bo_handle
189drv_bo_get_plane_handle(struct bo *bo, size_t plane);
190
191int
192drv_bo_get_plane_fd(struct bo *bo, size_t plane);
193
194uint32_t
195drv_bo_get_plane_offset(struct bo *bo, size_t plane);
196
197uint32_t
198drv_bo_get_plane_size(struct bo *bo, size_t plane);
199
200uint32_t
201drv_bo_get_plane_stride(struct bo *bo, size_t plane);
202
203uint64_t
204drv_bo_get_plane_format_modifier(struct bo *bo, size_t plane);
205
Gurchetan Singhbfba8c22016-08-16 17:57:10 -0700206drv_format_t
Gurchetan Singh2e786ad2016-08-24 18:31:23 -0700207drv_bo_get_format(struct bo *bo);
208
209drv_format_t
Gurchetan Singhbfba8c22016-08-16 17:57:10 -0700210drv_resolve_format(struct driver *drv, drv_format_t format);
211
Gurchetan Singh2e786ad2016-08-24 18:31:23 -0700212int
213drv_stride_from_format(uint32_t format, uint32_t width, size_t plane);
214
215uint32_t
216drv_num_buffers_per_bo(struct bo *bo);
217
Gurchetan Singh46faf6b2016-08-05 14:40:07 -0700218#ifdef __cplusplus
219}
220#endif
221
222#endif