blob: 8fec7f1ab16174cf59397fc91c70a20d7df4f440 [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 SRC_DEVICES_DRIVER_HOST_DEVICE_CONTROLLER_CONNECTION_H_
#define SRC_DEVICES_DRIVER_HOST_DEVICE_CONTROLLER_CONNECTION_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 <fbl/ref_ptr.h>
#include "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,
zx::channel coordinator_rpc);
static zx_status_t Create(fbl::RefPtr<zx_device> dev, zx::channel rpc,
zx::channel coordinator_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 Init(InitCompleter::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 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 // SRC_DEVICES_DRIVER_HOST_DEVICE_CONTROLLER_CONNECTION_H_