summaryrefslogtreecommitdiff
path: root/Kernel/Devices/DiskDevice.cpp
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-04-03 12:36:40 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-04-03 12:36:40 +0200
commitab43658c5537c03d075f8abc57fe90e940023779 (patch)
tree01bd0f73784dd42372dd8a8f065a3a8c6b3d9858 /Kernel/Devices/DiskDevice.cpp
parent072ea7eece8607efec8e2824307b0a6209e4d014 (diff)
downloadserenity-ab43658c5537c03d075f8abc57fe90e940023779.zip
Kernel: Move devices into Kernel/Devices/.
Diffstat (limited to 'Kernel/Devices/DiskDevice.cpp')
-rw-r--r--Kernel/Devices/DiskDevice.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/Kernel/Devices/DiskDevice.cpp b/Kernel/Devices/DiskDevice.cpp
new file mode 100644
index 0000000000..3c2b210641
--- /dev/null
+++ b/Kernel/Devices/DiskDevice.cpp
@@ -0,0 +1,42 @@
+#include <Kernel/Devices/DiskDevice.h>
+
+DiskDevice::DiskDevice()
+{
+}
+
+DiskDevice::~DiskDevice()
+{
+}
+
+bool DiskDevice::read(DiskOffset offset, unsigned length, byte* out) const
+{
+ ASSERT((offset % block_size()) == 0);
+ ASSERT((length % block_size()) == 0);
+ dword first_block = offset / block_size();
+ dword end_block = (offset + length) / block_size();
+ byte* outptr = out;
+ for (unsigned bi = first_block; bi < end_block; ++bi) {
+ if (!read_block(bi, outptr))
+ return false;
+ outptr += block_size();
+ }
+ return true;
+}
+
+bool DiskDevice::write(DiskOffset offset, unsigned length, const byte* in)
+{
+ ASSERT((offset % block_size()) == 0);
+ ASSERT((length % block_size()) == 0);
+ dword first_block = offset / block_size();
+ dword end_block = (offset + length) / block_size();
+ ASSERT(first_block <= 0xffffffff);
+ ASSERT(end_block <= 0xffffffff);
+ const byte* inptr = in;
+ for (unsigned bi = first_block; bi < end_block; ++bi) {
+ if (!write_block(bi, inptr))
+ return false;
+ inptr += block_size();
+ }
+ return true;
+}
+