SATADiskDevice.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/Interrupts/IRQHandler.h>
  8. #include <Kernel/Locking/Mutex.h>
  9. #include <Kernel/Storage/AHCIPort.h>
  10. #include <Kernel/Storage/StorageDevice.h>
  11. namespace Kernel {
  12. class AHCIController;
  13. class SATADiskDevice final : public StorageDevice {
  14. friend class AHCIController;
  15. public:
  16. enum class InterfaceType : u8 {
  17. SATA,
  18. SATAPI,
  19. };
  20. public:
  21. static NonnullRefPtr<SATADiskDevice> create(const AHCIController&, const AHCIPort&, size_t sector_size, u64 max_addressable_block);
  22. virtual ~SATADiskDevice() override;
  23. // ^StorageDevice
  24. // ^BlockDevice
  25. virtual void start_request(AsyncBlockDeviceRequest&) override;
  26. virtual String device_name() const override;
  27. private:
  28. SATADiskDevice(const AHCIController&, const AHCIPort&, size_t sector_size, u64 max_addressable_block);
  29. // ^DiskDevice
  30. virtual StringView class_name() const override;
  31. NonnullRefPtr<AHCIPort> m_port;
  32. };
  33. }