singrdk/base/Applications/Runtime/Full/Singularity/Io/PciPort.cs

104 lines
2.3 KiB
C#
Raw Normal View History

2008-11-17 18:29:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
using System;
using Microsoft.Singularity.V1.Services;
namespace Microsoft.Singularity.Io
{
[CLSCompliant(false)]
public sealed class PciPort
{
private PciPortHandle handle;
internal PciPort(PciPortHandle pciPortHandle)
{
this.handle = pciPortHandle;
}
~PciPort()
{
}
public void Write8(int offset, byte value)
{
if (!PciPortHandle.Write8(handle, offset, value)) {
DebugStub.Break();
}
}
public void Write16(int offset, ushort value)
{
if (!PciPortHandle.Write16(handle, offset, value)) {
DebugStub.Break();
}
}
public void Write32(int offset, uint value)
{
if (!PciPortHandle.Write32(handle, offset, value)) {
DebugStub.Break();
}
}
public byte Read8(int offset)
{
return Read8Impl(offset);
}
public ushort Read16(int offset)
{
return Read16Impl(offset);
}
public uint Read32(int offset)
{
return Read32Impl(offset);
}
private unsafe byte Read8Impl(int offset)
{
byte v;
if (PciPortHandle.Read8Impl(handle, offset, &v)) {
return v;
}
else {
DebugStub.Break();
return 0;
}
}
private unsafe ushort Read16Impl(int offset)
{
ushort v;
if (PciPortHandle.Read16Impl(handle, offset, &v)) {
return v;
}
else {
DebugStub.Break();
return 0;
}
}
private unsafe uint Read32Impl(int offset)
{
uint v;
if (PciPortHandle.Read32Impl(handle, offset, &v)) {
return v;
}
else {
DebugStub.Break();
return 0;
}
}
}
}