1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 19:27:45 +00:00

Kernel: Add PCI helpers to enable and disable the interrupt line

This commit is contained in:
Liav A 2020-02-22 17:15:03 +02:00 committed by Andreas Kling
parent ca05d54b2b
commit 3539666ac9
3 changed files with 87 additions and 69 deletions

View file

@ -117,6 +117,15 @@ ID get_id(Address address)
return PCI::Access::the().get_id(address); return PCI::Access::the().get_id(address);
} }
void enable_interrupt_line(Address address)
{
PCI::Access::the().enable_interrupt_line(address);
}
void disable_interrupt_line(Address address)
{
PCI::Access::the().disable_interrupt_line(address);
}
u8 get_interrupt_line(Address address) u8 get_interrupt_line(Address address)
{ {
return PCI::Access::the().get_interrupt_line(address); return PCI::Access::the().get_interrupt_line(address);
@ -177,7 +186,6 @@ size_t get_BAR_Space_Size(Address address, u8 bar_number)
{ {
return PCI::Access::the().get_BAR_Space_Size(address, bar_number); return PCI::Access::the().get_BAR_Space_Size(address, bar_number);
} }
} }
} }

View file

@ -56,6 +56,14 @@ public:
return space_size; return space_size;
} }
virtual ID get_id(Address address) final; virtual ID get_id(Address address) final;
virtual void enable_interrupt_line(Address address) final
{
write16_field(address, PCI_COMMAND, read16_field(address, PCI_COMMAND) & ~(1 << 10));
}
virtual void disable_interrupt_line(Address address) final
{
write16_field(address, PCI_COMMAND, read16_field(address, PCI_COMMAND) | 1 << 10);
}
virtual u8 get_revision_id(Address address) { return read8_field(address, PCI_REVISION_ID); } virtual u8 get_revision_id(Address address) { return read8_field(address, PCI_REVISION_ID); }
virtual u8 get_subclass(Address address) { return read8_field(address, PCI_SUBCLASS); } virtual u8 get_subclass(Address address) { return read8_field(address, PCI_SUBCLASS); }
virtual u8 get_class(Address address) { return read8_field(address, PCI_CLASS); } virtual u8 get_class(Address address) { return read8_field(address, PCI_CLASS); }

View file

@ -165,6 +165,8 @@ struct ChangeableAddress : public Address {
ID get_id(PCI::Address); ID get_id(PCI::Address);
void enumerate_all(Function<void(Address, ID)> callback); void enumerate_all(Function<void(Address, ID)> callback);
void enable_interrupt_line(Address);
void disable_interrupt_line(Address);
u8 get_interrupt_line(Address); u8 get_interrupt_line(Address);
u32 get_BAR0(Address); u32 get_BAR0(Address);
u32 get_BAR1(Address); u32 get_BAR1(Address);