Newer
Older
minerva / Kernel / Firmware / DeviceTree / Management.h
@minerva minerva on 13 Jul 849 bytes Initial commit
/*
 * Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <AK/HashMap.h>
#include <Kernel/Firmware/DeviceTree/Driver.h>
#include <Libraries/LibDeviceTree/DeviceTree.h>

namespace Kernel::DeviceTree {

class Management {
public:
    static void initialize();
    static Management& the();

    static ErrorOr<void> register_driver(NonnullOwnPtr<DeviceTree::Driver>&&);

    ErrorOr<void> scan_node_for_devices(::DeviceTree::Node const& node);

    ErrorOr<void> probe_drivers(Driver::ProbeStage);

private:
    static bool attach_device_to_driver(Device&, Driver const&, StringView compatible_entry);

    Vector<NonnullOwnPtr<Driver>> m_drivers;
    HashMap<StringView, Driver*> m_driver_by_compatible_string;

    HashMap<::DeviceTree::Node const*, Device> m_devices;
};

}