深入理解DMA:从ISA到PCI及内核兼容性
1. SBus与PCI的DMA API相似性
SBus的DMA API与PCI接口极为相似。在SBus上进行DMA操作前,需要详细查看函数定义,但相关概念与之前讨论的PCI总线的概念相匹配。
2. ISA设备的DMA
ISA总线支持两种DMA传输方式:原生DMA和ISA总线主控DMA。
2.1 原生DMA与ISA总线主控DMA
- 原生DMA:使用主板上的标准DMA控制器电路来驱动ISA总线上的信号线。
- ISA总线主控DMA:完全由外围设备处理。这种类型的DMA很少使用,从驱动程序的角度来看,它与PCI设备的DMA类似。例如,1542 SCSI控制器就是一个ISA总线主控设备,其驱动程序位于内核源码的
drivers/scsi/aha1542.c中。
2.2 原生DMA的参与实体
原生DMA数据传输涉及三个实体:
| 实体 | 描述 |
| ---- | ---- |
| 8237 DMA控制器(DMAC) | 保存DMA传输的信息,如方向、内存地址和传输大小。包含一个计数器来跟踪正在进行的传输状态。当接收到DMA请求信号时,它获得总线控制权并驱动信号线,使设备能够读写数据。 |
| 外围设备 | 准备好传输数据时激活DMA请求信号。实际传输由DMAC管理,硬件设备在控制器选通时顺序地将数据读写到总线上。传输结束时,设备通常会产生一个中断。 | <