StorageManagement.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 <AK/NonnullRefPtr.h>
  8. #include <AK/NonnullRefPtrVector.h>
  9. #include <AK/Types.h>
  10. #include <Kernel/FileSystem/FileSystem.h>
  11. #include <Kernel/Storage/Partition/DiskPartition.h>
  12. #include <Kernel/Storage/StorageController.h>
  13. #include <Kernel/Storage/StorageDevice.h>
  14. namespace Kernel {
  15. class PartitionTable;
  16. class StorageManagement {
  17. AK_MAKE_ETERNAL;
  18. public:
  19. StorageManagement(String boot_argument, bool force_pio);
  20. static bool initialized();
  21. static void initialize(String boot_argument, bool force_pio);
  22. static StorageManagement& the();
  23. NonnullRefPtr<FileSystem> root_filesystem() const;
  24. static int major_number();
  25. static int minor_number();
  26. private:
  27. bool boot_argument_contains_partition_uuid();
  28. NonnullRefPtrVector<StorageController> enumerate_controllers(bool force_pio) const;
  29. NonnullRefPtrVector<StorageDevice> enumerate_storage_devices() const;
  30. NonnullRefPtrVector<DiskPartition> enumerate_disk_partitions() const;
  31. void determine_boot_device();
  32. void determine_boot_device_with_partition_uuid();
  33. OwnPtr<PartitionTable> try_to_initialize_partition_table(const StorageDevice&) const;
  34. RefPtr<BlockDevice> boot_block_device() const;
  35. String m_boot_argument;
  36. RefPtr<BlockDevice> m_boot_block_device { nullptr };
  37. NonnullRefPtrVector<StorageController> m_controllers;
  38. NonnullRefPtrVector<StorageDevice> m_storage_devices;
  39. NonnullRefPtrVector<DiskPartition> m_disk_partitions;
  40. };
  41. }