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