87 lines
2.6 KiB
C#
87 lines
2.6 KiB
C#
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Microsoft Research Singularity
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: Resources.cs
|
|
//
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Threading;
|
|
|
|
using Microsoft.Singularity.Loader;
|
|
using Microsoft.Singularity.Memory;
|
|
using Microsoft.Singularity.Hal;
|
|
|
|
namespace Microsoft.Singularity.Io
|
|
{
|
|
[CLSCompliant(false)]
|
|
[AccessedByRuntime("referenced in halkd.cpp")]
|
|
public class Resources
|
|
{
|
|
static public int GetWarmBootCount()
|
|
{
|
|
return Platform.ThePlatform.BootCount;
|
|
}
|
|
|
|
public struct PnpBiosInfo
|
|
{
|
|
public IoMemory pnpRegion;
|
|
public IoPort isaReadPort;
|
|
public uint isaCsns;
|
|
}
|
|
|
|
static public PnpBiosInfo GetPnpBiosInfo()
|
|
{
|
|
Platform bi = Platform.ThePlatform;
|
|
PnpBiosInfo pbi = new PnpBiosInfo();
|
|
|
|
if (bi.PnpNodesAddr32 != UIntPtr.Zero) {
|
|
Tracing.Log(Tracing.Debug, "PnpBiosRegion {0:x8}..{1:x8}",
|
|
bi.PnpNodesAddr32, bi.PnpNodesAddr32 + bi.PnpNodesSize32);
|
|
pbi.pnpRegion = IoMemory.MapPhysicalMemory(
|
|
bi.PnpNodesAddr32, bi.PnpNodesSize32, true, false);
|
|
}
|
|
|
|
pbi.isaReadPort = new IoPort((ushort)bi.IsaReadPort, 1, Access.Read);;
|
|
pbi.isaCsns = bi.IsaCsns;
|
|
return pbi;
|
|
}
|
|
|
|
static public uint GetPciNumberOfBuses()
|
|
{
|
|
Platform bi = Platform.ThePlatform;
|
|
|
|
return (uint)bi.PciBiosCX + 1;
|
|
}
|
|
|
|
static private unsafe FileImage GetLoadedFileImage(int image)
|
|
{
|
|
Platform bi = Platform.ThePlatform;
|
|
if (image < bi.FileImageTableEntries) {
|
|
FileImage* fi = (FileImage*) bi.FileImageTableBase32; //.ToPointer();
|
|
return *(fi + image);
|
|
}
|
|
return new FileImage(UIntPtr.Zero, 0);
|
|
}
|
|
|
|
static public IoMemory GetLoadedImageMemory(int image)
|
|
{
|
|
FileImage fileImage = GetLoadedFileImage(image);
|
|
if (fileImage.Address != UIntPtr.Zero) {
|
|
return IoMemory.MapPhysicalMemory(fileImage.Address, fileImage.Size,
|
|
true, false);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static IoMemory GetSystemManifest()
|
|
{
|
|
return Resources.GetLoadedImageMemory(1);
|
|
}
|
|
}
|
|
}
|