mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Add PCI Bar utility functions.
This commit is contained in:
parent
36bb159941
commit
3093623f18
2 changed files with 25 additions and 0 deletions
|
@ -67,6 +67,9 @@ pciid_t GetDeviceId(uint32_t devaddr);
|
|||
pcitype_t GetDeviceType(uint32_t devaddr);
|
||||
uint32_t SearchForDevice(pcifind_t pcifind);
|
||||
addr_t ParseDevBar0(uint32_t devaddr);
|
||||
bool IsIOSpaceBar(uint32_t devaddr, uint8_t bar);
|
||||
bool Is64BitBar(uint32_t devaddr, uint8_t bar);
|
||||
uint64_t GetPCIBAR(uint32_t devaddr, uint8_t bar);
|
||||
|
||||
} // namespace PCI
|
||||
} // namespace Sortix
|
||||
|
|
|
@ -186,6 +186,28 @@ addr_t ParseDevBar0(uint32_t devaddr)
|
|||
}
|
||||
}
|
||||
|
||||
bool IsIOSpaceBar(uint32_t devaddr, uint8_t bar)
|
||||
{
|
||||
uint32_t val = PCI::Read32(devaddr, 0x10 + 4 * bar);
|
||||
return val & 0x1;
|
||||
}
|
||||
|
||||
bool Is64BitBar(uint32_t devaddr, uint8_t bar)
|
||||
{
|
||||
uint32_t val = PCI::Read32(devaddr, 0x10 + 4 * bar);
|
||||
return (val & 0x3 << 1) == 0x2 << 1;
|
||||
}
|
||||
|
||||
uint64_t GetPCIBAR(uint32_t devaddr, uint8_t bar)
|
||||
{
|
||||
uint64_t low = PCI::Read32(devaddr, 0x10 + 4 * (bar+0));
|
||||
if ( (low & (0x3 << 1)) != (0x2 << 1) )
|
||||
return low & 0xFFFFFFF0ULL;
|
||||
uint64_t high = PCI::Read32(devaddr, 0x10 + 4 * (bar+1));
|
||||
return (low & 0xFFFFFFF0ULL) | high << 32ULL;
|
||||
}
|
||||
|
||||
|
||||
void Init()
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue