mirror of
https://github.com/RGBCube/serenity
synced 2025-05-24 06:05:08 +00:00

The AHCI code doesn't rely on x86 IO at all as it only uses memory mapped IO so we can simply remove the header. We also simply don't use x86 IO in the Intel graphics driver, so we can simply remove the include of the x86 IO header there too. Everything else was a bunch of stale includes to the x86 IO header and are actually not necessary, so let's remove them to make it easier to compile non-x86 Kernel builds.
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2021-2022, Liav A. <liavalb@hotmail.co.il>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/Devices/Device.h>
|
|
#include <Kernel/Interrupts/IRQHandler.h>
|
|
#include <Kernel/Library/LockRefPtr.h>
|
|
#include <Kernel/Locking/Mutex.h>
|
|
#include <Kernel/Memory/PhysicalPage.h>
|
|
#include <Kernel/PhysicalAddress.h>
|
|
#include <Kernel/Random.h>
|
|
#include <Kernel/Sections.h>
|
|
#include <Kernel/Storage/ATA/AHCI/Controller.h>
|
|
#include <Kernel/Storage/ATA/AHCI/Port.h>
|
|
#include <Kernel/Storage/StorageDevice.h>
|
|
#include <Kernel/WaitQueue.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class AsyncBlockDeviceRequest;
|
|
|
|
class AHCIController;
|
|
class AHCIPort;
|
|
class AHCIInterruptHandler final : public IRQHandler {
|
|
friend class AHCIController;
|
|
|
|
public:
|
|
static ErrorOr<NonnullOwnPtr<AHCIInterruptHandler>> create(AHCIController&, u8 irq, AHCI::MaskedBitField taken_ports);
|
|
virtual ~AHCIInterruptHandler() override;
|
|
|
|
virtual StringView purpose() const override { return "SATA IRQ Handler"sv; }
|
|
|
|
bool is_responsible_for_port_index(u32 port_index) const { return m_taken_ports.is_set_at(port_index); }
|
|
|
|
private:
|
|
AHCIInterruptHandler(AHCIController&, u8 irq, AHCI::MaskedBitField taken_ports);
|
|
|
|
void allocate_resources_and_initialize_ports();
|
|
|
|
//^ IRQHandler
|
|
virtual bool handle_irq(RegisterState const&) override;
|
|
|
|
enum class Direction : u8 {
|
|
Read,
|
|
Write,
|
|
};
|
|
|
|
AHCI::MaskedBitField create_pending_ports_interrupts_bitfield() const;
|
|
|
|
// Data members
|
|
NonnullLockRefPtr<AHCIController> m_parent_controller;
|
|
AHCI::MaskedBitField m_taken_ports;
|
|
AHCI::MaskedBitField m_pending_ports_interrupts;
|
|
};
|
|
}
|