You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.5 KiB
103 lines
4.5 KiB
// Copyright 2018 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "MockAndroidVmOperations.h"
|
|
#include "HostAddressSpace.h"
|
|
#include "host-common/HostmemIdMapping.h"
|
|
|
|
using android::HostAddressSpaceDevice;
|
|
|
|
static bool sSkipSnapshotSave = false;
|
|
|
|
static const QAndroidVmOperations sQAndroidVmOperations = {
|
|
.vmStop = []() -> bool {
|
|
return android::MockAndroidVmOperations::mock->vmStop();
|
|
},
|
|
.vmStart = []() -> bool {
|
|
return android::MockAndroidVmOperations::mock->vmStart();
|
|
},
|
|
.vmReset = nullptr, // Not currently mocked.
|
|
.vmShutdown = nullptr, // Not currently mocked.
|
|
.vmPause = nullptr, // Not currently mocked.
|
|
.vmResume = nullptr, // Not currently mocked.
|
|
.vmIsRunning = nullptr, // Not currently mocked.
|
|
.snapshotList = nullptr, // Not currently mocked.
|
|
.snapshotSave = [](const char* name,
|
|
void* opaque,
|
|
LineConsumerCallback errConsumer) -> bool {
|
|
return android::MockAndroidVmOperations::mock->snapshotSave(
|
|
name, opaque, errConsumer);
|
|
},
|
|
.snapshotLoad = [](const char* name,
|
|
void* opaque,
|
|
LineConsumerCallback errConsumer) -> bool {
|
|
return android::MockAndroidVmOperations::mock->snapshotLoad(
|
|
name, opaque, errConsumer);
|
|
},
|
|
.snapshotDelete = nullptr, // Not currently mocked.
|
|
.snapshotRemap = [](bool shared,
|
|
void* opaque,
|
|
LineConsumerCallback errConsumer) -> bool {
|
|
return android::MockAndroidVmOperations::mock->snapshotRemap(
|
|
shared, opaque, errConsumer);
|
|
},
|
|
.snapshotExport = [](const char* snapshot,
|
|
const char* dest,
|
|
void* opaque,
|
|
LineConsumerCallback errConsumer) -> bool {
|
|
return android::MockAndroidVmOperations::mock->snapshotExport(
|
|
snapshot, dest, opaque, errConsumer);
|
|
},
|
|
.setSnapshotCallbacks =
|
|
[](void* opaque, const SnapshotCallbacks* callbacks) {
|
|
return android::MockAndroidVmOperations::mock
|
|
->setSnapshotCallbacks(opaque, callbacks);
|
|
},
|
|
.mapUserBackedRam =
|
|
[](uint64_t gpa, void* hva, uint64_t size) {
|
|
HostAddressSpaceDevice::get()->setHostAddrByPhysAddr(gpa,
|
|
hva);
|
|
},
|
|
.unmapUserBackedRam =
|
|
[](uint64_t gpa, uint64_t size) {
|
|
HostAddressSpaceDevice::get()->unsetHostAddrByPhysAddr(gpa);
|
|
},
|
|
.getVmConfiguration = nullptr, // Not currently mocked.
|
|
.setFailureReason = nullptr, // Not currently mocked.
|
|
.setExiting = nullptr, // Not currently mocked.
|
|
.allowRealAudio = nullptr, // Not currently mocked.
|
|
.physicalMemoryGetAddr =
|
|
[](uint64_t gpa) {
|
|
void* res = HostAddressSpaceDevice::get()->getHostAddr(gpa);
|
|
if (!res)
|
|
return (void*)(uintptr_t)gpa;
|
|
return res;
|
|
},
|
|
.isRealAudioAllowed = nullptr, // Not currently mocked.
|
|
.setSkipSnapshotSave = [](bool skip) { sSkipSnapshotSave = skip; },
|
|
.isSnapshotSaveSkipped = []() -> bool { return sSkipSnapshotSave; },
|
|
.hostmemRegister = android_emulation_hostmem_register,
|
|
.hostmemUnregister = android_emulation_hostmem_unregister,
|
|
.hostmemGetInfo = android_emulation_hostmem_get_info,
|
|
};
|
|
|
|
extern "C" const QAndroidVmOperations* const gMockQAndroidVmOperations =
|
|
&sQAndroidVmOperations;
|
|
|
|
namespace android {
|
|
|
|
MockAndroidVmOperations* MockAndroidVmOperations::mock = nullptr;
|
|
|
|
} // namespace android
|