Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
4.4 KiB

#ifndef _HPSSTRUCT_H
#define _HPSSTRUCT_H
#define HPS_WMI_LEVEL (0x10|DPFLTR_MASK)
extern UNICODE_STRING HpsRegistryPath;
extern LIST_ENTRY HpsDeviceExtensions;
typedef struct _HPS_EVENT_WORKITEM {
PIO_WORKITEM WorkItem;
PHPS_CONTROLLER_EVENT Event;
} HPS_EVENT_WORKITEM, *PHPS_EVENT_WORKITEM;
typedef struct _HPS_INTERFACE_WRAPPER {
PVOID PciContext;
PINTERFACE_REFERENCE PciInterfaceReference;
PINTERFACE_DEREFERENCE PciInterfaceDereference;
PGET_SET_DEVICE_DATA PciSetBusData;
PGET_SET_DEVICE_DATA PciGetBusData;
} HPS_INTERFACE_WRAPPER, *PHPS_INTERFACE_WRAPPER;
//
// Device Object defines and structures
//
typedef enum _HPS_DEVICE_TAG {
HpsUpperDeviceTag = 'UspH',
HpsLowerDeviceTag = 'LspH'
} HPS_DEVICE_TAG;
typedef struct _HPS_DEVICE_EXTENSION {
//
// These three variables are the same as HPS_COMMON_EXTENSION,
// so rearranging them requires rearranging the
// HPS_COMMON_EXTENSION declaration as well
//
HPS_DEVICE_TAG ExtensionTag;
PDEVICE_OBJECT LowerDO;
PDEVICE_OBJECT Self;
//
// List entry to link all hps device extensions together.
//
LIST_ENTRY ListEntry;
PDEVICE_OBJECT PhysicalDO;
PUNICODE_STRING SymbolicName;
PVOID WmiEventContext;
ULONG WmiEventContextSize;
KDPC EventDpc;
HPS_CONTROLLER_EVENT CurrentEvent;
PSOFTPCI_DEVICE *SoftDevices;
BOOLEAN EventsEnabled;
UCHAR ConfigOffset;
PKSERVICE_ROUTINE IntServiceRoutine;
PVOID IntServiceContext;
KSPIN_LOCK IntSpinLock;
BOOLEAN UseConfig;
HPS_INTERFACE_WRAPPER InterfaceWrapper;
PUCHAR HBRBOffset;
ULONG HBRBLength;
ULONG HBRBRegisterSetOffset;
PVOID HBRB;
HPS_HWINIT_DESCRIPTOR HwInitData;
SHPC_CONFIG_SPACE ConfigSpace;
SHPC_REGISTER_SET RegisterSet;
KSPIN_LOCK RegisterLock;
LONG MemoryInterfaceCount;
} HPS_DEVICE_EXTENSION, *PHPS_DEVICE_EXTENSION;
typedef struct _HPS_COMMON_EXTENSION {
HPS_DEVICE_TAG ExtensionTag;
PDEVICE_OBJECT LowerDO;
PDEVICE_OBJECT Self;
} HPS_COMMON_EXTENSION, *PHPS_COMMON_EXTENSION;
//
// Interface structures and defines
//
typedef struct _HPS_PING_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PDEVICE_OBJECT SenderDevice;
} HPS_PING_INTERFACE, *PHPS_PING_INTERFACE;
DEFINE_GUID(GUID_HPS_PING_INTERFACE,0x0c76ca29, 0x4f2a, 0x4870,
0xa4, 0xdd, 0xc1, 0xa7, 0x56, 0x1a, 0xf7, 0xc7);
#define HPS_EQUAL_GUID(x,y) \
(RtlEqualMemory((PVOID)(x), (PVOID)(y), sizeof(GUID)))
//
// Register Writing Variables
//
extern UCHAR ConfigWriteMask[];
extern ULONG RegisterReadOnlyMask[];
extern ULONG RegisterWriteClearMask[];
typedef
VOID
(*PHPS_WRITE_REGISTER)(
PHPS_DEVICE_EXTENSION DeviceExtension,
ULONG RegisterNum,
PULONG Source,
ULONG BitMask
);
extern PHPS_WRITE_REGISTER RegisterWriteCommands[];
#define IS_SUBSET(_inner,_ilength,_outer,_olength) \
((_outer <= _inner) && ((_outer+_olength) >= (_inner+_ilength)))
//
// Returns a ULONG that is a bit mask of the bits in the ULONG written
// where all bits from _offset for _length were written.
//
#define HPS_ULONG_WRITE_MASK(_offset,_length) \
(((1 << (_length*8)) - 1) << (_offset * 8))
#define FOR_ALL_IN_LIST(Type, Head, Current) \
for((Current) = CONTAINING_RECORD((Head)->Flink, Type, ListEntry); \
(Head) != &(Current)->ListEntry; \
(Current) = CONTAINING_RECORD((Current)->ListEntry.Flink, \
Type, \
ListEntry) \
)
//
// Pool Tags
//
typedef enum _HPS_POOL_TAG {
HpsInterfacePool = 'IspH',
HpsTempPool = 'TspH',
HpsStringPool = 'SspH'
} HPS_POOL_TAG;
#endif