1/*
2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef HI_GBM_H
17#define HI_GBM_H
18#include <cstdint>
19
20namespace OHOS {
21namespace HDI {
22namespace DISPLAY {
23struct gbm_device;
24struct gbm_bo;
25
26enum gbm_bo_flags {
27    /* *
28     * Buffer is going to be presented to the screen using an API such as KMS
29     */
30    GBM_BO_USE_SCANOUT = (1 << 0),
31    /* *
32     * Buffer is going to be used as cursor
33     */
34    GBM_BO_USE_CURSOR = (1 << 1),
35    /* *
36     * Deprecated
37     */
38    GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR,
39    /* *
40     * Buffer is to be used for rendering - for example it is going to be used
41     * as the storage for a color buffer
42     */
43    GBM_BO_USE_RENDERING = (1 << 2),
44    /* *
45     * Deprecated
46     */
47    GBM_BO_USE_WRITE = (1 << 3),
48    /* *
49     * Buffer is guaranteed to be laid out linearly in memory. That is, the
50     * buffer is laid out as an array with 'height' blocks, each block with
51     * length 'stride'. Each stride is in the same order as the rows of the
52     * buffer. This is intended to be used with buffers that will be accessed
53     * via dma-buf mmap().
54     */
55    GBM_BO_USE_LINEAR = (1 << 4),
56    /* *
57     * The buffer will be used as a texture that will be sampled from.
58     */
59    GBM_BO_USE_TEXTURING = (1 << 5),
60    /* *
61     * The buffer will be written to by a camera subsystem.
62     */
63    GBM_BO_USE_CAMERA_WRITE = (1 << 6),
64    /* *
65     * The buffer will be read from by a camera subsystem.
66     */
67    GBM_BO_USE_CAMERA_READ = (1 << 7),
68    /* *
69     * Buffer inaccessible to unprivileged users.
70     */
71    GBM_BO_USE_PROTECTED = (1 << 8),
72    /* *
73     * These flags specify the frequency of software access. These flags do not
74     * guarantee the buffer is linear, but do guarantee gbm_bo_map(..) will
75     * present a linear view.
76     */
77    GBM_BO_USE_SW_READ_OFTEN = (1 << 9),
78    GBM_BO_USE_SW_READ_RARELY = (1 << 10),
79    GBM_BO_USE_SW_WRITE_OFTEN = (1 << 11),
80    GBM_BO_USE_SW_WRITE_RARELY = (1 << 12),
81    /* *
82     * The buffer will be written by a video decode accelerator.
83     */
84    GBM_BO_USE_HW_VIDEO_DECODER = (1 << 13),
85};
86
87struct gbm_device *HdiGbmCreateDevice(int fd);
88void HdiGbmDeviceDestroy(struct gbm_device *gbm);
89struct gbm_bo *HdiGbmBoCreate(struct gbm_device *gbm, uint32_t width, uint32_t height,
90    uint32_t format, uint32_t usage);
91uint32_t HdiGbmBoGetStride(struct gbm_bo *bo);
92uint32_t HdiGbmBoGetWidth(struct gbm_bo *bo);
93uint32_t HdiGbmBoGetHeight(struct gbm_bo *bo);
94uint32_t HdiGbmBoGetSize(struct gbm_bo *bo);
95void HdiGbmBoDestroy(struct gbm_bo *bo);
96int HdiGbmBoGetFd(struct gbm_bo *bo);
97} // namespace DISPLAY
98} // namespace HDI
99} // namespace OHOS
100#endif // HI_GBM_H
101