Serenity Operating System
at master 48 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/OwnPtr.h> 10#include <Kernel/Bus/PCI/Access.h> 11#include <Kernel/Bus/PCI/Device.h> 12#include <Kernel/Devices/Device.h> 13#include <Kernel/Library/LockRefPtr.h> 14#include <Kernel/Locking/Mutex.h> 15#include <Kernel/Memory/PhysicalPage.h> 16#include <Kernel/PhysicalAddress.h> 17#include <Kernel/Random.h> 18#include <Kernel/WaitQueue.h> 19 20namespace Kernel { 21 22class AsyncBlockDeviceRequest; 23class StorageDevice; 24class StorageController : public AtomicRefCounted<StorageController> { 25 26public: 27 virtual ~StorageController() = default; 28 29 virtual LockRefPtr<StorageDevice> device(u32 index) const = 0; 30 virtual size_t devices_count() const = 0; 31 32 u32 controller_id() const { return m_controller_id; } 33 u32 hardware_relative_controller_id() const { return m_hardware_relative_controller_id; } 34 35protected: 36 virtual bool reset() = 0; 37 virtual bool shutdown() = 0; 38 39 virtual void complete_current_request(AsyncDeviceRequest::RequestResult) = 0; 40 41 explicit StorageController(u32 hardware_relative_controller_id); 42 43private: 44 u32 const m_controller_id { 0 }; 45 46 u32 const m_hardware_relative_controller_id { 0 }; 47}; 48}