190 lines
4.7 KiB
C
190 lines
4.7 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (C) 1997-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
NTCONFIG.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains the definitions associated with the conventions
|
||
|
used to access the configuration registry.
|
||
|
|
||
|
History:
|
||
|
|
||
|
a--davj 04-Mar-97 Created.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <winnt.h>
|
||
|
|
||
|
#ifndef _NTCONFIG_
|
||
|
#define _NTCONFIG_
|
||
|
|
||
|
|
||
|
typedef enum _CM_RESOURCE_TYPE {
|
||
|
CmResourceTypeNull = 0, // Reserved
|
||
|
CmResourceTypePort,
|
||
|
CmResourceTypeInterrupt,
|
||
|
CmResourceTypeMemory,
|
||
|
CmResourceTypeDma,
|
||
|
CmResourceTypeDeviceSpecific
|
||
|
} CM_RESOURCE_TYPE;
|
||
|
|
||
|
/*
|
||
|
typedef union _LARGE_INTEGER {
|
||
|
struct {
|
||
|
ULONG LowPart;
|
||
|
LONG HighPart;
|
||
|
};
|
||
|
LONGLONG QuadPart;
|
||
|
} LARGE_INTEGER, *PLARGE_INTEGER;
|
||
|
*/
|
||
|
|
||
|
typedef LARGE_INTEGER PHYSICAL_ADDRESS;
|
||
|
|
||
|
|
||
|
typedef enum Interface_Type {
|
||
|
Internal,
|
||
|
Isa,
|
||
|
Eisa,
|
||
|
MicroChannel,
|
||
|
TurboChannel,
|
||
|
PCIBus,
|
||
|
VMEBus,
|
||
|
NuBus,
|
||
|
PCMCIABus,
|
||
|
CBus,
|
||
|
MPIBus,
|
||
|
MPSABus,
|
||
|
MaximumInterfaceType
|
||
|
}INTERFACE_TYPE;
|
||
|
|
||
|
|
||
|
#define REG_RESOURCE_LIST ( 8 ) // Resource list in the resource map
|
||
|
#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 ) // Resource list in the hardware description
|
||
|
|
||
|
//
|
||
|
// Make sure alignment is made properly by compiler; otherwise move
|
||
|
// flags back to the top of the structure (common to all members of the
|
||
|
// union).
|
||
|
//
|
||
|
|
||
|
#pragma pack(4)
|
||
|
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
|
||
|
UCHAR Type;
|
||
|
UCHAR ShareDisposition;
|
||
|
USHORT Flags;
|
||
|
union {
|
||
|
|
||
|
//
|
||
|
// Range of port numbers, inclusive. These are physical, bus
|
||
|
// relative. The value should be the same as the one passed to
|
||
|
// HalTranslateBusAddress().
|
||
|
//
|
||
|
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length;
|
||
|
} Port;
|
||
|
|
||
|
//
|
||
|
// IRQL and vector. Should be same values as were passed to
|
||
|
// HalGetInterruptVector().
|
||
|
//
|
||
|
|
||
|
struct {
|
||
|
ULONG Level;
|
||
|
ULONG Vector;
|
||
|
ULONG 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 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;
|
||
|
#pragma pack()
|
||
|
|
||
|
//
|
||
|
// 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;
|
||
|
|
||
|
//
|
||
|
// A Full Resource Descriptor is what can be found in the registry.
|
||
|
// This is what will be returned to a driver when it queries the registry
|
||
|
// to get device information; it will be stored under a key in the hardware
|
||
|
// description tree.
|
||
|
//
|
||
|
// Note: The BusNumber and Type are redundant information, but we will keep
|
||
|
// it since it allows the driver _not_ to append it when it is creating
|
||
|
// a resource list which could possibly span multiple buses.
|
||
|
//
|
||
|
// Note2: 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_FULL_RESOURCE_DESCRIPTOR {
|
||
|
INTERFACE_TYPE InterfaceType;
|
||
|
ULONG BusNumber;
|
||
|
CM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||
|
} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
|
||
|
|
||
|
//
|
||
|
// The Resource list is what will be stored by the drivers into the
|
||
|
// resource map via the IO API.
|
||
|
//
|
||
|
|
||
|
typedef struct _CM_RESOURCE_LIST {
|
||
|
ULONG Count;
|
||
|
CM_FULL_RESOURCE_DESCRIPTOR List[1];
|
||
|
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
|
||
|
|
||
|
#endif // _NTCONFIG_
|