📄 1394vdev.h
字号:
/*++
Copyright (c) 1998-99 Microsoft Corporation
Module Name:
1394vdev.h
--*/
// default pool tag
#ifdef POOL_TAGGING
#ifdef ExAllocatePool
#undef ExAllocatePool
#endif
#define TAG_1394 'v931'
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,TAG_1394)
#ifdef ExFreePool
#undef ExFreePool
#endif
#define ExFreePool(a) ExFreePoolWithTag(a,TAG_1394)
#endif
#define ISOCH_DETACH_TIMEOUT_VALUE (ULONG)(-100 * 100 * 100 * 100) //80 msecs in units of 100nsecs
DRIVER_DISPATCH t1394VDev_Create;
DRIVER_DISPATCH t1394VDev_Close;
DRIVER_DISPATCH t1394VDev_Pnp;
DRIVER_DISPATCH t1394VDev_Power;
DRIVER_DISPATCH t1394VDev_IoControl;
DRIVER_ADD_DEVICE t1394VDev_PnpAddDevice;
//
// IEEE 1212 Directory definition
//
typedef struct _DIRECTORY_INFO {
union {
USHORT DI_CRC;
USHORT DI_Saved_Length;
} u;
USHORT DI_Length;
} DIRECTORY_INFO, *PDIRECTORY_INFO;
//
// IEEE 1212 Offset entry definition
//
typedef struct _OFFSET_ENTRY {
ULONG OE_Offset:24;
ULONG OE_Key:8;
} OFFSET_ENTRY, *POFFSET_ENTRY;
//
// Structure to identify myself as a virtual test device across the bus
//
#define MAX_LEN_HOST_NAME 32
typedef struct _POWER_COMPLETION_CONTEXT {
PDEVICE_OBJECT DeviceObject;
PIRP SIrp;
} POWER_COMPLETION_CONTEXT, *PPOWER_COMPLETION_CONTEXT;
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;
//
// 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,
__out_bcount(nLength) 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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -