diff options
Diffstat (limited to 'arch/x86_64/src/devices')
| -rw-r--r-- | arch/x86_64/src/devices/init.cpp | 39 | ||||
| -rw-r--r-- | arch/x86_64/src/devices/local_apic.cpp | 28 |
2 files changed, 67 insertions, 0 deletions
diff --git a/arch/x86_64/src/devices/init.cpp b/arch/x86_64/src/devices/init.cpp new file mode 100644 index 0000000..6cba986 --- /dev/null +++ b/arch/x86_64/src/devices/init.cpp @@ -0,0 +1,39 @@ +#include "arch/devices/init.hpp" + +#include "kapi/devices.hpp" + +#include "arch/bus/isa.hpp" +#include "arch/devices/legacy_pit.hpp" + +#include <kstd/memory> +#include <kstd/print> + +#include <cstdint> +#include <utility> + +namespace arch::devices +{ + + namespace + { + constexpr auto pit_frequency_in_hz = std::uint32_t{100u}; + } + + auto init_acpi_devices() -> void {} + + auto init_legacy_devices() -> void + { + kstd::println("[x86_64:DEV] Initializing ISA bus..."); + + auto isa_major_number = kapi::devices::allocate_major_number(); + auto isa_bus = kstd::make_unique<arch::bus::isa>(isa_major_number); + + auto pit_major_number = kapi::devices::allocate_major_number(); + auto pit = kstd::make_unique<arch::devices::legacy_pit>(pit_major_number, pit_frequency_in_hz); + isa_bus->add_child(std::move(pit)); + + auto & root_bus = kapi::devices::get_root_bus(); + root_bus.add_child(std::move(isa_bus)); + } + +} // namespace arch::devices diff --git a/arch/x86_64/src/devices/local_apic.cpp b/arch/x86_64/src/devices/local_apic.cpp new file mode 100644 index 0000000..beb75ef --- /dev/null +++ b/arch/x86_64/src/devices/local_apic.cpp @@ -0,0 +1,28 @@ +#include "arch/devices/local_apic.hpp" + +#include "kapi/devices.hpp" +#include "kapi/memory.hpp" + +#include <kstd/print> + +#include <cstddef> +#include <cstdint> + +namespace arch::devices +{ + + local_apic::local_apic(std::size_t major, std::size_t minor, std::uint64_t hardware_id, + kapi::memory::physical_address base) + : kapi::devices::device{major, minor, "lapic"} + , m_hardware_id{hardware_id} + , m_base{base} + {} + + auto local_apic::init() -> bool + { + kstd::println("[x86_64:DEV] Initializing local APIC on core {}", m_hardware_id); + + return true; + } + +} // namespace arch::devices
\ No newline at end of file |
