xref: /aosp_15_r20/system/libhidl/libhidlmemory/AshmemMemory.h (revision 8222fbe171c3d6fadfe95119c180cf3010c392a8)
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