适配器对象简介

任何使用直接 I/O 和 DMA 的驱动程序都必须创建适配器对象。 适配器对象表示 DMA 控制器通道或端口,或总线主设备。

两种类型的最低级别驱动程序必须使用适配器对象:

  • 使用系统 DMA 控制器的设备驱动程序。 此类 设备称为从属设备 ,据说“使用系统(或 从属)DMA”。

  • 总线主适配器设备的驱动程序。 此类设备与系统为使用 I/O 总线进行仲裁,从而使用总线主控 DMA。

驱动程序为指向适配器对象的指针提供存储(通常位于设备扩展中)。

若要执行 DMA 传输,使用这些 DMA 方法之一的设备驱动程序通常具有 AdapterControl 例程,并调用处理适配器对象的系统提供的支持例程。 不需要 AdapterControl 例程的驱动程序包括使用 分散/聚集 DMA 的驱动程序以及使用 公共缓冲区、总线控制 DMA 的驱动程序。

作为设备启动作的一部分,处理 DMA作的驱动程序调用 I/O 管理器,后者又调用特定于平台的 HAL 来创建一组适配器对象。 在任何 Windows 平台上,适配器对象集包括以下对象的适配器对象:

  • 每个连接了从属设备的系统 DMA 控制器通道或端口。

  • 计算机中的每个总线主控 DMA 设备。

I/O 管理器和 HAL 协同工作,根据设备的 DMA 功能和系统配置分配相应的适配器对象。

(对于支持总线主 DMA 的 SCSI 设备,SCSI 端口驱动程序为特定于 HBA 的 SCSI 微型端口驱动程序设置适配器对象。微型端口驱动程序的 HwScsiFindAdapter 例程为端口驱动程序提供特定于适配器的数据。

有关驱动程序何时和如何使用适配器对象和 AdapterControl 例程的详细信息,请参阅本部分以及如何使用 Bus-Master DMA

为设备驱动程序启用 DMA 重新映射