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

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

DataValues

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

pBuffer

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

ulGeneration

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

chPriority

保留。

nSpeed

保留。

tCode

保留。

Reserved

保留。

要求

   
Header 1394.h