ATA 端口驱动程序支持例程

本页对系统提供的 ATA 端口驱动程序提供的支持例程进行分类。

有关 ATA 驱动程序微型端口例程的列表,请参阅 ATA 微型端口驱动程序

初始化例程

ATA 端口驱动程序提供以下初始化例程。

例程所返回的值 说明
AtaPortInitializeEx 初始化端口和微型端口驱动程序。

PCI 配置空间访问的例程

ATA 端口驱动程序提供以下例程来帮助你读取和修改设备的 PCI 配置空间的内容。

例程所返回的值 说明
AtaPortGetBusData 从设备的 PCI 配置空间中的指定位置检索数据。
AtaPortSetBusData 将数据存储在指定设备的 PCI 配置空间中的指定偏移量。

用于处理 I/O 请求的例程

ATA 端口驱动程序提供以下 I/O 请求处理支持例程。

例程所返回的值 说明
AtaPortGetScatterGatherList 检索与此请求关联的散点/收集列表。
AtaPortGetPhysicalAddress 将虚拟地址范围转换为物理地址范围。
AtaPortGetDeviceBase 返回映射的逻辑基址,用于 (HBA) 与主机总线适配器通信。
AtaPortGetUncachedExtension 分配 CPU 和设备共享的未缓存公共缓冲区。
AtaPortBuildRequestSenseIrb 生成并返回操作代码的 IRB SCSIOP_REQUEST_SENSE。
AtaPortReleaseRequestSenseIrb 释放使用 AtaPortBuildRequestSenseIrb 分配的请求感知 IRB。
AtaPortCompleteAllActiveRequests 完成所指示设备的所有活动 IRB。
AtaPortCompleteRequest 完成指示的 IRB。

回调例程

微型端口驱动程序使用多个例程从端口驱动程序请求回调。

例程所返回的值 说明
AtaPortRequestWorkerRoutine 请求辅助角色例程。
AtaPortRequestSynchronizedRoutine 请求与中断服务例程同步 (ISR) 。
AtaPortControllerSyncRoutine 提供对跨控制器上所有通道共享的数据结构的同步访问。
AtaPortRequestTimer 请求计时器回调。

报告配置更改的例程

以下例程使微型端口驱动程序能够通知 ATA 端口驱动程序连接到通道的设备配置发生更改。

例程所返回的值 说明
AtaPortBusChangeDetected 通知端口驱动程序指示的通道上的设备配置更改。
AtaPortRequestPowerStateChange 请求指示设备的电源状态转换。

用于控制请求队列的例程

端口驱动程序为每个逻辑单元号维护一个逻辑单元号 (LUN) 请求队列,并为每个通道维护一个请求队列。 微型端口驱动程序可以使用以下例程来暂停和恢复不同的请求队列。

例程所返回的值 说明
AtaPortDeviceBusy 通知端口驱动程序指示的设备正忙。
AtaPortDeviceReady 通知端口驱动程序指示的设备已准备好接受新请求。

实用工具例程

以下例程是微型端口驱动程序的常规实用工具支持函数。

例程所返回的值 说明
AtaPortCopyMemory 将数据从一个位置复制到另一个位置。
**AtaPortMoveMemory 例程 将数据从一个位置复制到另一个位置。
AtaPortConvertUlongToPhysicalAddress 将给定的 ULONG 地址转换为 IDE_PHYSICAL_ADDRESS 类型的值。
AtaPortConvertPhysicalAddressToUlong 截断 ULONG IDE_PHYSICAL_ADDRESS 类型的地址。
AtaPortStallExecution 微型端口驱动程序中停止。
AtaPortInitializeQueueTag 初始化指定设备的队列标记列表。
AtaPortAllocateQueueTag 返回指定设备的队列标记。
AtaPortReleaseQueueTag 释放指定的队列标记。

调试和错误报告例程

以下例程可用于调试和错误报告。

例程所返回的值 说明
AtaPortDebugPrint 将消息字符串传递到内核调试器,以便调试器打印。

设备端口和注册访问的例程

ATA 端口驱动程序提供以下端口和注册访问支持例程。

例程所返回的值 说明
AtaPortReadPortBufferUchar 将给定数量的无符号字节值从 HBA 传输到缓冲区。
AtaPortReadPortBufferUlong 将给定数量的 ULONG 值从 HBA 传输到缓冲区。
AtaPortReadPortBufferUshort 将给定数量的 USHORT 值从 HBA 传输到缓冲区。
AtaPortReadPortUchar 从 HBA 读取无符号字节值。
AtaPortReadPortUlong 从 HBA 读取 ULONG 值。
AtaPortReadPortUshort 从 HBA 读取 USHORT 值。
AtaPortReadRegisterBufferUchar 将指定数量的无符号字节从 HBA 传输到缓冲区。
AtaPortReadRegisterBufferUlong 将指定数目的 ULONG 从 HBA 传输到缓冲区。
AtaPortReadRegisterBufferUshort 将指定数量的 USHORT 从 HBA 传输到缓冲区。
AtaPortReadRegisterUchar 从 HBA 读取无符号字节值。
AtaPortReadRegisterUlong 从 HBA 读取 ULONG 值。
AtaPortReadRegisterUshort 从 HBA 读取 USHORT 值。
AtaPortWritePortBufferUchar 将值写入指定的寄存器地址。
AtaPortWritePortBufferUlong 将值写入指定的寄存器地址。
AtaPortWritePortBufferUshort 将值写入指定的寄存器地址。
AtaPortWritePortUchar 将无符号字节值传输到 HBA。
AtaPortWritePortUlong 将 ULONG 值传输到 HBA。
AtaPortWritePortUshort 将 USHORT 值传输到 HBA。
AtaPortWriteRegisterBufferUchar 将指定数量的无符号字节从缓冲区传输到 HBA。
AtaPortWriteRegisterBufferUlong 将指定数量的 ULONG 值从缓冲区传输到 HBA。
AtaPortWriteRegisterBufferUshort 将指定数量的 USHORT 值从缓冲区传输到 HBA。
AtaPortWriteRegisterUchar 将未签名的字节传输到 HBA 地址。
AtaPortWriteRegisterUlong 将 ULONG 值传输到 HBA 地址。
AtaPortWriteRegisterUshort 将 USHORT 值传输到 HBA 地址。

注册表访问的例程

实现通道接口的微型端口驱动程序可以调用以下例程来访问 Windows 注册表。 仅实现控制器接口例程的微型端口驱动程序无法访问这些例程。

例程所返回的值 说明
AtaPortRegistryAllocateBuffer 为注册表操作分配缓冲区。
AtaPortRegistryFreeBuffer 释放使用 AtaPortRegistryAllocateBuffer 分配的注册表缓冲区。
AtaPortRegistryControllerKeyRead 读取与注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN 下指示的值名称>关联的数据,其中 N 是控制器的编号。
AtaPortRegistryContrlollerKeyWrite 将数据写入注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN 下的指示值名称>,其中 N 是控制器的编号。
AtaPortRegistryControllerKeyWriteDeferred 将数据异步写入注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN 下的指示值名称>,其中 N 是控制器的编号。
AtaPortRegistryChannelSubKeyRead 读取与注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN\ChannelM 下指示的值名称>关联的数据,其中 N 是控制器的编号,M 是通道的编号。
AtaPortRegistryChannelSubKeyWrite 将数据写入注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN\ChannelM 下的指示值名称>,其中 N 是控制器的编号,M 是通道的编号。
AtaPortRegistryChannelSubKeyWriteDeferred 将数据异步写入注册表项 HKLM\CurrentControlSet\Services<\service name\ControllerN\ChannelM 下的指示值名称>,其中 N 是控制器的编号,M 是通道的编号。