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:
parent
ca05d54b2b
commit
3539666ac9
3 changed files with 87 additions and 69 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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); }
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue