Add PCI Bar utility functions.

This commit is contained in:
Jonas 'Sortie' Termansen 2013-05-27 20:25:36 +02:00
parent 36bb159941
commit 3093623f18
2 changed files with 25 additions and 0 deletions

View File

@ -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

View File

@ -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()
{
}