acadia/zion/interrupt/driver_manager.h

25 lines
541 B
C++

#pragma once
#include <glacier/container/hash_map.h>
#include <glacier/memory/ref_ptr.h>
#include "object/port.h"
class DriverManager {
public:
static DriverManager& Get();
DriverManager();
DriverManager(const DriverManager&) = delete;
DriverManager(DriverManager&&) = delete;
void WriteMessage(uint64_t irq_num, IpcMessage&& message);
[[nodiscard]] glcr::ErrorOr<uint8_t> RegisterListener(
glcr::RefPtr<Port> port);
private:
const uint64_t IRQ_OFFSET = 0x60;
glcr::Vector<glcr::RefPtr<Port>> driver_list_;
};