StorageDevice.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/Devices/BlockDevice.h>
  8. #include <Kernel/Interrupts/IRQHandler.h>
  9. #include <Kernel/Locking/Mutex.h>
  10. #include <Kernel/Storage/Partition/DiskPartition.h>
  11. #include <Kernel/Storage/StorageController.h>
  12. namespace Kernel {
  13. class StorageDevice : public BlockDevice {
  14. friend class StorageManagement;
  15. AK_MAKE_ETERNAL
  16. public:
  17. virtual u64 max_addressable_block() const { return m_max_addressable_block; }
  18. NonnullRefPtr<StorageController> controller() const;
  19. // ^BlockDevice
  20. virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
  21. virtual bool can_read(const FileDescription&, size_t) const override;
  22. virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
  23. virtual bool can_write(const FileDescription&, size_t) const override;
  24. // ^Device
  25. virtual mode_t required_mode() const override { return 0600; }
  26. protected:
  27. StorageDevice(const StorageController&, size_t, u64);
  28. StorageDevice(const StorageController&, int, int, size_t, u64);
  29. // ^DiskDevice
  30. virtual StringView class_name() const override;
  31. private:
  32. NonnullRefPtr<StorageController> m_storage_controller;
  33. NonnullRefPtrVector<DiskPartition> m_partitions;
  34. u64 m_max_addressable_block;
  35. };
  36. }