mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 13:30:31 +00:00
Kernel/AHCI: Add a boot argument to force AHCI to operate on IRQ 11
As a compromise, if the fimrware decided to set the IRQ line to be 7, or something else we can't deal with, the user can simply force the code to work with IRQ 11, with the boot argument "force_ahci_irq_11" being set to "on".
This commit is contained in:
parent
36a82188a8
commit
cfc2f33dcb
Notes:
sideshowbarker
2024-07-18 21:11:42 +09:00
Author: https://github.com/supercomputer7 Commit: https://github.com/SerenityOS/serenity/commit/cfc2f33dcba Pull-request: https://github.com/SerenityOS/serenity/pull/5865 Reviewed-by: https://github.com/bgianfo Reviewed-by: https://github.com/tomuta
3 changed files with 13 additions and 0 deletions
|
@ -113,6 +113,11 @@ UNMAP_AFTER_INIT bool CommandLine::is_mmio_enabled() const
|
|||
return lookup("pci_mmio").value_or("off") == "on";
|
||||
}
|
||||
|
||||
UNMAP_AFTER_INIT bool CommandLine::is_forcing_irq_11_for_ahci() const
|
||||
{
|
||||
return lookup("force_ahci_irq_11").value_or("off") == "on";
|
||||
}
|
||||
|
||||
UNMAP_AFTER_INIT bool CommandLine::is_legacy_time_enabled() const
|
||||
{
|
||||
return lookup("time").value_or("modern") == "legacy";
|
||||
|
|
|
@ -73,6 +73,7 @@ public:
|
|||
[[nodiscard]] bool is_vmmouse_enabled() const;
|
||||
[[nodiscard]] bool is_mmio_enabled() const;
|
||||
[[nodiscard]] bool is_legacy_time_enabled() const;
|
||||
[[nodiscard]] bool is_forcing_irq_11_for_ahci() const;
|
||||
[[nodiscard]] bool is_text_mode() const;
|
||||
[[nodiscard]] bool is_force_pio() const;
|
||||
[[nodiscard]] AcpiFeatureLevel acpi_feature_level() const;
|
||||
|
|
|
@ -172,6 +172,13 @@ void AHCIController::initialize()
|
|||
hba().control_regs.ghc = 0x80000000; // Ensure that HBA knows we are AHCI aware.
|
||||
PCI::enable_interrupt_line(pci_address());
|
||||
PCI::enable_bus_mastering(pci_address());
|
||||
|
||||
// FIXME: This is a hack for VMWare (and possibly other hardware) that set
|
||||
// the IRQ line to 7 or other weird value. Find a better way to set this
|
||||
// with balancing IRQ sharing in mind.
|
||||
if (kernel_command_line().is_forcing_irq_11_for_ahci())
|
||||
PCI::set_interrupt_line(pci_address(), 11);
|
||||
|
||||
enable_global_interrupts();
|
||||
m_handlers.append(AHCIPortHandler::create(*this, PCI::get_interrupt_line(pci_address()),
|
||||
AHCI::MaskedBitField((volatile u32&)(hba().control_regs.pi))));
|
||||
|
|
Loading…
Reference in a new issue