1*8222fbe1SAndroid Build Coastguard Worker /* 2*8222fbe1SAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project 3*8222fbe1SAndroid Build Coastguard Worker * 4*8222fbe1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*8222fbe1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*8222fbe1SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*8222fbe1SAndroid Build Coastguard Worker * 8*8222fbe1SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*8222fbe1SAndroid Build Coastguard Worker * 10*8222fbe1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*8222fbe1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*8222fbe1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*8222fbe1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*8222fbe1SAndroid Build Coastguard Worker * limitations under the License. 15*8222fbe1SAndroid Build Coastguard Worker */ 16*8222fbe1SAndroid Build Coastguard Worker #pragma once 17*8222fbe1SAndroid Build Coastguard Worker 18*8222fbe1SAndroid Build Coastguard Worker #include <android/hidl/memory/1.0/IMemory.h> 19*8222fbe1SAndroid Build Coastguard Worker #include <hidl/Status.h> 20*8222fbe1SAndroid Build Coastguard Worker #include <inttypes.h> 21*8222fbe1SAndroid Build Coastguard Worker #include <log/log.h> 22*8222fbe1SAndroid Build Coastguard Worker #include <sys/mman.h> 23*8222fbe1SAndroid Build Coastguard Worker 24*8222fbe1SAndroid Build Coastguard Worker namespace android { 25*8222fbe1SAndroid Build Coastguard Worker namespace hardware { 26*8222fbe1SAndroid Build Coastguard Worker namespace impl { 27*8222fbe1SAndroid Build Coastguard Worker 28*8222fbe1SAndroid Build Coastguard Worker using ::android::sp; 29*8222fbe1SAndroid Build Coastguard Worker using ::android::hardware::hidl_memory; 30*8222fbe1SAndroid Build Coastguard Worker using ::android::hardware::Return; 31*8222fbe1SAndroid Build Coastguard Worker using ::android::hardware::Void; 32*8222fbe1SAndroid Build Coastguard Worker using ::android::hidl::memory::V1_0::IMemory; 33*8222fbe1SAndroid Build Coastguard Worker 34*8222fbe1SAndroid Build Coastguard Worker struct AshmemMemory : public IMemory { AshmemMemoryAshmemMemory35*8222fbe1SAndroid Build Coastguard Worker AshmemMemory(const hidl_memory& memory, void* data) : mMemory(memory), mData(data) {} 36*8222fbe1SAndroid Build Coastguard Worker ~AshmemMemoryAshmemMemory37*8222fbe1SAndroid Build Coastguard Worker ~AshmemMemory() { munmap(mData, mMemory.size()); } 38*8222fbe1SAndroid Build Coastguard Worker 39*8222fbe1SAndroid Build Coastguard Worker // Methods from ::android::hidl::memory::V1_0::IMemory follow. getPointerAshmemMemory40*8222fbe1SAndroid Build Coastguard Worker Return<void*> getPointer() override { return mData; } getSizeAshmemMemory41*8222fbe1SAndroid Build Coastguard Worker Return<uint64_t> getSize() override { return mMemory.size(); } 42*8222fbe1SAndroid Build Coastguard Worker // NOOPs (since non0remoted memory) updateAshmemMemory43*8222fbe1SAndroid Build Coastguard Worker Return<void> update() override { return Void(); } updateRangeAshmemMemory44*8222fbe1SAndroid Build Coastguard Worker Return<void> updateRange(uint64_t /*start*/, uint64_t /*length*/) override { return Void(); } readAshmemMemory45*8222fbe1SAndroid Build Coastguard Worker Return<void> read() override { return Void(); } readRangeAshmemMemory46*8222fbe1SAndroid Build Coastguard Worker Return<void> readRange(uint64_t /*start*/, uint64_t /*length*/) override { return Void(); } commitAshmemMemory47*8222fbe1SAndroid Build Coastguard Worker Return<void> commit() override { return Void(); } 48*8222fbe1SAndroid Build Coastguard Worker 49*8222fbe1SAndroid Build Coastguard Worker private: 50*8222fbe1SAndroid Build Coastguard Worker // Holding onto hidl_memory reference because it contains 51*8222fbe1SAndroid Build Coastguard Worker // handle and size, and handle will also be required for 52*8222fbe1SAndroid Build Coastguard Worker // the remoted case. 53*8222fbe1SAndroid Build Coastguard Worker hidl_memory mMemory; 54*8222fbe1SAndroid Build Coastguard Worker 55*8222fbe1SAndroid Build Coastguard Worker // Mapped memory in process. 56*8222fbe1SAndroid Build Coastguard Worker void* mData; 57*8222fbe1SAndroid Build Coastguard Worker }; 58*8222fbe1SAndroid Build Coastguard Worker 59*8222fbe1SAndroid Build Coastguard Worker } // namespace impl 60*8222fbe1SAndroid Build Coastguard Worker } // namespace hardware 61*8222fbe1SAndroid Build Coastguard Worker } // namespace android 62