1*03ce13f7SAndroid Build Coastguard Worker /*
2*03ce13f7SAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*03ce13f7SAndroid Build Coastguard Worker *
4*03ce13f7SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*03ce13f7SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*03ce13f7SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*03ce13f7SAndroid Build Coastguard Worker *
8*03ce13f7SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*03ce13f7SAndroid Build Coastguard Worker *
10*03ce13f7SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*03ce13f7SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*03ce13f7SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*03ce13f7SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*03ce13f7SAndroid Build Coastguard Worker * limitations under the License.
15*03ce13f7SAndroid Build Coastguard Worker */
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker #pragma once
18*03ce13f7SAndroid Build Coastguard Worker
19*03ce13f7SAndroid Build Coastguard Worker #include <hardware/hardware.h>
20*03ce13f7SAndroid Build Coastguard Worker
21*03ce13f7SAndroid Build Coastguard Worker #include <cutils/native_handle.h>
22*03ce13f7SAndroid Build Coastguard Worker
23*03ce13f7SAndroid Build Coastguard Worker #define GRALLOC_MODULE_API_VERSION_1_0 HARDWARE_MAKE_API_VERSION(1, 0)
24*03ce13f7SAndroid Build Coastguard Worker
25*03ce13f7SAndroid Build Coastguard Worker #define GRALLOC_HARDWARE_MODULE_ID "gralloc"
26*03ce13f7SAndroid Build Coastguard Worker
27*03ce13f7SAndroid Build Coastguard Worker enum {
28*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_ERROR_NONE = 0,
29*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_ERROR_BAD_HANDLE = 2,
30*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_ERROR_BAD_VALUE = 3,
31*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_ERROR_UNDEFINED = 6,
32*03ce13f7SAndroid Build Coastguard Worker };
33*03ce13f7SAndroid Build Coastguard Worker
34*03ce13f7SAndroid Build Coastguard Worker enum {
35*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_FUNCTION_LOCK = 18,
36*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_FUNCTION_UNLOCK = 20,
37*03ce13f7SAndroid Build Coastguard Worker };
38*03ce13f7SAndroid Build Coastguard Worker
39*03ce13f7SAndroid Build Coastguard Worker enum {
40*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_CONSUMER_USAGE_CPU_READ = 1ULL << 1,
41*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | GRALLOC1_CONSUMER_USAGE_CPU_READ,
42*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_CONSUMER_USAGE_CPU_WRITE = 1ULL << 5,
43*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_CONSUMER_USAGE_CPU_WRITE_OFTEN = 1ULL << 6 | GRALLOC1_CONSUMER_USAGE_CPU_WRITE,
44*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE = 1ULL << 8,
45*03ce13f7SAndroid Build Coastguard Worker };
46*03ce13f7SAndroid Build Coastguard Worker
47*03ce13f7SAndroid Build Coastguard Worker enum {
48*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_PRODUCER_USAGE_CPU_READ = 1ULL << 1,
49*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | GRALLOC1_PRODUCER_USAGE_CPU_READ,
50*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_PRODUCER_USAGE_CPU_WRITE = 1ULL << 5,
51*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN = 1ULL << 6 | GRALLOC1_PRODUCER_USAGE_CPU_WRITE,
52*03ce13f7SAndroid Build Coastguard Worker GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET = 1ULL << 9,
53*03ce13f7SAndroid Build Coastguard Worker };
54*03ce13f7SAndroid Build Coastguard Worker
55*03ce13f7SAndroid Build Coastguard Worker typedef void (*gralloc1_function_pointer_t)();
56*03ce13f7SAndroid Build Coastguard Worker
57*03ce13f7SAndroid Build Coastguard Worker struct gralloc1_rect_t {
58*03ce13f7SAndroid Build Coastguard Worker int32_t left;
59*03ce13f7SAndroid Build Coastguard Worker int32_t top;
60*03ce13f7SAndroid Build Coastguard Worker int32_t width;
61*03ce13f7SAndroid Build Coastguard Worker int32_t height;
62*03ce13f7SAndroid Build Coastguard Worker };
63*03ce13f7SAndroid Build Coastguard Worker
64*03ce13f7SAndroid Build Coastguard Worker struct gralloc1_device_t {
65*03ce13f7SAndroid Build Coastguard Worker hw_device_t common;
66*03ce13f7SAndroid Build Coastguard Worker void (*getCapabilities)(gralloc1_device_t*, uint32_t*, int32_t*);
67*03ce13f7SAndroid Build Coastguard Worker gralloc1_function_pointer_t (*getFunction)(gralloc1_device_t*, int32_t);
68*03ce13f7SAndroid Build Coastguard Worker };
69*03ce13f7SAndroid Build Coastguard Worker
70*03ce13f7SAndroid Build Coastguard Worker typedef int32_t (*GRALLOC1_PFN_LOCK)(gralloc1_device_t*, buffer_handle_t, uint64_t, uint64_t,
71*03ce13f7SAndroid Build Coastguard Worker const gralloc1_rect_t*, void**, int32_t);
72*03ce13f7SAndroid Build Coastguard Worker typedef int32_t (*GRALLOC1_PFN_UNLOCK)(gralloc1_device_t*, buffer_handle_t, int32_t*);
73*03ce13f7SAndroid Build Coastguard Worker
gralloc1_open(const hw_module_t * module,gralloc1_device_t ** device)74*03ce13f7SAndroid Build Coastguard Worker static inline int gralloc1_open(const hw_module_t* module, gralloc1_device_t** device) {
75*03ce13f7SAndroid Build Coastguard Worker return module->methods->open(module, GRALLOC_HARDWARE_MODULE_ID,
76*03ce13f7SAndroid Build Coastguard Worker reinterpret_cast<hw_device_t**>(device));
77*03ce13f7SAndroid Build Coastguard Worker }
78