IRB_REQ_ASYNC_LOCK 结构 (1394.h)

此结构包含 1394 堆栈执行异步锁请求所需的字段。

语法

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;

成员

DestinationAddress

指定此读取操作的 1394 64 位目标地址。 驱动程序只需填写 u.AsyncLock.DestinationAddressIA_Destination_Offset 成员;总线驱动程序填充IA_Destination_ID成员。 有关结构说明 ,请参阅IO_ADDRESS

nNumberOfArgBytes

指定用于执行此锁定操作的参数字节数。 可以是零、4 或 8。 有关详细信息,请参阅 u.AsyncLock.fulTransactionType 成员。

nNumberOfDataBytes

指定执行此锁定操作时使用的数据字节数。 可以是 4 或 8。 有关详细信息,请参阅 u.AsyncLock.fulTransactionType 成员。

fulTransactionType

指定要在 1394 节点上执行的原子事务。 支持以下函数类型。

fulTransactionType 说明
LOCK_TRANSACTION_MASK_SWAP 对于原始值和匹配参数中的每个位,将位重置为与数据值中的相应位相同。 u.AsyncLocknNumberOfArgBytesnNumberOfDataBytes 成员必须相同。
LOCK_TRANSACTION_COMPARE_SWAP 如果原始值和参数匹配,请将原始值替换为数据值。 u.AsyncLocknNumberOfArgBytesnNumberOfDataBytes 成员必须相同。
LOCK_TRANSACTION_FETCH_ADD 将数据值添加到原始值。 执行 Big-endian 加法。 不使用参数值,u.AsyncLocknNumberOfArgBytes 成员必须为零。
LOCK_TRANSACTION_LITTLE_ADD 将数据值添加到原始值。 执行 Little-endian 加法。 不使用参数值,u.AsyncLocknNumberOfArgBytes 成员必须为零。
LOCK_TRANSACTION_BOUNDED_ADD 如果原始值和 参数不同,请将数据值添加到原始值。 u.AsyncLocknNumberOfArgBytesnNumberOfDataBytes 成员必须相同。
LOCK_TRANSACTION_WRAP_ADD 如果原始值和参数不同,请将数据值添加到原始值。 否则,请将原始值替换为数据值。 u.AsyncLocknNumberOfArgBytesnNumberOfDataBytes 成员必须相同。

fulFlags

当前未使用。 驱动程序应将此设置为零。

Arguments[2]

指定此锁定操作中使用的参数。

DataValues[2]

指定此锁定操作中使用的数据值。

pBuffer

指向接收从节点返回的锁数据值的缓冲区。 缓冲区的大小必须至少等于 u.AsyncLock.nNumberOfDataBytes 成员。

ulGeneration

指定提交此异步请求的设备驱动程序所知道的总线重置生成。 如果指定的生成计数与总线的实际生成不匹配,则返回此请求并返回错误。

chPriority

保留。

nSpeed

保留。

tCode

保留。

Reserved

保留。

要求

要求
Header 1394.h