如何对DMA控制器进行编程,以便向PCI设备发送/接收数据?
我明白我需要使用它,以便我可以使用DMA
没有"PCI dma"字样。
PCI是使用特定底层协议(电信号)的总线(一组导线);它提供了一种标准化的方法来检测/识别附加设备("PCI配置空间"),确定它们使用哪些资源(irq, IO端口,内存映射的IO区域)并配置这些资源。
设备做它们设计做的任何事情(可能包括DMA引擎和/或某些设备的总线控制功能);但这完全取决于设备,而不是PCI总线。
(我听说ISA DMA是一个缓慢的狗屎,所以我不会使用它
如果你正在为一个可以支持ISA DMA的旧/遗留/ISA设备(例如软盘驱动器控制器)编写设备驱动程序,你唯一的选择就是是否使用ISA DMA或根本不使用任何DMA(并且浪费大量的CPU时间等待慢速设备)。请注意,这些旧设备很慢,所以"慢"。无论如何,ISA DMA控制器对他们来说已经足够快了。
我需要一份详细的PCI实现大纲。
主要是一个"PCI驱动程序"。所做的是枚举PCI总线,以找出哪些设备插入其中,并确定每个设备使用的资源(irq, IO端口,内存映射的IO区域)。PCI驱动程序可能还支持热插拔(不建议初学者使用),并且(取决于操作系统设计)可能还负责查找/启动它找到的任何设备的设备驱动程序。
这些都在https://wiki.osdev.org/PCI中得到了很好的介绍。没有太多/任何其他涉及(除非您考虑的是碰巧连接到PCI的特定设备)。