NeKernel dev
Loading...
Searching...
No Matches
IO.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
9#include <ArchKit/ArchKit.h>
10#include <NeKit/Array.h>
11#include <NeKit/Config.h>
12#include <NeKit/Ref.h>
13
14namespace Kernel {
15template <SizeT Sz>
16class IOArray final {
17 public:
18 IOArray() = delete;
19
20 IOArray(nullPtr) = delete;
21
22 explicit IOArray(Array<UShort, Sz>& ports) : fPorts(ports) {}
23
25
26 IOArray& operator=(const IOArray&) = default;
27
28 IOArray(const IOArray&) = default;
29
30 operator bool() { return !fPorts.Empty(); }
31
32 public:
33 template <typename T>
34 T In(SizeT index);
35
36 template <typename T>
37 void Out(SizeT index, T value);
38
39 private:
41};
42
43inline constexpr UInt16 kMaxPorts = 16;
44
46
47template <SizeT Sz>
50
51 for (UShort i = 0; i < Sz; ++i) {
52 ports[i] = base + i;
53 }
54
55 return ports;
56}
57} // namespace Kernel
58
59#ifdef __NE_AMD64__
61#else
62#error Please provide platform specific code for the I/O
63#endif // ifdef __NE_AMD64__
Definition Array.h:15
Definition IO.h:16
IOArray & operator=(const IOArray &)=default
IOArray()=delete
IOArray(nullPtr)=delete
Array< UShort, Sz > fPorts
Definition IO.h:40
T In(SizeT index)
Definition IOArray+AMD64.inl:18
IOArray(Array< UShort, Sz > &ports)
Definition IO.h:22
void Out(SizeT index, T value)
Definition IOArray+AMD64.inl:35
IOArray(const IOArray &)=default
~IOArray()
Definition IO.h:24
UPS inline definitions.
Definition Device.h:12
__UINT16_TYPE__ UInt16
Definition Config.h:40
constexpr UInt16 kMaxPorts
Definition IO.h:43
__SIZE_TYPE__ SizeT
Definition Config.h:60
decltype(nullptr) nullPtr
Definition Config.h:34
IOArray< kMaxPorts > IOArray16
Definition IO.h:45
__UINT16_TYPE__ UShort
Definition Config.h:39
Array< UShort, Sz > make_ports(UShort base)
Definition IO.h:48