104 lines
3.6 KiB
C#
104 lines
3.6 KiB
C#
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity - Singularity ABI
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: PciPortHandle.cs
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
namespace Microsoft.Singularity.V1.Services
|
||
|
{
|
||
|
public struct PciPortHandle
|
||
|
{
|
||
|
public readonly UIntPtr id;
|
||
|
|
||
|
public static unsafe bool Read8(PciPortHandle handle,
|
||
|
int offset,
|
||
|
out byte value)
|
||
|
{
|
||
|
unsafe {
|
||
|
fixed (byte *valuePtr = &value) {
|
||
|
return Read8Impl(handle, offset, valuePtr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static unsafe bool Read16(PciPortHandle handle,
|
||
|
int offset,
|
||
|
out ushort value)
|
||
|
{
|
||
|
unsafe {
|
||
|
fixed (ushort *valuePtr = &value) {
|
||
|
return Read16Impl(handle, offset, valuePtr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static unsafe bool Read32(PciPortHandle handle,
|
||
|
int offset,
|
||
|
out uint value)
|
||
|
{
|
||
|
unsafe {
|
||
|
fixed (uint *valuePtr = &value) {
|
||
|
return Read32Impl(handle, offset, valuePtr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern unsafe bool Read8Impl(PciPortHandle h,
|
||
|
int offset,
|
||
|
byte* value);
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern unsafe bool Read16Impl(PciPortHandle h,
|
||
|
int offset,
|
||
|
ushort* value);
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern unsafe bool Read32Impl(PciPortHandle h,
|
||
|
int offset,
|
||
|
uint* value);
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern bool Write8(PciPortHandle h,
|
||
|
int offset,
|
||
|
byte value);
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern bool Write16(PciPortHandle h,
|
||
|
int offset,
|
||
|
ushort value);
|
||
|
|
||
|
[OutsideGCDomain]
|
||
|
[NoHeapAllocation]
|
||
|
[StackBound(1174)]
|
||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||
|
public static extern bool Write32(PciPortHandle h,
|
||
|
int offset,
|
||
|
uint value);
|
||
|
}
|
||
|
}
|