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.DestinationAddress 的 IA_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.AsyncLock 的 nNumberOfArgBytes 和 nNumberOfDataBytes 成员必须相同。 |
LOCK_TRANSACTION_COMPARE_SWAP | 如果原始值和参数匹配,请将原始值替换为数据值。 u.AsyncLock 的 nNumberOfArgBytes 和 nNumberOfDataBytes 成员必须相同。 |
LOCK_TRANSACTION_FETCH_ADD | 将数据值添加到原始值。 执行 Big-endian 加法。 不使用参数值,u.AsyncLock 的 nNumberOfArgBytes 成员必须为零。 |
LOCK_TRANSACTION_LITTLE_ADD | 将数据值添加到原始值。 执行 Little-endian 加法。 不使用参数值,u.AsyncLock 的 nNumberOfArgBytes 成员必须为零。 |
LOCK_TRANSACTION_BOUNDED_ADD | 如果原始值和 参数不同,请将数据值添加到原始值。 u.AsyncLock 的 nNumberOfArgBytes 和 nNumberOfDataBytes 成员必须相同。 |
LOCK_TRANSACTION_WRAP_ADD | 如果原始值和参数不同,请将数据值添加到原始值。 否则,请将原始值替换为数据值。 u.AsyncLock 的 nNumberOfArgBytes 和 nNumberOfDataBytes 成员必须相同。 |
fulFlags
当前未使用。 驱动程序应将此设置为零。
Arguments[2]
指定此锁定操作中使用的参数。
DataValues[2]
指定此锁定操作中使用的数据值。
pBuffer
指向接收从节点返回的锁数据值的缓冲区。 缓冲区的大小必须至少等于 u.AsyncLock.nNumberOfDataBytes 成员。
ulGeneration
指定提交此异步请求的设备驱动程序所知道的总线重置生成。 如果指定的生成计数与总线的实际生成不匹配,则返回此请求并返回错误。
chPriority
保留。
nSpeed
保留。
tCode
保留。
Reserved
保留。
要求
要求 | 值 |
---|---|
Header | 1394.h |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈