Windows 7 中的设备驱动程序接口 (DDI) 更改

Windows 7 1394ohci.sys,它是一个新的 IEEE 1394 总线驱动程序,它通过使用 KMDF (驱动程序框架实现) 。 新的 1394 总线驱动程序取代了端口/微型端口和端口中的旧 IEEE configuration--1394bus.sysochi1394.sys。 新 DDIS 已添加到 1394ohci.sys 支持的新功能。 此外,某些 1394 DDIS 已更改,以支持 1394b 规范定义的更高速度,并进行了改进以简化 1394 客户端驱动程序的开发。

本主题总结了支持新的 1394 总线驱动程序的一般 DDI 更改。

扩展总线重置通知

1394ohci.sys总线驱动程序支持扩展总线重置通知。 此通知返回有关当前一代总线驱动程序的信息 (例如,在总线重置通知的上下文中,) 到 1394 客户端驱动程序的生成计数和节点 ID。 此信息可以消除 1394 客户端驱动程序将其生成计数、节点 ID 和其他信息的检索与总线重置通知处理程序同步这一需求。

若要注册扩展总线重置通知,客户端驱动程序使用现有的 REQUEST_BUS_RESET_NOTIFICATION I/O 请求,并指定 u.BusResetNotification.fulFlags 参数中的新 EXTENDED_NOTIFICATION_ROUTINE 标志。 指定 EXTENDED_NOTIFICATION_ROUTINE 标志时,u.BusResetNotification.ResetContext 参数指向BUS_RESET_DATA结构。

PHY 数据包支持的新 ITL

1394ohci.sys总线驱动程序公开以下用于发送和接收 PHY 数据包的新 DDIS,如 IEEE-1394a 规范中的定义。

应该使用新的 I/O REQUEST_SEND_PHY_PACKET,而不是REQUEST_SEND_PHY_CONFIG_PACKET。 后一个 I/O 请求不允许指定生成计数,这可能会导致将 PHY 数据包发送到错误的 1394 总线生成。

用于检索配置 ROM 的新 IOCTL

新的 IOCTL (REQUEST_GET_CONFIG_ROM)返回节点配置 ROM 的内容,最大大小为 1 KB (KB) 。 该1394ohci.sys总线驱动程序仅支持 1 KB 配置 VM,与旧版 1394 总线驱动程序相同。

IEEE 总线驱动程序 DDI 更改

下表描述了新的 1394 总线驱动程序和旧版 1394 总线驱动程序公开的 DDIS 的功能行为更改:

设备驱动程序接口 说明
REQUEST_GET_LOCAL_HOST_INFO 该1394ohci.sys总线驱动程序不支持将 nLevel 设置为 GET_HOST_CSR_CONTENTS将 SPEED_MAP_LOCATION CsrBaseAddress。 速度图在 IEEE-1394a 规范中已过时。
REQUEST_GET_SPEED_TOPOLOGY_MAPS REQUEST_GET_SPEED_TOPOLOGY_MAPS 2000 和更高版本的操作系统Windows弃用。 将此请求发送到1394ohci.sys返回STATUS_INVALID_PARAMETER。
REQUEST_GET_SPEED_BETWEEN_DEVICES REQUEST_GET_SPEED_BETWEEN_DEVICES 请求1394ohci.sys检索本地节点和设备之间的速度。 必须在 u.GetMaxSpeedBetweenDevices.fulFlags 参数中设置 USE_LOCAL_NODE 标志。

速度和有效负载大小的新标志

Windows 7 Windows 驱动程序工具包中的 1394 头文件 1394.h 定义了新标志,以加快速度和更大的有效负载。 本部分介绍这些新标志和值。

下表描述了每个新支持的速度的最大异步有效负载大小。

标志 说明
ASYNC_PAYLOAD_800_RATE 4096 800 Mb/s
ASYNC_PAYLOAD_1600_RATE 4096 160 Mb/s
ASYNC_PAYLOAD_3200_RATE 4096 3200 Mb/s

下表描述了每个新支持的速度的速度标志。

标志 说明
SPEED_FLAGS_800 0x08 800 Mb/s
SPEED_FLAGS_1600 0x10 160 Mb/s
SPEED_FLAGS_3200 0x20 3200 Mb/s

下表描述了每个新支持的速度的速度代码值。

标志 说明
SCODE_800_RATE 3 800 Mb/s
SCODE_1600_RATE 4 160 Mb/s
SCODE_3200_RATE 5 3200 Mb/s

IEEE 1394 IOCTL 更改

本部分介绍使用新速度和有效负载大小值的 1394 I/O 请求。

REQUEST_ASYNC_READ
u.AsyncRead.nBlockSize

指定从 1394 节点读取的数据流中每个块的大小。 如果此参数为零,则除非使用原始模式寻址,否则使用所选设备的最大数据包大小和速度发出这些读取请求。

可以在 nBlockSize ASYNC_PAYLOAD_指定 ASYNC_PAYLOAD_XXX 标志。 Microsoft 建议客户端驱动程序将 nBlockSize 成员设置为 0,以便 1394 总线 driver1394ohci.sys使用支持的最大值,除非使用原始模式寻址。

如果使用原始模式寻址,客户端驱动程序应按连接速度将 nBlockSize 成员设置为设备支持的最大异步有效负载大小。

有关原始模式寻址详细信息,请参阅在源总线上发送异步 I/O IEEE 1394数据包

REQUEST_ASYNC_WRITE

u.AsyncRead.nBlockSize

指定写入到 1394 节点的数据流中每个块的大小。 如果此参数为零,则所选速度的最大数据包大小用于划分这些写入请求,除非使用原始模式寻址。

可以在 nBlockSize ASYNC_PAYLOAD_指定 ASYNC_PAYLOAD_XXX 标志。 Microsoft 建议客户端驱动程序将 nBlockSize 成员设置为 0,以便 1394 总线驱动程序使用支持的最大值,除非使用原始模式寻址。

如果使用原始模式寻址,客户端驱动程序应按连接速度将 nBlockSize 成员设置为设备支持的最大异步有效负载大小。

REQUEST_ISOCH_ALLOCATE_BANDWIDTH
可以在 fulSpeedSPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。 新的 1394 总线驱动程序可以返回 SpeedSelected 成员中新的 SPEED_FLAGS_XXX 标志。

u.IsochAllocateBandwidth.fulSpeed

指定用于分配带宽的连接速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

u.IsochAllocateBandwidth.SpeedSelected

指定为分配带宽而选择的实际速度。 该值是 SPEED_FLAGS_XXX (fulSpeed 成员说明) 。

REQUEST_ISOCH_ALLOCATE_RESOURCES
可以在 fulSpeedSPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.IsochAllocateResources.fulSpeed

指定在通道上通信时要使用的连接速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

REQUEST_ISOCH_FREE_BANDWIDTH
可以在 fulSpeedSPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.IsochFreeBandwidth.fulSpeed

指定用于释放带宽的连接速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

注意

新的 1394 总线驱动程序仅在设置了 IRB_FLAG_ALLOW_REMOTE_FREE 标志且未在 IRB 的标志中设置 IRB_FLAG_USE_PRE_CALCULATE_VALUE 标志时使用 fulSpeed 成员。 在所有其他情况下,新的 1394 总线驱动程序将忽略 fulSpeed

REQUEST_SET_DEVICE_XMIT_PROPERTIES
可以在 fulSpeedSPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.SetDeviceXmitProperties.fulSpeed

指定设备事务的最大速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

REQUEST_ASYNC_STREAM
可以在 nSpeed SPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.AsyncStream.nSpeed

指定传输速率。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

REQUEST_ISOCH_MODIFY_STREAM_PROPERTIES可以在 fulSpeed SPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.IsochModifyStreamProperties.fulSpeed

指定设备事务的最大速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

REQUEST_GET_SPEED_BETWEEN_DEVICES
可以在 fulSpeedSPEED_FLAGS_指定 SPEED_FLAGS_XXX 标志。

u.GetMaxSpeedBetweenDevices.fulSpeed

指定源设备与目标设备集之间可能的最大事务速度。 返回的值是所有设备同时支持的最大速度。 可能的速度值为 SPEED_FLAGS_XXX,其中 XXX 是 (传输) 速率的近似值。

注意

客户端驱动程序还可以在 u.GetMaxSpeedBetweenDevices.fulFlags 中指定 USE_SCODE_SPEED 标志,以请求以 fulSpeed 而不是 SPEED_FLAGS_xxx 值返回 SCODE_XXX_RATE 速度代码值。

IEEE 1394 驱动程序堆栈
Windows 7 中的 IEEE 1394 总线驱动程序