summaryrefslogtreecommitdiff
path: root/cros_gralloc/cros_gralloc_helpers.h
blob: 0d79f92213c112131b76c30a1c69c98a20d6e256 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 * Copyright 2016 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef CROS_GRALLOC_HELPERS_H
#define CROS_GRALLOC_HELPERS_H

#include "../drv.h"
#include "cros_gralloc_handle.h"

#include <hardware/gralloc.h>
#include <system/graphics.h>

/* Use these error codes derived from gralloc1 to make transition easier when
 * it happens
 */
typedef enum {
	CROS_GRALLOC_ERROR_NONE = 0,
	CROS_GRALLOC_ERROR_BAD_DESCRIPTOR = 1,
	CROS_GRALLOC_ERROR_BAD_HANDLE = 2,
	CROS_GRALLOC_ERROR_BAD_VALUE = 3,
	CROS_GRALLOC_ERROR_NOT_SHARED = 4,
	CROS_GRALLOC_ERROR_NO_RESOURCES = 5,
	CROS_GRALLOC_ERROR_UNDEFINED = 6,
	CROS_GRALLOC_ERROR_UNSUPPORTED = 7,
} cros_gralloc_error_t;

/* This enumeration must match the one in <gralloc_drm.h>.
 * The functions supported by this gralloc's temporary private API are listed
 * below. Use of these functions is highly discouraged and should only be
 * reserved for cases where no alternative to get same information (such as
 * querying ANativeWindow) exists.
 */
// clang-format off
enum {
	GRALLOC_DRM_GET_STRIDE,
	GRALLOC_DRM_GET_FORMAT,
	GRALLOC_DRM_GET_DIMENSIONS,
	GRALLOC_DRM_GET_BACKING_STORE,
};
// clang-format on

constexpr uint32_t cros_gralloc_magic(void)
{
	return 0xABCDDCBA;
}

constexpr uint32_t num_ints_handle()
{
	return ((sizeof(struct cros_gralloc_handle)) / sizeof(int));
}

constexpr uint32_t sw_access(void)
{
	return GRALLOC_USAGE_SW_READ_MASK | GRALLOC_USAGE_SW_WRITE_MASK;
}

constexpr uint32_t sw_read(void)
{
	return GRALLOC_USAGE_SW_READ_MASK;
}

constexpr uint32_t sw_write(void)
{
	return GRALLOC_USAGE_SW_WRITE_MASK;
}

uint64_t cros_gralloc_convert_flags(int flags);

uint32_t cros_gralloc_convert_format(int format);

int32_t cros_gralloc_rendernode_open(struct driver **drv);

int32_t cros_gralloc_validate_handle(struct cros_gralloc_handle *hnd);

/* Logging code adapted from bsdrm */
__attribute__((format(printf, 4, 5))) void cros_gralloc_log(const char *prefix, const char *file,
							    int line, const char *format, ...);

#define cros_gralloc_error(...)                                                                    \
	do {                                                                                       \
		cros_gralloc_log("CROS_GRALLOC_ERROR", __FILE__, __LINE__, __VA_ARGS__);           \
	} while (0)

#endif