326 lines
7.3 KiB
C
326 lines
7.3 KiB
C
|
/*
|
|||
|
* Copyright (c) 1995 FirePower Systems, Inc.
|
|||
|
*
|
|||
|
* $RCSfile: vrheader.h $
|
|||
|
* $Revision: 1.10 $
|
|||
|
* $Date: 1996/01/11 08:03:25 $
|
|||
|
* $Locker: $
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
/*
|
|||
|
* From nt/public/sdk/inc/ntdef.h
|
|||
|
*/
|
|||
|
|
|||
|
//
|
|||
|
// Physical address.
|
|||
|
//
|
|||
|
|
|||
|
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
|
|||
|
|
|||
|
//
|
|||
|
// Cardinal Data Types [0 - 2**N-2)
|
|||
|
//
|
|||
|
|
|||
|
typedef char CCHAR; // winnt
|
|||
|
typedef short CSHORT;
|
|||
|
typedef ULONG CLONG;
|
|||
|
|
|||
|
typedef CCHAR *PCCHAR;
|
|||
|
typedef CSHORT *PCSHORT;
|
|||
|
typedef CLONG *PCLONG;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* From nt/public/sdk/inc/ntconfig.h
|
|||
|
*/
|
|||
|
|
|||
|
//
|
|||
|
// Defines the Type in the RESOURCE_DESCRIPTOR
|
|||
|
//
|
|||
|
|
|||
|
typedef enum _CM_RESOURCE_TYPE {
|
|||
|
CmResourceTypeNull = 0, // Reserved
|
|||
|
CmResourceTypePort,
|
|||
|
CmResourceTypeInterrupt,
|
|||
|
CmResourceTypeMemory,
|
|||
|
CmResourceTypeDma,
|
|||
|
CmResourceTypeDeviceSpecific,
|
|||
|
CmResourceTypeMaximum
|
|||
|
} CM_RESOURCE_TYPE;
|
|||
|
|
|||
|
//
|
|||
|
// Defines the ShareDisposition in the RESOURCE_DESCRIPTOR
|
|||
|
//
|
|||
|
|
|||
|
typedef enum _CM_SHARE_DISPOSITION {
|
|||
|
CmResourceShareUndetermined = 0, // Reserved
|
|||
|
CmResourceShareDeviceExclusive,
|
|||
|
CmResourceShareDriverExclusive,
|
|||
|
CmResourceShareShared
|
|||
|
} CM_SHARE_DISPOSITION;
|
|||
|
|
|||
|
//
|
|||
|
// Define the bit masks for Flags when type is CmResourceTypeInterrupt
|
|||
|
//
|
|||
|
|
|||
|
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0
|
|||
|
#define CM_RESOURCE_INTERRUPT_LATCHED 1
|
|||
|
|
|||
|
//
|
|||
|
// Define the bit masks for Flags when type is CmResourceTypeInterrupt
|
|||
|
//
|
|||
|
|
|||
|
#define CM_RESOURCE_MEMORY_READ_WRITE 0
|
|||
|
#define CM_RESOURCE_MEMORY_READ_ONLY 1
|
|||
|
#define CM_RESOURCE_MEMORY_WRITE_ONLY 2
|
|||
|
|
|||
|
//
|
|||
|
// Define the bit masks for Flags when type is CmResourceTypePort
|
|||
|
//
|
|||
|
|
|||
|
#define CM_RESOURCE_PORT_MEMORY 0
|
|||
|
#define CM_RESOURCE_PORT_IO 1
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// This structure defines one type of resource used by a driver.
|
|||
|
//
|
|||
|
// There can only be *1* DeviceSpecificData block. It must be located at
|
|||
|
// the end of all resource descriptors in a full descriptor block.
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// BUGBUG 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;
|
|||
|
|
|||
|
//
|
|||
|
// Define the structures used to interpret configuration data of
|
|||
|
// \\Registry\machine\hardware\description tree.
|
|||
|
// Basically, these structures are used to interpret component
|
|||
|
// sepcific data.
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// Define DEVICE_FLAGS
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _DEVICE_FLAGS {
|
|||
|
ULONG Failed : 1;
|
|||
|
ULONG ReadOnly : 1;
|
|||
|
ULONG Removable : 1;
|
|||
|
ULONG ConsoleIn : 1;
|
|||
|
ULONG ConsoleOut : 1;
|
|||
|
ULONG Input : 1;
|
|||
|
ULONG Output : 1;
|
|||
|
} DEVICE_FLAGS, *PDEVICE_FLAGS;
|
|||
|
|
|||
|
//
|
|||
|
// Define Component Information structure
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _CM_COMPONENT_INFORMATION {
|
|||
|
DEVICE_FLAGS Flags;
|
|||
|
ULONG Version;
|
|||
|
ULONG Key;
|
|||
|
ULONG AffinityMask;
|
|||
|
} CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* From nt/public/sdk/inc/ntppc.h
|
|||
|
*/
|
|||
|
|
|||
|
#define KSEG0_BASE 0x00000000 /* ? 0x800000000 */
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* From nt/private/ntos/inc/nthal.h
|
|||
|
*/
|
|||
|
|
|||
|
//
|
|||
|
// Time conversion routines
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _TIME_FIELDS {
|
|||
|
CSHORT Year; // range [1601...]
|
|||
|
CSHORT Month; // range [1..12]
|
|||
|
CSHORT Day; // range [1..31]
|
|||
|
CSHORT Hour; // range [0..23]
|
|||
|
CSHORT Minute; // range [0..59]
|
|||
|
CSHORT Second; // range [0..59]
|
|||
|
CSHORT Milliseconds;// range [0..999]
|
|||
|
CSHORT Weekday; // range [0..6] == [Sunday..Saturday]
|
|||
|
} TIME_FIELDS;
|
|||
|
typedef TIME_FIELDS *PTIME_FIELDS;
|
|||
|
|
|||
|
//
|
|||
|
// PowerPC page size = 4 KB
|
|||
|
//
|
|||
|
|
|||
|
#define PAGE_SIZE (ULONG)0x1000
|
|||
|
|
|||
|
//
|
|||
|
// Define the number of trailing zeroes in a page aligned virtual address.
|
|||
|
// This is used as the shift count when shifting virtual addresses to
|
|||
|
// virtual page numbers.
|
|||
|
//
|
|||
|
|
|||
|
#define PAGE_SHIFT 12L
|
|||
|
|
|||
|
//
|
|||
|
// The device data record for the Floppy peripheral.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _CM_FLOPPY_DEVICE_DATA {
|
|||
|
USHORT Version;
|
|||
|
USHORT Revision;
|
|||
|
CHAR Size[8];
|
|||
|
ULONG MaxDensity;
|
|||
|
ULONG MountDensity;
|
|||
|
//
|
|||
|
// New data fields for version >= 2.0
|
|||
|
//
|
|||
|
UCHAR StepRateHeadUnloadTime;
|
|||
|
UCHAR HeadLoadTime;
|
|||
|
UCHAR MotorOffTime;
|
|||
|
UCHAR SectorLengthCode;
|
|||
|
UCHAR SectorPerTrack;
|
|||
|
UCHAR ReadWriteGapLength;
|
|||
|
UCHAR DataTransferLength;
|
|||
|
UCHAR FormatGapLength;
|
|||
|
UCHAR FormatFillCharacter;
|
|||
|
UCHAR HeadSettleTime;
|
|||
|
UCHAR MotorSettleTime;
|
|||
|
UCHAR MaximumTrackValue;
|
|||
|
UCHAR DataTransferRate;
|
|||
|
} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
|
|||
|
|
|||
|
//
|
|||
|
// The device data record for the serial controller.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _CM_SERIAL_DEVICE_DATA {
|
|||
|
USHORT Version;
|
|||
|
USHORT Revision;
|
|||
|
ULONG BaudClock;
|
|||
|
} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
|
|||
|
|
|||
|
/*
|
|||
|
********************************************************************************
|
|||
|
**
|
|||
|
** The following is derived from fparch.h in the nthals\halfire\ppc
|
|||
|
** directory
|
|||
|
**
|
|||
|
**
|
|||
|
**
|
|||
|
********************************************************************************
|
|||
|
*/
|
|||
|
//
|
|||
|
// These names are not sacrosanct, and should be revised upon input from Susan,
|
|||
|
// Jim, and anyone else interested.
|
|||
|
//
|
|||
|
enum scope_use {
|
|||
|
ENG,
|
|||
|
MFG,
|
|||
|
TEST,
|
|||
|
CUST
|
|||
|
};
|
|||
|
|
|||
|
enum rel_state {
|
|||
|
GENERAL,
|
|||
|
OFFICIAL,
|
|||
|
TESTING,
|
|||
|
CONTROLLED,
|
|||
|
LAB
|
|||
|
};
|
|||
|
|
|||
|
|