singrdk/base/Kernel/Singularity/V1/Services/PlatformService.cs

91 lines
2.7 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity - Singularity ABI
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: DebugService.cs
//
// Note:
//
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using Microsoft.Singularity;
using Microsoft.Singularity.Hal;
using Microsoft.Singularity.Memory;
using Microsoft.Singularity.Isal;
namespace Microsoft.Singularity.V1.Services
{
[AccessedByRuntime("Method called from HAL.cpp")]
public struct PlatformService
{
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
public static bool DisableInterrupts()
{
return PrivilegedGate.DisableInterrupts();
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
public static void RestoreInterrupts(bool enabled)
{
PrivilegedGate.RestoreInterrupts(enabled);
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
public static bool InterruptsDisabled()
{
return PrivilegedGate.InterruptsDisabled();
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
[CLSCompliant(false)]
public static void CleanAndInvalidateDCache(UIntPtr address, UIntPtr length)
{
#if ISA_ARM
Microsoft.Singularity.Isal.Arm.XScale.Mmu.CleanInvalidateDCacheLines(address, length);
#endif
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
[CLSCompliant(false)]
public static void InvalidateDCache(UIntPtr address, UIntPtr length)
{
#if ISA_ARM
Microsoft.Singularity.Isal.Arm.XScale.Mmu.InvalidateDCacheLines(address, length);
#endif
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
[CLSCompliant(false)]
public static void SetCacheAttributes(UIntPtr address, UIntPtr length, bool cacheable, bool bufferable)
{
#if ISA_ARM
Microsoft.Singularity.Isal.Arm.XScale.Mmu.SetCacheAttributes(address, length, cacheable, bufferable);
#endif
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
public static int GetProcessorContextOffset()
{
return Platform.ThePlatform.CpuRecordPointerOffset;
}
[ExternalEntryPoint]
[AccessedByRuntime("Called from HAL.cpp")]
public static int GetThreadContextOffset()
{
return Platform.ThePlatform.ThreadRecordPointerOffset;
}
}
}