?? 1394.h
字號:
//
// Holds the pointer to the Vendor Leaf information
//
PTEXTUAL_LEAF VendorLeaf;
//
// Holds the length of the VendorLeaf pointer.
//
ULONG ModelLeafLength;
//
// Holds the pointer to the Model Leaf information
//
PTEXTUAL_LEAF ModelLeaf;
//
// Holds the 1394 10 bit BusId / 6 bit NodeId structure
//
NODE_ADDRESS NodeAddress;
//
// Holds the speed to be used in reaching this device
//
UCHAR Speed;
//
// Holds the priority at which to send packets
//
UCHAR Priority;
//
// Holds the Irp used to notify this device object about events
//
PIRP Irp;
//
// Holds the Device Object that this Device Extension hangs off of
//
PDEVICE_OBJECT DeviceObject;
//
// Holds the Port Device Object that this Device hangs off of
//
PDEVICE_OBJECT PortDeviceObject;
//
// Holds the pointer to corresponding information about this deivce
// in the bus driver's head.
//
PVOID DeviceInformation;
//
// Holds the pointer to the bus reset notification routine (if any)
//
PBUS_BUS_RESET_NOTIFICATION ResetRoutine;
//
// Holds the pointer to the context the client wanted when bus reset occurs
//
PVOID ResetContext;
} NODE_DEVICE_EXTENSION, *PNODE_DEVICE_EXTENSION;
//
// Definition of Isoch descriptor
//
typedef struct _ISOCH_DESCRIPTOR {
//
// Flags (used in synchronization)
//
ULONG fulFlags;
//
// Mdl pointing to buffer
//
PMDL Mdl;
//
// Length of combined buffer(s) as represented by the Mdl
//
ULONG ulLength;
//
// Payload size of each Isoch packet to be used in this descriptor
//
ULONG nMaxBytesPerFrame;
//
// Synchronization field; equivalent to Sy in the Isoch packet
//
ULONG ulSynch;
//
// Synchronization field; equivalent to Tag in the Isoch packet
//
ULONG ulTag;
//
// Cycle time field; returns time to be sent/received or when finished
//
CYCLE_TIME CycleTime;
//
// Callback routine (if any) to be called when this descriptor completes
//
PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
//
// First context (if any) parameter to be passed when doing callbacks
//
PVOID Context1;
//
// Second context (if any) parameter to be passed when doing callbacks
//
PVOID Context2;
//
// Holds the final status of this descriptor
//
NTSTATUS status;
//
// Reserved for the device driver who submitted this descriptor to
// stomp in.
//
ULONG_PTR DeviceReserved[8];
//
// Reserved for the bus driver to stomp in
//
ULONG_PTR BusReserved[8];
//
// Reserved for the port driver to stomp in
//
ULONG_PTR PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;
//
// definition of header element for scatter/gather support
//
typedef struct _IEEE1394_SCATTER_GATHER_HEADER{
USHORT HeaderLength;
USHORT DataLength;
UCHAR HeaderData;
} IEEE1394_SCATTER_GATHER_HEADER, *PIEEE1394_SCATTER_GATHER_HEADER;
//
// Definition of Bandwidth allocation structure
//
typedef struct _BANDWIDTH_ALLOCATION {
//
// Holds the list of allocation entries
//
LIST_ENTRY AllocationList;
//
// Holds the tag of this structure
//
ULONG Tag;
//
// Holds the Bandwidth units that this allocation owns
//
ULONG OwnedUnits;
//
// Holds the speed at which this bandwidth was allocated
//
ULONG fulSpeed;
//
// Holds whether or not this was a local or remote allocation
//
BOOLEAN bRemoteAllocation;
//
// Holds the generation of the bus when this bandwidth was secured
//
ULONG Generation;
//
// Holds the owner of this allocation
//
PNODE_DEVICE_EXTENSION DeviceExtension;
} BANDWIDTH_ALLOCATION, *PBANDWIDTH_ALLOCATION;
//
// IEEE 1394 Request Block definition (IRB). IRBs are the basis of how other
// device drivers communicate with the 1394 Bus driver.
//
typedef struct _IRB {
//
// Holds the zero based Function number that corresponds to the request
// that device drivers are asking the 1394 Bus driver to carry out.
//
ULONG FunctionNumber;
//
// Holds Flags that may be unique to this particular operation
//
ULONG Flags;
//
// Reserved for internal bus driver use and/or future expansion
//
ULONG_PTR BusReserved[IRB_BUS_RESERVED_SZ];
//
// Reserved for internal port driver usage
//
ULONG_PTR PortReserved[IRB_PORT_RESERVED_SZ];
//
// Holds the structures used in performing the various 1394 APIs
//
union {
//
// Fields necessary in order for the 1394 stack to carry out an
// AsyncRead request.
//
struct {
IO_ADDRESS DestinationAddress; // Address to read from
ULONG nNumberOfBytesToRead; // Bytes to read
ULONG nBlockSize; // Block size of read
ULONG fulFlags; // Flags pertinent to read
PMDL Mdl; // Destination buffer
ULONG ulGeneration; // Generation as known by driver
UCHAR chPriority; // Priority to send
UCHAR nSpeed; // Speed at which to send
UCHAR tCode; // Type of Read to do
UCHAR Reserved; // Used to determine medium delay
ULONG ElapsedTime; // Only valid for flag ASYNC_FLAGS_PING
// units in nano secs..
} AsyncRead;
//
// Fields necessary in order for the 1394 stack to carry out an
// AsyncWrite request.
//
struct {
IO_ADDRESS DestinationAddress; // Address to write to
ULONG nNumberOfBytesToWrite; // Bytes to write
ULONG nBlockSize; // Block size of write
ULONG fulFlags; // Flags pertinent to write
PMDL Mdl; // Destination buffer
ULONG ulGeneration; // Generation as known by driver
UCHAR chPriority; // Priority to send
UCHAR nSpeed; // Speed at which to send
UCHAR tCode; // Type of Write to do
UCHAR Reserved; // Reserved for future use
ULONG ElapsedTime; // Only valid for flag ASYNC_FLAGS_PING
} AsyncWrite;
//
// Fields necessary in order for the 1394 stack to carry out an
// AsyncLock request.
//
struct {
IO_ADDRESS DestinationAddress; // Address to lock to
ULONG nNumberOfArgBytes; // Bytes in Arguments
ULONG nNumberOfDataBytes; // Bytes in DataValues
ULONG fulTransactionType; // Lock transaction type
ULONG fulFlags; // Flags pertinent to lock
ULONG Arguments[2]; // Arguments used in Lock
ULONG DataValues[2]; // Data values
PVOID pBuffer; // Destination buffer (virtual address)
ULONG ulGeneration; // Generation as known by driver
UCHAR chPriority; // Priority to send
UCHAR nSpeed; // Speed at which to send
UCHAR tCode; // Type of Lock to do
UCHAR Reserved; // Reserved for future use
} AsyncLock;
//
// Fields necessary in order for the Bus driver to carry out an
// IsochAllocateBandwidth request
//
struct {
ULONG nMaxBytesPerFrameRequested; // Bytes per Isoch frame
ULONG fulSpeed; // Speed flags
HANDLE hBandwidth; // bandwidth handle returned
ULONG BytesPerFrameAvailable; // Available bytes per frame
ULONG SpeedSelected; // Speed to be used
ULONG nBandwidthUnitsRequired; // pre-calculated value
} IsochAllocateBandwidth;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochAllocateChannel request.
//
struct {
ULONG nRequestedChannel; // Need a specific channel
ULONG Channel; // Returned channel
LARGE_INTEGER ChannelsAvailable; // Channels available
} IsochAllocateChannel;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochAllocateResources request
// Instructions:
// Receive alloc:
// fulSpeed - should be the max speed the tx side is expected to stream
// The payload size in nMaxBytesPerFram cannot exceed the max payload for
// for this speed.
// fulFlags - For receive, wtih the standard header stripped, the field should
// be = (RESOURCE_USED_IN_LISTEN | RESOURCES_STRIP_ADDITIONAL_QUADLETS)
// Also nQuadletsToStrip = 1
// For no stripping set nQuadsTostrip to 0 and dont specify the stripping flag.
// nMaxBytesPerframe - If not stripping it should include the 8 bytes for header/trailer
// expected to be recieved for each packet.
// nNumberOfBuffer - see below
// nMaxBufferSize - This should be always such mode(nMaxBufferSize,nMaxBytesPerFrame) == 0
// (integer product of number of bytes per packet).
// nQuadletsTostrip - If stripping only one quadlet (standrd iso header) this is set to 1
// if zero, the isoch header will be included AND the trailer. So 8 bytes extra will be recieved
// hResource - see below
struct {
ULONG fulSpeed; // Speed flags
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -