Add PCI Bar utility functions.
This commit is contained in:
parent
36bb159941
commit
3093623f18
|
@ -67,6 +67,9 @@ pciid_t GetDeviceId(uint32_t devaddr);
|
||||||
pcitype_t GetDeviceType(uint32_t devaddr);
|
pcitype_t GetDeviceType(uint32_t devaddr);
|
||||||
uint32_t SearchForDevice(pcifind_t pcifind);
|
uint32_t SearchForDevice(pcifind_t pcifind);
|
||||||
addr_t ParseDevBar0(uint32_t devaddr);
|
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 PCI
|
||||||
} // namespace Sortix
|
} // 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()
|
void Init()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue