ISOCH_DESCRIPTOR 结构 (1394.h)
ISOCH_DESCRIPTOR结构描述使用 REQUEST_ISOCH_ATTACH_BUFFERS 和 REQUEST_ISOCH_DETACH_BUFFERS 请求从资源句柄附加或详细说明的缓冲区。
语法
typedef struct _ISOCH_DESCRIPTOR {
ULONG fulFlags;
PMDL Mdl;
ULONG ulLength;
ULONG nMaxBytesPerFrame;
ULONG ulSynch;
ULONG ulTag;
CYCLE_TIME CycleTime;
PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
PVOID Context1;
PVOID Context2;
NTSTATUS status;
ULONG_PTR DeviceReserved[8];
ULONG_PTR BusReserved[8];
ULONG_PTR PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;
成员
fulFlags
指定此常量描述符的各种标志。 通道上每个附加的缓冲区都有一个关联的等量描述符。
在将特定缓冲区用于 I/O 操作之前,主机控制器会检查缓冲区的等量描述符中的标志,以获取有关如何处理数据的说明。 在某些情况下,主机控制器将继续观察这些标志在后续缓冲区的 I/O 操作期间指定的行为。 例如,如果 isoch 描述符标志指示主机控制器应筛选掉 ulSynch 中没有记录特定 Sy 值的数据包,则主机控制器将继续对后续缓冲区中的数据执行此筛选操作,即使与这些缓冲区关联的 isoch 描述符未设置相同的标志。
下表描述了可分配给此成员的标志。
标志 | 常时等量事务 | 说明 |
---|---|---|
DESCRIPTOR_SYNCH_ON_SY | 侦听 | 从当前缓冲区中的数据开始,主机控制器会忽略所有不包含嵌入常时等量数据包中的特定 Sy 值的所有数据包。 在 ulSynch 中指定 Sy 值。 如果设置了DESCRIPTOR_USE_SY_TAG_IN_FIRST标志,则主机控制器在遇到 ulSynch 中指定的 Sy 值的第一个数据包后继续读取所有数据包。 如果未设置DESCRIPTOR_USE_SY_TAG_IN_FIRST标志,则主机控制器将继续筛选、读取具有指示 Sy 值的数据包并忽略所有其他数据包。 |
DESCRIPTOR_SYNCH_ON_TAG | 侦听 | 从当前缓冲区中的数据开始,主机控制器会忽略所有不包含嵌入常时等量数据包中的特定标记值的所有数据包。 标记值在 ulTag 中指定。 如果设置了DESCRIPTOR_USE_SY_TAG_IN_FIRST标志,则主机控制器在遇到具有 ulTag 中指定的标记值的第一个数据包后继续读取所有数据包。 如果未设置DESCRIPTOR_USE_SY_TAG_IN_FIRST标志,则主机控制器将继续筛选、读取具有指示标记值的数据包并忽略所有其他标记。 |
DESCRIPTOR_SYNCH_ON_TIME | 倾听、交谈 | 主机控制器等待特定的常时等周期时间,然后继续操作。 周期时间在 CycleTime 成员中指定。 从当前缓冲区中的数据开始,主机控制器会忽略不包含 CycleTime 周期时间的所有数据包。 找到具有指示周期时间的数据包后,主机控制器将继续处理所有数据包。 |
DESCRIPTOR_USE_SY_TAG_IN_FIRST | 侦听 | 仅在收到第一个匹配数据包之前,才会对 Sy 或 标记 成员进行筛选。 此标志与DESCRIPTOR_SYNCH_ON_SY和DESCRIPTOR_SYNCH_ON_TAG标志一起使用。 除非还设置了DESCRIPTOR_USE_SY_TAG_IN_FIRST,否则这两个标志会基于 Sy 或 Tag 中的值启动筛选操作,在这种情况下,这些标志将启动同步而不是筛选操作。 在此同步操作中,主机控制器将忽略所有数据包,直到发现具有正确 Sy 或 Tag 值的数据包。 发现具有指示的 Sy 或 Tag 值的数据包后,主机控制器将继续处理所有数据包。 |
DESCRIPTOR_TIME_STAMP_ON_COMPLETION | 倾听、交谈 | 主机控制器在此缓冲区完成其 DMA 后,将周期时间存储在ISOCH_DESCRIPTOR的 CycleTime 成员中。 |
DESCRIPTOR_PRIORITY_TIME_DELIVERY | 说话 | 如果本地主机控制器尚未准备好进行写入,请不要稍后重试写入。 (默认行为是重试,直到主机控制器准备就绪。) |
DESCRIPTOR_HEADER_SCATTER_GATHER | 说话 | 主机控制器将此缓冲区中的数据视为标头序列。 主机控制器将此缓冲区中的标头附加到它从附加的下一个缓冲区中的数据组装的每个数据包。 |
Mdl
指定 MDL,该 MDL 表示包含或将要包含数据的缓冲区。
ulLength
指定 Mdl 的长度。
nMaxBytesPerFrame
指定每个常量帧中包含的最大字节数。 写入时,缓冲区中的数据将拆分为此大小的常时等量数据包。
ulSynch
对于 IsochTalk 请求,如果设置了DESCRIPTOR_SYNCH_ON_SY标志,则此成员指定传出数据包的 Sy 字段。 对于REQUEST_ISOCH_LISTEN请求,如果设置了DESCRIPTOR_SYNCH_ON_SY标志,则此成员指定主机控制器将与常时等量数据包标头中的 Sy 字段匹配的值。
ulTag
对于 IsochTalk 请求,此成员指定传出数据包的“标记”字段。 对于REQUEST_ISOCH_LISTEN请求,如果设置了DESCRIPTOR_SYNCH_ON_TAG标志,则此成员指定主机控制器将与常时等量数据包标头中的“标记”字段匹配的值。
CycleTime
如果设置了DESCRIPTOR_SYNCH_ON_TIME标志,则此成员指定要同步的常时等周期时间。 (计时分辨率按常时等量周期进行。不使用周期时间的 CycleOffset 成员。) 如果设置了DESCRIPTOR_TIME_STAMP_ON_COMPLETION标志,则总线驱动程序在使用此缓冲区的操作完成时用常量周期时间填充此成员。
Callback
指向回调例程的指针。 如果不是 NULL,则总线驱动程序会调用此例程,以指示已准备好分离关联的附加缓冲区。 回调在 IRQL DISPATCH_LEVEL执行。 回调的类型如下:
void Callback(IN PVOID Context1, IN PVOID Context2);
Context1
指定总线驱动程序调用 回调中传递的例程时的第一个参数。
Context2
指定总线驱动程序调用 回调中传递的例程时的第二个参数。
status
对于 REQUEST_ISOCH_ATTACH_BUFFERS 请求,此成员指定此缓冲区上的附加操作的状态。 如果在处理 REQUEST_ISOCH_ATTACH_BUFFERS 请求期间发生错误,则总线驱动程序会用相应的错误代码填充 状态 成员。
DeviceReserved[8]
保留。
BusReserved[8]
保留。
PortReserved[16]
保留。
注解
并非所有DESCRIPTOR_XXX标志在所有硬件上都受支持。 设备驱动程序可以使用 nLevel = GET_HOST_CAPABILITIES 的REQUEST_GET_LOCAL_HOST_INFO请求来确定支持哪些DESCRIPTOR_XXX标志。 总线驱动程序返回指向GET_LOCAL_HOST_INFO2结构的指针,该结构的 HostCapabilities 成员包含确定主机控制器支持哪些标志的标志。 下表列出了哪些DESCRIPTOR_XXX标志需要硬件支持,以及驱动程序应检查相应的 HostCapabilities 标志。
DESCRIPTOR_XXX标志 | HostCapabilities |
---|---|
DESCRIPTOR_SYNCH_ON_TIME | HOST_INFO_SUPPORTS_START_ON_CYCLE |
DESCRIPTOR_HEADER_SCATTER_GATHER | HOST_INFO_SUPPORTS_ISO_HDR_INSERTION |
如果驱动程序设置DESCRIPTOR_HEADER_SCATTER_GATHER标志,则主机控制器会将 Mdl 中指定的缓冲区的数据与附加的下一个缓冲区的数据相结合。 (后续缓冲区不受影响。) 缓冲区的每个帧都以) 将缓冲区中的数据拆分为帧的顺序,并作为下一个常时等量数据包的数据发送到下一个缓冲区 (的帧。 每个缓冲区的帧数必须匹配,否则总线驱动程序为下一个REQUEST_ISOCH_ATTACH_BUFFER请求返回STATUS_INVALID_PARAMETER。
要求
要求 | 值 |
---|---|
Header | 1394.h (包括 1394.h) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈