Cosmos/source/Cosmos.HAL2/PCIDeviceBridge.cs

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);
}
}
}