blob: 37009b25d7ef09a09772c0813ad13f28a4ce67fd [file] [log] [blame]
// Copyright 2024 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_BLOCK_DRIVERS_RAMDISK_V2_RAMDISK_CONTROLLER_H_
#define SRC_DEVICES_BLOCK_DRIVERS_RAMDISK_V2_RAMDISK_CONTROLLER_H_
#include <fidl/fuchsia.driver.framework/cpp/natural_messaging.h>
#include <fidl/fuchsia.hardware.ramdisk/cpp/wire.h>
#include <lib/async/cpp/wait.h>
#include <lib/driver/component/cpp/driver_base.h>
#include <memory>
namespace ramdisk_v2 {
class Ramdisk;
class RamdiskController : public fdf::DriverBase,
public fidl::WireServer<fuchsia_hardware_ramdisk::Controller> {
public:
RamdiskController(fdf::DriverStartArgs start_args,
fdf::UnownedSynchronizedDispatcher driver_dispatcher);
zx::result<> Start() override;
using fdf::DriverBase::outgoing;
private:
// FIDL Interface Controller.
void Create(CreateRequestView request, CreateCompleter::Sync& completer) override;
void handle_unknown_method(
fidl::UnknownMethodMetadata<fuchsia_hardware_ramdisk::Controller> metadata,
fidl::UnknownMethodCompleter::Sync& completer) override {}
fidl::SharedClient<fuchsia_driver_framework::Node> node_client_;
std::unordered_map<int, std::pair<std::unique_ptr<Ramdisk>, std::unique_ptr<async::WaitOnce>>>
ramdisks_;
};
} // namespace ramdisk_v2
#endif // SRC_DEVICES_BLOCK_DRIVERS_RAMDISK_V2_RAMDISK_CONTROLLER_H_