// 1394.h
typedef struct _IRB_REQ_ASYNC_LOCK {
IO_ADDRESS DestinationAddress;
ULONG nNumberOfArgBytes;
ULONG nNumberOfDataBytes;
ULONG fulTransactionType;
ULONG fulFlags;
ULONG Arguments[2];
ULONG DataValues[2];
PVOID pBuffer;
ULONG ulGeneration;
UCHAR chPriority;
UCHAR nSpeed;
UCHAR tCode;
UCHAR Reserved;
} IRB_REQ_ASYNC_LOCK;
View the official Windows Driver Kit DDI referenceNo description available.
This structure contains the fields necessary for the 1394 stack to carry out an asynchronous lock request.
DestinationAddressSpecifies the 1394 64-bit destination address for this read operation. The driver only needs to fill in the IA_Destination_Offset member of u.AsyncLock.DestinationAddress; the bus driver fills in the IA_Destination_ID member. See IO_ADDRESS for the structure description.
nNumberOfArgBytesSpecifies the number of argument bytes used in performing this lock operation. May be zero, 4 or 8. See the u.AsyncLock.fulTransactionType member for details.
nNumberOfDataBytesSpecifies the number of data bytes used in performing this lock operation. May be 4 or 8. See the u.AsyncLock.fulTransactionType member for details.
fulTransactionTypeSpecifies which atomic transaction to execute on the 1394 node. The following function types are supported.
| fulTransactionType | Description |
|---|---|
| LOCK_TRANSACTION_MASK_SWAP | For each bit in the original value and the matching argument, reset the bit to be the same as the corresponding bit in the data value. The nNumberOfArgBytes and nNumberOfDataBytes members of u.AsyncLock must be the same. |
| LOCK_TRANSACTION_COMPARE_SWAP | If the original value and argument match, replace the original value with the data value. The nNumberOfArgBytes and nNumberOfDataBytes members of u.AsyncLock must be the same. |
| LOCK_TRANSACTION_FETCH_ADD | Add the data value to the original value. Big-endian addition is performed. The argument value is not used and the nNumberOfArgBytes member of u.AsyncLock must be zero. |
| LOCK_TRANSACTION_LITTLE_ADD | Add the data value to the original value. Little-endian addition is performed. The argument value is not used and the nNumberOfArgBytes member of u.AsyncLock must be zero. |
| LOCK_TRANSACTION_BOUNDED_ADD | If the original value and the argument differ, add the data value to the original value. The nNumberOfArgBytes and nNumberOfDataBytes members of u.AsyncLock must be the same. |
| LOCK_TRANSACTION_WRAP_ADD | If the original value and the argument differ, add the data value to original value. Otherwise, replace the original value with the data value. The nNumberOfArgBytes and nNumberOfDataBytes members of u.AsyncLock must be the same. |
fulFlagsNot currently used. Drivers should set this to zero.
ArgumentsSpecifies the arguments used in this lock operation.
DataValuesSpecifies the data values used in this lock operation.
pBufferPoints to a buffer that receives lock data values returned from the node. The size of the buffer must be at least equal to the u.AsyncLock.nNumberOfDataBytes member.
ulGenerationSpecifies the bus reset generation as known by the device driver who submitted this asynchronous request. If the generation count specified does not match the actual generation of the bus, then this request is returned with an error.
chPriorityReserved.
nSpeedReserved.
tCodeReserved.
ReservedReserved.