mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
75 lines
2.6 KiB
C#
75 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Cosmos.HAL
|
|
{
|
|
public class PCIDeviceBridge : PCIDevice
|
|
{
|
|
public PCIBaseAddressBar[] BaseAddresses { get; private set; }
|
|
|
|
public byte PrimaryBusNumber { get; private set; }
|
|
public byte SecondaryBusNumber { get; private set; }
|
|
public byte SubordinateBusNumber { get; private set; }
|
|
public byte SecondaryLatencyTimer { get; private set; }
|
|
|
|
public byte IOBase { get; private set; }
|
|
public byte IOLimit { get; private set; }
|
|
public ushort SecondaryStatus { get; private set; }
|
|
|
|
public ushort MemoryBase { get; private set; }
|
|
public ushort MemoryLimit { get; private set; }
|
|
|
|
public ushort PrefatchableMemoryBase { get; private set; }
|
|
public ushort PrefatchableMemoryLimit { get; private set; }
|
|
|
|
public uint PrefatchableBaseUpper32 { get; private set; }
|
|
|
|
public uint PrefatchableLimitUpper32 { get; private set; }
|
|
|
|
public ushort IOBaseUpper16 { get; private set; }
|
|
public ushort IOLimitUpper16 { get; private set; }
|
|
|
|
public byte CapabilityPointer { get; private set; }
|
|
|
|
public uint ExpansionROMBaseAddress { get; private set; }
|
|
|
|
public ushort BridgeControl { get; private set; }
|
|
|
|
public PCIDeviceBridge(uint bus, uint slot, uint function)
|
|
: base(bus, slot, function)
|
|
{
|
|
BaseAddresses = new PCIBaseAddressBar[2];
|
|
BaseAddresses[0] = new PCIBaseAddressBar(ReadRegister32(0x10));
|
|
BaseAddresses[1] = new PCIBaseAddressBar(ReadRegister32(0x14));
|
|
|
|
PrimaryBusNumber = ReadRegister8(0x18);
|
|
SecondaryBusNumber = ReadRegister8(0x19);
|
|
SubordinateBusNumber = ReadRegister8(0x1A);
|
|
SecondaryLatencyTimer = ReadRegister8(0x1B);
|
|
|
|
IOBase = ReadRegister8(0x1C);
|
|
IOLimit = ReadRegister8(0x1D);
|
|
SecondaryStatus = ReadRegister16(0x1E);
|
|
|
|
MemoryBase = ReadRegister16(0x20);
|
|
MemoryLimit = ReadRegister16(0x22);
|
|
|
|
PrefatchableMemoryBase = ReadRegister16(0x24);
|
|
PrefatchableMemoryLimit = ReadRegister16(0x26);
|
|
|
|
PrefatchableBaseUpper32 = ReadRegister32(0x28);
|
|
PrefatchableLimitUpper32 = ReadRegister32(0x2C);
|
|
|
|
IOBaseUpper16 = ReadRegister16(0x30);
|
|
IOLimitUpper16 = ReadRegister16(0x32);
|
|
|
|
CapabilityPointer = ReadRegister8(0x34);
|
|
|
|
ExpansionROMBaseAddress = ReadRegister32(0x38);
|
|
|
|
BridgeControl = ReadRegister16(0x3E);
|
|
}
|
|
}
|
|
}
|