• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 Arm Limited. All rights reserved.
3  *
4  * Copyright 2016 The Android Open Source Project
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #include "GrallocMapper.h"
19 #include "hidl_common/BufferDescriptor.h"
20 #include "hidl_common/MapperMetadata.h"
21 
22 #include "allocator/mali_gralloc_ion.h"
23 
24 namespace arm
25 {
26 namespace mapper
27 {
28 
29 using android::hardware::graphics::mapper::V4_0::Error;
30 using android::hardware::graphics::mapper::V4_0::BufferDescriptor;
31 using android::hardware::graphics::mapper::V4_0::IMapper;
32 using android::hardware::Return;
33 using android::hardware::hidl_handle;
34 using android::hardware::hidl_vec;
35 using android::hardware::Void;
36 
37 
GrallocMapper()38 GrallocMapper::GrallocMapper() {}
39 
~GrallocMapper()40 GrallocMapper::~GrallocMapper() {}
41 
createDescriptor(const BufferDescriptorInfo & descriptorInfo,createDescriptor_cb hidl_cb)42 Return<void> GrallocMapper::createDescriptor(const BufferDescriptorInfo &descriptorInfo, createDescriptor_cb hidl_cb)
43 {
44 	if (common::validateDescriptorInfo(descriptorInfo))
45 	{
46 		hidl_cb(Error::NONE, common::grallocEncodeBufferDescriptor<uint8_t>(descriptorInfo));
47 	}
48 	else
49 	{
50 		MALI_GRALLOC_LOGE("Invalid attributes to create descriptor for Mapper 3.0");
51 		hidl_cb(Error::BAD_VALUE, BufferDescriptor());
52 	}
53 
54 	return Void();
55 }
56 
importBuffer(const hidl_handle & rawHandle,importBuffer_cb hidl_cb)57 Return<void> GrallocMapper::importBuffer(const hidl_handle &rawHandle, importBuffer_cb hidl_cb)
58 {
59 	common::importBuffer(rawHandle, hidl_cb);
60 	return Void();
61 }
62 
freeBuffer(void * buffer)63 Return<Error> GrallocMapper::freeBuffer(void *buffer)
64 {
65 	return common::freeBuffer(buffer);
66 }
67 
validateBufferSize(void * buffer,const BufferDescriptorInfo & descriptorInfo,uint32_t in_stride)68 Return<Error> GrallocMapper::validateBufferSize(void *buffer, const BufferDescriptorInfo &descriptorInfo,
69                                                 uint32_t in_stride)
70 {
71 	/* All Gralloc allocated buffers must be conform to local descriptor validation */
72 	if (!common::validateDescriptorInfo<BufferDescriptorInfo>(descriptorInfo))
73 	{
74 		MALI_GRALLOC_LOGE("Invalid descriptor attributes for validating buffer size");
75 		return Error::BAD_VALUE;
76 	}
77 	return common::validateBufferSize(buffer, descriptorInfo, in_stride);
78 }
79 
lock(void * buffer,uint64_t cpuUsage,const IMapper::Rect & accessRegion,const hidl_handle & acquireFence,lock_cb hidl_cb)80 Return<void> GrallocMapper::lock(void *buffer, uint64_t cpuUsage, const IMapper::Rect &accessRegion,
81                                  const hidl_handle &acquireFence, lock_cb hidl_cb)
82 {
83 	common::lock(buffer, cpuUsage, accessRegion, acquireFence, hidl_cb);
84 	return Void();
85 }
86 
unlock(void * buffer,unlock_cb hidl_cb)87 Return<void> GrallocMapper::unlock(void *buffer, unlock_cb hidl_cb)
88 {
89 	common::unlock(buffer, hidl_cb);
90 	return Void();
91 }
92 
flushLockedBuffer(void * buffer,flushLockedBuffer_cb hidl_cb)93 Return<void> GrallocMapper::flushLockedBuffer(void *buffer, flushLockedBuffer_cb hidl_cb)
94 {
95 	common::flushLockedBuffer(buffer, hidl_cb);
96 	return Void();
97 }
98 
rereadLockedBuffer(void * buffer)99 Return<Error> GrallocMapper::rereadLockedBuffer(void *buffer)
100 {
101 	return common::rereadLockedBuffer(buffer);
102 }
103 
get(void * buffer,const MetadataType & metadataType,IMapper::get_cb hidl_cb)104 Return<void> GrallocMapper::get(void *buffer, const MetadataType &metadataType, IMapper::get_cb hidl_cb)
105 {
106 	common::get(buffer, metadataType, hidl_cb);
107 	return Void();
108 }
109 
set(void * buffer,const MetadataType & metadataType,const hidl_vec<uint8_t> & metadata)110 Return<Error> GrallocMapper::set(void *buffer, const MetadataType &metadataType, const hidl_vec<uint8_t> &metadata)
111 {
112 	return common::set(buffer, metadataType, metadata);
113 }
114 
getFromBufferDescriptorInfo(const BufferDescriptorInfo & description,const MetadataType & metadataType,getFromBufferDescriptorInfo_cb hidl_cb)115 Return<void> GrallocMapper::getFromBufferDescriptorInfo(const BufferDescriptorInfo &description,
116                                                         const MetadataType &metadataType,
117                                                         getFromBufferDescriptorInfo_cb hidl_cb)
118 {
119 	common::getFromBufferDescriptorInfo(description, metadataType, hidl_cb);
120 	return Void();
121 }
122 
getTransportSize(void * buffer,getTransportSize_cb hidl_cb)123 Return<void> GrallocMapper::getTransportSize(void *buffer, getTransportSize_cb hidl_cb)
124 {
125 	common::getTransportSize(buffer, hidl_cb);
126 	return Void();
127 }
128 
isSupported(const IMapper::BufferDescriptorInfo & description,isSupported_cb hidl_cb)129 Return<void> GrallocMapper::isSupported(const IMapper::BufferDescriptorInfo &description, isSupported_cb hidl_cb)
130 {
131 	if (!common::validateDescriptorInfo<BufferDescriptorInfo>(description))
132 	{
133 		MALI_GRALLOC_LOGE("Invalid descriptor attributes for validating buffer size");
134 		hidl_cb(Error::BAD_VALUE, false);
135 	}
136 	common::isSupported(description, hidl_cb);
137 	return Void();
138 }
139 
listSupportedMetadataTypes(listSupportedMetadataTypes_cb hidl_cb)140 Return<void> GrallocMapper::listSupportedMetadataTypes(listSupportedMetadataTypes_cb hidl_cb)
141 {
142 	common::listSupportedMetadataTypes(hidl_cb);
143 	return Void();
144 }
145 
dumpBuffer(void * buffer,dumpBuffer_cb hidl_cb)146 Return<void> GrallocMapper::dumpBuffer(void *buffer, dumpBuffer_cb hidl_cb)
147 {
148 	common::dumpBuffer(buffer, hidl_cb);
149 	return Void();
150 }
151 
dumpBuffers(dumpBuffers_cb hidl_cb)152 Return<void> GrallocMapper::dumpBuffers(dumpBuffers_cb hidl_cb)
153 {
154 	common::dumpBuffers(hidl_cb);
155 	return Void();
156 }
157 
getReservedRegion(void * buffer,getReservedRegion_cb hidl_cb)158 Return<void> GrallocMapper::getReservedRegion(void *buffer, getReservedRegion_cb hidl_cb)
159 {
160 	common::getReservedRegion(buffer, hidl_cb);
161 	return Void();
162 }
163 
164 } // namespace mapper
165 } // namespace arm
166 
HIDL_FETCH_IMapper(const char *)167 extern "C" IMapper *HIDL_FETCH_IMapper(const char * /* name */)
168 {
169 	MALI_GRALLOC_LOGV("Arm Module IMapper %d.%d , pid = %d", GRALLOC_VERSION_MAJOR,
170 	                  (HIDL_MAPPER_VERSION_SCALED - (GRALLOC_VERSION_MAJOR * 100)) / 10, getpid());
171 
172 	return new arm::mapper::GrallocMapper();
173 }
174