Kernel: Clear AHCI pending interrupts
I have no idea why I did not have this in. All devices were just constatly spamming interrupts like crazy :D
This commit is contained in:
parent
1941885cfd
commit
a6fc3cf7a6
|
@ -77,7 +77,9 @@ namespace Kernel
|
|||
{
|
||||
auto& abar_mem = *(volatile HBAGeneralMemorySpace*)m_abar->vaddr();
|
||||
|
||||
uint32_t is = abar_mem.is;
|
||||
const uint32_t is = abar_mem.is;
|
||||
abar_mem.is = is;
|
||||
|
||||
for (uint8_t i = 0; i < 32; i++)
|
||||
{
|
||||
if (is & (1 << i))
|
||||
|
@ -88,8 +90,6 @@ namespace Kernel
|
|||
dwarnln("ignoring interrupt to device {}", i);
|
||||
}
|
||||
}
|
||||
|
||||
abar_mem.is = is;
|
||||
}
|
||||
|
||||
BAN::Optional<AHCIPortType> AHCIController::check_port_type(volatile HBAPortMemorySpace& port)
|
||||
|
|
|
@ -149,8 +149,12 @@ namespace Kernel
|
|||
|
||||
void AHCIDevice::handle_irq()
|
||||
{
|
||||
uint16_t err = m_port->serr & 0xFFFF;
|
||||
if (err)
|
||||
const uint32_t is = m_port->is;
|
||||
m_port->is = is;
|
||||
|
||||
const uint32_t serr = m_port->serr;
|
||||
m_port->serr = serr;
|
||||
if (auto err = serr & 0xFFFF)
|
||||
print_error(err);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue