| // 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 "test_support.h" |
| |
| #include <ddk/driver.h> |
| #include <lib/zx/vmar.h> |
| |
| #include "gtest/gtest.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; |
| } |