// 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 #include #include #include #include #include #include #include #include namespace devmgr_integration_test { const char* IsolatedDevmgr::kSysdevDriver = "/boot/driver/test/sysdev.so"; devmgr_launcher::Args IsolatedDevmgr::DefaultArgs() { devmgr_launcher::Args args; args.sys_device_driver = kSysdevDriver; args.load_drivers.push_back("/boot/driver/test.so"); args.driver_search_paths.push_back("/boot/driver/test"); return args; } IsolatedDevmgr::~IsolatedDevmgr() { // Destroy the isolated devmgr if (job_.is_valid()) { job_.kill(); } } zx_status_t IsolatedDevmgr::Create(devmgr_launcher::Args args, fbl::unique_ptr* out) { auto devmgr = fbl::make_unique(); zx::channel devfs; zx_status_t status = devmgr_launcher::Launch(std::move(args), &devmgr->job_, &devfs); if (status != ZX_OK) { return status; } int fd; zx_handle_t devfs_handles[] = { devfs.release(), }; uint32_t devfs_types[fbl::count_of(devfs_handles)] = { PA_FDIO_REMOTE, }; status = fdio_create_fd(devfs_handles, devfs_types, fbl::count_of(devfs_handles), &fd); if (status != ZX_OK) { return status; } devmgr->devfs_root_.reset(fd); *out = std::move(devmgr); return ZX_OK; } } // namespace devmgr_integration_test