/* * Copyright (c) 2020-2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Kernel { class AsyncBlockDeviceRequest; class IDEChannel; class IDEController : public ATAController { public: static NonnullLockRefPtr initialize(); virtual ~IDEController() override; virtual LockRefPtr device(u32 index) const override final; virtual bool reset() override final; virtual bool shutdown() override final; virtual size_t devices_count() const override final; virtual void start_request(ATADevice const&, AsyncBlockDeviceRequest&) override final; virtual void complete_current_request(AsyncDeviceRequest::RequestResult) override final; protected: IDEController(); LockRefPtr device_by_channel_and_position(u32 index) const; NonnullLockRefPtrVector m_channels; }; }