📄 1394diag.h
字号:
/*++
Copyright (c) 1998-99 Microsoft Corporation
Module Name:
1394diag.h
Abstract:
Author:
Kashif Hasan (khasan) 5/30/01
Revision History:
Date Who What
-------- --------- ------------------------------------------------------------
4/13/98 pbinder taken from original 1394diag...
5/30/01 khasan move 1394diag specific defines here
--*/
// default pool tag
#ifdef POOL_TAGGING
#ifdef ExAllocatePool
#undef ExAllocatePool
#endif
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'d931')
#endif
#define ISOCH_DETACH_TIMEOUT_VALUE (ULONG)(-100 * 100 * 100 * 100) //80 msecs in units of 100nsecs
typedef struct _DEVICE_EXTENSION {
PDEVICE_OBJECT StackDeviceObject;
PDEVICE_OBJECT PortDeviceObject;
PDEVICE_OBJECT PhysicalDeviceObject;
UNICODE_STRING SymbolicLinkName;
KSPIN_LOCK ResetSpinLock;
KSPIN_LOCK CromSpinLock;
KSPIN_LOCK AsyncSpinLock;
KSPIN_LOCK IsochSpinLock;
KSPIN_LOCK IsochResourceSpinLock;
BOOLEAN bShutdown;
DEVICE_POWER_STATE CurrentDevicePowerState;
SYSTEM_POWER_STATE CurrentSystemPowerState;
ULONG GenerationCount;
LIST_ENTRY BusResetIrps;
LIST_ENTRY CromData;
LIST_ENTRY AsyncAddressData;
LIST_ENTRY IsochDetachData;
LIST_ENTRY IsochResourceData;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
typedef struct _POWER_COMPLETION_CONTEXT {
PDEVICE_OBJECT DeviceObject;
PIRP SIrp;
} POWER_COMPLETION_CONTEXT, *PPOWER_COMPLETION_CONTEXT;
//
// This is used to keep track of pending irp's for
// notification of bus resets.
//
typedef struct _BUS_RESET_IRP {
LIST_ENTRY BusResetIrpList;
PIRP Irp;
} BUS_RESET_IRP, *PBUS_RESET_IRP;
//
// This is used to keep track of dynamic crom calls.
//
typedef struct _CROM_DATA {
LIST_ENTRY CromList;
HANDLE hCromData;
PVOID Buffer;
PMDL pMdl;
} CROM_DATA, *PCROM_DATA;
//
// This is used to store data for each async address range.
//
typedef struct _ASYNC_ADDRESS_DATA {
LIST_ENTRY AsyncAddressList;
PDEVICE_EXTENSION DeviceExtension;
PVOID Buffer;
ULONG nLength;
ULONG nAddressesReturned;
PADDRESS_RANGE AddressRange;
HANDLE hAddressRange;
PMDL pMdl;
} ASYNC_ADDRESS_DATA, *PASYNC_ADDRESS_DATA;
#define ISOCH_DETACH_TAG 0xaabbbbaa
//
// This is used to store data needed when calling IsochDetachBuffers.
// We need to store this data seperately for each call to IsochAttachBuffers.
//
typedef struct _ISOCH_DETACH_DATA {
LIST_ENTRY IsochDetachList;
PDEVICE_EXTENSION DeviceExtension;
PISOCH_DESCRIPTOR IsochDescriptor;
PIRP Irp;
PIRP newIrp;
PIRB DetachIrb;
PIRB AttachIrb;
NTSTATUS AttachStatus;
KTIMER Timer;
KDPC TimerDpc;
HANDLE hResource;
ULONG numIsochDescriptors;
ULONG outputBufferLength;
ULONG bDetach;
} ISOCH_DETACH_DATA, *PISOCH_DETACH_DATA;
//
// This is used to store allocated isoch resources.
// We use this information in case of a surprise removal.
//
typedef struct _ISOCH_RESOURCE_DATA {
LIST_ENTRY IsochResourceList;
HANDLE hResource;
} ISOCH_RESOURCE_DATA, *PISOCH_RESOURCE_DATA;
//
// 1394api.c
//
NTSTATUS
t1394_GetLocalHostInformation(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG nLevel,
IN OUT PULONG UserStatus,
IN OUT PVOID Information
);
NTSTATUS
t1394_Get1394AddressFromDeviceObject(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags,
OUT PNODE_ADDRESS pNodeAddress
);
NTSTATUS
t1394_Control(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
t1394_GetMaxSpeedBetweenDevices(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags,
IN ULONG ulNumberOfDestinations,
IN PDEVICE_OBJECT hDestinationDeviceObjects[64],
OUT PULONG fulSpeed
);
NTSTATUS
t1394_SetDeviceXmitProperties(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulSpeed,
IN ULONG fulPriority
);
NTSTATUS
t1394_GetConfigurationInformation(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
t1394_BusReset(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags
);
NTSTATUS
t1394_GetGenerationCount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN OUT PULONG GenerationCount
);
NTSTATUS
t1394_SendPhyConfigurationPacket(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PHY_CONFIGURATION_PACKET PhyConfigurationPacket
);
NTSTATUS
t1394_BusResetNotification(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags
);
NTSTATUS
t1394_SetLocalHostProperties(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG nLevel,
IN PVOID Information
);
void
t1394_BusResetRoutine(
IN PVOID Context
);
//
// asyncapi.c
//
NTSTATUS
t1394_AllocateAddressRange(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulAllocateFlags,
IN ULONG fulFlags,
IN ULONG nLength,
IN ULONG MaxSegmentSize,
IN ULONG fulAccessType,
IN ULONG fulNotificationOptions,
IN OUT PADDRESS_OFFSET Required1394Offset,
OUT PHANDLE phAddressRange,
IN OUT PULONG Data
);
NTSTATUS
t1394_FreeAddressRange(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN HANDLE hAddressRange
);
NTSTATUS
t1394_SetAddressData(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN HANDLE hAddressRange,
IN ULONG nLength,
IN ULONG ulOffset,
IN PVOID Data
);
NTSTATUS
t1394_GetAddressData(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN HANDLE hAddressRange,
IN ULONG nLength,
IN ULONG ulOffset,
IN PVOID Data
);
NTSTATUS
t1394_AsyncRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG bRawMode,
IN ULONG bGetGeneration,
IN IO_ADDRESS DestinationAddress,
IN ULONG nNumberOfBytesToRead,
IN ULONG nBlockSize,
IN ULONG fulFlags,
IN ULONG ulGeneration,
IN OUT PULONG Data
);
NTSTATUS
t1394_AsyncWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG bRawMode,
IN ULONG bGetGeneration,
IN IO_ADDRESS DestinationAddress,
IN ULONG nNumberOfBytesToWrite,
IN ULONG nBlockSize,
IN ULONG fulFlags,
IN ULONG ulGeneration,
IN OUT PULONG Data
);
NTSTATUS
t1394_AsyncLock(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG bRawMode,
IN ULONG bGetGeneration,
IN IO_ADDRESS DestinationAddress,
IN ULONG nNumberOfArgBytes,
IN ULONG nNumberOfDataBytes,
IN ULONG fulTransactionType,
IN ULONG fulFlags,
IN ULONG Arguments[2],
IN ULONG DataValues[2],
IN ULONG ulGeneration,
IN OUT PVOID Buffer
);
NTSTATUS
t1394_AsyncStream(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG nNumberOfBytesToStream,
IN ULONG fulFlags,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -