104 lines
2.3 KiB
C#
104 lines
2.3 KiB
C#
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// 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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|