Newer
Older
minerva / Kernel / Devices / Storage / VirtIO / VirtIOBlockController.h
@minerva minerva on 13 Jul 887 bytes Initial commit
/*
 * Copyright (c) 2023, Kirill Nikolaev <cyril7@gmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <Kernel/Bus/PCI/API.h>
#include <Kernel/Bus/PCI/Device.h>
#include <Kernel/Devices/Storage/StorageController.h>

namespace Kernel {

class VirtIOBlockDevice;

class VirtIOBlockController : public StorageController {
public:
    VirtIOBlockController();

    static bool is_handled(PCI::DeviceIdentifier const& device_identifier);
    ErrorOr<void> add_device(PCI::DeviceIdentifier const& device_identifier);

    // ^StorageController
    virtual LockRefPtr<StorageDevice> device(u32 index) const override;
    virtual size_t devices_count() const override { return m_devices.size(); }

protected:
    virtual void complete_current_request(AsyncDeviceRequest::RequestResult) override;

private:
    Vector<LockRefPtr<VirtIOBlockDevice>> m_devices;
};

}