Aros/开发者/文档/HIDD/PCI
我们处理 PCI 的官方 API 是通过一组 HIDD 类。Prometheus.library 只是这些 HIDD 之上的一个包装器。prometheus.library 不是一个更高级别的 API,它只提供 PCI 类可以提供的子集。PCI 类唯一缺少的是 AddIntServer() 和 RemIntServer() 方法。
您可以向 PCI 子系统询问可用设备,然后对每个设备使用 PCIDevice 对象的方法。PCIDevice 对象本身可能在内部绑定到系统中任何当前活动的 PCIDriver。是的,系统中可以同时使用多个 PCIDriver。
因此它对于外部代码来说是一个不透明的驱动程序组件。
另一方面,PCI HIDD 只有一个对外部代码有用的方法:EnumDevices。它按用途划分。代码应该使用 PCIDevice 对象。
向 PCI 子系统询问可用设备,然后对每个设备使用 PCIDevice 对象的方法。PCIDevice 对象本身可能在内部绑定到系统中任何当前活动的 PCIDriver。是的,系统中可以同时使用多个 PCIDriver。
内存相关的操作是否必须通过 PCIDriver 对象完成,例如 AllocPCIMem 方法?将这些方法添加到 PCIDevice 类中没有问题。由于 PCIDevice 对象确切地知道哪个驱动程序处理它,因此它可以轻松地将方法委托给相应的驱动程序。
阅读 Aros-Exec 线程。
对我来说,prometheus.library 对于 PCI HIDD 的意义就像 (cyber)graphics.library 对于图形 HIDD 的意义一样。例如,据我所知,我们不鼓励应用程序直接调用图形 HIDD。
或
PCI.hidd 代表一个子系统,就像 graphics.library 代表一个系统一样。graphics.hidd 是 graphics.library 子系统中的一个驱动程序组件,就像 PCI-DRIVER.hidd 是 PCI.hidd 中的一个驱动程序组件一样。但是,在访问 PCI 子系统时必须使用 PCI-DRIVER HIDD,因此它对于外部代码来说不是一个不透明的驱动程序组件。另一方面,PCI HIDD 只有一个对外部代码有用的方法:EnumDevices。因此,在您的比较中没有看到真正的对称性。
在 AROS 的 PCI 子系统之前,研究过其他解决方案,但没有一个令人满意。特别是 openpci 使用复制粘贴的 linux 头文件。更不用说,在那些日子里,openpci 几乎没有被使用。
- AmigaOS 3.x 使用 prometheus、openpci 等
- Amithlon 使用不同的库来访问 pci 设备,与 openpci 非常相似,但仍然不同
- MorphOS 使用 pcix.library 并为其提供 openpci 包装器
- AmigaOS 4.x 使用扩展库的 PCI 接口
- AROS 使用基于 oop 的 PCI 类
与列表中的其他平台相比,AROS 不是唯一一个“不同”于其他平台的平台。实际上,*没有*真正适用于所有 Amiga 平台的用于访问 PCI 设备的跨平台解决方案。许多 AmigaOS 驱动程序使用 prometheus,其中很少一部分使用 openpci。OS4 组件使用 expansion.library 的 PCI 接口,MOS 驱动程序使用 pcix.library(其中一些不是由 MOS 团队提供的驱动程序可能会使用 openpci)。