blob: 4c309b5d772ed9343d6c738063d063f5e26b2515 [file] [log] [blame]
// Copyright 2021 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.
#ifndef SRC_DEVICES_BIN_DRIVER_HOST_PROXY_DEVICE_H_
#define SRC_DEVICES_BIN_DRIVER_HOST_PROXY_DEVICE_H_
#include <fidl/fuchsia.io/cpp/wire.h>
#include <lib/ddk/driver.h>
#include <lib/fidl/llcpp/channel.h>
#include "src/devices/bin/driver_host/zx_device.h"
// Modifies |device| to have the appropriate protocol_id, ctx, and ops tables
// for a proxy device
void InitializeProxyDevice(const fbl::RefPtr<zx_device>& device,
fidl::ClientEnd<fuchsia_io::Directory> incoming_dir);
// Returns a zx_driver instance for proxy devices
fbl::RefPtr<zx_driver> GetProxyDriver(DriverHostContext* ctx);
class ProxyDevice : public fbl::RefCounted<ProxyDevice> {
public:
explicit ProxyDevice(fbl::RefPtr<zx_device> device) : device_(std::move(device)) {}
~ProxyDevice() = default;
zx::status<> ConnectToProtocol(const char* protocol, zx::channel request);
private:
fbl::RefPtr<zx_device> device_;
};
#endif // SRC_DEVICES_BIN_DRIVER_HOST_PROXY_DEVICE_H_