blob: 82def50c1400db3a0bef99e1982fb7ac59fd1e11 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <ddk/driver.h>
#include <zx/vmar.h>
#include "gtest/gtest.h"
#include "test_support.h"
static zx_device_t* g_parent_device;
TestSupport::FirmwareFile::~FirmwareFile() {
if (ptr)
zx::vmar::root_self()->unmap((uintptr_t)ptr, size);
}
zx_device_t* TestSupport::parent_device() { return g_parent_device; }
void TestSupport::set_parent_device(zx_device_t* handle) {
g_parent_device = handle;
}
void TestSupport::RunAllTests() {
const int kArgc = 1;
const char* argv[kArgc] = {"test_support"};
testing::InitGoogleTest(const_cast<int*>(&kArgc), const_cast<char**>(argv));
(void)RUN_ALL_TESTS();
}
std::unique_ptr<TestSupport::FirmwareFile> TestSupport::LoadFirmwareFile(
const char* name) {
auto firmware_file = std::make_unique<FirmwareFile>();
zx::vmo test_file;
size_t test_file_size;
zx_status_t status =
load_firmware(TestSupport::parent_device(), name,
test_file.reset_and_get_address(), &test_file_size);
if (status != ZX_OK)
return nullptr;
uint64_t ptr;
status = zx::vmar::root_self()->map(0, test_file, 0, test_file_size,
ZX_VM_PERM_READ, &ptr);
if (status != ZX_OK)
return nullptr;
firmware_file->vmo = std::move(test_file);
firmware_file->size = test_file_size;
firmware_file->ptr = (uint8_t*)ptr;
return firmware_file;
}