From 83d870e58457a1d335a1d9b9966a6a1887cc297b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 24 Nov 2025 03:02:43 +0100 Subject: feat! breaking changes on kernel sources. Signed-off-by: Amlal El Mahrouss --- src/kernel/KernelKit/PCI/IO.h | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/kernel/KernelKit/PCI/IO.h (limited to 'src/kernel/KernelKit/PCI/IO.h') diff --git a/src/kernel/KernelKit/PCI/IO.h b/src/kernel/KernelKit/PCI/IO.h new file mode 100644 index 00000000..2ab72269 --- /dev/null +++ b/src/kernel/KernelKit/PCI/IO.h @@ -0,0 +1,63 @@ +/* ======================================== + + Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#pragma once + +#include +#include +#include +#include + +namespace Kernel { +template +class IOArray final { + public: + IOArray() = delete; + + IOArray(nullPtr) = delete; + + explicit IOArray(Array& ports) : fPorts(ports) {} + + ~IOArray() {} + + IOArray& operator=(const IOArray&) = default; + + IOArray(const IOArray&) = default; + + operator bool() { return !fPorts.Empty(); } + + public: + template + T In(SizeT index); + + template + void Out(SizeT index, T value); + + private: + Array fPorts; +}; + +inline constexpr UInt16 kMaxPorts = 16; + +using IOArray16 = IOArray; + +template +inline Array make_ports(UShort base) { + Array ports; + + for (UShort i = 0; i < Sz; ++i) { + ports[i] = base + i; + } + + return ports; +} +} // namespace Kernel + +#ifdef __NE_AMD64__ +#include +#else +#error Please provide platform specific code for the I/O +#endif // ifdef __NE_AMD64__ -- cgit v1.2.3