blob: 118eacebbfff6221fc527b5b0ec0188d18a15c2a [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_SUSPEND_DRIVERS_AML_SUSPEND_AML_SUSPEND_H_
#define SRC_DEVICES_SUSPEND_DRIVERS_AML_SUSPEND_AML_SUSPEND_H_
#include <fidl/fuchsia.hardware.suspend/cpp/fidl.h>
#include <lib/driver/component/cpp/driver_base.h>
#include <lib/driver/devfs/cpp/connector.h>
#include <lib/inspect/component/cpp/component.h>
#include <lib/inspect/contrib/cpp/bounded_list_node.h>
#include <lib/inspect/cpp/inspect.h>
#include "lib/fdf/cpp/dispatcher.h"
namespace suspend {
class AmlSuspend : public fdf::DriverBase,
public fidl::WireServer<fuchsia_hardware_suspend::Suspender> {
public:
AmlSuspend(fdf::DriverStartArgs start_args, fdf::UnownedSynchronizedDispatcher dispatcher);
zx::result<> Start() override;
void PrepareStop(fdf::PrepareStopCompleter completer) override;
void Stop() override;
void handle_unknown_method(
fidl::UnknownMethodMetadata<fuchsia_hardware_suspend::Suspender> metadata,
fidl::UnknownMethodCompleter::Sync& completer) override {
FDF_LOG(ERROR, "Unexpected suspend FIDL call: 0x%lx", metadata.method_ordinal);
}
void GetSuspendStates(GetSuspendStatesCompleter::Sync& completer) override;
void Suspend(SuspendRequestView request, SuspendCompleter::Sync& completer) override;
protected:
virtual zx::result<zx::resource> GetCpuResource();
virtual zx_status_t SystemSuspendEnter(zx_time_t resume_deadline);
private:
void Serve(fidl::ServerEnd<fuchsia_hardware_suspend::Suspender> request);
zx::result<> CreateDevfsNode();
inspect::contrib::BoundedListNode inspect_events_;
fidl::ServerBindingGroup<fuchsia_hardware_suspend::Suspender> suspend_bindings_;
fidl::WireSyncClient<fuchsia_driver_framework::Node> parent_;
fidl::WireSyncClient<fuchsia_driver_framework::NodeController> controller_;
driver_devfs::Connector<fuchsia_hardware_suspend::Suspender> devfs_connector_;
zx::resource cpu_resource_;
};
} // namespace suspend
#endif // SRC_DEVICES_SUSPEND_DRIVERS_AML_SUSPEND_AML_SUSPEND_H_