// 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 "fake-ddk.h" #include #include #include namespace fake_ddk { zx_device_t* kFakeDevice = reinterpret_cast(0x55); zx_device_t* kFakeParent = reinterpret_cast(0xaa); Bind* Bind::instance_ = nullptr; Bind::Bind() { ZX_ASSERT(!instance_); instance_ = this; } zx_status_t Bind::DeviceAdd(zx_driver_t* drv, zx_device_t* parent, device_add_args_t* args, zx_device_t** out) { if (parent != kFakeParent) { bad_parent_ = true; } *out = kFakeDevice; add_called_ = true; return ZX_OK; } zx_status_t Bind::DeviceRemove(zx_device_t* device) { if (device != kFakeDevice) { bad_device_ = true; } remove_called_ = true; return ZX_OK; } zx_status_t Bind::DeviceAddMetadata(zx_device_t* device, uint32_t type, const void* data, size_t length) { if (device != kFakeDevice) { bad_device_ = true; } add_metadata_called_ = true; return ZX_OK; } void Bind::DeviceMakeVisible(zx_device_t* device) { if (device != kFakeDevice) { bad_device_ = true; } make_visible_called_ = true; return; } bool Bind::Ok() { BEGIN_HELPER; EXPECT_TRUE(add_called_); EXPECT_TRUE(remove_called_); EXPECT_FALSE(bad_parent_); EXPECT_FALSE(bad_device_); END_HELPER; } } // namespace fake_ddk zx_status_t device_add_from_driver(zx_driver_t* drv, zx_device_t* parent, device_add_args_t* args, zx_device_t** out) { if (!fake_ddk::Bind::Instance()) { return ZX_OK; } return fake_ddk::Bind::Instance()->DeviceAdd(drv, parent, args, out); } zx_status_t device_remove(zx_device_t* device) { if (!fake_ddk::Bind::Instance()) { return ZX_OK; } return fake_ddk::Bind::Instance()->DeviceRemove(device); } zx_status_t device_add_metadata(zx_device_t* device, uint32_t type, const void* data, size_t length) { if (!fake_ddk::Bind::Instance()) { return ZX_OK; } return fake_ddk::Bind::Instance()->DeviceAddMetadata(device, type, data, length); } void device_make_visible(zx_device_t* device) { if (fake_ddk::Bind::Instance()) { fake_ddk::Bind::Instance()->DeviceMakeVisible(device); } return; } zx_driver_rec __zircon_driver_rec__ = {};