blob: c0608e5bcd58e82a34604cacf7dde93ad0f52f52 [file] [log] [blame]
// Copyright 2019 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 ZIRCON_SYSTEM_CORE_DEVMGR_DEVHOST_DEVICE_CONTROLLER_CONNECTION_H_
#define ZIRCON_SYSTEM_CORE_DEVMGR_DEVHOST_DEVICE_CONTROLLER_CONNECTION_H_
#include <fbl/ref_ptr.h>
#include <fuchsia/device/manager/llcpp/fidl.h>
#include <fuchsia/io/c/fidl.h>
#include <fuchsia/io/llcpp/fidl.h>
#include <lib/zx/channel.h>
#include "../shared/async-loop-owned-rpc-handler.h"
struct zx_device;
namespace devmgr {
class DeviceControllerConnection
: public AsyncLoopOwnedRpcHandler<DeviceControllerConnection>,
public llcpp::fuchsia::device::manager::DeviceController::Interface,
public llcpp::fuchsia::io::Directory::Interface {
public:
DeviceControllerConnection(fbl::RefPtr<zx_device> dev, zx::channel rpc);
static zx_status_t Create(fbl::RefPtr<zx_device> dev, zx::channel rpc,
std::unique_ptr<DeviceControllerConnection>* conn);
~DeviceControllerConnection();
static void HandleRpc(std::unique_ptr<DeviceControllerConnection> conn,
async_dispatcher_t* dispatcher, async::WaitBase* wait, zx_status_t status,
const zx_packet_signal_t* signal);
zx_status_t HandleRead();
const fbl::RefPtr<zx_device>& dev() const { return dev_; }
private:
// Fidl methods
void BindDriver(::fidl::StringView driver_path, ::zx::vmo driver,
BindDriverCompleter::Sync _completer) override;
void ConnectProxy(::zx::channel shadow, ConnectProxyCompleter::Sync _completer) override;
void RemoveDevice(RemoveDeviceCompleter::Sync _completer) override;
void Suspend(uint32_t flags, SuspendCompleter::Sync _completer) override;
void Resume(uint32_t target_system_state, ResumeCompleter::Sync _completer) override;
void Unbind(UnbindCompleter::Sync _completer) override;
void CompleteRemoval(CompleteRemovalCompleter::Sync _completer) override;
void CompleteCompatibilityTests(llcpp::fuchsia::device::manager::CompatibilityTestStatus status,
CompleteCompatibilityTestsCompleter::Sync _completer) override;
// Io.fidl methods
void Open(uint32_t flags, uint32_t mode, ::fidl::StringView path, ::zx::channel object,
OpenCompleter::Sync _completer) override;
// All methods below are intentionally unimplemented.
void Clone(uint32_t flags, ::zx::channel object, CloneCompleter::Sync _completer) override {}
void Close(CloseCompleter::Sync _completer) override {}
void Describe(DescribeCompleter::Sync _completer) override {}
void GetToken(GetTokenCompleter::Sync _completer) override {}
void Rewind(RewindCompleter::Sync _completer) override {}
void ReadDirents(uint64_t max_bytes, ReadDirentsCompleter::Sync _completer) override {}
void Unlink(::fidl::StringView path, UnlinkCompleter::Sync _completer) override {}
void SetAttr(uint32_t flags, llcpp::fuchsia::io::NodeAttributes attributes,
SetAttrCompleter::Sync _completer) override {}
void Sync(SyncCompleter::Sync _completer) override {}
void GetAttr(GetAttrCompleter::Sync _completer) override {}
void Ioctl(uint32_t opcode, uint64_t max_out, ::fidl::VectorView<::zx::handle> handles,
::fidl::VectorView<uint8_t> in, IoctlCompleter::Sync _completer) override {}
void Rename(::fidl::StringView src, ::zx::handle dst_parent_token, ::fidl::StringView dst,
RenameCompleter::Sync _completer) override {}
void Link(::fidl::StringView src, ::zx::handle dst_parent_token, ::fidl::StringView dst,
LinkCompleter::Sync _completer) override {}
void Watch(uint32_t mask, uint32_t options, ::zx::channel watcher,
WatchCompleter::Sync _completer) override {}
const fbl::RefPtr<zx_device> dev_;
};
struct DevhostRpcReadContext {
const char* path;
DeviceControllerConnection* conn;
};
} // namespace devmgr
#endif // ZIRCON_SYSTEM_CORE_DEVMGR_DEVHOST_DEVICE_CONTROLLER_CONNECTION_H_