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
|
||
};
|
||
|
||
|