10cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen/* 20cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * Copyright (C) 2016 The Android Open Source Project 30cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * 40cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License"); 50cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * you may not use this file except in compliance with the License. 60cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * You may obtain a copy of the License at 70cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * 80cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * http://www.apache.org/licenses/LICENSE-2.0 90cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * 100cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * Unless required by applicable law or agreed to in writing, software 110cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS, 120cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * See the License for the specific language governing permissions and 140cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen * limitations under the License. 150cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen */ 160cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 170cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen#define LOG_TAG "android.hardware.tests.memory@1.0" 180cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 190cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen#include "MemoryTest.h" 200cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 21a4842ace3979643da9d4edd17b32877f6db78f7eMark Salyzyn#include <log/log.h> 22a4842ace3979643da9d4edd17b32877f6db78f7eMark Salyzyn 234e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen#include <hidlmemory/HidlMemoryToken.h> 240cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen#include <hidlmemory/mapping.h> 250cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 260cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen#include <android/hidl/memory/1.0/IMemory.h> 270cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 280cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenenusing android::hidl::memory::V1_0::IMemory; 290cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 300cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace android { 310cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace hardware { 320cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace tests { 330cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace memory { 340cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace V1_0 { 350cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenennamespace implementation { 360cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 370cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen// Methods from ::android::hardware::tests::memory::V1_0::IMemoryTest follow. 386de0aa81a369c6c38792fd863972bf241a377b36Steven MorelandReturn<void> Memory::haveSomeMemory(const hidl_memory& mem, haveSomeMemory_cb _hidl_cb) { 396de0aa81a369c6c38792fd863972bf241a377b36Steven Moreland _hidl_cb(mem); 406de0aa81a369c6c38792fd863972bf241a377b36Steven Moreland return Void(); 416de0aa81a369c6c38792fd863972bf241a377b36Steven Moreland} 426de0aa81a369c6c38792fd863972bf241a377b36Steven Moreland 430cb4a940835824ae4deddd0e1a636c14aa815621Martijn CoenenReturn<void> Memory::fillMemory(const hidl_memory& memory_in, uint8_t filler) { 440cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen sp<IMemory> memory = mapMemory(memory_in); 450cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 460cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen if (memory == nullptr) { 470cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen ALOGE("Could not map hidl_memory"); 480cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen return Void(); 490cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen } 500cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 510cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(memory->getPointer())); 520cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 530cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen memory->update(); 540cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 550cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen for (size_t i = 0; i < memory->getSize(); i++) { 560cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen data[i] = filler; 570cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen } 580cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 590cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen memory->commit(); 600cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 610cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen return Void(); 620cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} 630cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 644e7ccc4cb9a7586f067aeef5a16092be9325e340Howard ChenReturn<void> Memory::haveSomeMemoryBlock(const MemoryBlock& blk, haveSomeMemoryBlock_cb _hidl_cb) { 654e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen _hidl_cb(blk); 664e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen return Void(); 674e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen} 684e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen 694e7ccc4cb9a7586f067aeef5a16092be9325e340Howard ChenReturn<void> Memory::set(const hidl_memory& mem) { 704e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen sp<HidlMemory> hidlMem = HidlMemory::getInstance(mem); 714e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen if (hidlMem->valid()) { 724e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen mSavedMemoryToken = new HidlMemoryToken(hidlMem); 734e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen } 744e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen return Void(); 754e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen} 764e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen 774e7ccc4cb9a7586f067aeef5a16092be9325e340Howard ChenReturn<sp<IMemoryToken>> Memory::get() { 784e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen return mSavedMemoryToken; 794e7ccc4cb9a7586f067aeef5a16092be9325e340Howard Chen} 800cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 810cb4a940835824ae4deddd0e1a636c14aa815621Martijn CoenenIMemoryTest* HIDL_FETCH_IMemoryTest(const char* /* name */) { 820cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen return new Memory(); 830cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} 840cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen 850cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace implementation 860cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace V1_0 870cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace memory 880cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace tests 890cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace hardware 900cb4a940835824ae4deddd0e1a636c14aa815621Martijn Coenen} // namespace android 91