190 lines
4.6 KiB
C
190 lines
4.6 KiB
C
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
findE980.h
|
|
|
|
Environment:
|
|
|
|
user mode
|
|
|
|
|
|
Revision History:
|
|
|
|
08-08-00 : created, toddcar
|
|
|
|
--*/
|
|
#include <windows.h>
|
|
#include <winreg.h>
|
|
#include <tchar.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include <regstr.h>
|
|
|
|
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
|
|
|
|
typedef struct {
|
|
PHYSICAL_ADDRESS Base;
|
|
LARGE_INTEGER Length;
|
|
ULONG Type;
|
|
ULONG Reserved;
|
|
} ACPI_E820_ENTRY, far *FPACPI_E820_ENTRY;
|
|
|
|
typedef struct _ACPI_BIOS_MULTI_NODE {
|
|
PHYSICAL_ADDRESS RsdtAddress; // 64-bit physical address of RSDT
|
|
ULONG Count;
|
|
ULONG Reserved; // don't use this. W2K depends on it being zero - oops
|
|
ACPI_E820_ENTRY E820Entry[1];
|
|
} ACPI_BIOS_MULTI_NODE, *PACPI_BIOS_MULTI_NODE;
|
|
|
|
typedef struct {
|
|
USHORT Signature;
|
|
USHORT CommandPortAddress;
|
|
USHORT EventPortAddress;
|
|
USHORT PollInterval;
|
|
UCHAR CommandDataValue;
|
|
UCHAR EventPortBitmask;
|
|
UCHAR MaxLevelAc;
|
|
UCHAR MaxLevelDc;
|
|
} LEGACY_GEYSERVILLE_INT15, *PLEGACY_GEYSERVILLE_INT15;
|
|
|
|
|
|
LONG
|
|
AcpiFindRsdt (
|
|
PACPI_BIOS_MULTI_NODE *AcpiMulti
|
|
);
|
|
|
|
LONG
|
|
GetRegistryValue(
|
|
HKEY KeyHandle,
|
|
LPTSTR ValueName,
|
|
PUCHAR *Information
|
|
);
|
|
|
|
|
|
//
|
|
// Taken from ntddk.h ...
|
|
//
|
|
|
|
#include "pshpack4.h"
|
|
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
|
|
UCHAR Type;
|
|
UCHAR ShareDisposition;
|
|
USHORT Flags;
|
|
union {
|
|
|
|
//
|
|
// Range of resources, inclusive. These are physical, bus relative.
|
|
// It is known that Port and Memory below have the exact same layout
|
|
// as Generic.
|
|
//
|
|
|
|
struct {
|
|
PHYSICAL_ADDRESS Start;
|
|
ULONG Length;
|
|
} Generic;
|
|
|
|
//
|
|
// end_wdm
|
|
// Range of port numbers, inclusive. These are physical, bus
|
|
// relative. The value should be the same as the one passed to
|
|
// HalTranslateBusAddress().
|
|
// begin_wdm
|
|
//
|
|
|
|
struct {
|
|
PHYSICAL_ADDRESS Start;
|
|
ULONG Length;
|
|
} Port;
|
|
|
|
//
|
|
// end_wdm
|
|
// IRQL and vector. Should be same values as were passed to
|
|
// HalGetInterruptVector().
|
|
// begin_wdm
|
|
//
|
|
|
|
struct {
|
|
ULONG Level;
|
|
ULONG Vector;
|
|
KAFFINITY Affinity;
|
|
} Interrupt;
|
|
|
|
//
|
|
// Range of memory addresses, inclusive. These are physical, bus
|
|
// relative. The value should be the same as the one passed to
|
|
// HalTranslateBusAddress().
|
|
//
|
|
|
|
struct {
|
|
PHYSICAL_ADDRESS Start; // 64 bit physical addresses.
|
|
ULONG Length;
|
|
} Memory;
|
|
|
|
//
|
|
// Physical DMA channel.
|
|
//
|
|
|
|
struct {
|
|
ULONG Channel;
|
|
ULONG Port;
|
|
ULONG Reserved1;
|
|
} Dma;
|
|
|
|
//
|
|
// Device driver private data, usually used to help it figure
|
|
// what the resource assignments decisions that were made.
|
|
//
|
|
|
|
struct {
|
|
ULONG Data[3];
|
|
} DevicePrivate;
|
|
|
|
//
|
|
// Bus Number information.
|
|
//
|
|
|
|
struct {
|
|
ULONG Start;
|
|
ULONG Length;
|
|
ULONG Reserved;
|
|
} BusNumber;
|
|
|
|
//
|
|
// Device Specific information defined by the driver.
|
|
// The DataSize field indicates the size of the data in bytes. The
|
|
// data is located immediately after the DeviceSpecificData field in
|
|
// the structure.
|
|
//
|
|
|
|
struct {
|
|
ULONG DataSize;
|
|
ULONG Reserved1;
|
|
ULONG Reserved2;
|
|
} DeviceSpecificData;
|
|
} u;
|
|
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
|
|
#include "poppack.h"
|
|
|
|
//
|
|
// A Partial Resource List is what can be found in the ARC firmware
|
|
// or will be generated by ntdetect.com.
|
|
// The configuration manager will transform this structure into a Full
|
|
// resource descriptor when it is about to store it in the regsitry.
|
|
//
|
|
// Note: There must a be a convention to the order of fields of same type,
|
|
// (defined on a device by device basis) so that the fields can make sense
|
|
// to a driver (i.e. when multiple memory ranges are necessary).
|
|
//
|
|
|
|
typedef struct _CM_PARTIAL_RESOURCE_LIST {
|
|
USHORT Version;
|
|
USHORT Revision;
|
|
ULONG Count;
|
|
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
|
|
} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
|
|
|