aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/devices')
-rw-r--r--kernel/devices/include/devices/block_device.hpp4
-rw-r--r--kernel/devices/include/devices/device.hpp12
-rw-r--r--kernel/devices/src/block_device.cpp5
-rw-r--r--kernel/devices/src/device.cpp9
-rw-r--r--kernel/devices/src/storage/ram_disk/ram_disk_device.cpp16
5 files changed, 38 insertions, 8 deletions
diff --git a/kernel/devices/include/devices/block_device.hpp b/kernel/devices/include/devices/block_device.hpp
index 9bca53f..a2c849f 100644
--- a/kernel/devices/include/devices/block_device.hpp
+++ b/kernel/devices/include/devices/block_device.hpp
@@ -4,6 +4,7 @@
#include "devices/device.hpp"
#include <cstddef>
+#include <string_view>
namespace devices
{
@@ -16,9 +17,10 @@ namespace devices
* @brief Create a block device descriptor.
* @param major Device major number.
* @param minor Device minor number.
+ * @param name Device name.
* @param block_size Size of one logical block in bytes.
*/
- block_device(size_t major, size_t minor, size_t block_size);
+ block_device(size_t major, size_t minor, std::string_view name, size_t block_size);
/**
* @brief Virtual destructor for block device.
diff --git a/kernel/devices/include/devices/device.hpp b/kernel/devices/include/devices/device.hpp
index 7f9f9e1..d1c202d 100644
--- a/kernel/devices/include/devices/device.hpp
+++ b/kernel/devices/include/devices/device.hpp
@@ -2,6 +2,7 @@
#define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
#include <cstddef>
+#include <string_view>
namespace devices
{
@@ -14,8 +15,9 @@ namespace devices
* @brief Create a device identifier from @p major and @p minor.
* @param major Device major number.
* @param minor Device minor number.
+ * @param name Device name.
*/
- device(size_t major, size_t minor);
+ device(size_t major, size_t minor, std::string_view name);
/**
* @brief Virtual destructor for device.
@@ -35,6 +37,12 @@ namespace devices
auto minor() const -> size_t;
/**
+ * @brief Returns the name of the device.
+ * @return Device name.
+ */
+ auto name() const -> std::string_view;
+
+ /**
* @brief Check if the device is a block device.
* @return true if this device is a block device, false otherwise.
*/
@@ -46,7 +54,7 @@ namespace devices
private:
size_t m_major;
size_t m_minor;
- // TODO BA-FS26 add name
+ std::string_view m_name;
};
} // namespace devices
diff --git a/kernel/devices/src/block_device.cpp b/kernel/devices/src/block_device.cpp
index 2f0c2ca..40f842a 100644
--- a/kernel/devices/src/block_device.cpp
+++ b/kernel/devices/src/block_device.cpp
@@ -5,11 +5,12 @@
#include "devices/device.hpp"
#include <cstddef>
+#include <string_view>
namespace devices
{
- block_device::block_device(size_t major, size_t minor, size_t block_size)
- : device(major, minor)
+ block_device::block_device(size_t major, size_t minor, std::string_view name, size_t block_size)
+ : device(major, minor, name)
, m_block_size(block_size)
{
if (m_block_size == 0)
diff --git a/kernel/devices/src/device.cpp b/kernel/devices/src/device.cpp
index aa5c1bb..8184321 100644
--- a/kernel/devices/src/device.cpp
+++ b/kernel/devices/src/device.cpp
@@ -1,12 +1,14 @@
#include "devices/device.hpp"
#include <cstddef>
+#include <string_view>
namespace devices
{
- device::device(size_t major, size_t minor)
+ device::device(size_t major, size_t minor, std::string_view name)
: m_major(major)
, m_minor(minor)
+ , m_name(name)
{}
auto device::major() const -> size_t
@@ -18,4 +20,9 @@ namespace devices
{
return m_minor;
}
+
+ auto device::name() const -> std::string_view
+ {
+ return m_name;
+ }
} // namespace devices \ No newline at end of file
diff --git a/kernel/devices/src/storage/ram_disk/ram_disk_device.cpp b/kernel/devices/src/storage/ram_disk/ram_disk_device.cpp
index 3bd3967..8e9988d 100644
--- a/kernel/devices/src/storage/ram_disk/ram_disk_device.cpp
+++ b/kernel/devices/src/storage/ram_disk/ram_disk_device.cpp
@@ -7,21 +7,33 @@
#include <kstd/cstring>
+#include <array>
#include <cstddef>
+#include <string_view>
namespace devices::storage::ram_disk
{
namespace
{
constexpr size_t RAM_DISK_BLOCK_SIZE = 512uz; // TODO BA-FS26 really correct / good??
+
+ // TODO BA-FS26 @Felix
+ // TODO BA-FS26 currently only names for 9 minor devices
+ constinit std::array<char, 5> NAME = {'r', 'a', 'm', '0', '\0'};
+
+ auto determine_device_name(size_t minor) -> std::string_view
+ {
+ NAME[3] = '0' + minor;
+ return std::string_view{NAME};
+ }
} // namespace
ram_disk_device::ram_disk_device() // TODO BA-FS26 remove when kstd::vector is available
- : block_device(0, 0, RAM_DISK_BLOCK_SIZE)
+ : block_device(0, 0, determine_device_name(0), RAM_DISK_BLOCK_SIZE)
{}
ram_disk_device::ram_disk_device(kapi::boot_modules::boot_module const & module, size_t major, size_t minor)
- : block_device(major, minor, RAM_DISK_BLOCK_SIZE)
+ : block_device(major, minor, determine_device_name(minor), RAM_DISK_BLOCK_SIZE)
, m_boot_module(module)
{}