Cosmos/source/Cosmos.HAL/PCIDeviceNormal.cs
2014-12-06 13:36:57 +01:00

53 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Cosmos.HAL
{
public class PCIDeviceNormal : PCIDevice
{
public PCIBaseAddressBar[] BaseAddresses { get; private set; }
public uint CardbusCISPointer { get; private set; }
public ushort SubsystemVendorID { get; private set; }
public ushort SubsystemID { get; private set; }
public uint ExpansionROMBaseAddress { get; private set; }
public byte CapabilitiesPointer { get; private set; }
public byte MinGrant { get; private set; }
public byte MaxLatency { get; private set; }
public PCIDeviceNormal(uint bus, uint slot, uint function)
: base(bus, slot, function)
{
BaseAddresses = new PCIBaseAddressBar[6];
BaseAddresses[0] = new PCIBaseAddressBar(ReadRegister32(0x10));
BaseAddresses[1] = new PCIBaseAddressBar(ReadRegister32(0x14));
BaseAddresses[2] = new PCIBaseAddressBar(ReadRegister32(0x18));
BaseAddresses[3] = new PCIBaseAddressBar(ReadRegister32(0x1C));
BaseAddresses[4] = new PCIBaseAddressBar(ReadRegister32(0x20));
BaseAddresses[5] = new PCIBaseAddressBar(ReadRegister32(0x24));
CardbusCISPointer = ReadRegister32(0x28);
SubsystemVendorID = ReadRegister16(0x2C);
SubsystemID = ReadRegister16(0x2E);
ExpansionROMBaseAddress = ReadRegister32(0x30);
CapabilitiesPointer = ReadRegister8(0x34);
MinGrant = ReadRegister8(0x3E);
MaxLatency = ReadRegister8(0x3F);
}
public void EnableDevice()
{
Command |= PCICommand.Master | PCICommand.IO | PCICommand.Memory;
}
}
}