Serenity Operating System
at master 37 lines 1.1 kB view raw
1/* 2 * Copyright (c) 2020-2022, 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 <AK/Types.h> 11#include <Kernel/Library/LockRefPtr.h> 12#include <Kernel/Storage/ATA/ATAController.h> 13#include <Kernel/Storage/StorageDevice.h> 14 15namespace Kernel { 16 17class AsyncBlockDeviceRequest; 18class IDEChannel; 19class IDEController : public ATAController { 20public: 21 static NonnullLockRefPtr<IDEController> initialize(); 22 virtual ~IDEController() override; 23 24 virtual LockRefPtr<StorageDevice> device(u32 index) const override final; 25 virtual bool reset() override final; 26 virtual bool shutdown() override final; 27 virtual size_t devices_count() const override final; 28 virtual void start_request(ATADevice const&, AsyncBlockDeviceRequest&) override final; 29 virtual void complete_current_request(AsyncDeviceRequest::RequestResult) override final; 30 31protected: 32 IDEController(); 33 34 LockRefPtr<StorageDevice> device_by_channel_and_position(u32 index) const; 35 Vector<NonnullLockRefPtr<IDEChannel>> m_channels; 36}; 37}